食物放置的实现
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++教程频道。










