C语言控制台贪吃蛇4

蛇死亡判断、吃食物、计分

一、蛇死亡判断:装边界,撞自己死亡

  定义:IsSnakeDie()//蛇死亡判断  函数,返回类型为bool型

思路:

  //蛇头的下一个,是方块 就是死亡
    if(0 == strncmp(&g_strgameback[g_arrSnake[0][0]][g_arrSnake[0][1] + g_arrSnake[0][2]], "", 2))
    {
        return false;
    }

二、随机产生食物及吃食物变长

  1、(1)为食物产生随机的坐标

//产生随机坐标
srand((unsigned int)time(NULL));
g_nRow = rand()%18 + 1;
g_nCol = rand()%20 + 1;

    (2)在产生的位置上画上食物:

strncpy(&g_strgameback[g_nRow][g_nCol*2], "", 2);

    此时调用函数运行结果可以显示食物,但是没有判断是否应该产生新食物,所以会一直随机产生食物。    

    (3)判断是否产生新食物 

bool g_bIsProFood = true;

//判断是否产生新的食物
if(false == g_bIsProFood)
{
    return ;
}

    将随机产生的食物坐标以及遍历蛇数组放进一个循环中,实现蛇没吃掉食物前只有一个食物

 2、蛇吃食物变长

  当蛇头坐标与食物的坐标相等时,蛇身变长。先定义一个蛇身长度:int g_nSnakelen = 2;

//蛇头光标跟坐标相等
if(g_nRow == g_arrSnake[0][0] && g_nLie*2 == g_arrSnake[0][1])
{
    //蛇长大
    if(to_east == g_arrSnake[g_nSnakelen][2])
    {
        g_arrSnake[g_nSnakelen+1][0] = g_arrSnake[g_nSnakelen][0];
        g_arrSnake[g_nSnakelen+1][1] = g_arrSnake[g_nSnakelen][0] - 2;
        g_arrSnake[g_nSnakelen+1][2] = g_arrSnake[g_nSnakelen][0];
    }
    else if(to_west == g_arrSnake[g_nSnakelen][2])
    {
        g_arrSnake[g_nSnakelen+1][0] = g_arrSnake[g_nSnakelen][0];
        g_arrSnake[g_nSnakelen+1][1] = g_arrSnake[g_nSnakelen][0] + 2;
        g_arrSnake[g_nSnakelen+1][2] = g_arrSnake[g_nSnakelen][0];
    }
    else if(to_north == g_arrSnake[g_nSnakelen][2])
    {
        g_arrSnake[g_nSnakelen+1][0] = g_arrSnake[g_nSnakelen][0];
        g_arrSnake[g_nSnakelen+1][1] = g_arrSnake[g_nSnakelen][0] + 1;
        g_arrSnake[g_nSnakelen+1][2] = g_arrSnake[g_nSnakelen][0];
    }
    else if(to_south == g_arrSnake[g_nSnakelen][2])
    {
        g_arrSnake[g_nSnakelen+1][0] = g_arrSnake[g_nSnakelen][0];
        g_arrSnake[g_nSnakelen+1][1] = g_arrSnake[g_nSnakelen][0] - 1;
        g_arrSnake[g_nSnakelen+1][2] = g_arrSnake[g_nSnakelen][0];
    }

    g_nSnakelen++;
    g_bIsProFood = true;
}

    当计分函数写好后需要在蛇变长函数中调用,变长的同时分数也增加

三、计分

  设置光标位置:SetConsoleCursorPosition();

COORD rd;
rd.X = 55;
rd.Y = 8;
//设置光标位置
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),rd);

printf("Score Is :  ");

rd.X = 56;
rd.Y = 9;
    
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),rd);

printf("%d",g_nScore*10);

流程结束。

原文地址:https://www.cnblogs.com/WinonaJia/p/7740113.html