首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-04-05 
贪吃蛇 食物无法绘制 哪位朋友帮忙看看C/C++ codeBOOL FoodCreate(){static int j,iRECT Rectif(FoodF

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

C/C++ code
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;}


[解决办法]
hPen=(HPEN)GetStockObject(BLACK_PEN);
[解决办法]
原理应该是用背景颜色把绘画的点重新绘画一遍,只要把 FoodCreate() 逆向执行一遍就可以

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

[解决办法]
Rectangle(hdc,0,0,30,30);//如果这句画出来了
Rectangle(hdc,j*30,i*30,(j+1)*30,(i+1)*30);//这句没画出来,检查一下坐标,是否画到窗口外面了。


[解决办法]
你应该弄到 WM_PAINT 里面去绘制,在 FoodCreate 里面绘制的话,你一调用 InvalidateRect, 系统就会调用 WM_PAINT, 然后你在这儿绘制的东西自然就没了!

热点排行