• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

mini mini mini game in C

wie deklariert man ? (nich includiert)
sowas oder was : ? int r2 =13;
PS: ^^ funzt nich deswegen denk ich : nein
 
Zuletzt bearbeitet:
Werbung:
Code:
int r2;
r2 ist deklariert
Code:
int r2 = 5;
r2 ist initialisiert


solltest sie initialisieren (sry)


schick mal deinen gesamten Code und die Fehlermeldungen
 
Zuletzt bearbeitet:
so und jetzt kommt die einzigartige 1ne milionen Frage : initialisieren ??? Ich = Bahnhof = stelle wo züge abfahren
EDIT : Ich glaub intialisiren is sowas wie wenn amn in php so macht : $username = "lalabert";
hab ich recht ode rhab ich recht ? naja ich habs jetzt deklariert (xD pyriert) und funkt aber immernoch nicht ...

Code:
#include <windows.h>
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

//globale Variablen
char szClassName[ ] = "WindowsApp";
HDC hdc;

int xmax, ymax; 
int xball, yball;
int r =13;
int i =6;
int dx=2;
int dy=2;
int r2;
 

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
{
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
/*Wenn was schief gelaufen ist, Fehlermeldung*/
    if (!RegisterClassEx (&wincl))
    {
        MessageBox(NULL, "Window Registration Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    hwnd = CreateWindowEx (
           0,
           szClassName,
           "Windows App",
           WS_OVERLAPPEDWINDOW,
           CW_USEDEFAULT,
           CW_USEDEFAULT,
           544,
           375,
           HWND_DESKTOP,
           NULL,
           hThisInstance,
           NULL
           );
/* Wenn was schief gelaufen Fehlermeldung */
    if(hwnd == NULL)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }
    ShowWindow (hwnd, nFunsterStil); //Fenster zeigen
    UpdateWindow(hwnd);
/*Message Loop*/
    while (GetMessage (&messages, NULL, 0, 0) > 0)
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }
}
/* window procedur */
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_CLOSE:      //Beim schließen des Fensters
            DestroyWindow(hwnd);
            break;
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
            
            
        case WM_KEYDOWN:  //bei Tastendruck
        {
             switch(wParam)
             {
                case VK_LEFT:
                      xball-=dx;
                      _sleep(1);
                      
                      break;
                case VK_RIGHT:
                      xball +=dx;
                      _sleep(1);
                      
                      break;
                case VK_UP:
                      yball -= dy;
                      _sleep(0);
                      
                      break;
                case VK_DOWN:
                      yball += dy;
                      _sleep(0);
                      
                      break;
                case VK_SPACE:
                      shootBomb(hwnd);
                      ReleaseDC(hwnd, hdc);
                      break;
             }
        }
        
void shootBomb(HWND hwnd)
{
   hdc = GetDC(hwnd);
   RECT rcClient;
   GetClientRect(hwnd, &rcClient); //Fenstergeometrie von hwnd
   int i=0;
   while(yball+r2+i<rcClient.bottom)  //solange der Boden nicht erreicht wurde
   {
     Ellipse(hdc, xball-r2, yball-r2+i, xball+r2, yball+r2+i); //r2 = radius der Bombe
     _sleep(10);
     i+=10;
   }
}
        
        case WM_PAINT:  //Zeichnen
        {
             hdc = GetDC(hwnd);  //Zeichen starten
             Ellipse(hdc, xball-r, yball-r, xball+r, yball+r);
             ValidateRect(hwnd, 0);
             //Zeichnen beenden
        }
        
        
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}
 
Werbung:
hab es gelesen, bevor du es bearbeitet hast

Hast die Variable nur deklariert, hatte noch ergänzt, dass du sie auch noch initialisieren musst
(ansonsten r2 == NULL)



Und die Funktionsinitialisierung gehört entweder vor die WinMain
Code:
/* include ... */

void shootBomb(HWND hwnd)
{
/* ... */
}

/* variablen */

/* WinMain */
oder du arbeitest mit prototypen (erst deklarieren, dann initialisieren; ist übersichtlicher)
Code:
/* include ... */

void shootBomb(HWND);

/* variablen */

/* WinMain */

/* WindowsProcedur */

void shootBomb(HWND hwnd)
{
/* ... */
}
 
Zuletzt bearbeitet:
Werbung:
öhhm so :
int r2;
int r2 = 5;
??
erst deklarieren dann einen wert zuweisen ? geht zumindest trotzdem nicht .. also ich hab nur das hinzugefügt :
int r2 = 2;

