求救,急,在线等待,拜托大家!(分不够可以加)
要求:一个很简单的贪吃蛇!
1.整个界面(mfc)都要成为蛇的运行范围。
2.菜单中一个增加结点按钮,一个删除按钮。
3.上,下,左,右,控制蛇的方向。开始运行时向一个方向运动。
********************************************************
下面是我的代码:只实现了一部分
1.建立SDI文件。
2.在***view.cpp里
struct SNAKE
{
int x;
int y;
int flag;//1up,2down,3left,4right;
int lenth;
struct SNAKE *next;
}*tryit;
struct SNAKE *head,*insert;
3.构造函数里
tryit=(struct SNAKE*)malloc(sizeof(struct SNAKE));
tryit->flag=2;
tryit->lenth=1;
tryit->x=0;tryit->y=0;
4.***view::OnDraw()里
CBrush brush;
brush.CreateSolidBrush(RGB(0,0,0));
CRect rt;
rt.SetRect(0,0,400,300);
pDC->FillRect(&rt,&brush);
brush.DeleteObject();
GetClientRect(&rt);
CBrush nodbrush;
nodbrush.CreateSolidBrush(RGB(0,0,255));
pDC->SelectObject(&nodbrush);
CRect rt1;
rt1.SetRect(tryit->x,tryit->y,tryit->x+10,tryit->y+10);
pDC->FillRect(&rt1,&nodbrush);
nodbrush.DeleteObject();
SetTimer(1,300,NULL);
5.view::OnTimer()里
switch(tryit->flag)
{
case 1:
if(tryit->y<=0)
tryit->y=0;
else
tryit->y-=10;
DrawSnake(tryit->x,tryit->y,TRUE,tryit->flag);
break;
case 2:
if(tryit->y>=290)
tryit->y=290;
else
tryit->y+=10;
DrawSnake(tryit->x,tryit->y,TRUE,tryit->flag);
break;
case 3:
if(tryit->x<=0)
tryit->x=0;
else
tryit->x-=10;
DrawSnake(tryit->x,tryit->y,TRUE,tryit->flag);
break;
case 4:
if(tryit->x>=390)
tryit->x=390;
else
tryit->x+=10;
DrawSnake(tryit->x,tryit->y,TRUE,tryit->flag);
break;
}
6.onkeydown()里
switch(nChar)
{
case VK_UP:
tryit->flag=1;
break;
case VK_DOWN:
tryit->flag=2;
break;
case VK_LEFT:
tryit->flag=3;
break;
case VK_RIGHT:
tryit->flag=4;
break;
}
7.建立了一个drawsnake()函数,画蛇的一部分。
***View::DrawSnake(int x, int y, BOOL bErase,int nDir)
{ CDC* pDC=GetDC();
CBrush brush,cleanbrush;
CRect rt1;
brush.CreateSolidBrush(RGB(0,0,255));
pDC->SelectObject(&brush);
rt1.SetRect(x,y,x+10,y+10);
pDC->FillRect(&rt1,&brush);
brush.DeleteObject();
if(bErase)
{
cleanbrush.CreateSolidBrush(RGB(0,0,0));
pDC->SelectObject(&cleanbrush);
switch(nDir)
{
case 1:rt1.SetRect(x,y+10,x+10,y+20);break;//up;
case 2:rt1.SetRect(x,y-10,x+10,y);break;//down
case 3:rt1.SetRect(x+10,y,x+20,y+10);break;//left
case 4:rt1.SetRect(x-10,y,x,y+10);break;//right
}
pDC->FillRect(&rt1,&cleanbrush);
cleanbrush.DeleteObject();
}
}
我只是实现了一开始一个蛇结点运动,然后可以用方向控制,但增加和删除结点怎么实现,请大家帮帮忙,给多少分都没所谓。