009
05.06.2006, 11:14 Uhr
Co
|
also codes:
C++: |
/* / Game1.cpp : / Nur Anzeige von BSP-Welt (ohne Bewegungen) /---------------------------------------------------*/
#include <windows.h> #include "Game1.h"
// Spielobjekt TGame Game;
// Vorwärtsdeklaration (für Fensterereignisse) LRESULT CALLBACK WndProc (HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam);
// Windows-Hauptfunktion mit Game-Schleife int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // Fensterklasse initialisieren WNDCLASS Win; // Objekt der Fensterklasse MSG msg; // Aktuelle Meldung // Extrabytes für Klassen/Fensterinstanz Win.cbClsExtra = 0; Win.cbWndExtra = 0; // Instanz der Fensterklasse Win.hInstance = hInstance; // Symbol und Cursor der Fensterklasse Win.hIcon = LoadIcon(hInstance, IDI_APPLICATION); Win.hCursor = LoadCursor(NULL, IDC_ARROW); // Hintergrundfarbe (schwarz) und Fensterstil Win.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); Win.style = CS_HREDRAW | CS_VREDRAW; // Verknüpfung mit Ereignis-Routine Win.lpfnWndProc = WndProc; // Name der Fensterklasse Win.lpszClassName = GVersion; Win.lpszMenuName = NULL; // kein Menü // Registrierung der Fensterklasse RegisterClass (&Win); // Fenster erzeugen GHandle = CreateWindow (Win.lpszClassName, "Genesis3D - [Esc]=Ende", WS_TILED, CW_USEDEFAULT, CW_USEDEFAULT, MaxWidth, MaxHeight, NULL, NULL, hInstance, NULL); if (!GHandle) { return 0; // nicht ok } // Mauszeiger verbergen ShowCursor (false); // Fenster zeigen und "auffrischen" ShowWindow (GHandle, nCmdShow); UpdateWindow (GHandle); // Spielinitialisierung Game.CreateGame (); // Spielmodus auf "Laufen" einstellen Game.isRunning = true; // Solange Spiel "läuft" while (Game.isRunning) { // evtl. Fenstereignisse abfragen while (PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE)) { // Spielverlauf Game.RunGame (); if (!GetMessage(&msg, NULL, 0, 0)) { Game.isRunning = false; break; } // Ereignisdaten auswerten (lassen) TranslateMessage (&msg); DispatchMessage (&msg); } } // Programm-/Spielende Game.FreeGame (); return 1; // ok }
// Verarbeitung der Fensterereignisse LRESULT CALLBACK WndProc (HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) { // Ereignis auswerten switch (iMessage) { case WM_KEYDOWN: { switch (wParam) { case VK_ESCAPE: // Spielende mit [Esc]-Taste { MessageBox(NULL,"Halloooooooooooooooooooooooh?","Frage:",48); PostMessage(hWnd, WM_QUIT, 0, 0); } } } // ansonsten Ereignis an "Default-Handler" default: return DefWindowProc (hWnd, iMessage, wParam, lParam); } return 0; }
//---------------------------------------------------
// Spiel initialisieren/"aufbauen" void TGame::CreateGame (void) { geRect WorldScreen; // Anzeigefläche char WorldName[64]; // Name der Welt/Level geVFile *WorldFile; // BSP-Datei (Welt/Level)
// 3D-Engine initialisieren Engine = geEngine_Create (GHandle, GVersion, "."); if (!Engine) ExitError ("3D-Engine kann nicht gestartet werden!"); // Anzeigedaten für Engine ausschalten geEngine_EnableFrameRateCounter(Engine, GE_FALSE); // Treiber auswählen SetDriver (); // Anzeigefläche festlegen WorldScreen.Left = 0; WorldScreen.Right = MaxWidth - 1; WorldScreen.Top = 0; WorldScreen.Bottom = MaxHeight - 1; // Koordinaten-Matrix setzen geXForm3d_SetIdentity (&XForm); // Kamera initialisieren Camera = geCamera_Create (2.0, &WorldScreen); if (!Camera) ExitError ("Kamera kann nicht installiert werden!"); // BSP-Datei laden strcpy (WorldName, Pfad); strcat (WorldName, BSP_Datei); WorldFile = geVFile_OpenNewSystem (NULL, GE_VFILE_TYPE_DOS, WorldName, NULL, GE_VFILE_OPEN_READONLY); // Wenn Datei ok, Welt/Level erzeugen if (WorldFile) { World = geWorld_Create(WorldFile); geVFile_Close(WorldFile); }; if (!World) ExitError ("Welt/Level lässt sich nicht erzeugen!"); // Welt/Level mit 3D-Engine verknüpfen if (!geEngine_AddWorld(Engine, World)) ExitError ("Welt/Level lässt sich nicht einbinden!"); }
//---------------------------------------------------
// Spiel "in Szene setzen" void TGame::RunGame (void) { // Koordinaten und Winkel ausrichten geXForm3d_SetIdentity (&XForm); geXForm3d_RotateX (&XForm, 0.0); geXForm3d_RotateY (&XForm, 0.0); geXForm3d_RotateZ (&XForm, 0.0); geXForm3d_Translate (&XForm, 0.0, 0.0, 0.0); geCamera_SetWorldSpaceXForm (Camera, &XForm); // Rendering starten if (!geEngine_BeginFrame(Engine, Camera, GE_TRUE)) ExitError ("BeginFrame gescheitert!"); // Welt/Level rendern und darstellen if (!geEngine_RenderWorld (Engine, World, Camera, 0.0)) ExitError ("Rendering gescheitert!"); // Rendering beenden if (!geEngine_EndFrame(Engine)) ExitError ("EndFrame gescheitert!"); }
//---------------------------------------------------
// Spiel "abbauen" void TGame::FreeGame (void) { // Kamera, Welt und Engine freigeben if (Camera) geCamera_Destroy (&Camera); if (World) geWorld_Free (World); if (Engine) { geEngine_ShutdownDriver(Engine); geEngine_Free (Engine); } // Zeiger "nullen" Camera = NULL; World = NULL; Engine = NULL; }
//--------------------------------------------------
// Grafiktreiber/modus wählen/setzen void TGame::SetDriver (void) { geDriver_System *DriverSystem; long Breite, Hoehe; // Treibersystem "einbetten" DriverSystem = geEngine_GetDriverSystem (Engine); if (!DriverSystem) ExitError ("Kein Treibersystem gefunden!"); // DirectX-Grafiktreiber aufnehmen Driver = geDriver_SystemGetNextDriver (DriverSystem, NULL); if (!Driver) ExitError ("Treiber nicht gefunden!"); // Suchschleife für Grafikmodus DMode = geDriver_GetNextMode (Driver, NULL); // Liste nach passendem Modus durchsuchen while(true) { if (!DMode) ExitError ("Falscher Treibermodus!"); // Auflösungswerte ermitteln geDriver_ModeGetWidthHeight (DMode, &Breite, &Hoehe); // Wenn Maße passen, Schleife verlassen if (Breite == MaxWidth && Hoehe == MaxHeight) break; // Ansonsten weitersuchen DMode = geDriver_GetNextMode (Driver, DMode); } // Grafiktreiber/modus überprüfen if ((!Driver) || (!DMode)) ExitError ("Kein passender Grafiktreiber/modus!"); // Grafiktreiber/modus initialisieren if (!geEngine_SetDriverAndMode (Engine, Driver, DMode)) ExitError ("Grafikinitialisierung fehlgeschlagen!"); }
//--------------------------------------------------
// Spielabbruch bei Fehler void TGame::ExitError (char *Txt) { // Fehlermeldung anzeigen, Programm abbrechen MessageBox (NULL, Txt, "Fehler", 48); FreeGame(); _exit(EXIT_FAILURE); }
|
C++: |
//--------------------------------------------------- // Game1.h : // Header mit Klassendeklaration von TGame //---------------------------------------------------
// #define _BCB // nur für Borland C++Builder
#include <windows1.h> #include "include\Genesis.h"
class TGame { public: // Eigenschaften geEngine *Engine; // 3D-Engine geWorld *World; // World/Level geCamera *Camera; // Kamera/Betrachter geDriver *Driver; // Grafiktreiber geDriver_Mode *DMode; // Grafikmodus geXForm3d XForm; // Welt-Matrix bool isRunning; // Spielmodus an/aus // Methoden void CreateGame (void); void RunGame (void); void FreeGame (void); void SetDriver (void); void ExitError (char *Txt); } ;
// Pfad- und Dateinamen const char *Pfad = ".\\levels\\"; const char *BSP_Datei = "World0.bsp"; const char *GVersion = "GPlay1"; // Globale Konstanten const int MaxWidth = 1280; // Max. Screenbreite const int MaxHeight = 1024; // Max. Screenhöhe
// Globalvariable HWND GHandle; // Handle des "Spielfensters"
|
-- Wer später stirbt, hat mehr vom Leben. |