______________________________________________________________________
// 2_4 Spielgrundprogramm
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
char Spielname[] = "Spielgrundprogramm";
BOOL ende;
// Spieler
struct bewegliches_Objekt
{
int x;
int y;
} Spieler;
LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam,
LPARAM lparam)
{
switch(message)
{
case WM_DESTROY:
{PostQuitMessage(0);
ende = TRUE;
return(0);
} break;
case WM_KEYDOWN:
switch (wparam)
{
case VK_ESCAPE: // Wenn der Spieler Esc drückt, beende das Programm
{
PostMessage(hwnd, WM_CLOSE, 0, 0);
return 0;
}
break;
break;
// Bewege den Spieler mit den Pfeiltasten
case VK_LEFT:
Spieler.x--;
break;
case VK_RIGHT:
Spieler.x++;
break;
case VK_UP:
Spieler.y--;
break;
case VK_DOWN:
Spieler.y++;
break;
default:
break;
}
}
return (DefWindowProc(hwnd, message, wparam, lparam));
}
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprevinst,
LPSTR lpcmdline, int ncmdshow)
{
WNDCLASSEX winclass;
HWND hwnd;
MSG message;
const char szclassname[] = "USF 4 ever";
winclass.cbSize = sizeof(WNDCLASSEX);
winclass.style = CS_HREDRAW | CS_VREDRAW;
winclass.lpfnWndProc = WindowProc;
winclass.cbClsExtra = 0;
winclass.cbWndExtra = 0;
winclass.hInstance = hinst;
winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
winclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
winclass.lpszMenuName = NULL;
winclass.lpszClassName = szclassname;
winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if (!RegisterClassEx(&winclass))
return(0);
if (!
(hwnd = CreateWindowEx(
NULL,
szclassname,
Spielname,
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
0,0,
400,300,
NULL,
NULL,
hinst,
NULL
)
)
)
return(0);
// Spiel initialisieren
// Spieler in die Mitte des Fensters setzen
RECT rect;
GetClientRect(hwnd, &rect);
Spieler.x = rect.right/2;
Spieler.y = rect.bottom/2;
// Hauptspielschleife
while(!ende)
{
/* Während GeMessage solange läuft, bis Windows eine Nachricht
schickt, beendet sich PeekMessage, wenn keine Nachricht zur
Verarbeitung vorliegt, sofort selber, spart also etwas Zeit */
while(PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
HDC hdc = GetDC(hwnd);
// Altes Bild löschen
GetClientRect(hwnd, &rect);
FillRect(hdc, &rect, CreateSolidBrush(RGB(255,255,255)));
DeleteObject(CreateSolidBrush(RGB(255,255,255)));
// Neues Bild zeichnen
SelectObject(hdc, CreatePen(PS_SOLID, 1, RGB(0, 0, 0)));
MoveToEx(hdc, Spieler.x, Spieler.y-10, NULL);
LineTo(hdc, Spieler.x, Spieler.y+10);
MoveToEx(hdc, Spieler.x-10, Spieler.y, NULL);
LineTo(hdc, Spieler.x+10, Spieler.y);
DeleteObject(CreatePen(PS_SOLID, 1, RGB(100, 100, 100)));
ReleaseDC(hwnd, hdc);
} // Hauptspielschleife
// Spiel beenden
return message.wParam;
}
______________________________________________________________________
|
|
Zurück
|