Spieleprogrammierung mit DirectX und C++

Slides:



Advertisements
Ähnliche Präsentationen
Strukturen in C Spelz, Sievers, Bethke.
Advertisements

Klassen - Verkettete Liste -
Ein- und Ausgabe von Dateien
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Sortieren I - Bubblesort -
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Einführung in die Programmierung Ausführbare Klassen
VO2 Laden und Initialisieren der Sounds. Wir wollen Sounds in unsere Applikation laden Menü erweitern –um den Menüpunkt Sound –mit dem Identifier ID_ULTRIS_SOUND.
Ultris Version 8: Erzeugen der Formen und Anzeigen der Vorschau
Ultris V10 Bewegen, Drehen und Kollisionserkennung.
V11 Auflösen der Formen und Abräumen der Reihen. Zwei neue Methoden ___________________________________ class ultris { private: … void aufloesen(); void.
Verteilte Software - Java - Prozedurale Programmierung 1
10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java.
3 Sprachelemente und Anweisungen JavaHS Merseburg (FH) WS 06/07 Strings (Zeichenketten)
Java: Dynamische Datentypen
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Indirekte Adressierung
Konstruktoren.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
V03 Laden und Initialisieren der Grafiken - Grafiken des Spiels laden und testweise auf dem Bildschirm anzeigen - eine Klasse anlegen, die alle erforderlichen.
V10: Bewegen der Formen und Kollisionserkennung Steuerung der Spielsteine durch Tastenbefehle (Übersicht der Befehle unter der Hilfe)
V09 Fallende Formen, Geschwindigkeitsregelung und Timing Daniel Ebner Spieleprogrammierung mit DirectX und C++
Softwaretechnologie II WS 08/09 SpieleProgrammieren UlTris V07 Reihen vorbelegen, Spielfeld anzeigen und Punktestand ausrechnen Sibylle C. Schellhorn,
Tag 2 Look-up-Tabellen, Zufallszahlen, Listen, Speichermanagement und Dateiverwaltung Quelle: 3D-Spiele mit C++ und DirectX in 21 Tagen, Alexander.
V12 Highscores WS 2009/10 Simulation und 3D Programmierung Prof. Dr. Manfred Thaller Martina Hänsel.
Vers. 6: Der Konfigurationsdialog Quelle: Spieleprogrammierung mit DirectX und C++, U. Kaiser und P. Lensing, Galileo Computing (2007)
V03 Laden und Speichern von Spielfeldern und der Spielfeldeditor.
V11 Auflösen der Formen Abräumen der Reihen. Erweiterung der Klasse ultris class ultris { private: … void aufloesen() void aufruecken() public: … }
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 10 Claudio Moraga; Gisbert Dittrich FBI Unido
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
Einführung in Visual C++
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Wir müssen also überlegen: Implementierung der Knoten, Implementierung der Kanten, daraus: Implementierung des Graphen insgesamt. Annahme: die Knoteninhalte.
Balance V01 Der Windows-Rahmen S Vortrag von Lisa Rau.
3D Programmierung Version 12 - Highscores. Die vom Spieler erzielte Punktzahl wird mit 5 vorgegebenen Punktzahlen verglichen und, falls nötig, in die.
FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen.
Java programmieren mit JavaKara
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Von der Planung bis zum Hauptmenü Seminar: Softwaretechnologie II Dozent: Prof. Manfred Thaller Referent: Jan Bigalke.
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Informatik 1 Letzte Übung.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Dynamische Datentypen
Die Klasse String und ihre Methoden
Aufruf einer Methode eines Objektes vom Typ „Bruch“
Starten der Entwicklungsumgebung (IDE)
Programmieren in C Dateien
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
A Workshop About this chapter General description Units Time Schedule
Visual Rekapitulation Tag 1
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Konstruktoren.
Aufgaben zu Rückgabewerten
Java-Kurs - 4. Übung weitere Kontrollstrukturen
Felder in Java.
«Delegierter» Methoden Schablone Funktionszeiger
 Präsentation transkript:

Spieleprogrammierung mit DirectX und C++ V12 Highscores Nicolas matentzoglu

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

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

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.

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

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;

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.

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 }

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;