贪吃蛇c语言
时间: 2023-06-22 15:31:46 浏览: 129
下面是一个简单的贪吃蛇的C语言代码,供参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define WIDTH 20
#define HEIGHT 20
#define MAX_LENGTH (WIDTH*HEIGHT)
int snake[MAX_LENGTH][2];
int food[2];
int score;
int length;
int direction;
int running;
void init() {
// 初始化贪吃蛇的位置
snake[0][0] = WIDTH / 2;
snake[0][1] = HEIGHT / 2;
snake[1][0] = WIDTH / 2 - 1;
snake[1][1] = HEIGHT / 2;
snake[2][0] = WIDTH / 2 - 2;
snake[2][1] = HEIGHT / 2;
length = 3;
// 初始化食物的位置
food[0] = rand() % WIDTH;
food[1] = rand() % HEIGHT;
// 初始化分数
score = 0;
// 初始化方向
direction = 'd';
// 初始化运行标志
running = 1;
}
void draw() {
system("cls");
// 画出地图
for (int i = 0; i <= HEIGHT; i++) {
for (int j = 0; j <= WIDTH; j++) {
if (i == 0 || i == HEIGHT || j == 0 || j == WIDTH) {
printf("#");
}
else if (i == snake[0][1] && j == snake[0][0]) {
printf("@");
}
else if (i == food[1] && j == food[0]) {
printf("*");
}
else {
int flag = 0;
for (int k = 1; k < length; k++) {
if (i == snake[k][1] && j == snake[k][0]) {
printf("#");
flag = 1;
break;
}
}
if (!flag) {
printf(" ");
}
}
}
printf("\n");
}
// 显示分数
printf("Score: %d\n", score);
}
void update() {
// 记录蛇尾位置
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 'w':
snake[0][1]--;
break;
case 'a':
snake[0][0]--;
break;
case 's':
snake[0][1]++;
break;
case 'd':
snake[0][0]++;
break;
}
// 判断是否吃到食物
if (snake[0][0] == food[0] && snake[0][1] == food[1]) {
// 食物位置随机生成
food[0] = rand() % WIDTH;
food[1] = rand() % HEIGHT;
// 分数加一
score++;
// 蛇身长度加一
length++;
}
// 判断是否碰到墙壁或自己的身体
if (snake[0][0] == 0 || snake[0][0] == WIDTH || snake[0][1] == 0 || snake[0][1] == HEIGHT) {
running = 0;
}
for (int i = 1; i < length; i++) {
if (snake[0][0] == snake[i][0] && snake[0][1] == snake[i][1]) {
running = 0;
break;
}
}
}
void input() {
// 获取键盘输入
if (_kbhit()) {
char c = _getch();
if (c == 'w' || c == 'a' || c == 's' || c == 'd') {
// 只有输入合法的方向键才会改变方向
if ((c == 'w' && direction != 's') || (c == 'a' && direction != 'd') || (c == 's' && direction != 'w') || (c == 'd' && direction != 'a')) {
direction = c;
}
}
}
}
int main() {
init();
while (running) {
draw();
update();
input();
Sleep(100);
}
printf("Game over\n");
printf("Your score: %d\n", score);
return 0;
}
```
这个代码使用了Windows.h库中的一个函数`Sleep()`,该函数可以让程序暂停一段时间,单位是毫秒。在这个代码中,每100毫秒刷新一次屏幕,相当于一秒钟刷新10次。如果需要在其他平台上运行此代码,需要修改画图函数和暂停函数。
阅读全文