- #include <stdio.h>
- #include <conio.h> // Windows下使用getch(),Linux下可以使用ncurses库
- #include <stdlib.h>
- #include <time.h>
- #include <windows.h> // 用于Windows下的Sleep()函数
- #define WIDTH 30
- #define HEIGHT 10
- #define GROUND_HEIGHT (HEIGHT - 1)
- int dino_position = GROUND_HEIGHT; // 恐龙的位置
- int obstacle_position = WIDTH - 1; // 障碍物的起始位置
- int score = 0;
- int is_jumping = 0; // 是否在跳跃状态
- int jump_height = 3; // 跳跃高度
- int jump_progress = 0; // 当前跳跃进度
- void draw() {
- system("cls"); // 清屏
- for (int i = 0; i < HEIGHT; i++) {
- for (int j = 0; j < WIDTH; j++) {
- if (i == dino_position && j == 1) {
- printf("D"); // 用D代表小恐龙
- } else if (i == GROUND_HEIGHT && j == obstacle_position) {
- printf("|"); // 用|代表障碍物
- } else if (i == GROUND_HEIGHT) {
- printf("_"); // 地面
- } else {
- printf(" "); // 空白
- }
- }
- printf("\n");
- }
- printf("Score: %d\n", score);
- }
- void update() {
- // 障碍物向左移动
- obstacle_position--;
- if (obstacle_position < 0) {
- obstacle_position = WIDTH - 1;
- score++; // 每当避开一个障碍物,得分+1
- }
- // 处理跳跃逻辑
- if (is_jumping) {
- if (jump_progress < jump_height) {
- dino_position--;
- jump_progress++;
- } else {
- dino_position++;
- if (dino_position >= GROUND_HEIGHT) {
- dino_position = GROUND_HEIGHT;
- is_jumping = 0; // 跳跃结束
- jump_progress = 0;
- }
- }
- }
- // 检查碰撞
- if (obstacle_position == 1 && dino_position == GROUND_HEIGHT) {
- printf("Game Over! Final Score: %d\n", score);
- exit(0); // 游戏结束
- }
- }
- void jump() {
- if (!is_jumping) {
- is_jumping = 1;
- }
- }
- int main() {
- srand(time(0)); // 随机数种子
- while (1) {
- if (_kbhit()) { // 检测键盘输入
- char ch = _getch();
- if (ch == ' ') { // 按空格键跳跃
- jump();
- }
- }
- update(); // 更新游戏状态
- draw(); // 绘制游戏画面
- Sleep(100); // 控制游戏速度
- }
- return 0;
- }