初級“智能”蛇

“智能算法”如下:

char clever(int Hx, int Hy, int Fx, int Fy)
{
    int i;
    int min = 9998,p=0;
    if (map[Hy][Hx - 1] != BLANK_CELL && map[Hy][Hx - 1] != SNAKE_FOOD)
        distance[0] = 9999;
    else
        distance[0] = abs(Fx - (Hx - 1)) + abs(Fy - Hy);
    if (map[Hy - 1][Hx] != BLANK_CELL && map[Hy - 1][Hx] != SNAKE_FOOD)
        distance[1] = 9999;
    else
        distance[1] = abs(Fx - Hx) + abs(Fy - (Hy - 1));
    if (map[Hy + 1][Hx] != BLANK_CELL && map[Hy + 1][Hx] != SNAKE_FOOD)
        distance[2] = 9999;
    else
        distance[2] = abs(Fx - Hx) + abs(Fy - (Hy + 1));
    if (map[Hy][Hx + 1] != BLANK_CELL && map[Hy][Hx + 1] != SNAKE_FOOD)
        distance[3] = 9999;
    else
        distance[3] = abs(Fx - (Hx + 1)) + abs(Fy - Hy);
    for (i = 0; i < 4; i++)
    {
        if (min > distance[i])
        {
            min = distance[i];
            p = i;
        }
    }
    return movable[p];
}

將上面這個簡單的“智能算法”替換原來用按鍵操作的算法部分就可以了。

原來的鍵盤控制代碼如下:

    while (1)
    {
        a[0] = snake->x[0];
        a[1] = snake->y[0];
        j = 0;
        if (_kbhit())
        {
            ch = _getch();
            if (_kbhit())
            {
                Sleep(20);
                j = 1;
            }
        }
        switch (ch)
        {
        case 72:
        {
            movement(hOut, snake);
            snake->y[snake->length - 1] -= 1; //上
            break;
        }
        case 80:
        {
            movement(hOut, snake);
            snake->y[snake->length - 1] += 1; //下
            break;
        }
        case 75:
        {
            movement(hOut, snake);
            snake->x[snake->length - 1] -= 2; //左
            break;
        }
        case 77:
        {
            movement(hOut, snake);
            snake->x[snake->length - 1] += 2; //右
            break;
        }
        }

不過這個“智能算法”還很傻,還是借鑑了別人的經驗下弄出來的,所以智能蛇勉強還算智能吧

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章