一、蛇死亡判断:装边界,撞自己死亡
定义: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);
流程结束。
原文:http://www.cnblogs.com/WinonaJia/p/7740113.html