VC++实现贪吃蛇的实验报告文档格式.docx
- 文档编号:13441483
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:17
- 大小:106.14KB
VC++实现贪吃蛇的实验报告文档格式.docx
《VC++实现贪吃蛇的实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《VC++实现贪吃蛇的实验报告文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
{
intx;
//蛇每个节点的横纵坐标
inty;
}SnakeNode;
typedefstructSnake//定义蛇的身体
SnakeNodedata[100];
//用数组来表示蛇身体的每一节
intcurr;
//移动指向蛇的每一节并统计蛇的长度
}Snake;
typedefstructfood//定义食物结构体
//食物的横坐标
//食物的纵坐标
}SnakeFood;
Snakesnake;
SnakeFoodfood;
intx,y;
//定义横纵坐标
intdirect;
//定义方向变量
intnGameState;
//定义游戏的状态
intscore;
//定义分数变量
intspeed;
//定义速度变量
intd;
//该变量用于控制蛇身不能后退
voidInitSnake(Snake*snake);
//初始化蛇
voidMoveSnake(Snake*snake);
//蛇的移动
voidAddSnake(Snake*snake);
//增加蛇的身体长度
voidDrawSnake(CDC*pDC,Snakesnake);
//绘制蛇
voidUnDrawSnake(Snakesnake);
//绘制蛇的显示框
voidDrawFood(CDC*pDC,SnakeFoodf);
//绘制食物
intGameOver();
//游戏结束
//完成与对话框的数据交互
voidCSnakeDlg:
:
DoDataExchange(CDataExchange*pDX)
CDialog:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSnakeDlg)
//NOTE:
theClassWizardwilladdDDXandDDVcallshere
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSnakeDlg,CDialog)
//{{AFX_MSG_MAP(CSnakeDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(IDM_HELP_ABOUT,OnHelpAbout)
ON_WM_TIMER()
ON_COMMAND(IDM_GAME_START,OnGameStart)
ON_WM_KEYDOWN()
ON_COMMAND(IDM_GAME_PAUSE_START,OnGamePauseStart)
ON_COMMAND(IDM_GAME_EXIT,OnGameExit)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CSnakeDlgmessagehandlers
voidCSnakeDlg:
OnGameStart()//游戏开始函数
//TODO:
Addyourcommandhandlercodehere
SetTimer(1,speed,NULL);
//SetTimer一种API函数,定时器
InitSnake(&
snake);
nGameState=1;
//游戏开始时为1
OnGamePauseStart()//游戏暂停函数
CDC*pDC=GetDC();
if(nGameState==0)
{
if(!
GameOver())
{
SetTimer(1,speed,NULL);
nGameState=1;
}
}
else
{
KillTimer
(1);
nGameState=0;
pDC->
TextOut(70,130,"
Pause!
!
"
);
OnGameExit()//游戏退出函数
AfxGetMainWnd()->
SendMessage(WM_CLOSE);
//处理键盘按键消息
OnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags)
Addyourmessagehandlercodehereand/orcalldefault
switch(nChar)
case'
D'
if(direct!
=2&
&
d!
=2)
direct=0;
break;
S'
=3&
=3)
direct=1;
A'
=0&
=0)
direct=2;
W'
=1&
=1)
direct=3;
if(nChar==VK_SPACE)
if(nGameState==0)
if(!
{
SetTimer(1,speed,NULL);
nGameState=1;
}
else
KillTimer
(1);
nGameState=0;
OnKeyDown(nChar,nRepCnt,nFlags);
OnPaint()//游戏界面的显示函数
if(IsIconic())
CPaintDCdc(this);
//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics(SM_CXICON);
//获取系统分辨率
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&
rect);
//获取窗口客户区的大小
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
CDialog:
OnPaint();
CDC*pDC=GetDC();
SetBkColor(RGB(50,230,100));
//设置游戏提示字体背景颜色
TextOut(220,30,"
得分:
0"
TextOut(260,80,"
上:
W"
TextOut(300,110,"
下:
S"
TextOut(340,140,"
左:
A"
TextOut(380,170,"
右:
D"
TextOut(420,210,"
空格暂停"
//pDC->
Rectangle(10,10,210,320);
UnDrawSnake(pDC,snake);
DrawSnake(pDC,snake);
voidAddSnake(Snake*snake)//增加蛇身长度函数(在MoveSnake()函数中调用)
intt=1,tx,ty,xx,yy;
if(snake->
curr<
100)snake->
curr++;
//控制长度蛇身长度小于100
xx=snake->
data[0].x;
//xx,yy记录蛇头坐标
yy=snake->
data[0].y;
do
tx=snake->
data[t].x;
//tx,ty记录蛇身第一节坐标
ty=snake->
data[t].y;
snake->
data[t].x=xx;
//蛇头坐标赋给蛇身第一节
data[t].y=yy;
xx=tx;
//将蛇身第一节坐标赋给新的蛇头
yy=ty;
t++;
//蛇增加一节
}while(t<
snake->
curr);
voidDrawFood(CDC*pDC,SnakeFoodf)//绘制食物函数
CStringss;
ss.Format("
%d"
score);
TextOut(220,30,ss);
Rectangle(f.x*10+11,f.y*10+11,f.x*10+18,f.y*10+18);
voidDrawSnake(CDC*pDC,Snakesnake)//绘制蛇函数
intt;
t=snake.curr-1;
SelectStockObject(BLACK_BRUSH);
SelectStockObject(BLACK_PEN);
Rectangle(snake.data[t].x*10+11,snake.data[t].y*10+11,snake.data[t].x*10+18,snake.data[t].y*10+18);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 实现 贪吃 实验 报告