EDIT : Juhu es funzt :) kann man das zufälliger weise nochmachen das nicht alle bilder der bombe angezeigt werden sondern das das drüber gelöscht wird ?
 
Code:
void shootBomb(HWND hwnd)
{
   hdc = GetDC(hwnd);
   RECT rcClient;
   GetClientRect(hwnd, &rcClient); //Fenstergeometrie von hwnd
   HDC hdcBuffer;
   HBITMAP hbmBuffer, hbmOldBuffer;  //Buffer
   int i=0;
   while(yball+r2+i<rcClient.bottom)  //solange der Boden nicht erreicht wurde
   {
     /* Double Buffering */
     hdcBuffer = CreateCompatibleDC(hdc);
     hbmBuffer = CreateCompatibleBitmap(hdc, rcClient.right, rcClient.bottom);
     hbmOldBuffer = SelectObject(hdcBuffer, hbmBuffer);
     BitBlt(hdc, 0, 0, rcClient.right, rcClient.bottom, hdcBuffer, 0, 0, SRCCOPY);

     /* Bombe zeichnen */
     Ellipse(hdc, xball-r2, yball-r2+i, xball+r2, yball+r2+i); //r2 = radius der Bombe
     _sleep(10);
     i+=10;
   }
}
 
cool die fliegt richtig schon runter :=) nur das doofe is das der hintergrund schwarz wird wen man leertaste drükt und dann bleibt er auch schwarz ...
 
Werbung:
Hab die ganze WindowsProcedure ein bisschen Umstrukturiert:

Code:
                case VK_LEFT:
                      xball-=dx;
                      UpdateBall(hwnd); //Ball neu zeichnen
                      break;
/* ... */
Code:
                case VK_SPACE:
                      shootBomb(hwnd); //Bombe werfen
                      break;
WM_PAINT fällt raus

ShootBomb
Code:
void shootBomb(HWND hwnd)
{
   hdc = GetDC(hwnd);
   int i=0;
   RECT rcClient;
   GetClientRect(hwnd, &rcClient);
   while(yball+r2+i<rcClient.bottom)  //solange der Boden nicht erreicht wurde
   {
     doubleBuffering(hwnd, hdc);

     Ellipse(hdc, xball-r2, yball-r2+i, xball+r2, yball+r2+i); //r2 = radius der Bombe
     _sleep(10);
     i+=10;
   }
}
UpdateBall
Code:
void UpdateBall(HWND hwnd)
{
   hdc = GetDC(hwnd);
   doubleBuffering(hwnd,hdc);
   Ellipse(hdc, xball-r, yball-r, xball+r, yball+r);
}
doubleBuffering
Code:
void doubleBuffering(HWND hwnd, HDC hdc)
{
   RECT rcClient;
   GetClientRect(hwnd, &rcClient); //Fenstergeometrie von hwnd
   HDC hdcBuffer;
   HBITMAP hbmBuffer, hbmOldBuffer;  //Buffer
   hdcBuffer = CreateCompatibleDC(hdc);
   hbmBuffer = CreateCompatibleBitmap(hdc, rcClient.right, rcClient.bottom);  //Bitmap erstellen
   hbmOldBuffer = SelectObject(hdcBuffer, hbmBuffer);
   FillRect(hdcBuffer, &rcClient, CreateSolidBrush(RGB(255,0,0)));  //mit rgb-Farbe füllen
   BitBlt(hdc, 0, 0, rcClient.right, rcClient.bottom, hdcBuffer, 0, 0, SRCCOPY); //Buffer zeichnen
}
 
und noch an das Ende der doubleBuffering-Funktion:
Code:
   DeleteObject(hdcBuffer);
   DeleteObject(hbmOldBuffer);
   DeleteObject(hbmBuffer);
die ganzen Buffer löschen (ansonsten überlastung des Speichers)
 
Code:
#include <windows.h>
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

