dev输出fly bird游戏的c语言代码,确定游戏规则和玩法,包括小鸟如何上下飞行,如何计分,如何结束游戏
时间: 2024-05-11 11:19:43 浏览: 82
Dev-C++可编译执行的彩色俄罗斯方块游戏代码
以下是一个简单的 C 语言实现的 "Fly Bird" 游戏代码,规则和玩法如下:
1. 游戏开始后,小鸟会以一个固定的速度向右飞行,玩家需要通过按下空格键来让小鸟向上飞行;
2. 每次按下空格键,小鸟会上升一定高度,松开空格键后会下降;
3. 游戏中有一些障碍物,小鸟碰到障碍物或者碰到游戏边界时游戏结束;
4. 每次成功穿过一个障碍物,玩家得到一分,并且游戏难度会逐步增加,障碍物的间距会逐渐变小。
注:代码只是一个简单的实现,可能存在一些不足之处,仅供参考。
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define WIDTH 80 // 游戏画面宽度
#define HEIGHT 20 // 游戏画面高度
#define BIRD_POS_X 10 // 小鸟初始位置
#define BIRD_POS_Y 10
#define BIRD_CHAR 'O' // 小鸟的字符表示
#define OBSTACLE_CHAR '|' // 障碍物的字符表示
#define GAP_MIN 5 // 障碍物间距的最小值
#define GAP_MAX 15 // 障碍物间距的最大值
#define OBSTACLE_WIDTH 3 // 障碍物的宽度
int score = 0; // 玩家分数
// 游戏障碍物结构体
typedef struct Obstacle {
int pos_x; // 障碍物在画面中的横坐标
int gap_pos_y; // 障碍物中间的空隙在画面中的纵坐标
} Obstacle;
// 将光标移动到指定位置
void gotoxy(int x, int y) {
COORD pos = { x, y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
// 隐藏光标
void hide_cursor() {
CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
// 在指定位置打印字符
void put_char(int x, int y, char c) {
gotoxy(x, y);
putchar(c);
}
// 初始化游戏画面
void init_screen() {
// 清屏
system("cls");
// 打印游戏边界
for (int i = 0; i < HEIGHT; i++) {
put_char(0, i, '|');
put_char(WIDTH - 1, i, '|');
}
}
// 初始化障碍物
void init_obstacle(Obstacle* obstacle) {
obstacle->pos_x = WIDTH - 1;
obstacle->gap_pos_y = rand() % (HEIGHT - GAP_MAX - 2) + GAP_MIN + 1;
}
// 移动障碍物
void move_obstacle(Obstacle* obstacle) {
// 擦除原来的障碍物
for (int i = 1; i <= HEIGHT; i++) {
put_char(obstacle->pos_x - 1, i, ' ');
put_char(obstacle->pos_x, i, ' ');
put_char(obstacle->pos_x + 1, i, ' ');
}
// 计算新的障碍物位置
obstacle->pos_x--;
// 打印新的障碍物
for (int i = 1; i <= obstacle->gap_pos_y - 1; i++) {
put_char(obstacle->pos_x, i, OBSTACLE_CHAR);
}
for (int i = obstacle->gap_pos_y + 1; i <= HEIGHT; i++) {
put_char(obstacle->pos_x, i, OBSTACLE_CHAR);
}
// 如果障碍物已经移出画面,则重新初始化
if (obstacle->pos_x < 1) {
init_obstacle(obstacle);
score++; // 玩家得分
}
}
// 判断小鸟是否碰到障碍物
int is_hit(Obstacle obstacle, int bird_pos_x, int bird_pos_y) {
if (bird_pos_x + 1 >= obstacle.pos_x && bird_pos_x - 1 <= obstacle.pos_x + OBSTACLE_WIDTH - 1) {
if (bird_pos_y - 1 <= obstacle.gap_pos_y - 1 || bird_pos_y + 1 >= obstacle.gap_pos_y + 1) {
return 1;
}
}
return 0;
}
// 游戏结束
void game_over() {
gotoxy(WIDTH / 2 - 4, HEIGHT / 2);
printf("Game Over!");
gotoxy(WIDTH / 2 - 4, HEIGHT / 2 + 1);
printf("Score: %d", score);
}
int main() {
hide_cursor(); // 隐藏光标
srand((unsigned)time(NULL)); // 初始化随机数生成器
// 初始化游戏画面
init_screen();
// 初始化小鸟
int bird_pos_x = BIRD_POS_X, bird_pos_y = BIRD_POS_Y;
// 初始化障碍物
Obstacle obstacle;
init_obstacle(&obstacle);
// 游戏循环
while (1) {
// 移动小鸟
bird_pos_y++;
put_char(bird_pos_x, bird_pos_y - 1, ' ');
put_char(bird_pos_x, bird_pos_y, BIRD_CHAR);
// 移动障碍物
move_obstacle(&obstacle);
// 判断小鸟是否碰到障碍物或者碰到游戏边界
if (is_hit(obstacle, bird_pos_x, bird_pos_y) || bird_pos_y >= HEIGHT - 1) {
game_over();
break;
}
// 检查键盘输入
if (_kbhit()) {
int key = _getch();
if (key == ' ') {
bird_pos_y -= 2;
}
}
// 等待一段时间
Sleep(100);
}
return 0;
}
```
阅读全文