inux里用c语言写贪吃蛇
时间: 2024-06-12 16:05:37 浏览: 20
以下是一个简单的贪吃蛇程序,使用C语言编写。该程序使用ncurses库来实现游戏的图形界面,可以在Linux系统中编译和运行。
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ncurses.h>
#define ROWS 20
#define COLS 40
#define SNAKE_LEN 5
typedef struct {
int row;
int col;
} point_t;
enum direction {UP, DOWN, LEFT, RIGHT};
int main()
{
// 初始化ncurses
initscr();
cbreak();
noecho();
keypad(stdscr, TRUE);
curs_set(FALSE);
// 初始化游戏界面
clear();
refresh();
mvprintw(0, 0, "Press any key to start...");
getch();
// 初始化随机数生成器
srand(time(NULL));
// 初始化贪吃蛇
point_t snake[SNAKE_LEN];
snake[0].row = ROWS / 2;
snake[0].col = COLS / 2;
for (int i = 1; i < SNAKE_LEN; i++) {
snake[i].row = snake[0].row;
snake[i].col = snake[0].col - i;
}
enum direction dir = RIGHT;
int grow = 0;
// 初始化食物
point_t food;
food.row = rand() % ROWS;
food.col = rand() % COLS;
// 开始游戏循环
while (1) {
// 绘制游戏界面
clear();
for (int r = 0; r < ROWS; r++) {
for (int c = 0; c < COLS; c++) {
if (r == snake[0].row && c == snake[0].col) {
mvprintw(r, c, "H");
} else if (grow && r == snake[SNAKE_LEN-1].row && c == snake[SNAKE_LEN-1].col) {
mvprintw(r, c, "O");
grow = 0;
} else if (r == food.row && c == food.col) {
mvprintw(r, c, "X");
} else {
for (int i = 1; i < SNAKE_LEN; i++) {
if (r == snake[i].row && c == snake[i].col) {
mvprintw(r, c, "o");
break;
}
}
}
}
}
refresh();
// 处理用户输入
int ch = getch();
if (ch == KEY_UP && dir != DOWN) {
dir = UP;
} else if (ch == KEY_DOWN && dir != UP) {
dir = DOWN;
} else if (ch == KEY_LEFT && dir != RIGHT) {
dir = LEFT;
} else if (ch == KEY_RIGHT && dir != LEFT) {
dir = RIGHT;
}
// 移动贪吃蛇
for (int i = SNAKE_LEN-1; i > 0; i--) {
snake[i].row = snake[i-1].row;
snake[i].col = snake[i-1].col;
}
switch (dir) {
case UP:
snake[0].row--;
break;
case DOWN:
snake[0].row++;
break;
case LEFT:
snake[0].col--;
break;
case RIGHT:
snake[0].col++;
break;
}
// 检查贪吃蛇是否撞墙或吃到食物
if (snake[0].row < 0 || snake[0].row >= ROWS || snake[0].col < 0 || snake[0].col >= COLS) {
mvprintw(ROWS/2, COLS/2-4, "Game Over");
break;
} else if (snake[0].row == food.row && snake[0].col == food.col) {
grow = 1;
do {
food.row = rand() % ROWS;
food.col = rand() % COLS;
} while (food.row == snake[0].row && food.col == snake[0].col);
}
// 暂停一段时间,控制游戏速度
usleep(100000);
}
// 清理ncurses
endwin();
return 0;
}
```
运行该程序,将会在终端中显示一个贪吃蛇游戏界面。玩家可以使用方向键来控制贪吃蛇的移动,吃到食物会让贪吃蛇变长,撞到墙或自己则游戏结束。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)