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

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;
}
...全文
77 5 打赏 收藏 转发到动态 举报
写回复
用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);

69,382

社区成员

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

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