贪吃蛇 食物无法绘制 哪位朋友帮忙看看

up1325 2011-10-24 04:26:05
BOOL FoodCreate()
{

static int j,i;
RECT Rect;
if(Food==FALSE)
{j=rand()%20;
i=rand()%20;}
Rect.left=j*30;
Rect.top=i*30;
Rect.right=(j+1)*30;
Rect.bottom=(i+1)*30;
HDC hdc;
PAINTSTRUCT ps; //定义指向包含绘图信息的结构体变量
HBRUSH hBrush; //定义指向画刷的句柄
HPEN hPen; //定义指向画笔的句柄

hdc=BeginPaint(hWndMain,&ps); //开始绘图
hPen=(HPEN)GetStockObject(NULL_PEN); //获取系统定义的空画笔
SelectObject(hdc,hPen);
hBrush=CreateSolidBrush(RGB(255,0,0)); //创建画刷
SelectObject(hdc,hBrush); //选择画刷
Rectangle(hdc,j*30,i*30,(j+1)*30,(i+1)*30);


DeleteObject(hBrush); //删除画刷
DeleteObject(hPen); //删除画笔
EndPaint(hWndMain,&ps); //结束绘图
Food=TRUE;
InvalidateRect(hWndMain,NULL,TRUE);
// PostMessage(hWndMain,WM_PAINT,NULL,NULL);
return 0;
}
...全文
95 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
vrace 2011-10-24
  • 打赏
  • 举报
回复
你应该弄到 WM_PAINT 里面去绘制,在 FoodCreate 里面绘制的话,你一调用 InvalidateRect, 系统就会调用 WM_PAINT, 然后你在这儿绘制的东西自然就没了!
赵4老师 2011-10-24
  • 打赏
  • 举报
回复
Rectangle(hdc,0,0,30,30);//如果这句画出来了
Rectangle(hdc,j*30,i*30,(j+1)*30,(i+1)*30);//这句没画出来,检查一下坐标,是否画到窗口外面了。

七擒关羽 2011-10-24
  • 打赏
  • 举报
回复
原理应该是用背景颜色把绘画的点重新绘画一遍,只要把 FoodCreate() 逆向执行一遍就可以

bool FoodDestroy(int *FoodPoint)//FoodPoint数组,存放FOOD坐标点
{
if(TRUE == Food)
{
...//覆盖点
}
.....
}

up1325 2011-10-24
  • 打赏
  • 举报
回复
还是不行
赵4老师 2011-10-24
  • 打赏
  • 举报
回复
hPen=(HPEN)GetStockObject(BLACK_PEN);
基于C#.NET编程的游戏,本游戏实现了贪吃蛇的基本功能,需要要完善之处,望IT好友修正之。 程序功能 1)游戏选项:主要实现游戏的开始、暂停、退出,分别可以使用快捷键F2、空格键、F4。 2)设置: a)游戏难度等级设置:初级、中级、高级三个难度等级,每个难度等级又实现了三级加速,主要包括一级加速、二级加速、三级加速; b)蛇体颜色设置:绿色、红色、蓝色、黑色四种颜色可以选择; c) 蛇体宽度设置:初始大小、放大两倍、放大三倍三种选择; d)食物颜色设置:橙色、黄色、紫色三种颜色可以选择。 3)帮助:游戏操作说明,可以使用快捷键F3打开,主要介绍游戏的操作方法、以及版本信息、制作时间。 3.2设计思想 1)贪吃蛇的游戏规则:蛇头不能反向移动,若反向则保持原来的运动方向不变;不能碰到场地四周和自身,若碰到到四周墙壁或者自身,则游戏结束;当吃到食物后,应在随机生成一个新的坐标产生食物,并且食物不能再蛇身内生成;选择相应的游戏难度等级,当分数累加到一定程度以后,速度增加,每个等级有分为三个加速阶段。 2)游戏场地的绘制:将panel控件设计为游戏的背景,场地、贪吃蛇以及食物都是在panel控件中完成绘制。 3)蛇身和食物绘制:本实验主要使用Graphics类在panel控件中绘制游戏的场地以及贪吃蛇食物食物模块、蛇身各模块的绘制是在单元格中进行绘制的,这样蛇身移动和食物生成过程中不需要重新绘制背景;根据蛇身模块宽度,可以改变蛇体的大小和场地坐标图方格的大小;根据食物类和蛇类各自的颜色变量,再通过菜单来改变其相应的颜色。 4)游戏的动态刷新控制:使用Timer组件来实现贪吃蛇的移动,通过设置该组件的Interval属性大小来控制移动的速度。 5)蛇身移动的实现:蛇身的移动主要是用ArrList类来实现的,该类的主要功能是使用大小可以根据需要动态增加数组,即建立动态数组来存储蛇身,本实验主要使用ArrList类的Insert方法和RemoveAt方法实现蛇模块的增加、蛇体移动的清除移动尾部。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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