Tetris - Bitte testen II
-
Mist. Ich hab versucht, die cpp-Datei reinzuhauen. Das war aber wohl zu viel des guten. Die zweite Seite des Threads wird nicht mehr angezeigt (bzw. ist sie leer ). Auch die Beiträge auf dieser Seite nicht. Können die Admins das beheben?
Die cpp-Datei ist jetzt zu finden unter http://www.webfritzi.de.vu/Tetris.txt
-
Alles selber gemacht ? Sauberer Programmierstil
MfG mikey.
-
mikey schrieb:
Alles selber gemacht ? Sauberer Programmierstil
Sieht die Foren-Software wohl anders.
-
mikey schrieb:
Sauberer Programmierstil
Ähem, danke. Aber das werden andere wahrscheinlich anders sehen.
Optimizer schrieb:
http://home.arcor.de/firbach/hmmmmmm.jpg
Das Programm ist aber trotzdem noch weitergelaufen, bis ich irgendwann verloren hatte. Da ich keine Musik gehört habe, war's vielleicht in diesem Thread.
Ja, das hat mit der Musik zu tun. Ich lade die MIDI-Files aus der EXE und speichere sie im TEMP-Ordner. Dort wird mit der Funktion PathFileExists aus der shlwapi.dll geschaut, ob die MIDI-Files schon existieren. Wenn nein, dann wird gespeichert. Wenn ja, kann man sich das Speichern ja ersparen. Scheint bei dir nicht zu funktionieren. Kannst du dir vorstellen warum? Bei mir befindet sich der Temp-Ordner hier: C:\Dokumente und Einstellungen\WebFritzi\Lokale Einstellungen\Temp. Ich hole mir den Pfad mit der WinAPI-Funktion GetTempPath().
Optimizer schrieb:
Die Wiederholrate der Tastatur in Windows zu verstellen ist wirklich ein no-go, sehr unschön.
Wie soll ich das denn sonst machen. Wenn der User z.B. ein langsames Delay hat, dann ist das Spielen bei schnellen Steinen echt unmöglich. Oder sollte ich dem User vielleicht nur einen Hinweis geben, falls die Werte nicht spieltauglich sind?
-
WebFritzi schrieb:
Wie soll ich das denn sonst machen. Wenn der User z.B. ein langsames Delay hat,
Nicht nur auf die Windows-Events reagieren sondern selber zeitig nachgucken ob die Taste noch gedrückt ist oder nicht.
-
WebFritzi schrieb:
Mist. Ich hab versucht, die cpp-Datei reinzuhauen. Das war aber wohl zu viel des guten. Die zweite Seite des Threads wird nicht mehr angezeigt (bzw. ist sie leer ).
GEILOMAT!!! Coole Aktion! Hab mich schon gewundert warum die zweite Seite leer ist. Hab schon gedacht, es wäre ein Aprikscherz Nr.2.
-
Ähem, danke. Aber das werden andere wahrscheinlich anders sehen.
Ich hab mir nur den Code und das Game angeguckt, mehr nicht :p
Artchi schrieb:
GEILOMAT
Sowas hörte ich auch noch nie
-
Artchi schrieb:
WebFritzi schrieb:
Mist. Ich hab versucht, die cpp-Datei reinzuhauen. Das war aber wohl zu viel des guten. Die zweite Seite des Threads wird nicht mehr angezeigt (bzw. ist sie leer ).
GEILOMAT!!! Coole Aktion!
Hmm, das empfinde ich nicht so. Hoffentlich kann mans wieder zurückbiegen.
-
WebFritzi schrieb:
Scheint bei dir nicht zu funktionieren. Kannst du dir vorstellen warum? Bei mir befindet sich der Temp-Ordner hier: C:\Dokumente und Einstellungen\WebFritzi\Lokale Einstellungen\Temp. Ich hole mir den Pfad mit der WinAPI-Funktion GetTempPath()
Ich schau's mir mal mit dem Process Explorer an (die access violation solltest du IMHO trotdem verhindern).
-
17832 20:54:23,4046316 Tetrissimo.exe 3352 CreateFile C:\Windows\Prefetch\TETRISSIMO.EXE-89595503.pf NAME NOT FOUND Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Attributes: n/a, ShareMode: , AllocationSize: n/a 17882 20:54:23,4069482 Tetrissimo.exe 3352 QueryOpen D:\Profildaten\Michael\Desktop\Tetrissimo.exe.Local NAME NOT FOUND 17997 20:54:23,4122957 Tetrissimo.exe 3352 QueryOpen D:\Profildaten\Michael\Desktop\WINMM.DLL NAME NOT FOUND 18038 20:54:23,4138437 Tetrissimo.exe 3352 QueryOpen D:\Profildaten\Michael\Desktop\OLEACC.dll NAME NOT FOUND 18358 20:54:23,4241427 Tetrissimo.exe 3352 QueryOpen D:\Profildaten\Michael\Desktop\Tetrissimo.exe.Local NAME NOT FOUND 18424 20:54:23,4266134 Tetrissimo.exe 3352 QueryOpen D:\Profildaten\Michael\Desktop\Tetrissimo.exe.Local NAME NOT FOUND 18489 20:54:23,4290398 Tetrissimo.exe 3352 QueryOpen D:\Profildaten\Michael\Desktop\OLEACCRC.DLL NAME NOT FOUND 18884 20:54:23,4427266 Tetrissimo.exe 3352 QueryOpen D:\Profildaten\Michael\Desktop\Tetrissimo.DEU NAME NOT FOUND 18886 20:54:23,4428253 Tetrissimo.exe 3352 QueryOpen D:\Profildaten\Michael\Desktop\Tetrissimo.DEU NAME NOT FOUND 18893 20:54:23,4429154 Tetrissimo.exe 3352 QueryOpen D:\Profildaten\Michael\Desktop\Tetrissimo.DEU.DLL NAME NOT FOUND 18896 20:54:23,4430198 Tetrissimo.exe 3352 QueryOpen D:\Profildaten\Michael\Desktop\Tetrissimo.DE NAME NOT FOUND 18898 20:54:23,4431104 Tetrissimo.exe 3352 QueryOpen D:\Profildaten\Michael\Desktop\Tetrissimo.DE NAME NOT FOUND 18901 20:54:23,4431979 Tetrissimo.exe 3352 QueryOpen D:\Profildaten\Michael\Desktop\Tetrissimo.DE.DLL NAME NOT FOUND 18924 20:54:23,4439969 Tetrissimo.exe 3352 QueryOpen D:\Profildaten\Michael\Desktop\uxtheme.dll NAME NOT FOUND 19308 20:54:23,4587081 Tetrissimo.exe 3352 CreateFile C:\Windows\System32\uxtheme.dll.Config NAME NOT FOUND Desired Access: Generic Read/Execute, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: n/a, ShareMode: Read, Delete, AllocationSize: n/a 19316 20:54:23,4593677 Tetrissimo.exe 3352 QueryOpen D:\Profildaten\Michael\Desktop\Tetrissimo.exe.Local NAME NOT FOUND 23019 20:54:24,9582999 Tetrissimo.exe 3352 QueryOpen D:\Profildaten\Michael\Desktop\Tetrissimo.exe.Local NAME NOT FOUND 23748 20:54:29,3331138 Tetrissimo.exe 3352 QueryOpen D:\Profildaten\Michael\Desktop\imageres.dll NAME NOT FOUND
Keine Ahnung ich seh hier nichts von Midi-Dateien. Wie sollen die dann heißen?
-
Optimizer schrieb:
die access violation solltest du IMHO trotdem verhindern
Ja, klar.
Optimizer schrieb:
Keine Ahnung ich seh hier nichts von Midi-Dateien. Wie sollen die dann heißen?
Sind zwei Stück. Die eine heißt Tetrissimo - TITLE_MIDI und die andere Tetrissimo - HIGHSCORE_MIDI. Aber da ja eh vorher ein Fehler passiert, ist schon irgendwie klar, warum keine Dateien erstellt werden. Wann genau kommt denn die AccessViolation? Evtl. beim Klicken auf Game->New? Das einzige mal, dass ich eine Funktion aus shlwapi.dll benutze, ist hier:
BOOL CMidiFile::LoadFromResource(LPCTSTR res_name, LPCTSTR str_id) { // str_id is a string id which. Choose one per song. TCHAR fn[MAX_PATH]; GetTempPath(MAX_PATH, fn); strcpy(fn + lstrlen(fn), str_id); if( !PathFileExists(fn) ) // <-- das ist die Funktion { ...
-
Ja, beim Klicken auf Game -> New.
-
Kann das evtl. mit fehlenden Admin-Rechten zusammenhängen?
-
TCHAR fn[MAX_PATH];
GetTempPath(MAX_PATH, fn);
strcpy(fn + lstrlen(fn), str_id);Das läuft über wenn der Pfad länger als MAX_PATH/2 ist.
-
DrGreenthumb schrieb:
TCHAR fn[MAX_PATH];
GetTempPath(MAX_PATH, fn);
strcpy(fn + lstrlen(fn), str_id);Das läuft über wenn der Pfad länger als MAX_PATH/2 ist.
Wieso das?
@Optimizer: Wo liegt denn dein TEMP-Pfad?
-
Wird bei GetTempPath eigentlich auf MAX_PATH gekürzt?
-
WebFritzi schrieb:
DrGreenthumb schrieb:
TCHAR fn[MAX_PATH];
GetTempPath(MAX_PATH, fn);
strcpy(fn + lstrlen(fn), str_id);Das läuft über wenn der Pfad länger als MAX_PATH/2 ist.
Wieso das?
@Optimizer: Wo liegt denn dein TEMP-Pfad?
C:\Users\Michael\AppData\Local\Temp\
Da drin hast du alle Rechte, die du dir nur wünschen kannst.WebFritzi schrieb:
Kann das evtl. mit fehlenden Admin-Rechten zusammenhängen?
Ich weiß nicht, was du sonst noch so machst. Als Admin führe ich das Programm nicht aus, ich habe jetzt aber auch keine besonders restriktiven Rechte. Du kannst mir ja mal dein Programm komplett schicken, dann sag ich dir die Code-Zeile. Amsonsten ist mir im ProcessMonitor auch nichts ungewöhnliches aufgefallen, aber ich kenn mich mit dem Teil auch nicht aus.
-
WebFritzi schrieb:
DrGreenthumb schrieb:
TCHAR fn[MAX_PATH];
GetTempPath(MAX_PATH, fn);
strcpy(fn + lstrlen(fn), str_id);Das läuft über wenn der Pfad länger als MAX_PATH/2 ist.
Wieso das?
Wie ich da auf MAX_PATH/2 gekommen bin weiß ich jetzt auch nicht mehr; war schon spät.
Kann aber trotzdem überlaufen. GetTempPath schreibt u.U. den ganzen Buffer voll und dann schreibst du noch die str_id dahinter.
-
DrGreenthumb schrieb:
WebFritzi schrieb:
DrGreenthumb schrieb:
TCHAR fn[MAX_PATH];
GetTempPath(MAX_PATH, fn);
strcpy(fn + lstrlen(fn), str_id);Das läuft über wenn der Pfad länger als MAX_PATH/2 ist.
Wieso das?
Wie ich da auf MAX_PATH/2 gekommen bin weiß ich jetzt auch nicht mehr; war schon spät.
Kann aber trotzdem überlaufen. GetTempPath schreibt u.U. den ganzen Buffer voll und dann schreibst du noch die str_id dahinter.
Ja, stimmt. Ist nicht bombensicher. Ich habe es angepasst:
BOOL CMidiFile::LoadFromResource(LPCTSTR res_name, LPCTSTR str_id) { // str_id is a string id which. Choose one per song. LPTSTR fn; DWORD buf_len = GetTempPath(0, NULL); fn = new TCHAR[buf_len + lstrlen(str_id) + 1]; GetTempPath(buf_len, fn); lstrcpy(fn + lstrlen(fn), str_id); if( !PathFileExists(fn) ) { ...
EDIT: Habe die EXE geupdatet. Könntest du die neue EXE nochmal bitte bei dir testen, Optimizer.
-
Ist nicht behoben.