请用C语言写一个贪吃蛇代码
时间: 2023-09-15 20:05:26 浏览: 108
### 回答1:
好的,以下是一个 C 语言写的简单的贪吃蛇代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77
#define WIDTH 40
#define HEIGHT 20
void init(char matrix[HEIGHT][WIDTH]);
void draw(char matrix[HEIGHT][WIDTH]);
void move(char matrix[HEIGHT][WIDTH], int *x, int *y, int direction);
int hit(char matrix[HEIGHT][WIDTH], int x, int y);
int main() {
char matrix[HEIGHT][WIDTH];
int x = WIDTH / 2, y = HEIGHT / 2;
int direction = RIGHT;
int score = 0;
init(matrix);
while (1) {
if (_kbhit()) {
switch (_getch()) {
case UP:
if (direction != DOWN) direction = UP;
break;
case DOWN:
if (direction != UP) direction = DOWN;
break;
case LEFT:
if (direction != RIGHT) direction = LEFT;
break;
case RIGHT:
if (direction != LEFT) direction = RIGHT;
break;
}
}
move(matrix, &x, &y, direction);
if (hit(matrix, x, y)) {
printf("Your score is %d\n", score);
break;
}
score++;
Sleep(100);
}
return 0;
}
void init(char matrix[HEIGHT][WIDTH]) {
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) {
matrix[i][j] = '#';
} else {
matrix[i][j] = ' ';
}
}
}
}
void draw(char matrix[HEIGHT][WIDTH]) {
int i, j;
system("cls");
for (i = 0; i < HEIGHT; i++) {
for (j = 0; j < WIDTH; j++) {
printf("%c", matrix[i][j]);
}
printf("\n");
}
}
void move(char matrix[HEIGHT][WIDTH], int *x, int *y, int direction) {
matrix[*y][*x] = ' ';
switch (direction) {
case UP:
(*y)--;
break;
case DOWN:
(*y)++;
break;
case LEFT:
(*x)--;
break;
case RIGHT:
(*x)++;
break;
}
matrix[
### 回答2:
贪吃蛇是经典的游戏,下面是用C语言编写的一个简单贪吃蛇代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <stdbool.h>
#include <windows.h>
#define WIDTH 20 // 游戏界面宽度
#define HEIGHT 20 // 游戏界面高度
// 定义蛇的结构体
typedef struct {
int x;
int y;
} Snake;
// 定义全局变量
bool gameover;
int score;
int speed;
Snake snake[WIDTH * HEIGHT];
// 初始化游戏界面和蛇
void setup()
{
gameover = false;
score = 0;
speed = 10;
// 设置游戏界面
system("mode con cols=40 lines=22"); // 设置控制台窗口大小
system("cls"); // 清屏
for (int i = 0; i < WIDTH * HEIGHT; i++) {
snake[i].x = 0;
snake[i].y = 0;
}
// 初始化蛇
snake[0].x = WIDTH / 2;
snake[0].y = HEIGHT / 2;
}
// 画出游戏界面
void draw()
{
system("cls"); // 清屏
// 画蛇身
for (int i = 0; i < score; i++) {
printf("■");
}
printf("\n");
// 画游戏界面框架
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
if (j == 0 || j == (WIDTH - 1)) {
printf("■");
}
else if (i == snake[0].y && j == snake[0].x) {
printf("■");
}
else {
printf(" ");
}
}
printf("\n");
}
// 画分数
printf("Score: %d\n", score);
}
// 控制蛇的移动
void input()
{
if (_kbhit()) {
switch (_getch()) {
case 'w':
snake[0].y--;
break;
case 's':
snake[0].y++;
break;
case 'a':
snake[0].x--;
break;
case 'd':
snake[0].x++;
break;
case 'x':
gameover = true;
break;
}
}
}
// 更新蛇的位置
void update()
{
// 更新蛇尾位置
for (int i = score; i > 0; i--) {
snake[i].x = snake[i - 1].x;
snake[i].y = snake[i - 1].y;
}
// 更新蛇头位置
if (snake[0].x < 0 || snake[0].x >= WIDTH || snake[0].y < 0 || snake[0].y >= HEIGHT) {
gameover = true; // 蛇碰到游戏界面边界时游戏结束
}
}
// 主函数
int main()
{
setup();
while (!gameover) {
draw();
input();
update();
Sleep(1000 / speed); // 控制游戏速度
}
printf("Game Over!\n");
return 0;
}
```
这是一个基本的贪吃蛇游戏代码,可以在控制台中运行。游戏通过WASD键控制蛇的上下左右移动,按X键退出游戏。游戏界面使用ASCII字符表示,蛇的身体由■字符组成,每吃到一个食物,蛇的长度增加,并提高游戏速度。游戏界面的大小可以通过修改WIDTH和HEIGHT宏定义的值来调整。
阅读全文