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

V12 Highscores

Embed Size (px)

DESCRIPTION

Nicolas matentzoglu. V12 Highscores. Spieleprogrammierung mit DirectX und C++. class highscore { struct score // mit dieser Struktur { int punkte; // kann eine Zahl und eine char name[40]; // Zeichenkette (Name) gespeichert werden. }; private : - PowerPoint PPT Presentation

Citation preview

Page 1: V12 Highscores

V12 Highscores

Nicolas matentzoglu

Spieleprogrammierung mit DirectX und C++

Page 2: V12 Highscores

• 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(); };

Page 3: V12 Highscores

high.dat:------------------------------------------------------------827393,Daniel E723908,Florian T671627, Tobias G587888, Lisa R468787, Hye Lim C

Page 4: V12 Highscores

•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.•}

Page 5: V12 Highscores

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);}

Page 6: V12 Highscores

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 scoresSetDlgItemText( hwndDlg, IDC_NAME1, ultris_highscores.get_name(0));SetDlgItemText( hwndDlg, IDC_NAME2, ultris_highscores.get_name(1)); //.. und die anderen Namenreturn TRUE;

case WM_COMMAND:if((wParam == IDOK)||(wParam == IDCANCEL))EndDialog(hwndDlg, wParam);break;}return FALSE;}

Page 7: V12 Highscores

case ID_INFO_HIGHSCORES:DialogBox( ultris_instance, MAKEINTRESOURCE( IDD_HIGHSCORE), ultris_window, highscoredialog);mein_spiel.reset_timer(); //spielzeit wird zurückgesetztreturn 0;

In ultris_windowhandler

In onestep();

ultris_highscores.newscore( punktestand);// der aktuelle Punktestand wird nach Beendigung des Spiels der //Funktion newscore(); zur Verarbeitung übergeben.

Page 8: V12 Highscores

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 runterhigh[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 kopiertPostMessage( ultris_window, WM_COMMAND, ID_INFO_HIGHSCORES, 0);} // Anzeigen des Highscore-Dialogs}

Page 9: V12 Highscores

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 newscoreSetDlgItemText( hwndDlg, IDC_SIEGERTEXT, parameter);//parameter wird dann hier in dem Textfeld angezeigtreturn TRUE;

case WM_COMMAND:if(wParam == IDOK)

{GetDlgItemText( hwndDlg, IDC_NAME, parameter, 256); //name in den ZeichenpufferEndDialog(hwndDlg, wParam); //und zurück...}

break;}

return FALSE;}