贪吃蛇 食物无法绘制 哪位朋友帮忙看看
- 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, 然后你在这儿绘制的东西自然就没了!