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.


Anmelden zum Antworten