Gradually changed for half a month, and constantly change the purpose of the game, combined with the mouse maze and snake game, finally in yesterday 2 o'clock in the morning wrote my bomb Superman game. Based on the Windows graphical interface, written in C language. It's not complicated, but it's very rewarding.
document 1:WINAPP.CPP, guide the teacher to give the framework and write their own main function:
#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
#include "Winapp.h"
#include "myfile.h"
int WINAPI WinMain (hinstance hinstance, hinstance hprevinstance,pstr szcmdline, int icmdshow)
{
Static TCHAR szappname[] = TEXT ("Windows application design--the Maze");
MSG msg;
Wndclass Wndclass;
Wndclass.style = Cs_hredraw | Cs_vredraw;
Wndclass.lpfnwndproc = WndProc;
Wndclass.cbclsextra = 0;
Wndclass.cbwndextra = 0;
Wndclass.hinstance = hinstance;
Wndclass.hicon = LoadIcon (NULL, idi_application);
Wndclass.hcursor = LoadCursor (NULL, Idc_arrow);
Wndclass.hbrbackground = (hbrush) getstockobject (White_brush);
Wndclass.lpszmenuname = NULL;
Wndclass.lpszclassname = Szappname;
if (! RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows nt!"), Szappname, Mb_iconerror);
return 0;
}
hwnd = CreateWindow (szappname,//window class name
TEXT ("Windows application design--the Maze"),//Window caption
Ws_overlappedwindow,//Window style
Cw_usedefault,//initial X position
Cw_usedefault,//initial y position
//cw_usedefault,//initial x size
//cw_usedefault,//Initial y size
NULL,//parent window Handle
NULL,//Window menu handle
HINSTANCE,//program instance handle
NULL); Creation parameters
ShowWindow (hwnd, icmdshow);
UpdateWindow (HWND);
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&MSG);
DispatchMessage (&MSG);
}
return msg.wparam;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM WPARAM, LPARAM LPARAM)
{
DrawRectangle (38*width,3*width,39*width,8*width,weakwall); Context
DrawRectangle (36*width,5*width,41*width,6*width,weakwall); Around
DrawRectangle (38*width,5*width,39*width,6*width,boom);
Printtext (800,400, "Bomb man!!!");
Printtext (800,450, "Come on baby!!!");
Printtext (1100,355, "へ/|");
Printtext (1100,375, "/\∠_/");
Printtext (1100,395, "/│//");
Printtext (1100,415, "│_,<//' 's finger licking");
Printtext (1100,435, "│ヽ/〉");
Printtext (1100,455, "\ \"//");
Printtext (1100,475, "| |〈/");
Printtext (1100,495, "() へ|\〈");
Printtext (1100,505, "> _ィ│//");
Printtext (1100,525, "/へ/<|\\");
Printtext (1100,545, "ヽ_| (_/│//");
Printtext (1100,565, "| |/");
Printtext (1100,585, ">―- ̄ ̄//―_");
if (yes==1)
{
Printtext (800,300, "~o (∩_∩) o~");
Printtext (800,350, "you won!!!");
return 0;
}
Char s[100];
Switch (message)
{
Case WM_KEYDOWN://Keyboard message
{
Keyboard Message processing content
switch ((int) wParam)
{
Case VK_UP://Up ↑
Up ();
Break
Case Vk_down://Down ↓
Down ();
Break
Case Vk_left://Left ←
Left ();
Break
Case Vk_right://Right →
Right ();
Break
Case Vk_return://Enter
Initgame ();
Break
Case Vk_space://Space put bombs
BACKSPACE ();
Break
Case Vk_escape://esc
Boomboom ();
Break
}
}
Break
}
Return DefWindowProc (HWND, message, WParam, LParam);
}
file 2:myfile.h, the program you wrote:
#include <time.h>
#include <stdlib.h>
#define ROAD RGB (200,200,200)//light gray
#define Weakwall RGB (255,174,200)//False wall
#define MOUSE RGB (255,100,168)//pink
#define BOOM RGB (0,0,0)//Bombs
#define WALL RGB (50,50,50)//dark grey
#define Fire RGB (225,0,0)//red
#define Yeah RGB (255,225,128)//yellow
#define Food RGB (50,50,225)//blue
#define UP 40
#define DOWN 41
#define LEFT 42
#define RIGHT 43
#define X0 0
#define Y0 0
#define WIDTH 30
int xnum=21;
int ynum=21;
int boomx1,boomy1,boomx2,boomy2;
int a[30][30]={
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1},
{1,0,1,0,1,2,1,0,1,0,1,0,1,2,1,0,1,0,1,0,1},
{1,0,0,0,0,0,0,0,0,2,0,2,0,2,0,0,0,0,2,0,1},
{1,0,1,0,1,0,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1},
{1,0,0,0,0,2,0,2,2,0,0,2,0,0,2,2,0,2,0,0,1},
{1,0,1,2,1,0,1,0,1,2,1,2,1,2,1,0,1,2,1,2,1},
{1,0,2,0,0,0,0,2,0,0,2,2,0,2,0,0,2,0,0,2,1},
{1,0,1,2,1,2,1,2,1,0,1,0,1,0,1,0,1,0,1,2,1},
{1,0,2,0,2,2,0,2,0,0,2,2,0,2,0,0,0,0,0,0,1},
{1,2,1,0,1,2,1,2,1,0,1,2,1,0,1,0,1,0,1,0,1},
{1,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,2,1,2,1,0,1,0,1,0,1,2,1,0,1,0,1,0,1,2,1},
{1,0,0,2,0,0,0,0,0,2,0,2,0,0,0,0,2,0,0,0,1},
{1,0,1,0,1,0,1,0,1,0,1,0,1,2,1,2,1,2,1,0,1},
{1,2,0,0,0,0,2,2,0,0,2,0,2,0,0,0,2,0,0,0,1},
{1,0,1,0,1,0,1,2,1,0,1,0,1,0,1,0,1,2,1,0,1},
{1,0,0,0,2,0,0,0,2,2,2,2,0,0,2,2,2,0,2,0,1},
{1,0,1,0,1,0,1,2,1,2,1,0,1,0,1,0,1,0,1,0,1},
{1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
};
int Mousex,mousey;
int foodx,foody;
int q,w,e,r;
int flag=0;
int yes=0;
int sum=0;
void Initgame ()
{
for (int x=0;x<xnum;x++)
for (int y=0;y<ynum;y++)
{
if (a[x][y]==1)
DrawRectangle (X*width,y*width, (x+1) *width, (y+1) *width,wall);
else if (a[x][y]==0)
DrawRectangle (X*width,y*width, (x+1) *width, (y+1) *width,road);
Else
DrawRectangle (X*width,y*width, (x+1) *width, (y+1) *width,weakwall);
}
Mousex=1,mousey=1;
DrawRectangle (x0+mousex*width,y0+mousey*width,x0+ (mousex+1) *width,y0+ (mousey+1) *width,mouse);
DrawRectangle (19*width,19*width,20*width,20*width,yeah);
}
void Right ()
{
if (a[mousex+1][mousey]==0)
{
if (flag==1)
DrawRectangle (Mousex*width,mousey*width, (mousex+1) *width, (mousey+1) *width,boom);
Else
DrawRectangle (Mousex*width,mousey*width, (mousex+1) *width, (mousey+1) *width,road);
mousex++;
DrawRectangle (x0+mousex*width,y0+mousey*width,x0+ (mousex+1) *width,y0+ (mousey+1) *width,mouse);
}
flag=0;
if (mousex==19&&mousey==19)
Yes=1;
}
void Left ()
{
if (a[mousex-1][mousey]==0)
{
if (flag==1)
DrawRectangle (Mousex*width,mousey*width, (mousex+1) *width, (mousey+1) *width,boom);
Else
DrawRectangle (Mousex*width,mousey*width, (mousex+1) *width, (mousey+1) *width,road);
mousex--;
DrawRectangle (x0+mousex*width,y0+mousey*width,x0+ (mousex+1) *width,y0+ (mousey+1) *width,mouse);
}
flag=0;
if (mousex==19&&mousey==19)
Yes=1;
}
void Up ()
{
if (a[mousex][mousey-1]==0)
{
if (flag==1)
DrawRectangle (Mousex*width,mousey*width, (mousex+1) *width, (mousey+1) *width,boom);
Else
DrawRectangle (Mousex*width,mousey*width, (mousex+1) *width, (mousey+1) *width,road);
mousey--;
DrawRectangle (x0+mousex*width,y0+mousey*width,x0+ (mousex+1) *width,y0+ (mousey+1) *width,mouse);
}
flag=0;
if (mousex==19&&mousey==19)
Yes=1;
}
void Down ()
{
if (a[mousex][mousey+1]==0)
{
if (flag==1)
DrawRectangle (Mousex*width,mousey*width, (mousex+1) *width, (mousey+1) *width,boom);
Else
DrawRectangle (Mousex*width,mousey*width, (mousex+1) *width, (mousey+1) *width,road);
mousey++;
DrawRectangle (x0+mousex*width,y0+mousey*width,x0+ (mousex+1) *width,y0+ (mousey+1) *width,mouse);
}
flag=0;
if (mousex==19&&mousey==19)
Yes=1;
}
void Backspace ()
{
Boomx1=mousex*width;
Boomy1=mousey*width;
Boomx2= (mousex+1) *width;
Boomy2= (mousey+1) *width;
q=mousex;w=mousey;e=mousex+1;r=mousey+1;
DrawRectangle (Boomx1,boomy1,boomx2,boomy2,boom);
flag=1;
}
void Boomboom ()
{
int i,j;
DrawRectangle (Boomx1,boomy1,boomx2,boomy2,road);
DrawRectangle (Boomx1,boomy1-2*width,boomx2,boomy1,road); On
if (boomy1+width<=19)
DrawRectangle (boomx1,boomy1+width,boomx2,boomy2+width,road);//Lower
if (boomy1+2*width<=20)
DrawRectangle (boomx1,boomy1+2*width,boomx2,boomy2+2*width,road);//Lower
DrawRectangle (boomx1-2*width,boomy1,boomx1,boomy2,road);//Left
if (boomx1+width<=19)//Right
DrawRectangle (Boomx1+width,boomy1,boomx2+width,boomy2,road);
if (boomx1+2*width<=20)//Right
DrawRectangle (Boomx1+2*width,boomy1,boomx2+2*width,boomy2,road);
a[(BOOMX1)/width][boomy1/width]=a[boomx1/width][(boomy1-2*width)/width]=a[boomx1/width][(Boomy1-WIDTH)/WIDTH ]=a[boomx1/width][(boomy1+width)/width]=a[boomx1/width][(boomy1+2*width)/width]=a[(Boomx1-WIDTH)/WIDTH][boomy1 /width]=a[(boomx1-2*width)/width][boomy1/width]=a[(boomx1+width)/width][boomy1/width]=a[(Boomx1+2*WIDTH)/WIDTH ][boomy1/width]=0;
for (i=mousex-2;i<=mousex+3;i++)
for (j=mousey-2;j<=mousey+3;j++)
/*if ((MouseX >= 2) && a[mousex-2][mousey]!=1)
a[mousex-2][mousey]=0;
Else
DrawRectangle ((mousex-2) *width, (Mousey) *width, (mousex-2+1) *width, (mousey+1) *width,wall);
if ((MouseX >= 1) && a[mousex-1][mousey]!=1)
a[mousex-1][mousey]=0;
Else
DrawRectangle ((mousex-1) *width, (Mousey) *width, (mousex-1+1) *width, (mousey+1) *width,wall);
if ((mousex+1<=20) && a[mousex+1][mousey]!=1)
a[mousex+1][mousey]=0;
Else
DrawRectangle ((mousex+1) *width, (Mousey) *width, (mousex+1+1) *width, (mousey+1) *width,wall);
if ((mousex+2<=20) &&a[mousex+2][mousey]!=1)
a[mousex+2][mousey]=0;
Else
DrawRectangle ((mousex+2) *width, (Mousey) *width, (mousex+2+1) *width, (mousey+1) *width,wall);
if ((Mousey >= 2) && a[mousex][mousey-2]!=1)
a[mousex][mousey-2]=0;
Else
DrawRectangle ((MouseX) *width, (mousey-2) *width, (mousex+1) *width, (mousey-2+1) *width,wall);
if ((Mousey >= 1) && a[mousex][mousey-1]!=1)
a[mousex][mousey-1]=0;
Else
DrawRectangle ((MouseX) *width, (mousey-1) *width, (mousex+1) *width, (mousey-1+1) *width,wall);
if ((mousey+1<=20) &&a[mousex][mousey+1]!=1)
a[mousex][mousey+1]=0;
Else
DrawRectangle ((MouseX) *width, (mousey+1) *width, (mousex+1) *width, (mousey+1+1) *width,wall);
if ((mousey+2<=20) &&a[mousex][mousey+2]!=1)
a[mousex][mousey+2]=0;
Else
DrawRectangle ((MouseX) *width, (mousey+2) *width, (mousex+1) *width, (mousey+2+1) *width,wall); * *
if ((q >= 2) && a[q-2][w]!=1)
a[q-2][w]=0;
Else
DrawRectangle ((q-2) *width, (W) *width, (q-2+1) *width, (w+1) *width,wall);
if ((q >= 1) && a[q-1][w]!=1)
a[q-1][w]=0;
Else
DrawRectangle ((q-1) *width, (W) *width, (q-1+1) *width, (w+1) *width,wall);
if (a[q+1][w]!=1)
a[q+1][w]=0;
Else
DrawRectangle ((q+1) *width, (W) *width, (q+1+1) *width, (w+1) *width,wall);
if (a[q+2][w]!=1)
a[q+2][w]=0;
Else
DrawRectangle ((q+2) *width, (W) *width, (q+2+1) *width, (w+1) *width,wall);
if ((w >= 2) && a[q][w-2]!=1)
a[q][w-2]=0;
Else
DrawRectangle ((q) *width, (w-2) *width, (q+1) *width, (w-2+1) *width,wall);
if ((w >= 1) && a[q][w-1]!=1)
a[q][w-1]=0;
Else
DrawRectangle ((q) *width, (w-1) *width, (q+1) *width, (w-1+1) *width,wall);
if (a[q][w+1]!=1)
a[q][w+1]=0;
Else
DrawRectangle ((q) *width, (w+1) *width, (q+1) *width, (w+1+1) *width,wall);
if (a[q][w+2]!=1)
a[q][w+2]=0;
Else
DrawRectangle ((q) *width, (w+2) *width, (q+1) *width, (w+2+1) *width,wall);
The outer wall, the dead wall, himself, the food
for (int x=0;x<xnum;x++)
for (int y=0;y<ynum;y++)
{
if (A[x][y]==1&&x!=mousex&&y!=mousey)
DrawRectangle (X*width,y*width, (x+1) *width, (y+1) *width,wall);
else if (A[x][y]==0&&x!=mousex&&y!=mousey)
DrawRectangle (X*width,y*width, (x+1) *width, (y+1) *width,road);
}
DrawRectangle (x0+19*width,y0+19*width,x0+ (19+1) *width,y0+ (19+1) *width,yeah);
Flag = 0;
}
file 3: Some functions under the Windows graphical interface (teacher-given framework):
#include <stdio.h>
HWND hwnd;
Set Timer interval
Speed is milliseconds
void setspeed (int movespeed)
{
SetTimer (hwnd,1, Movespeed, NULL);
}
Pause Timer
void Stoptimer ()
{
KillTimer (hwnd,1);
}
Specify location output string
void Printtext (int x,int Y,char s[])
{
HDC hdc;
HDC=GETDC (HWND);
TextOut (Hdc,x,y,s,strlen (s));
ReleaseDC (hwnd, HDC);
}
Specify the position output integer number
void Printnumber (int x,int y, int z)
{
Char str[100];
sprintf (str, "%d", z);
Printtext (X,Y,STR);
}
Specify position output real number
void Printnumber (int x,int y, double z)
{
Char str[100];
sprintf (str, "%f", z);
Printtext (X,Y,STR);
}
Output Fractions and ratings
void PrintTitle (int score,int level)
{
Char str[100];
sprintf (str, "Current score%5d", score);
Printtext (200,20,STR);
sprintf (str, "Rank%5d", level);
Printtext (200,50,STR);
}
Draw a rectangle with a vertex (x1,y1), (x2,y2), color
void DrawRectangle (int x1,int y1,int x2,int y2,int color)
{
HDC hdc;
HDC=GETDC (HWND);
Hbrush Hbrush;
Rect rect;
Point A[4];
A[0].x=x1,a[0].y=y1;
A[1].x=x2,a[1].y=y1;
A[2].x=x2,a[2].y=y2;
A[3].x=x1,a[3].y=y2;
A[4].x=x1,a[4].y=y1;
SetRect (&RECT,X1,Y1,X2,Y2);
Hbrush = CreateSolidBrush (color);
FillRect (hdc, &rect, hbrush); Fill Rectangle
SelectObject (hdc, Getstockobject (Black_pen));
Polyline (HDC, A, 5); Draw Border
ReleaseDC (hwnd, HDC);
DeleteObject (Hbrush);
}
void DrawImage (int x0, int y0, int x1, int y1, char *szimagefile)
{
int wid, HEI;
int i;
WID = x1-x0 + 1;
HEI = y1-y0 + 1;
HDC HDC =:: GetDC (HWND);
for (i = 0; i < 5; i++)
{
HANDLE h =:: LoadImage (0, Szimagefile, Image_bitmap, WID, Hei, lr_shared | Lr_loadfromfile);
Size size;
:: Getbitmapdimensionex ((HBITMAP) H, &size);//Issue: Original size not read successfully
HDC Hdcmem =:: CreateCompatibleDC (HDC);
:: SelectObject (Hdcmem, h);
:: BitBlt (hdc, x0, y0, wid, Hei, Hdcmem, 0, 0, srccopy);
WID/= 2;
Hei/= 2;
x0 + = wid * 2 + 10;
}
}
C language write bomb man games