1. 程式人生 > >C語言控制臺貪吃蛇4

C語言控制臺貪吃蛇4

eba bsp console 食物 blog pan 是否 lec ons

蛇死亡判斷、吃食物、計分

一、蛇死亡判斷:裝邊界,撞自己死亡

  定義: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);

流程結束。

C語言控制臺貪吃蛇4