1 / 9

V12 Highscores

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 :

Télécharger la présentation

V12 Highscores

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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 • constchar *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) { staticchar *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; }

More Related