贪吃蛇游戏代码

#include 
#include 
#include 
#include const int maxn = 100;
const int n = 20;struct node
{int x, y;
};int map[maxn][maxn]; // 0表示空格,1表示蛇身,2表示食物,3表示撞死的位置, 4表示蛇头.
node food;
node squence[maxn]; // 蛇的身子的坐标.
int len; // 蛇的长度.
bool eat; // 判断当前事物是否被吃了.
bool gameover; // 游戏是否失败.
int direction; // 判断当前蛇头是朝哪个方向.void Output(void);
void Move(int direction);
void Move_up(void);
void Move_down(void);
void Move_left(void);
void Move_right(void);int main()
{int i, j;double start;int gamespeed; // 游戏速度自己调整.int timeover;int game_times = 1; // 游戏的次数.char c = 'x';printf("请输入游戏的级别(1到500,1最难,500最简单):\n");scanf("%d", &gamespeed);gamespeed = gamespeed;// 对图的初始化.for (i = 0; i <= n + 1; i++){for (j = 0; j <= n + 1; j++){map[i][j] = 0;}}// 对蛇的初始化.for (i = 1; i <= n; i++){squence[i].x = 0;squence[i].y = 0;}len = 1; // 蛇的长度为1.squence[len].x = 1;squence[len].y = 1; // 初始位置在点(1, 1).map[1][1] = 4;direction = 4; // 默认开始时蛇向右走.srand(time(0));while (game_times <= 20){eat = 0; // 食物还没被吃.while (true){ // 随机生出食物的坐标,注意不能与蛇身重合,否则就重新随机产生.food.x = rand() % 20 + 1;food.y = rand() % 20 + 1;if (map[food.x][food.y] == 0){break;}}map[food.x][food.y] = 2; // 食物位置.system("cls");Output();// 以下这段半秒钟不按键还取原方向继续前行.while (!eat){start = clock();timeover=1;while(!kbhit()){ // 说明没有按键.if (clock() - start <= gamespeed){ // 如果时间超过游戏时间.timeover = 1;}else{timeover = 0;break;}}if (timeover){ // 说明有按键.// 按一次键,可以连取两个c = getch();c = getch();// 以下几行告诉怎样判断用户按的哪个方向键if(c==72) direction = 1; // printf("向上");if(c==80) direction = 2; // printf("向下");if(c==75) direction = 3; // printf("向左");if(c==77) direction = 4; // printf("向右");}Move(direction);system("cls");if (gameover){Output();printf("Game Over!!!\n");return 0;}Output();}game_times++; // 又成功吃到一次食物.}printf("You win!!!\n");return 0;
}void Move(int direction)
{switch (direction){case 1 : Move_up(); break;case 2 : Move_down(); break;case 3 : Move_left(); break;default : Move_right();}
}void Output(void)
{int i, j;for (j = 0; j <= n + 1; j++){printf("#");}printf("\n");for (i = 1; i <= n; i++){for (j = 0; j <= n + 1; j++){if (j == 0 || j == n + 1){if (map[i][j] == 3){printf("!");}else{printf("#");}}else{if (map[i][j] == 1){printf("*");}else if (map[i][j] == 2){printf("@");}else if (map[i][j] == 3){printf("!");}else if (map[i][j] == 4){switch (direction){case 1 : printf("%c", 30); break;case 2 : printf("%c", 31); break;case 3 : printf("%c", 17); break;default : printf("%c", 16);}}else{printf(" ");}}}printf("\n");}for (j = 0; j <= n + 1; j++){printf("#");}printf("\n");
}void Move_up(void)
{int i;int x, y;if (len > 1 && squence[len].y == squence[len - 1].y && squence[len].x == squence[len - 1].x + 1){ // 不能移动,则按原来的移动.direction = 2; // 按原来的向下移动.Move(direction);return ;}// 开始移动.x = squence[len].x - 1;y = squence[len].y;if (x == 0 || map[x][y] == 1){ // 撞到边界或者自己撞到自己.map[x][y] = 3;gameover = 1;}if (map[x][y] == 2){ // 说明已经吃到事物.map[squence[len].x][squence[len].y] = 1;len++;squence[len].x = x;squence[len].y = y;map[x][y] = 4;eat = 1;}else{map[squence[1].x][squence[1].y] = 0;for (i = 1; i <= len - 1; i++){squence[i].x = squence[i + 1].x;squence[i].y = squence[i + 1].y;map[squence[i + 1].x][squence[i + 1].y] = 1;}squence[len].x = squence[len].x - 1;if (gameover){map[squence[len].x][squence[len].y] = 3;}else{map[squence[len].x][squence[len].y] = 4;}}
}void Move_down(void)
{int i;int x, y;if (len > 1 && squence[len].y == squence[len - 1].y && squence[len].x == squence[len - 1].x - 1){ // 不能移动,则按原来的移动.direction = 1; // 按原来的向上移动.Move(direction);return ;}// 开始移动.x = squence[len].x + 1;y = squence[len].y;if (x == n + 1 || map[x][y] == 1){ // 撞到边界或者自己撞到自己.map[x][y] = 3;gameover = 1;}if (map[x][y] == 2){ // 说明已经吃到事物.map[squence[len].x][squence[len].y] = 1;len++;squence[len].x = x;squence[len].y = y;map[x][y] = 4;eat = 1;}else{map[squence[1].x][squence[1].y] = 0;for (i = 1; i <= len - 1; i++){squence[i].x = squence[i + 1].x;squence[i].y = squence[i + 1].y;map[squence[i + 1].x][squence[i + 1].y] = 1;}squence[len].x = squence[len].x + 1;if (gameover){map[squence[len].x][squence[len].y] = 3;}else{map[squence[len].x][squence[len].y] = 4;}}
}void Move_left(void)
{int i;int x, y;if (len > 1 && squence[len].x == squence[len - 1].x && squence[len].y == squence[len - 1].y + 1){ // 不能移动,则按原来的移动.direction = 4; // 按原来的向右移动.Move(direction);return ;}// 开始移动.x = squence[len].x;y = squence[len].y - 1;if (y == 0 || map[x][y] == 1){ // 撞到边界或者自己撞到自己.map[x][y] = 3;gameover = 1;}if (map[x][y] == 2){ // 说明已经吃到事物.map[squence[len].x][squence[len].y] = 1;len++;squence[len].x = x;squence[len].y = y;map[x][y] = 4;eat = 1;}else{map[squence[1].x][squence[1].y] = 0;for (i = 1; i <= len - 1; i++){squence[i].x = squence[i + 1].x;squence[i].y = squence[i + 1].y;map[squence[i + 1].x][squence[i + 1].y] = 1;}squence[len].y = squence[len].y - 1;if (gameover){map[squence[len].x][squence[len].y] = 3;}else{map[squence[len].x][squence[len].y] = 4;}}
}void Move_right(void)
{int i;int x, y;if (len > 1 && squence[len].x == squence[len - 1].x && squence[len].y == squence[len - 1].y - 1){ // 不能移动,则按原来的移动.direction = 3; // 按原来的向左移动.Move(direction);return ;}// 开始移动.x = squence[len].x;y = squence[len].y + 1;if (y == n + 1 || map[x][y] == 1){ // 撞到边界或者自己撞到自己.map[x][y] = 3;gameover = 1;}if (map[x][y] == 2){ // 说明已经吃到事物.map[squence[len].x][squence[len].y] = 1;len++;squence[len].x = x;squence[len].y = y;map[x][y] = 4;eat = 1;}else{map[squence[1].x][squence[1].y] = 0;for (i = 1; i <= len - 1; i++){squence[i].x = squence[i + 1].x;squence[i].y = squence[i + 1].y;map[squence[i + 1].x][squence[i + 1].y] = 1;}squence[len].y = squence[len].y + 1;if (gameover){map[squence[len].x][squence[len].y] = 3;}else{map[squence[len].x][squence[len].y] = 4;}}
} 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部