# 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
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创造力!** 🚀