主要利用C语言中最基础的方法及数据变量
包括二位数组、静态全局变量、循环(循环嵌套)、switch语句等。
注:未进行模块化(封装)。
实现效果如下:
基础数据变量:
static int map[N][N] = {{1,1,1,1,1,1,1,1,1,1},{1,0,0,0,0,0,0,0,0,1},{1,0,2,3,4,0,0,0,0,1},{1,0,0,0,0,0,0,0,-1,1},{1,0,0,0,0,0,0,0,0,1},{1,0,0,0,-1,0,0,0,0,1},{1,0,0,0,0,0,0,0,0,1},{1,0,-1,0,0,0,0,-1,0,1},{1,0,0,0,0,0,0,0,0,1},{1,1,1,1,1,1,1,1,1,1}};
注:其中”1“表示围墙、”0“表示空、”2“表示蛇头、”3、4…“表示蛇身,”-1“表示零食。
利用深度搜索算法实现贪吃蛇移动(两种方式、核心思想相同)
方式一:
该方式相对容易理解,实现方式较为粗暴。
代码如下:
//x,y一开始代表蛇头的坐标。随着深度搜索,x,y变量不断变化,表示蛇身坐标。map[tx][ty] = map[x][y];//移动蛇头while (1){if (map[x][y] + 1 == map[x - 1][y])//搜索方向:上{map[x][y] = map[x - 1][y];x = x - 1;}else if (map[x][y] + 1 == map[x + 1][y])//搜索方向:下{map[x][y] = map[x + 1][y];x = x + 1;}else if (map[x][y] + 1 == map[x][y - 1])//搜索方向:左{map[x][y] = map[x][y-1];y = y - 1;}else if (map[x][y] + 1 == map[x][y + 1])//搜索方向:右{map[x][y] = map[x][y + 1];y = y + 1;}else{//吃到食物foodif (bFlag == 1){map[x][y] ++;} else{//便遍历到蛇尾且未吃到食物foodmap[x][y] = 0;}break;}}//int tx,ty记录的是蛇头的坐标,还原蛇头坐标x = tx;y = ty;
方式二:
该方式较为精炼,融入一定的编程技巧。主要利用二位数组直接存储深度搜索的四个方向。符合设计模式中的高内聚、低耦合的思想。
代码如下:
//x,y一开始代表蛇头的坐标。随着深度搜索,x,y变量不断变化,表示蛇身坐标。int dirs[4][2] = {{-1,0}, {1,0}, {0,1}, {0,-1} };//记录深度搜索四个方向坐标map[tx][ty] = map[x][y];//蛇头移动while (1){int bFlag = 0;//用于记录是否遍历到蛇尾for (int i = 0; i < 4; i++){if (map[x][y] + 1 == map[x + dirs[i][0]][y + dirs[i][1]]){map[x][y] += 1;x += dirs[i][0];y += dirs[i][1];bFlag = 1;break;}}//遍历到蛇尾if (!bFlag){//看是否吃到食物if (bEat){map[x][y]++;break;}map[x][y] = 0;break;}}//还原蛇头x = tx;y = ty;