回 帖 发 新 帖 刷新版面

主题:谁能帮我看下这个贪食蛇算法有什么问题?

void Snake::SnakeMove(HWND hwnd,HDC hdc)
{
    HBRUSH  hBrush;      
    RECT    rect  ; 
    int     i     ;
    int     a[50],b[50];
    hBrush=CreateSolidBrush(GetBkColor(hdc));
    SetRect(&rect,x[node-1],y[node-1],x[node-1]+10,y[node-1]+10);
       FillRect(hdc,&rect,hBrush);
    for(i=0;i<node;i++)
    {
        a[i]=x[i];
        b[i]=y[i];
    }
    for(i=node-1;i>0;i--)
    { 
        x[i]=x[i-1]; 
        y[i]=y[i-1]; 
    } 
    DirectionState();
        for(i=0;i<node;i++) 
        {
            hBrush=CreateSolidBrush(RGB(0,255,0));
            SetRect(&rect,x[i],y[i],x[i]+10,y[i]+10); 
            FillRect(hdc,&rect,hBrush);
        }
        AddBody(); 
    //    ShowScore(hwnd,hdc);
        DeleteObject(hBrush); 

}

回复列表 (共2个回复)

沙发

是怎么个情况没有说明,否则给不出有针对的解决方法,REQ细节

板凳

蛇的移动用不着这么复杂的计算与判断,以下几步几可完成
1.从保存蛇头坐标位置开如的所有元素依次下移(将最后一个元素抛弃)
2.将新蛇头的元素入保存蛇头元素的位置
3.返回第1步
例如:
有两个数组 X[5] Y[5] 分别保存蛇的每节身体的坐标,其中蛇头保存在X[1] Y[1]中,身体的其它部分分别保存在X[2]...X[5] Y[2]...Y[5]中,且蛇向右移动一步后的数组元素分布应为:X[5]=X[4} X[4]=X[3] X[3]=X[2] X[2]=X[1] X[1]=新X坐标 
         Y[5]=Y[4] Y[4]=Y[3] Y[3]=Y[2] Y[2]=Y[1] Y[1]=新Y坐标
每次移动后都这样保存,蛇身总会按照蛇头移动的路径运动.

我来回复

您尚未登录,请登录后再回复。点此登录或注册