# AiTank **Repository Path**: desertstorm/ai-tank ## Basic Information - **Project Name**: AiTank - **Description**: Ai坦克大战游戏,按照一定的规则生成坦克,进行对战。提供了基本的提示词,补充一下自己的作战策略,就可以生成坦克开始对战了。 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2025-09-27 - **Last Updated**: 2025-10-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AiTank Game
Tank Icon

AI坦克智能对战平台

## 🎮 项目简介 AiTank Game是一款基于Python和FastAPI开发的AI坦克智能对战平台。玩家可以通过编写Python代码来设计自己的智能坦克AI,让它在虚拟战场上与其他坦克进行自主对战。游戏结合了策略编程、物理模拟和实时可视化,为AI爱好者提供了一个展示算法和编程能力的有趣平台。 ## 🚀 主要功能 - **AI坦克对战**:支持自定义AI坦克与内置坦克或其他玩家的坦克进行对战 - **实时可视化**:Web界面实时展示战斗过程,包括坦克移动、炮塔旋转、开炮和爆炸效果 - **物理模拟**:模拟真实坦克的移动惯性、炮塔旋转和炮弹飞行 - **多样化战场**:随机生成不同类型的战场背景(沙漠、草地、戈壁等) - **完整的坦克属性系统**:包括速度、加速度、炮塔转速、射程、攻击力等多种属性 ## 📋 游戏规则 ### 战场设定 - 矩形战场,背景随机选择沙漠、草地、戈壁等多种类型 - 每个坦克有100点初始生命值 - 坦克可以发射炮弹攻击敌方坦克 - 炮弹击中敌方坦克会造成伤害,击中墙壁或达到最大射程会爆炸 - 生命值为0的坦克被判定为失败 ### 坦克操作 - 每个周期,坦克会获得一次决策机会(调用`action()`方法) - 坦克可以执行三个基本动作:移动、旋转炮塔和开火 - 移动:设置加速度方向和大小,受最大加速度和最大速度限制 - 旋转炮塔:设置旋转方向和角度,受最大旋转速度限制 - 开火:按照指定角度发射炮弹,进入装填状态后无法立即再次开火 ### 胜利条件 - 敌方坦克生命值降为0 - 比赛时间结束时,生命值较高的一方获胜 - 如果双方生命值相同,则判定为平局 ## 💻 系统要求 - Python 3.7+ - FastAPI - Uvicorn - 现代浏览器(支持WebSocket) ## 🛠️ 安装与运行 ### 安装依赖 ```bash pip install -r requirements.txt ``` ### 启动游戏 ```bash python run.py # 或 ./run.py ``` 启动后,打开浏览器访问 [http://localhost:8000](http://localhost:8000) 即可进入游戏界面。 ## 🤖 如何创建自定义坦克 ### 坦克类结构 自定义坦克需要继承自`Tank`基类,并实现`action()`方法来控制坦克的行为。以下是一个基本的坦克类结构: ```python from src.tanks.base_tank import Tank import math class MyAwesomeTank(Tank): def __init__(self): # 调用父类初始化,设置坦克名称 super().__init__("MyAwesomeTank") # 自定义外观颜色 self.color = "#FF5733" # 橙色 # 初始化自定义属性 self.enemy_history = [] self.last_known_position = None # 重置血量 self.health = self.max_health def action(self, battlefield_info): # 在这里实现你的坦克智能决策逻辑 # 获取我方和敌方坦克信息 my_tank = battlefield_info["my_tank"] enemy_tank = battlefield_info["enemy_tank"] # 获取所有炮弹信息 bullets = battlefield_info["bullets"] # 实现移动、旋转炮塔和开火的逻辑 # ... # 示例:移动到敌方坦克位置 if enemy_tank: # 计算到敌方坦克的角度 dx = enemy_tank["position"][0] - my_tank["position"][0] dy = enemy_tank["position"][1] - my_tank["position"][1] angle_to_enemy = math.atan2(dy, dx) * 180 / math.pi # 移动方向朝向敌方 self.move(angle_to_enemy, self.max_acceleration) # 旋转炮塔朝向敌方 self.turn(1, min(abs(angle_to_enemy - my_tank["turret_direction"]), self.max_turn_speed)) # 如果可以开火,向敌方发射炮弹 if not self.is_reloading(): self.fire(angle_to_enemy) ``` ### 放置位置 将你的自定义坦克文件保存到`src/tanks/`目录下,确保文件名与类名相符(例如`my_awesome_tank.py`)。 ### 测试你的坦克 启动游戏后,你的坦克会自动加载到游戏中。在主界面选择你的坦克和一个对手,点击"开始战斗"即可观看战斗过程。 ## 📁 代码结构 ``` AiTank/ ├── src/ │ ├── __init__.py │ ├── main.py # FastAPI应用主入口 │ ├── battlefield.py # 战场逻辑 │ ├── bullet.py # 炮弹类 │ └── tanks/ # 坦克类目录 │ ├── __init__.py │ ├── base_tank.py # 基础坦克类 │ ├── desert_storm.py # 内置坦克 │ ├── shadow_hunter.py # 内置坦克 │ └── my_tank.py # 示例自定义坦克 ├── static/ # 静态资源 │ ├── css/ # 样式文件 │ ├── html/ # HTML文件 │ ├── images/ # 图片资源 │ └── js/ # JavaScript文件 ├── templates/ # 模板文件 ├── run.py # 启动脚本 ├── requirements.txt # 依赖列表 ├── MYTANK.md # 坦克开发文档 └── compile_tank.py # 坦克源码保护工具 ``` ## ⚠️ 注意事项 - 不要修改`Tank`基类的只读属性(如`max_speed`、`max_acceleration`等) - `action()`方法中,多次调用`move()`、`turn()`或`fire()`方法时,只有最后一次调用会生效 - 合理设计坦克的AI逻辑,避免过于复杂导致性能问题 - 坦克开炮后不会立即停止移动(已优化游戏流畅度) ## 🎯 构建自己坦克的提示词示例 以下是一个用于生成自定义坦克AI的提示词示例: ``` 请帮我设计一个名为"SniperTank"的坦克AI,它应该具有以下特点: 1. 战略定位:狙击手坦克,擅长远程攻击 2. 行为模式: - 保持与敌方坦克的距离在最大射程附近 - 优先选择高地或开阔位置 - 预测敌方移动轨迹,提高命中率 3. 战斗策略: - 当敌方接近时,迅速后退并寻找掩护 - 利用最小的移动来调整射击角度,减少暴露 - 采用间歇式射击策略,避免连续开火暴露位置 4. 特殊技能: - 能够计算提前量,预测移动目标的位置 - 有简单的躲避机制,当敌方炮弹接近时改变方向 5. 外观特征: - 颜色使用深蓝色(#1E3A8A) - 炮管较长 请按照AiTank游戏的坦克类结构编写完整代码,确保代码可以直接运行。 ``` ## 🤝 贡献指南 欢迎对项目提出改进建议或提交代码。如果你有任何问题或想法,请随时联系我们。 ## 📜 许可证 [MIT License](LICENSE) --- **AiTank Game - 释放你的AI创造力!** 🚀