当前位置: 首页 > article >正文

c/c++ 用easyx图形库写一个射击游戏

#include <graphics.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

// 定义游戏窗口的大小
#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600

// 定义玩家和目标的尺寸
#define PLAYER_SIZE 50
#define TARGET_SIZE 20

// 玩家的结构体
typedef struct {
    int x, y;
    int speed;
} Player;

// 目标的结构体
typedef struct {
    int x, y;
    int active;
} Target;

// 初始化游戏
void initGame(Player *player, Target *target) {
    // 初始化随机数种子
    srand((unsigned)time(NULL));

    // 初始化玩家
    player->x = WINDOW_WIDTH / 2 - PLAYER_SIZE / 2;
    player->y = WINDOW_HEIGHT - PLAYER_SIZE - 10;
    player->speed = 5;

    // 初始化目标
    target->x = rand() % (WINDOW_WIDTH - TARGET_SIZE);
    target->y = rand() % (WINDOW_HEIGHT - TARGET_SIZE);
    target->active = 1;
}

// 绘制游戏元素
void drawGame(Player player, Target target) {
    // 清屏
    cleardevice();

    // 绘制玩家(中国军人,用矩形表示)
    setfillcolor(BLACK); // 假设我们用黑色代表中国军人的简约风格
    bar(player.x, player.y, player.x + PLAYER_SIZE, player.y + PLAYER_SIZE);

    // 绘制目标(小圆点)
    if (target.active) {
        setfillcolor(RED); // 用红色表示目标
        fillcircle(target.x + TARGET_SIZE / 2, target.y + TARGET_SIZE / 2, TARGET_SIZE / 2);
    }
}

// 更新游戏状态
void updateGame(Player *player, Target *target, char input) {
    // 根据用户输入移动玩家
    if (input == 'a' && player->x > 0) {
        player->x -= player->speed;
    }
    if (input == 'd' && player->x < WINDOW_WIDTH - PLAYER_SIZE) {
        player->x += player->speed;
    }
    if (input == 'w' && player->y > 0) {
        player->y -= player->speed;
    }
    if (input == 's' && player->y < WINDOW_HEIGHT - PLAYER_SIZE) {
        player->y += player->speed;
    }

    // 检查玩家是否击中目标
    if (target->active &&
        player->x < target->x + TARGET_SIZE &&
        player->x + PLAYER_SIZE > target->x &&
        player->y < target->y + TARGET_SIZE &&
        player->y + PLAYER_SIZE > target->y) {
        target->active = 0; // 目标被击中,设置为不活动状态
        // 可以在这里添加击中目标的逻辑,比如得分、重新生成目标等
    }

    // 如果目标被击中或不活动,可以重新生成一个新目标
    if (!target->active) {
        target->x = rand() % (WINDOW_WIDTH - TARGET_SIZE);
        target->y = rand() % (WINDOW_HEIGHT - TARGET_SIZE);
        target->active = 1;
    }
}

int main() {
    // 初始化图形窗口
    initgraph(WINDOW_WIDTH, WINDOW_HEIGHT);
    setbkcolor(WHITE); // 设置背景色为白色

    // 创建玩家和目标
    Player player;
    Target target;
    initGame(&player, &target);

    // 游戏主循环
    char input;
    while (1) {
        // 获取用户输入
        if (_kbhit()) {
            input = _getch();
            if (input == 27) break; // 如果按下ESC键,则退出游戏
        }

        // 更新游戏状态
        updateGame(&player, &target, input);

        // 绘制游戏元素
        drawGame(player, target);

        // 延迟一段时间,控制游戏速度
        Sleep(30);
    }

    // 关闭图形窗口
    closegraph();
    return 0;
}

在这个游戏中,玩家可以使用WASD键来控制中国军人小方块的移动,试图击中随机出现的小目标。当目标被击中时,它会重新生成一个新的位置。游戏会持续进行,直到玩家按下ESC键退出。

请注意,这只是一个非常基础的游戏框架,您可以根据自己的喜好和需求进一步扩展和完善它,比如添加得分系统、计时器、更多的游戏元素和交互等。同时,您还可以尝试使用EasyX提供的更多图形功能来丰富游戏的视觉效果。


http://www.kler.cn/a/414586.html

相关文章:

  • 开发需求总结19-vue 根据后端返回一年的数据,过滤出符合条件数据
  • Mac安装及合规无限使用Beyond Compare
  • Unity ShaderLab 实现网格爆炸
  • 非递归遍历二叉树(数据结构)
  • 火山引擎VeDI在AI+BI领域的演进与实践
  • kafka消费者组和分区数之间的关系是怎样的?
  • 探索C/C++的奥秘之C++中的继承
  • 【C++】 list接口以及模拟实现
  • 【AI技术赋能有限元分析应用实践】pycharm终端与界面设置导入Abaqus2024自带python开发环境
  • 美畅物联丨如何通过ffmpeg排查视频问题
  • 直播实时美颜平台开发详解:基于视频美颜SDK的技术路径
  • go 和java 编写方式的理解
  • 数据安全与隐私保护:大数据时代的挑战与机遇
  • 华为海思2025届校招笔试面试经验分享
  • 关于Spring基础了解
  • SOLID原则学习【目录篇】
  • Ubuntu20.04下安装VSCode(配置C/C++开发环境)和设备树插件用于嵌入式开发
  • ESP32学习笔记_Peripherals(1)——UART
  • 企业建站高性能的内容管理系统
  • Swagger记录一次生成失败
  • 关于IDE的相关知识之一【使用技巧】
  • python(四)os模块、sys模块
  • git如何给历史提交打标签
  • 【Vue2.x】vue-treeselect修改宽度、回显
  • 电脑无互联网连接怎么解决?分享5种解决方案
  • (0基础保姆教程)-JavaEE开课啦!--11课程(初识Spring MVC + Vue2.0 + Mybatis)-实验9