【求助】MFC贪吃蛇小游戏问题!

wh921030 2014-12-18 09:32:25

之前在论坛上下载了一个贪吃蛇的代码,想在此基础上做一些修改,我想在游戏界面添加一个静态文本控件,然后在游戏时通过蛇吃食物的数量,控件中的等级从1级逐渐自动增加,请问怎么实现?或者我不添加控件,直接在不影响游戏体验的同时,让等级数字,在界面的某个位置显示。谢谢拉!
void CSnakeView::OnTimer(UINT nIDEvent) 
{
// TODO: Add your message handler code here and/or call default
CDC *pDC=GetDC();
CString soure;
/*//////////////////////////加速////////////////////////////*/
/*////////*/if(snake[0].l==2)SetTimer(1,370,NULL);/*////////*/
/*////////*/if(snake[0].l==3)SetTimer(1,270,NULL);/*////////*/
/*////////*/if(snake[0].l==6)SetTimer(1,200,NULL);/*////////*/
/*////////*/if(snake[0].l==9)SetTimer(1,100,NULL);/*////////*/
/*/////////////////////////加速/////////////////////////////*/
soure.Format("真可惜,你得到了:%d分!",(snake[0].l-3)*10);
///////////////////////判断是否撞边界/////////////////////////////////////
if(snake[0].x*20<=37||snake[0].y*20<=37||snake[0].x*20>=462||snake[0].y*20>=462)
{
KillTimer(1);
AfxMessageBox(soure);
s=0;
}
////////////////////////////判断撞蛇身////////////////////////////////////
if(snake[0].l>3)
for(int sn=snake[0].l-1;sn>0;sn--)
{
if(snake[0].x*20==snake[sn].x*20&&snake[0].y*20==snake[sn].y*20)
{
KillTimer(1);
AfxMessageBox(soure);
s=0;
}
}
///////////////////////////////////////////////////////////////////////////
pDC->SelectStockObject(WHITE_PEN);
pDC->Rectangle(snake[snake[0].l-1].x*20,snake[snake[0].l-1].y*20,(snake[snake[0].l-1].x+1)*20,(snake[snake[0].l-1].y+1)*20);
for(int i=snake[0].l-1;i>0;i--)
{
snake[i].x=snake[i-1].x;
snake[i].y=snake[i-1].y;
}
//////////得到行走方向/////////////////
if(snake[0].r==1)snake[0].y--;
if(snake[0].r==2)snake[0].y++;
if(snake[0].r==3)snake[0].x--;
if(snake[0].r==4)snake[0].x++;
pDC->SelectStockObject(BLACK_PEN);

CBrush DrawBrush=(RGB(255,0,0));
CBrush *Drawbrush=pDC->SelectObject(&DrawBrush);
pDC->Rectangle(snake[0].x*20,snake[0].y*20,(snake[0].x+1)*20,(snake[0].y+1)*20);
pDC->SelectObject(DrawBrush);
////////////判断吃豆,如果碰撞则吃豆///////////////////
if(snake[0].x*20==food.x*20&&snake[0].y*20==food.y*20)
{
snake[0].l++;
food.isfood=1;
snake[snake[0].l-1].x=snake[snake[0].l-2].x;
snake[snake[0].l-1].y=snake[snake[0].l-2].y;
}
///////////////如果"豆"被吃掉则重新生成///////////////////
if(food.isfood==1)
{
srand((unsigned)time(NULL));
do
{
for(int isfo=snake[0].l-1;isfo>=0;isfo--)
if(snake[0].x*20==snake[isfo].x*20&&snake[0].y*20==snake[isfo].y*20)
{
food.x=rand()%25;
food.y=rand()%25;
}
}while(food.x*20<70||food.y*20<70||food.x*20>430||food.y*20>430);
pDC->Rectangle(food.x*20,food.y*20,(food.x+1)*20,(food.y+1)*20);
food.isfood=0;
}
CView::OnTimer(nIDEvent);
}
...全文
242 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hlx_beat 2015-01-14
  • 打赏
  • 举报
回复
表扬!贡献了GDP
赵4老师 2014-12-23
  • 打赏
  • 举报
回复
引用 2 楼 wh921030 的回复:
[quote=引用 1 楼 zhao4zhong1 的回复:] 应在OnPaint而不是OnTimer中绘图。 参考MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1~7\*.*
参考MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1~7\*.*是啥意思[/quote] 搜索下载安装MSDN98,然后找到目录……\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1~7\
wh921030 2014-12-23
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
或者可以搜“贪吃蛇 VC源代码”,然后下载学习一下前人是怎么编写的。
帮帮我吧,本身对C++不感兴趣,但要完成期末课程设计,无奈...
赵4老师 2014-12-23
  • 打赏
  • 举报
回复
或者可以搜“贪吃蛇 VC源代码”,然后下载学习一下前人是怎么编写的。
赵4老师 2014-12-23
  • 打赏
  • 举报
回复
引用 4 楼 wh921030 的回复:
[quote=引用 3 楼 zhao4zhong1 的回复:] [quote=引用 2 楼 wh921030 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:] 应在OnPaint而不是OnTimer中绘图。 参考MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1~7\*.*
参考MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1~7\*.*是啥意思[/quote] 搜索下载安装MSDN98,然后找到目录……\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1~7\[/quote] 我没用你的方法,我重新做了一遍,在创建工程的时候,选择CFromView做基类可以实现添加控件,但出现了一个新的问题就是,添加任意控件,运行游戏时,方向键控制蛇的转向了 是怎么回事啊? [/quote] 与其临渊羡鱼,不如退而结网。
wh921030 2014-12-23
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
[quote=引用 2 楼 wh921030 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:] 应在OnPaint而不是OnTimer中绘图。 参考MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1~7\*.*
参考MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1~7\*.*是啥意思[/quote] 搜索下载安装MSDN98,然后找到目录……\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1~7\[/quote] 我没用你的方法,我重新做了一遍,在创建工程的时候,选择CFromView做基类可以实现添加控件,但出现了一个新的问题就是,添加任意控件,运行游戏时,方向键控制蛇的转向了 是怎么回事啊?
wh921030 2014-12-22
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
应在OnPaint而不是OnTimer中绘图。 参考MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1~7\*.*
参考MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1~7\*.*是啥意思
赵4老师 2014-12-18
  • 打赏
  • 举报
回复
应在OnPaint而不是OnTimer中绘图。 参考MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1~7\*.*

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