//globale Variablen
char szClassName[ ] = "WindowsApp";
HDC hdc;
PAINTSTRUCT ps;
int xmax, ymax; 
int xball, yball;
int r =15;
int dx=5;
int dy=5;
int r2;
int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
{
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
/*Wenn was schief gelaufen ist, Fehlermeldung*/
    if (!RegisterClassEx (&wincl))
    {
        MessageBox(NULL, "Window Registration Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    hwnd = CreateWindowEx (
           0,
           szClassName,
           "Windows App",
           WS_OVERLAPPEDWINDOW,
           CW_USEDEFAULT,
           CW_USEDEFAULT,
           544,
           375,
           HWND_DESKTOP,
           NULL,
           hThisInstance,
           NULL
           );
/* Wenn was schief gelaufen Fehlermeldung */
    if(hwnd == NULL)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }
    ShowWindow (hwnd, nFunsterStil); //Fenster zeigen
    UpdateWindow(hwnd);
/*Message Loop*/
    while (GetMessage (&messages, NULL, 0, 0) > 0)
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }
}
/* window procedur */
void shootBomb(HWND hwnd)
{
   hdc = GetDC(hwnd);
   int i=0;
   RECT rcClient;
   GetClientRect(hwnd, &rcClient);
   while(yball+r2+i<rcClient.bottom)  //solange der Boden nicht erreicht wurde
   {
     doubleBuffering(hwnd, hdc);
     Ellipse(hdc, xball-r2, yball-r2+i, xball+r2, yball+r2+i); //r2 = radius der Bombe
     _sleep(10);
     i+=10;
   }
}
void UpdateBall(HWND hwnd)
{
   hdc = GetDC(hwnd);
   doubleBuffering(hwnd,hdc);
   Ellipse(hdc, xball-r, yball-r, xball+r, yball+r);
}
void doubleBuffering(HWND hwnd, HDC hdc)
{
   RECT rcClient;
   GetClientRect(hwnd, &rcClient); //Fenstergeometrie von hwnd
   HDC hdcBuffer;
   HBITMAP hbmBuffer, hbmOldBuffer;  //Buffer
   hdcBuffer = CreateCompatibleDC(hdc);
   hbmBuffer = CreateCompatibleBitmap(hdc, rcClient.right, rcClient.bottom);  //Bitmap erstellen
   hbmOldBuffer = SelectObject(hdcBuffer, hbmBuffer);
   FillRect(hdcBuffer, &rcClient, CreateSolidBrush(RGB(255,0,0)));  //mit rgb-Farbe füllen
   BitBlt(hdc, 0, 0, rcClient.right, rcClient.bottom, hdcBuffer, 0, 0, SRCCOPY); //Buffer zeichnen
   DeleteObject(hdcBuffer);
   DeleteObject(hbmOldBuffer);
   DeleteObject(hbmBuffer);
}
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_CLOSE:      //Beim schließen des Fensters
            DestroyWindow(hwnd);
            break;
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
            
        case WM_KEYDOWN:  //bei Tastendruck
        {
             switch(wParam)
             {
                case VK_LEFT:
                      xball-=dx;
                      UpdateBall(hwnd); //Ball neu zeichnen
                      break;
                case VK_RIGHT:
                      xball +=dx;
                      UpdateBall(hwnd);
                      break;
                case VK_UP:
                      yball -= dy;
                      UpdateBall(hwnd);
                      break;
                case VK_DOWN:
                      yball += dy;
                      UpdateBall(hwnd);
                      break;
                case VK_SPACE:
                      shootBomb(hwnd); //Bombe werfen
                      break;
             }
        }
        case WM_PAINT:  //Zeichnen
        {
             hdc = GetDC(hwnd);  //Zeichen starten
             Ellipse(hdc, xball-r, yball-r, xball+r, yball+r);
             ValidateRect(hwnd, 0);
               //Zeichnen beenden
        }
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}

^^ so is der code jetzt aber er funktioniert ncht ...
das steht irgendwas von : conficting types for doublebuffering ...
und dann noch previus imclipit deklaration of doublebuffering was here
 
Werbung:
noch ne Frage : was hab ich hier nun gemacht ? ich hab auf speichern geklickt und jetzt sieht der code so asu :
[Project]
FileName=Project1.dev
Name=Project1
UnitCount=1
Type=0
Ver=1
ObjFiles=
Includes=
Libs=
PrivateResource=
ResourceIncludes=
MakeIncludes=
Compiler=
CppCompiler=
Linker=
IsCpp=0
Icon=
ExeOutput=
ObjectOutput=
OverrideOutput=0
OverrideOutputName=
HostApplication=
Folders=
CommandLine=
UseCustomMakefile=0
CustomMakefile=
IncludeVersionInfo=0
SupportXPThemes=0
CompilerSet=0
CompilerSettings=
[Unit1]
FileName=main.c
CompileCpp=0
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[VersionInfo]
Major=0
Minor=1
Release=1
Build=1
LanguageID=1033
CharsetID=1252
CompanyName=
FileVersion=
FileDescription=Developed using the Dev-C++ IDE
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=
AutoIncBuildNr=0

