给我写一个c语言实现贪吃蛇,并且可以在DevC++上运行
时间: 2023-06-19 07:10:16 浏览: 151
c语言实现贪吃蛇,保证能运行
好的,以下是一个简单的 C 语言实现贪吃蛇的示例代码,可以在 DevC++ 上运行:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define WIDTH 50 // 游戏窗口宽度
#define HEIGHT 20 // 游戏窗口高度
#define INIT_LENGTH 3 // 贪吃蛇初始长度
#define FOOD_CHAR '@' // 食物字符
#define SNAKE_CHAR 'O' // 贪吃蛇字符
#define BLANK_CHAR ' ' // 空白字符
int x, y, fx, fy, length; // 贪吃蛇头部坐标、食物坐标、贪吃蛇长度
int direction; // 贪吃蛇移动方向(0:上,1:右,2:下,3:左)
char map[HEIGHT][WIDTH]; // 游戏窗口地图
// 初始化游戏
void init()
{
int i, j;
// 初始化地图
for(i=0; i<HEIGHT; i++)
{
for(j=0; j<WIDTH; j++)
{
if(i==0 || i==HEIGHT-1 || j==0 || j==WIDTH-1) // 游戏窗口边界
{
map[i][j] = '#';
}
else // 游戏窗口内部
{
map[i][j] = BLANK_CHAR;
}
}
}
// 初始化贪吃蛇
x = WIDTH/2;
y = HEIGHT/2;
length = INIT_LENGTH;
direction = 1;
for(i=0; i<length; i++)
{
map[y][x-i] = SNAKE_CHAR;
}
// 初始化食物
srand(time(NULL));
do
{
fx = rand() % (WIDTH-2) + 1;
fy = rand() % (HEIGHT-2) + 1;
} while(map[fy][fx] != BLANK_CHAR);
map[fy][fx] = FOOD_CHAR;
}
// 显示游戏界面
void show()
{
int i, j;
system("cls"); // 清屏
for(i=0; i<HEIGHT; i++)
{
for(j=0; j<WIDTH; j++)
{
printf("%c", map[i][j]);
}
printf("\n");
}
}
// 处理输入
void input()
{
if(kbhit()) // 判断是否有键盘输入
{
int key = getch();
switch(key)
{
case 'w':
case 'W':
if(direction != 2)
{
direction = 0;
}
break;
case 'd':
case 'D':
if(direction != 3)
{
direction = 1;
}
break;
case 's':
case 'S':
if(direction != 0)
{
direction = 2;
}
break;
case 'a':
case 'A':
if(direction != 1)
{
direction = 3;
}
break;
default:
break;
}
}
}
// 更新游戏状态
void update()
{
int i, j;
// 移动贪吃蛇
switch(direction)
{
case 0:
y--;
break;
case 1:
x++;
break;
case 2:
y++;
break;
case 3:
x--;
break;
default:
break;
}
// 检查是否吃到食物
if(x==fx && y==fy)
{
length++;
do
{
fx = rand() % (WIDTH-2) + 1;
fy = rand() % (HEIGHT-2) + 1;
} while(map[fy][fx] != BLANK_CHAR);
map[fy][fx] = FOOD_CHAR;
}
// 检查是否碰到边界或自身
if(x<1 || x>=WIDTH-1 || y<1 || y>=HEIGHT-1 || map[y][x]==SNAKE_CHAR)
{
printf("Game Over!\n");
exit(0);
}
// 更新贪吃蛇位置
map[y][x] = SNAKE_CHAR;
for(i=0; i<HEIGHT; i++)
{
for(j=0; j<WIDTH; j++)
{
if(map[i][j] == SNAKE_CHAR && (i!=y || j!=x))
{
map[i][j] = BLANK_CHAR;
}
}
}
// 检查贪吃蛇长度
if(length == WIDTH * HEIGHT - 2*(WIDTH+HEIGHT-2))
{
printf("You Win!\n");
exit(0);
}
}
int main()
{
init();
while(1)
{
show();
input();
update();
Sleep(100); // 控制游戏速度
}
return 0;
}
```
注意:此代码仅是一个简单的示例,实际游戏中可能需要更多的功能和优化。
阅读全文