初学C/C++的小伙伴可以用做这个小游戏来熟悉一下编程的乐趣。
#include
#include"resource.h"
#include
#include
#include
#define TIMER_DIREN 101 //定义定时器
#define TIMER_DIRENMOVE 102
#define TIMER_ZIDAN 103
#define TIMER_DIRENRELEASE 104
typedef struct Node //敌人,自己,子弹结构体
{
int x;
int y;
struct Node *pnext;
}DiRen,FeiJi,ZiDan;
void ZaoDiRen(); //造敌人
void ShowDiRen(DiRen *pHead,HWND hWnd); //显示敌人
void ZaoZiDan(); //造子弹
void ShowZiDan(ZiDan *pHead,HWND hWnd); //显示子弹
void DiRenMove(DiRen *pHead); //敌人移动
void ZiDanMove(DiRen *pHead); //子弹移动
void shoot(HWND hWnd,FeiJi *ziji,DiRen **diren,ZiDan **zidan);//判断是否射中
void ReleaseDiren(DiRen **pHead); //释放出去的敌人
void ReleaseZidan(ZiDan **pHead); //释放出去的子弹
void ZaoZiJi(HWND hWnd); //造自己
LRESULT CALLBACK pp(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);//回调函数
int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASSEX wc;
HWND hWnd;
MSG msg;
wc.hInstance=hInstance;
wc.cbClsExtra=0;
wc.cbSize=sizeof(WNDCLASSEX);
wc.cbWndExtra=0;
wc.hIcon=NULL ;
wc.hCursor=NULL ;
wc.hIconSm=NULL;
wc.lpfnWndProc=pp;
wc.lpszClassName="hello";
wc.lpszMenuName=NULL;
wc.style=CS_HREDRAW|CS_VREDRAW | CS_OWNDC ;
wc.hbrBackground=(HBRUSH)5;
RegisterClassEx(&wc);
hWnd=CreateWindow("hello","world", WS_OVERLAPPEDWINDOW,100,100,600,600,NULL,NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
DiRen *pDiRen=NULL; //敌人
ZiDan *pZiDan=NULL; //子弹
FeiJi *pZiJi=NULL; //自己
static int score=0; //分数
static char sco[20]; //装分数的字符窜
LRESULT CALLBACK pp(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
int i=1, //位
jscore;
HDC hdc;
HDC memdc;
HBITMAP hbm;
BITMAP bminfo;
switch(msg)
{
case WM_TIMER: //定时器
hdc=GetDC(hWnd); //得到设备句柄
hbm=LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP4));//载入背景位图
GetObject(hbm, sizeof(bminfo), &bminfo);
memdc=CreateCompatibleDC(hdc);
SelectObject(memdc,hbm);
BitBlt(hdc,0,0,600,600,memdc,0,0,SRCCOPY);
/*itoa(score,sco,10);*/
sprintf(sco,"%d",score); //将分数装入字符窜
jscore=score;
while((jscore=jscore/10)>0) //判断分数有几位
i++;
TextOut(hdc,0,0,"分数",4);
TextOut(hdc,30,0,sco,i); //显示分数
DeleteDC(memdc);
ReleaseDC(hWnd,hdc); //释放句柄
DeleteObject(hbm);
ZaoZiJi(hWnd); //造自己
if(TIMER_ZIDAN==wParam) //定时器101
{
ZiDanMove(pZiDan); //子弹移动
ReleaseZidan(&pZiDan); //释放出屏幕的子弹
}
else if( TIMER_DIREN==wParam) //定时器102
{
ZaoDiRen(); //造敌人
}
else if(TIMER_DIRENRELEASE==wParam) //定时器103
{
ReleaseDiren(&pDiRen); //释放出屏幕的敌人
}
ShowDiRen(pDiRen,hWnd); //显示敌人
DiRenMove(pDiRen); //敌人移动
ShowZiDan(pZiDan,hWnd); //显示子弹
shoot