Und jetzt funktioniert der nichtmehr !
 
Du musst noch die prototypen deklarieren (global)
Code:
void shootBomb(HWND);
void UpdateBall(HWND);
void doubleBuffering(HWND, HDC);
Das ist der code der .dev-Datei. Un der steht in der main.c? (Wie hastn das hingekriegt :))

Einfach neues Projekt erstellen und Code einfügen.
 
Hier nochmal der code denn es funktioniert nicht :( in der letzten zeile macht er das rot ...
Code:
#include <windows.h>
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

//globale Variablen
char szClassName[ ] = "WindowsApp";
HDC hdc;

int xmax, ymax; 
int xball, yball;
int r =15;
int dx=5;
int dy=5;
int r2;

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
{
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
/*Wenn was schief gelaufen ist, Fehlermeldung*/
    if (!RegisterClassEx (&wincl))
    {
        MessageBox(NULL, "Window Registration Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    hwnd = CreateWindowEx (
           0,
           szClassName,
           "Windows App",
           WS_OVERLAPPEDWINDOW,
           CW_USEDEFAULT,
           CW_USEDEFAULT,
           544,
           375,
           HWND_DESKTOP,
           NULL,
           hThisInstance,
           NULL
           );
/* Wenn was schief gelaufen Fehlermeldung */
    if(hwnd == NULL)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }
    ShowWindow (hwnd, nFunsterStil); //Fenster zeigen
    UpdateWindow(hwnd);
/*Message Loop*/
    while (GetMessage (&messages, NULL, 0, 0) > 0)
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }
}
/* window procedur */
void shootBomb(HWND hwnd)
{
   hdc = GetDC(hwnd);
   int i=0;
   RECT rcClient;
   GetClientRect(hwnd, &rcClient);
   while(yball+r2+i<rcClient.bottom)  //solange der Boden nicht erreicht wurde
   {
     doubleBuffering(hwnd, hdc);
     Ellipse(hdc, xball-r2, yball-r2+i, xball+r2, yball+r2+i); //r2 = radius der Bombe
     _sleep(10);
     i+=10;
   }
void UpdateBall(HWND hwnd)
{
   hdc = GetDC(hwnd);
   doubleBuffering(hwnd,hdc);
   Ellipse(hdc, xball-r, yball-r, xball+r, yball+r);
}
void doubleBuffering(HWND hwnd, HDC hdc)
{
   RECT rcClient;
   GetClientRect(hwnd, &rcClient); //Fenstergeometrie von hwnd
   HDC hdcBuffer;
   HBITMAP hbmBuffer, hbmOldBuffer;  //Buffer
   hdcBuffer = CreateCompatibleDC(hdc);
   hbmBuffer = CreateCompatibleBitmap(hdc, rcClient.right, rcClient.bottom);  //Bitmap erstellen
   hbmOldBuffer = SelectObject(hdcBuffer, hbmBuffer);
   FillRect(hdcBuffer, &rcClient, CreateSolidBrush(RGB(255,0,0)));  //mit rgb-Farbe füllen
   BitBlt(hdc, 0, 0, rcClient.right, rcClient.bottom, hdcBuffer, 0, 0, SRCCOPY); //Buffer zeichnen
}
void shootBomb(HWND);
void UpdateBall(HWND);
void doubleBuffering(HWND, HDC);
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_CLOSE:      //Beim schließen des Fensters
            DestroyWindow(hwnd);
            break;
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
            
        case WM_KEYDOWN:  //bei Tastendruck
        {
             switch(wParam)
             {
                case VK_LEFT:
                      xball-=dx;
                      UpdateBall(hwnd); //Ball neu zeichnen
                      
                      break;
                case VK_RIGHT:
                      xball +=dx;
                      UpdateBall(hwnd); //Ball neu zeichnen
                      break;
                case VK_UP:
                      yball -= dy;
                      UpdateBall(hwnd); //Ball neu zeichnen
                      break;
                case VK_DOWN:
                      yball += dy;
                      UpdateBall(hwnd); //Ball neu zeichnen
                     break;
                     
                     case VK_SPACE:
                      shootBomb(hwnd); //Bombe werfen
                      break;
             }
        }
        
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}
 
Werbung:
Code:
void shootBomb(HWND hwnd)
{
   hdc = GetDC(hwnd);
   int i=0;
   RECT rcClient;
   GetClientRect(hwnd, &rcClient);
   while(yball+r2+i<rcClient.bottom)  //solange der Boden nicht erreicht wurde
   {
     doubleBuffering(hwnd, hdc);
     Ellipse(hdc, xball-r2, yball-r2+i, xball+r2, yball+r2+i); //r2 = radius der Bombe
     _sleep(10);
     i+=10;
   }
[COLOR=darkred][B]}[/B][/COLOR] //hat gefehlt
void UpdateBall(HWND hwnd)

