1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 游戏筑基开发之贪吃蛇移动算法(C语言)

游戏筑基开发之贪吃蛇移动算法(C语言)

时间:2022-02-08 13:59:51

相关推荐

游戏筑基开发之贪吃蛇移动算法(C语言)

主要利用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;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。