c语言输出一个贪吃蛇小游戏,代码实现出一个贪吃蛇小游戏
时间: 2024-05-15 21:14:39 浏览: 155
好的,我可以帮您实现一个简单的贪吃蛇小游戏。
以下是C语言代码实现:
```c
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 25 // 游戏地图的行数
#define COL 80 // 游戏地图的列数
// 定义蛇的结构体
struct Snake{
int x; // 蛇头的横坐标
int y; // 蛇头的纵坐标
int len; // 蛇的长度
int tailx[100]; // 蛇尾的横坐标数组
int taily[100]; // 蛇尾的纵坐标数组
char dir; // 蛇的方向
};
// 定义食物的结构体
struct Food{
int x; // 食物的横坐标
int y; // 食物的纵坐标
char ch; // 食物的字符
};
// 定义游戏地图的二维数组
char map[ROW][COL];
// 初始化游戏地图
void InitMap(){
int i, j;
for(i=0; i<ROW; i++){
for(j=0; j<COL; j++){
if(i==0 || i==ROW-1 || j==0 || j==COL-1){
map[i][j] = '#';
}
else{
map[i][j] = ' ';
}
}
}
}
// 显示游戏地图
void DisplayMap(){
int i, j;
for(i=0; i<ROW; i++){
for(j=0; j<COL; j++){
printf("%c", map[i][j]);
}
printf("\n");
}
}
// 初始化蛇
void InitSnake(struct Snake *ps){
ps->x = 10;
ps->y = 20;
ps->len = 3;
ps->tailx[0] = 10;
ps->taily[0] = 18;
ps->tailx[1] = 10;
ps->taily[1] = 19;
ps->tailx[2] = 10;
ps->taily[2] = 20;
ps->dir = 'a';
}
// 显示蛇
void DisplaySnake(struct Snake s){
int i;
for(i=0; i<s.len; i++){
map[s.tailx[i]][s.taily[i]] = '*';
}
map[s.x][s.y] = '@';
}
// 蛇移动
void Move(struct Snake *ps, struct Food *pf){
// 计算蛇尾的位置
int tailx = ps->tailx[0];
int taily = ps->taily[0];
int i;
for(i=0; i<ps->len-1; i++){
ps->tailx[i] = ps->tailx[i+1];
ps->taily[i] = ps->taily[i+1];
}
ps->tailx[ps->len-1] = ps->x;
ps->taily[ps->len-1] = ps->y;
// 移动蛇头
switch(ps->dir){
case 'w':
ps->x--;
break;
case 's':
ps->x++;
break;
case 'a':
ps->y--;
break;
case 'd':
ps->y++;
break;
}
// 判断是否吃到食物
if(ps->x==pf->x && ps->y==pf->y){
ps->len++; // 增加蛇的长度
// 生成新的食物
srand(time(NULL));
pf->x = rand() % (ROW-2) + 1;
pf->y = rand() % (COL-2) + 1;
pf->ch = '$';
}
// 判断是否撞墙或撞到自己的身体
if(map[ps->x][ps->y]=='#' || map[ps->x][ps->y]=='*'){
printf("Game over!\n");
exit(0);
}
// 更新地图
map[tailx][taily] = ' ';
for(i=0; i<ps->len; i++){
map[ps->tailx[i]][ps->taily[i]] = '*';
}
map[ps->x][ps->y] = '@';
}
// 初始化食物
void InitFood(struct Food *pf){
srand(time(NULL));
pf->x = rand() % (ROW-2) + 1;
pf->y = rand() % (COL-2) + 1;
pf->ch = '$';
}
// 显示食物
void DisplayFood(struct Food f){
map[f.x][f.y] = f.ch;
}
// 监听键盘操作
void ListenKey(struct Snake *ps){
char ch;
if(kbhit()){ // 判断是否有按键按下
ch = getch();
if((ch=='w'||ch=='s'||ch=='a'||ch=='d') && abs(ch-ps->dir)!=2){
ps->dir = ch;
}
}
}
int main(){
struct Snake snake;
struct Food food;
InitMap();
InitSnake(&snake);
InitFood(&food);
while(1){
system("cls"); // 清屏
DisplayMap();
DisplaySnake(snake);
DisplayFood(food);
Move(&snake, &food);
ListenKey(&snake);
Sleep(200); // 延时,控制蛇的移动速度
}
return 0;
}
```
请注意,本AI无法保证以上代码正确运行,请自行测试和调试。
阅读全文