syntax error at end of input - Dieser Fehler kann bedeuten, dass du iwo vergessen hast, eine geschweifte Klammer zu schließen
 
Zuletzt bearbeitet:
Code:
#include <windows.h>
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

//globale Variablen
char szClassName[ ] = "WindowsApp";
HDC hdc;

int xmax, ymax; 
int xball, yball;
int r =15;
int dx=5;
int dy=5;
int r2;

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
{
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
/*Wenn was schief gelaufen ist, Fehlermeldung*/
    if (!RegisterClassEx (&wincl))
    {
        MessageBox(NULL, "Window Registration Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    hwnd = CreateWindowEx (
           0,
           szClassName,
           "Windows App",
           WS_OVERLAPPEDWINDOW,
           CW_USEDEFAULT,
           CW_USEDEFAULT,
           544,
           375,
           HWND_DESKTOP,
           NULL,
           hThisInstance,
           NULL
           );
/* Wenn was schief gelaufen Fehlermeldung */
    if(hwnd == NULL)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }
    ShowWindow (hwnd, nFunsterStil); //Fenster zeigen
    UpdateWindow(hwnd);
/*Message Loop*/
    while (GetMessage (&messages, NULL, 0, 0) > 0)
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }
}
/* window procedur */
void shootBomb(HWND hwnd)
{
   hdc = GetDC(hwnd);
   int i=0;
   RECT rcClient;
   GetClientRect(hwnd, &rcClient);
   while(yball+r2+i<rcClient.bottom)  //solange der Boden nicht erreicht wurde
   {
     doubleBuffering(hwnd, hdc);
     Ellipse(hdc, xball-r2, yball-r2+i, xball+r2, yball+r2+i); //r2 = radius der Bombe
     _sleep(10);
     i+=10;
   }
} 

void UpdateBall(HWND hwnd)
{
   hdc = GetDC(hwnd);
   doubleBuffering(hwnd,hdc);
   Ellipse(hdc, xball-r, yball-r, xball+r, yball+r);
}
void doubleBuffering(HWND hwnd, HDC hdc)
{
   RECT rcClient;
   GetClientRect(hwnd, &rcClient); //Fenstergeometrie von hwnd
   HDC hdcBuffer;
   HBITMAP hbmBuffer, hbmOldBuffer;  //Buffer
   hdcBuffer = CreateCompatibleDC(hdc);
   hbmBuffer = CreateCompatibleBitmap(hdc, rcClient.right, rcClient.bottom);  //Bitmap erstellen
   hbmOldBuffer = SelectObject(hdcBuffer, hbmBuffer);
   FillRect(hdcBuffer, &rcClient, CreateSolidBrush(RGB(255,0,0)));  //mit rgb-Farbe füllen
   BitBlt(hdc, 0, 0, rcClient.right, rcClient.bottom, hdcBuffer, 0, 0, SRCCOPY); //Buffer zeichnen
}
void shootBomb(HWND);
void UpdateBall(HWND);
void doubleBuffering(HWND, HDC);
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_CLOSE:      //Beim schließen des Fensters
            DestroyWindow(hwnd);
            break;
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
            
        case WM_KEYDOWN:  //bei Tastendruck
        {
             switch(wParam)
             {
                case VK_LEFT:
                      xball-=dx;
                      UpdateBall(hwnd); //Ball neu zeichnen
                      
                      break;
                case VK_RIGHT:
                      xball +=dx;
                      UpdateBall(hwnd); //Ball neu zeichnen
                      break;
                case VK_UP:
                      yball -= dy;
                      UpdateBall(hwnd); //Ball neu zeichnen
                      break;
                case VK_DOWN:
                      yball += dy;
                      UpdateBall(hwnd); //Ball neu zeichnen
                     break;
                     
                     case VK_SPACE:
                      shootBomb(hwnd); //Bombe werfen
                      break;
             }
        }
        
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}

hmm ^^ was ist nu falsch `?? er sagt immernoch : confligting types for doublebuffering
und : previus implicit dclaration ...
 
Die Prototypen müssen vor der initialiserung deklariert werden (am besten gleich vor die Variablen int "xmax, ymax; int xball, yball;" etc)
 
Werbung:
Zurück
Oben