# 2Dgame **Repository Path**: wcj2007/2-dgame ## Basic Information - **Project Name**: 2Dgame - **Description**: This is a 2D shooting game. - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-07 - **Last Updated**: 2026-06-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 2D Tactical Defusal (Pygame) 一个只使用 `pygame` 图形绘制(不使用任何图片资源)的 2D 战术射击小游戏。 本版本包含更完整的战术系统: - 中心视角(玩家固定在屏幕中心)+ 地图移动 - 有限视野(以准星方向为中心的扇形视野) - 小地图 - 地图外圈空气墙 - 默认全屏(可切换) - 击杀卡牌提示(屏幕下方中部) - 出击前购买阶段(出生点按住 B 打开中央购买菜单) - 武器槽位系统(1-4:主武器/副武器/刀/手雷) - Q 丢枪,路过可自动捡枪 - 狙击武器开镜(按住鼠标右键,圆形准星) ## 运行 ```bash python main.py ``` ## 游戏截图 > 以下截图来自 `screenshots/` 目录。 ![主界面与战场-1](screenshots/2dgame_20260402_154651.png) ![主界面与战场-2](screenshots/2dgame_20260402_154656.png) ![交战场景-1](screenshots/2dgame_20260402_154712.png) ![交战场景-2](screenshots/2dgame_20260402_154722.png) ![交战场景-3](screenshots/2dgame_20260402_154754.png) ## 封装打包(统一输出到 output) 项目根目录已提供 `package.ps1`,会将所有 PyInstaller 产物输出到 `output/`: - `output/dist/`:可执行文件 - `output/build/`:构建中间文件 - `output/spec/`:构建时使用的 spec 文件副本 执行命令: ```powershell ./package.ps1 ``` ## 操作 - `1` 选择进攻方 / 切主武器槽 - `2` 选择防守方 / 切副武器槽 - `3` 切刀 - `4` 切手雷 - `W A S D` 移动 - `鼠标左键` 攻击/射击 - `鼠标右键` 狙击开镜(重型狙击) - `E` 安放装置/拆除装置(需要持续按住) - `R` 手动换弹 - `Q` 丢弃当前主/副武器 - `B` 购买阶段按住打开购买菜单(仅出生点) - `F11` 全屏/窗口切换 - `ENTER` 立刻下一回合(回合结算时) - `N` 重置并重新选边 - `ESC` 退出 ### 购买方式 - 在购买时间内,回到出生点并按住 `B` - 屏幕中央弹出卡牌购买面板 - 鼠标左键点击卡牌购买武器 - 松开 `B` 后面板隐藏 ## 模式说明 - 只有战术拆除模式(单目标点 A) - 一局比赛先到 5 分获胜 - 回合胜利条件: - 消灭对方全部成员 - 进攻方成功引爆装置 - 防守方成功拆除装置 - 回合时间结束且未安放装置,则防守方胜利 ## 系统说明 - 经济系统:击杀奖励、回合胜负奖励、安放装置奖励 - 同一局比赛内,回合间经济会继承累计 - 击杀播报在右上角显示,个人击杀成就卡在下方中部显示 - 小地图在左上角:显示队友位置,队友死亡后会显示红叉 - 机器人具备巡逻、追击、拉枪线和基础绕障能力 - 武器掉落后会留在地图中,经过即可拾取 - 主菜单与创意工坊:支持从 `workshop_maps/*.json` 加载自定义地图 - 装置作为独立物品:携带者被击杀会掉落装置,进攻方可捡起并继续安放,防守方会守护并拆除装置 ## 创意工坊地图格式 在项目根目录创建 `workshop_maps` 文件夹并放入 `.json` 文件。 示例字段: - `world_size`: `[w, h]`,地图尺寸(可选,默认 `3200x2200`) - `background_image`: `"xxx.png"`,背景图路径(可选,建议放在 `workshop_maps/` 下并使用相对路径) - `wall_color`: `[r, g, b]`,墙体默认颜色(可选) - `site`: `[x, y, w, h]`,目标点矩形 - `t_spawns`: `[[x, y], ...]`,进攻方 5 个出生点 - `ct_spawns`: `[[x, y], ...]`,防守方 5 个出生点 - `walls`: `[[x, y, w, h], ...]` 或 `[{"rect": [x,y,w,h], "color": [r,g,b]}, ...]`,地图内部墙体 - `patrol_t`: `[[x, y], ...]`,进攻方机器人巡逻点 - `patrol_ct`: `[[x, y], ...]`,防守方机器人巡逻点 简例: ```json { "world_size": [4200, 2600], "background_image": "arena_bg.png", "wall_color": [96, 120, 146], "walls": [ [500, 420, 280, 560], {"rect": [980, 720, 420, 90], "color": [180, 90, 80]} ] } ``` 游戏内:主菜单进入 `Creative Workshop`,选择地图并加载。 ## 代码结构 - `main.py`:游戏主循环、输入、渲染、回合流程 - `entities.py`:角色与战斗实体(玩家、子弹、手雷、装置等) - `settings.py`:全局常量与配色 - `game_data.py`:武器数据与购买配置 - `network/lan_session.py`:局域网联机会话与状态同步 ## 技术约束 - 不读取任何角色、地图、道具图片 - 全部角色、子弹、地图、HUD 都由 pygame 几何图元实时绘制 ## 兼容性说明 - 推荐 Python 3.10 - 3.14 - 若你使用 Python 3.14,请使用本项目内的 `requirements.txt` 安装 `pygame-ce`。 - `pygame-ce` 仍然使用 `import pygame`,无需修改代码。