250 likes | 359 Views
Von der Planung bis zum Hauptmenü. Breakanoid. Seminar: Softwaretechnologie II Dozent: Prof. Manfred Thaller Referent: Jan Bigalke. Inhalt. Die Spielzustände Das Spielgerüst CBreakanoid Das Titelbild Das Hauptmenü. Die Spielzustände. Das Intro EGameState : GS_INTRO.
E N D
Von der Planung bis zum Hauptmenü Breakanoid Seminar: Softwaretechnologie II Dozent: Prof. Manfred Thaller Referent: Jan Bigalke
Inhalt • Die Spielzustände • Das Spielgerüst • CBreakanoid • Das Titelbild • Das Hauptmenü
Die Spielzustände • Das Intro EGameState: GS_INTRO Besteht meistens aus einem kleinen Video, hier jedoch nur aus einem Titelbild. Fordert den Benutzer auf eine Taste zu drücken um in das Hauptmenü zu gelangen.
Die Spielzustände • Das Hauptmenü EGameState: GS_Menu Besteht aus einem Hintergrundbild. Dazu gibt es 3 • Spiel Starten • Hilfe Anzeigen • Spiel Beenden Auswahlmöglichkeiten: Mit Hilfe der Pfeiltasten können die einzelnen Menüpunkte angewählt und mit einer„ Bestätigungstaste“ ausgewählt werden.
Die Spielzustände • Das Spiel EGameState:GS_GAME Das eigentliche Spiel und der Hauptteil des Quellcodes EGameState:GS_NONE Der Anfangsstatus und der Endstatus wenn man das Programm beenden will.
Das Spielgerüst Wichtige Klassen • Die Klasse CBreakanoid • Enthält alles was für das Spiel wichtig ist. • Wird in der WinMain-Funktion erzeugt. • Ein Zeiger auf die Instanz wird als globale Variable gespeichert. • Die Spielzustandsklassen • Für jeden Zustand werden eigene Klassen erzeugt. • 1. CIntro • 2. CMainMenu • 3. CGame • -Zeiger auf die Instanzen in CBreakanoid
Das Spielgerüst Globale Variablen • g_pBreakanod: Der Zeiger auf die CBreakanoid Instanz. • Dynamisches Array float* g_pfButtons: Speicherung der zustände der Analoge Knöpfe • Dynamisches Array Bool* g_pbButtons: digitale Werte der Knöpfe
Das Spielgerüst Wichtige Methoden • Load: • - Enthalten in CBreakanoid und den Spielzustandsklassen • Lädt alle wichtigen Daten. • Z.b Texturen aber auch die Initialisierung der DirectX- Schnittstellen • Unload: - Das Gegenteil von Load
Das Spielgerüst Wichtige Methoden 2 • Init: • - Enthalten in CBreakanoid und den Spielzustandsklassen • Sorgt für die Initialisierung des Spiels oder des Zustands. • Ruft die Load-Methode auf • Punkte des Spielers auf Null setzen und laden des 1. Levels • Instanzen der Spielzustandsklassen werden erstellt. • Exit: - Gegenteil von Init()
WinMain-Funktion • Ist die Hauptfunktion die dafür sorgt das alles ans laufen kommt. • Beinhaltet den Aufruf von Init(), Run(), und Exit(), Der CBreakanoid Klasse
CBreakanoid::Init • Setzt die gesamte klasse mit hilfe von ZeroMemory zurück. • TriBase Engine wird initialisiert • Load wird ausgeführt • Spielzustandsklassen Initialisieren • Spielzustand auf GS_INTRO setzen • Exit Methode macht alles wieder rückgängig
CBreakanoid::Load • Lädt alle Daten die für das gesamte Spiel von wichtigkeit sind also vor allem die Initialisierung der DirectX-Klassen der TriBase-Engine. • Als gegenteil von CBreakanoid::Load besteht die CBreakanoid::Unload Methode aus vielen TB_SAFE_DELETE aufrufen.
CBreakanoid::Run • Ruft tbDoMassageLopp auf in der für jeden Frame eine Move und eine Render Funktion abgelaufen wird. • Da der direkte Aufruf der CBreakanoid-Methoden Probleme machen würden, werden die in zwei normalen Funktionen gekapselt.
CBreakanoid::Move und ::Render • Erwarten einen float Parameter der die Zeit in Sekunden des letzten Frames beinhaltet • Rufen eigentlich nur die ::Move und ::Render Methoden des gerade Aktiven Spielzustandes auf. • Move fragt zuerst die Eingabegeräte ab und Speichert die Daten in g_pfButtons oder g_pbButtons. • Zum Schluss aktualisiert CBreakanoid::Move noch m_fTime indem die zeit des letzten Frames addiert wird.
Beispiel 1 • Datei: Breakanoid.cpp & Breakanoid.h • WinMain-Funktion • Klasse Cbreakanoid • Init und Exit • Load und Unload • SetGameState
Das Titelbild • Besteht aus einem Bild mit dem Namen des Spiels. • Ein Text der den Spieler dazu auffordert eine Taste zu drücken.
Das Titelbild • Ist der Spielzustand GS_INTRO und die Klasse CIntro. • Beinhaltet Methoden Init, Exit, Load und Unload, Move und Render • Als Variable kommt in CIntro nur LPDIRECT3DTEXTURE9 m_pTitel, also die Textur die das Titelbild beinhaltet.
Laden und Entladen des Titelbilds • Die Init-Methode von CIntro ruft lediglich die Load-Methode auf. • Exit ruft dementsprechend nur die Unload-Methode auf. • Die Load-Methode lädt das Titelbild mit Hilfe des Texturmanagers. • Unload löscht die Titelbildtextur.
Rendern des Titelbilds • Ein Rechteck das mit der Textur des Bildes überzogen wird. • Dafür werden transformierte Vertizes benutzt. • Eine kleine Animation indem für jedes Frame die Koordinaten der Vertizes ein wenig verändert wird
Beispiel 2 • Datei Intro.cpp & Intro.h • Init und Load des Intros • Move und Render • Animation und Text
Das Hauptmenü • Spielzustand GS_MAIN_MENU • Klasse CMainMenu • Drei Wahlmöglichkeiten • Spiel Starten: Ändert Spielzustand in GS_GAME • Hilfe Anzeigen: Zeigt einen Hilfetext an • Spiel beenden • Ein sich als bewegendes Hintergrundbild. • Auswahlmöglichkeiten mit Hilfe der Pfeiltasten und Auswahl mit Return
Rendern des Menüs • Wie das Titelbild mit dem Unterschied das ein Char Array mit den Menüpunkten enthalten ist. • Für das Rendern der Menüpunkte wird eine For-Schleife abgelaufen. • Eine Einfache Animation lässt den ausgewählten Text sich bewegen und eine Farbänderung ihn hervorheben. • Wird Natürlich nur Angezeigt wenn die Bool-Variable für den Hilfetext false anzeigt.
Sound • Sound wird in CBreakanoid::Load geladen. • CBreakanoid enthält ein Array mit 12 Elementen für 12 verschiedene Soundeffekten.
CMainMenu::Move • Verarbeitet die Eingaben des Spielers. • Pfeiltasten Verändern den Wert von m_iCursor • Bestätigungstaste führt Aktion die für den Wert von m_iCursor gedacht ist aus. • Ausnahme bei Anzeige des Hilfetextes
Beispiel 3 • Datei: MainMenu.cpp & MainMenu.h • Move und Render • Animation und Text