Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Spieleprogrammierung mit DirectX und C++

Ähnliche Präsentationen


Präsentation zum Thema: "Spieleprogrammierung mit DirectX und C++"—  Präsentation transkript:

1 Spieleprogrammierung mit DirectX und C++
V12 Highscores Nicolas matentzoglu

2 class highscore { struct score // mit dieser Struktur int punkte; // kann eine Zahl und eine char name[40]; // Zeichenkette (Name) gespeichert werden. }; private: score high[5]; // ein Array, in das 5 dieser Strukturen passen public: Highscore(); //Konstruktor int get_score( int i){ return high[i].punkte;} //Funktion die Punkte zurückgibt const char *get_name( int i){ return high[i].name;} //name zurück void newscore( int pkt); //Funktion, um einen neuen Highscore einzutragen ~highscore(); };

3 high.dat: 827393,Daniel E 723908,Florian T 671627, Tobias G 587888, Lisa R 468787, Hye Lim C

4 highscore::highscore()‏
{ int i; FILE *pf; //stream Objekt for( i = 0; i < 5; i++) //alle Positionen im array zurücksetzen high[i].punkte = 0; *(high[i].name) = 0; } pf = fopen( "ul_high.dat", "r"); // Datei im read-mode öffnen if( !pf) //hat es geklappt? return; for( i = 0; i < 5; i++) fscanf( pf, "%d,", &high[i].punkte); //eine Zeile einlesen, (das integer) und in die //struct kopieren fgets( high[i].name, 40, pf); //den Rest der Verbleibenden Zeile in name kopieren high[i].name[ strlen(high[i].name)-1] = 0; // nach dem Name im Array ein // Zeichenketten-Ende setzen. fclose( pf); //stream schließen.

5 highscore::~highscore()‏
{ int i; FILE *pf; pf = fopen( "ul_high.dat", "w"); for( i = 0; i < 5; i++) //hier wird der Inhalt der struct in die // ul_high.dat geschrieben. fprintf( pf, "%d,%s\n", high[i].punkte, high[i].name); fclose( pf); }

6 BOOL CALLBACK highscoredialog( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)‏
{ switch (uMsg)‏ case WM_INITDIALOG: SetDlgItemInt( hwndDlg, IDC_SCORE1, ultris_highscores.get_score(0), FALSE); SetDlgItemInt( hwndDlg, IDC_SCORE2, ultris_highscores.get_score(1), FALSE); //..... und die anderen scores SetDlgItemText( hwndDlg, IDC_NAME1, ultris_highscores.get_name(0)); SetDlgItemText( hwndDlg, IDC_NAME2, ultris_highscores.get_name(1)); //.. und die anderen Namen return TRUE; case WM_COMMAND: if((wParam == IDOK)||(wParam == IDCANCEL))‏ EndDialog(hwndDlg, wParam); break; } return FALSE;

7 In ultris_windowhandler
case ID_INFO_HIGHSCORES: DialogBox( ultris_instance, MAKEINTRESOURCE( IDD_HIGHSCORE), ultris_window, highscoredialog); mein_spiel.reset_timer(); //spielzeit wird zurückgesetzt return 0; In onestep(); ultris_highscores.newscore( punktestand); // der aktuelle Punktestand wird nach Beendigung des Spiels der //Funktion newscore(); zur Verarbeitung übergeben.

8 void highscore::newscore( int pkt)‏ { int pos, i; char buf[256];
for( pos = 5; pos && (high[pos-1].punkte < pkt); pos--); //solange der aktuelle Punktestand größer ist als jeweilige Wert im Array die Position // abchecken. if( pos < 5) //in den Highscores? for( i = 4; i > pos; i—) high[i] = high[i-1]; // alle Postionen unter dem aktuellen Highscore um eins runter high[pos].punkte = pkt; *(high[i].name) = 0; //name wird zunächst zurückgesetzt. Später gefüllt. ultris_sounds.play( sound_win); sprintf( buf, "Glückwunsch, du hast mit %d Punkten den %d. Platz erreicht!", pkt, pos+1); // in buf (dem Puffer) wird der Ausgabetext für die Siegerehrung (neues Dialogfeld) kopiert. DialogBoxParam( ultris_instance, MAKEINTRESOURCE( IDD_SIEGEREHRUNG), ultris_window, siegerehrung, (LPARAM)buf); //und hier wird buf übergeben. Buf[38] = 0; // im Dialogfenster wird buf dann mit dem Namen gefüllt, und zurück //gegeben. Danach auf 38 zeichen gekürzt. strcpy( high[pos].name, buf);// hier dann in unsere struct kopiert PostMessage( ultris_window, WM_COMMAND, ID_INFO_HIGHSCORES, 0); } // Anzeigen des Highscore-Dialogs }

9 BOOL CALLBACK siegerehrung( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ static char *parameter; switch (uMsg)‏ case WM_INITDIALOG: // wenn das Fenster initialisiert wird, wird der Dialogtext des Items mit dem Paramter aktualisiert ankgeziegt. parameter = (char *)lParam; //puffer von newscore SetDlgItemText( hwndDlg, IDC_SIEGERTEXT, parameter); //parameter wird dann hier in dem Textfeld angezeigt return TRUE; case WM_COMMAND: if(wParam == IDOK)‏ GetDlgItemText( hwndDlg, IDC_NAME, parameter, 256); //name in den Zeichenpuffer EndDialog(hwndDlg, wParam); //und zurück... } break; return FALSE;


Herunterladen ppt "Spieleprogrammierung mit DirectX und C++"

Ähnliche Präsentationen


Google-Anzeigen