飞机大战c++语言源代码,C++编写简易的飞机大战

初学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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值