贪食蛇C语言
时间: 2023-06-21 07:15:17 浏览: 104
贪食蛇 c语言
下面是一个简单的贪食蛇游戏的C语言实现,你可以参考一下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define WIDTH 40 // 游戏界面宽度
#define HEIGHT 20 // 游戏界面高度
int snake[100][2]; // 蛇身数组
int food[2]; // 食物位置
int length = 1; // 蛇身长度
int direction = 3; // 蛇头方向,1:上,2:左,3:下,4:右
// 在指定位置输出字符
void gotoxy(int x, int y) {
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
// 初始化游戏
void init() {
// 初始化蛇头位置
snake[0][0] = WIDTH / 2;
snake[0][1] = HEIGHT / 2;
// 随机生成食物位置
food[0] = rand() % WIDTH;
food[1] = rand() % HEIGHT;
}
// 绘制游戏界面
void draw() {
// 清空屏幕
system("cls");
// 绘制游戏界面
for (int i = 0; i < WIDTH + 2; i++) {
printf("#");
}
printf("\n");
for (int i = 0; i < HEIGHT; i++) {
printf("#");
for (int j = 0; j < WIDTH; j++) {
if (i == snake[0][1] && j == snake[0][0]) {
printf("O"); // 绘制蛇头
} else if (i == food[1] && j == food[0]) {
printf("X"); // 绘制食物
} else {
int flag = 0;
for (int k = 1; k < length; k++) {
if (i == snake[k][1] && j == snake[k][0]) {
printf("o"); // 绘制蛇身
flag = 1;
break;
}
}
if (!flag) {
printf(" ");
}
}
}
printf("#");
printf("\n");
}
for (int i = 0; i < WIDTH + 2; i++) {
printf("#");
}
printf("\n");
}
// 蛇移动
void move() {
// 记录蛇尾位置
int tail[2];
tail[0] = snake[length - 1][0];
tail[1] = snake[length - 1][1];
// 移动蛇身
for (int i = length - 1; i > 0; i--) {
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
// 移动蛇头
switch (direction) {
case 1:
snake[0][1]--;
break;
case 2:
snake[0][0]--;
break;
case 3:
snake[0][1]++;
break;
case 4:
snake[0][0]++;
break;
}
// 判断是否撞墙或撞到自己的身体
if (snake[0][0] < 0 || snake[0][0] >= WIDTH || snake[0][1] < 0 || snake[0][1] >= HEIGHT) {
printf("Game over!\n");
exit(0);
}
for (int i = 1; i < length; i++) {
if (snake[0][0] == snake[i][0] && snake[0][1] == snake[i][1]) {
printf("Game over!\n");
exit(0);
}
}
// 判断是否吃到食物
if (snake[0][0] == food[0] && snake[0][1] == food[1]) {
length++;
food[0] = rand() % WIDTH;
food[1] = rand() % HEIGHT;
}
// 清除蛇尾
gotoxy(tail[0] + 1, tail[1] + 1);
printf(" ");
}
// 处理键盘输入
void input() {
if (_kbhit()) {
int key = _getch();
switch (key) {
case 'w':
if (direction != 3) {
direction = 1;
}
break;
case 'a':
if (direction != 4) {
direction = 2;
}
break;
case 's':
if (direction != 1) {
direction = 3;
}
break;
case 'd':
if (direction != 2) {
direction = 4;
}
break;
}
}
}
int main() {
// 初始化游戏
init();
// 游戏循环
while (1) {
// 绘制游戏界面
draw();
// 蛇移动
move();
// 处理键盘输入
input();
// 延时
Sleep(100);
}
return 0;
}
```
上面的代码使用了Windows API中的`gotoxy`函数来实现在指定位置输出字符的功能,如果你在其他操作系统上运行可能会出现问题。
阅读全文