简单字符游戏——贪吃蛇
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(); } }
就这样,一个简单的贪吃蛇游戏就出来了。