C语言实现贪吃蛇游戏

2020-01-06 18:28:39丽君

食物放置的实现

 


void put_money(void) { /// ai will change the code
 int flag = 1;
 while (flag) {
  srand(time(NULL));
  fx = rand() % 12;
  fy = rand() % 12;
  if (map[fy][fx] == ' ') {
   map[fy][fx] = '$';
   flag = 0;
  }
  if (edition_choose == 'p') {
   int i;
   for (i = 0; i< 4; i++)
    distance[i] = 9999;
  }
 }
 return;
}

void put_accelerate(void) {
 int x, y, flag = 1;
 while (flag) {
  srand(time(NULL));
  x = rand() % 12;
  y = rand() % 12;
  if (map[x][y] == ' ') {
   map[x][y] = '@';
   flag = 0;
  }
 }
 return;
}

ai辅助函数


int dis(int dx, int dy) {
 return abs(fx - snakeX[snakeLength - 1] - dx) + abs(fy - snakeY[snakeLength - 1] - dy);
}

int judge(int dx, int dy) {
 if (map[snakeY[snakeLength - 1] + dy][snakeX[snakeLength - 1] + dx] == ' ')
  return 1;
 else if (map[snakeY[snakeLength - 1] + dy][snakeX[snakeLength - 1] + dx] == '$')
  return 1;
 else if (map[snakeY[snakeLength - 1] + dy][snakeX[snakeLength - 1] + dx] == '@')
  return 1;
 else 
  return 0;
}

游戏over后的初始化函数:


void initial_the_game(void) {
 int i, j, count = 1;
 snakeLength = 5;
 gamestate = 1;
 fx = fy = 6;
 current_speed = 600;
 for (i = 0; i < 5; i++)
  snakeY[i] = 1;
 for (i = 0; i < 5; i++) {
  snakeX[i] = count++;
 }
 for (j = 0; j < 12; j++) {
  map[0][j] = '*';
  map[11][j] = '*';
 }
 for (i = 1; i < 11; i++) {
  map[i][0] = map[i][11] = '*';
  for (j = 1; j < 11; j++)
   map[i][j] = ' ';
 }
 map[fy][fx] ='$';
 map[8][4] = '@';
 for (i = 0; i< 4; i++) {
   distance[i] = 9999;
 }
 for (i = 0; i < 4; i++) 
  map[snakeY[i]][snakeX[i]] = 'X';
 map[snakeY[4]][snakeX[4]] = 'H';
 return;
}

小结:

不难看出,c语言代码比较冗长,而且初始化的函数实现起来十分麻烦,稍有不慎就会全部出错,导致游戏无法持续玩下去,博主当初写的时候就是被坑了很久=_=

因而现在在学c++,希望以后把类的概念之类的东西都弄得更加熟练之后,可以去把这个冗长的c代码改成更加简洁,阅读性更强的c++代码。

(好的,已经更新了,写出了一个比较简单的C++贪吃蛇,的确是思路清晰很多,代码的可读性更高。)

这篇博客给那些想要用c来写贪吃蛇的同学一些参考,运行起来是没有问题的,可以选择性看:)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持ASPKU。


注:相关教程知识阅读请移步到C++教程频道。