您的位置:首页 > 其它

简单字符游戏——贪吃蛇

2017-12-25 00:29 323 查看


大家看到了,上图就是我们非常熟悉的一款游戏——贪吃蛇。

这星期作业就要我们尝试了怎么做一条智能蛇,要做智能蛇,我们要先做好一个贪吃蛇。贪吃蛇怎么做呢?

大致思路是,用自顶向下的方法,将问题分为食物放置,蛇的移动,进食,及死亡。其中在放置食物这里,我学到了一个取得随机变量的方法:即rand函数。关于蛇的移动,这里按教程的思路写了个move函数,其实蛇的移动按字符变化来看,就是蛇尾一个字符消失,蛇前进将要到的那个新出现一个头,然后原来的头就变为蛇身一部分。然后若它行进到达的下一个位置上有食物,则食物变为蛇头,原来的头就变为蛇身一部分。若蛇行进到达的下一个位置上是障碍物,或者是自身蛇就死亡。下面即一段简单的代码。

下面代码省去了一些开头

int len = 5;
int life = 0;
int food = 0;
int foodx, foody;
int X[SNAKE_MAX_LENGTH]={1,1,1,1,1};//sanke
int Y[SNAKE_MAX_LENGTH]={1,2,3,4,5};//snake
char map[12][12] = {"************",
"*XXXXH     *",
"*          *",
"*          *",
"*          *",
"*          *",
"*          *",
"*          *",
"*          *",
"*          *",
"*          *",
"************",};
void snakeMove(int x, int y) {
put_money();
char ch;
int i;
if ((X[len - 1] - X[len - 2] == -x && Y[len - 1] == Y[len - 2]) || (Y[len - 1] - Y[len - 2] == -y && X[len - 1] == X[len - 2])) {
return;
}//若键盘输入的方向与蛇头方向相反,则什么事都不发生
if (map[X[len - 1] + x][Y[len - 1] + y] == WALL_CELL || map[X[len - 1] + x][Y[len - 1] + y] == SNAKE_BODY) {
life++;
}//若碰到墙壁或者自己就死掉
if (map[X[len - 1] + x][Y[len - 1] + y] == SNAKE_FOOD) {
map[X[len - 1]][Y[len - 1]] = SNAKE_BODY;
map[X[len - 1] + x][Y[len - 1] + y] = SNAKE_HEAD;
len++;
X[len - 1] = X[len - 2] + x;
Y[len - 1] = Y[len - 2] + y;
food--;
}//碰到食物就增长
else {
map[X[0]][Y[0]] = BLANK_CELL;
for (i = 0; i < len - 1; i++) {
X[i] = X[i + 1];
Y[i] = Y[i + 1];
}
X[len - 1] += x;
Y[len - 1] += y;
map[X[len - 1]][Y[len - 1]] = SNAKE_HEAD;
for (i = 0; i < len - 1; i++) {
map[X[i]][Y[i]] = SNAKE_BODY;
}
}//没碰到食物

}
void put_money(void) {
if (food == 0) {
srand(time(NULL));
foodx = rand() % 9 + 1;
foody = rand() % 9 + 1;
if (map[foodx][foody] == BLANK_CELL) {
map[foodx][foody] = SNAKE_FOOD;
food++;
}
}
}
void output(void) {
int i, j;
for (i = 0; i < 12; i++) {
for (j = 0; j < 12; j++)
printf("%c", map[i][j]);
printf("\n");
}
}
void gameover(void) {
printf ("GAME OVER!!!");
return;
}
int main() {
output();
while (1) {
char ch =_getch();
switch (ch) {
case 'A':
snakeMove(0, -1); break;
case 'S':
snakeMove(1, 0); break;
case 'D':
snakeMove(0, 1); break;
case 'W':
snakeMove(-1, 0); break;
}
system("cls");
if (life != 0) {
gameover();
break;
}
if (len == 20) {
printf("you win!!!");
break;
}
output();
}
}


就这样,一个简单的贪吃蛇游戏就出来了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: