#导入游戏模块
import pygame
import sys
import time
import random
# 坦克大战的项目框架的搭建
#这个是创建一个主逻辑类
COLOR_RED = pygame.Color(255, 0, 0) # 颜色
class MainGame:
#游戏主窗口
window = None
SCREEN_HEIGHT = 600
SCREEN_WIDTH = 1400
COLOR_BLAKCK = pygame.Color(0,0,0)#窗口颜色
PI_TANK = None # 创建我方坦克
#存储所有坦克
EnemyTank_list = []
#要创建坦克的数量
EnemTank_count = 6
# 存储我方子弹的列表
Bullet_list = []
# 存储敌方子弹的列表
Enemy_bullet_list = []
#爆炸效果列表
Explode_list = []
#墙壁列表
Wall_list = []
def __init__(self):
pass
def startGame(self): # 开始游戏
#初始化显示模块
pygame.display.init()
#创建一个窗口加载窗口
MainGame.window = pygame.display.set_mode([MainGame.SCREEN_WIDTH,MainGame.SCREEN_HEIGHT])
#创建我方坦克
MainGame.PI_TANK = Tank(150,300)
self.creatMyTank()
#创建敌方坦克
self.creaEnmeyTank()
self.creatWalls()
#设置一个游戏标题
pygame.display.set_caption("坦克大战")
# 初始化要显示的窗口或屏幕
# 让窗口持续刷新操作
while True:
#给窗口完成一个颜色
MainGame.window.fill(MainGame.COLOR_BLAKCK)
self.getEvent()
# 将绘制文字得到小画布,粘贴到窗口中
MainGame.window.blit(self.getTextSurface(f"敌方一共有坦克{MainGame.EnemTank_count}辆"), (5, 5))
#调用展示墙壁的方法
self.blitWalls()
if MainGame.PI_TANK and MainGame.PI_TANK.live:
# 将我方坦克加入到窗口中
MainGame.PI_TANK.displayTnk()
else:
del MainGame.PI_TANK
MainGame.PI_TANK = None
#循环展示敌方坦克
self.blitEnmeyTank()
# 调用坦克的移动方法
if MainGame.PI_TANK and not MainGame.PI_TANK.stop:
MainGame.PI_TANK.move()
# 调用渲染子弹列表
self.blitBullet()
#调用渲染敌方子弹列表
self.blitEnemyBullet()
#调用展示爆炸效果的方法
self.displayExplodes()
time.sleep(0.02)#控制循环的时间,这个是以秒为单位,不要写太夸张
pygame.display.update() #更新软件显示的屏幕部分
def creatMyTank(self):
#创建我方坦克
MainGame.PI_TANK = Tank(150,300)
#创建敌方坦克
def creaEnmeyTank(self):
top = 400
for i in range(MainGame.EnemTank_count):
speed = random.randint(3, 6)#敌方坦克的移动速度
#每次都随机生成一个left值
left = random.randint(1, 8)
eTank = EnemyTank(left * 100,top,speed)
MainGame.EnemyTank_list.append(eTank)
#创建墙壁的方法
def creatWalls(self):
for i in range(1,8):
wall = Wall(180 * i, 200)
MainGame.Wall_list.append(wall)
def blitWalls(self):
for wall in MainGame.Wall_list:
if wall.live:
wall.displayWall()
else:
MainGame.Wall_list.remove(wall)
#将敌方坦克加入到窗口中
def blitEnmeyTank(self):
for eTank in MainGame.EnemyTank_list:
if eTank.live:
eTank.displayTnk()
# 敌方坦克的移动方法
eTank.randMove()
# 调用敌方坦克的射击
eBullet = eTank.shot()
# 将子弹存储敌方子弹列表
if eBullet:
MainGame.Enemy_bullet_list.append(eBullet)
else:
MainGame.EnemyTank_list.remove(eTank)
# 将我方子弹加入到窗口中
def blitBullet(self):
for bullet in MainGame.Bullet_list:
# bullet.displayBullet()#无限子弹
# #让子弹移动
# bullet.bulletMove()
# 如果子弹还活着,绘制出来,否则 ,直接从列表中移除子弹
if bullet.live:
bullet.displayBullet()
# 让子弹移动
bullet.bulletMove()
#调用我方子弹敌方坦克的相互碰撞方法
bullet.hitEnemyTank()
#判断我方子弹是否碰撞到墙壁的方法
bullet.hitWall()
else:
MainGame.Bullet_list.remove(bullet)
#将敌方子弹加入到窗口中
def blitEnemyBullet(self):
for eBullet in MainGame.Enemy_bullet_list:
# bullet.displayBullet()#无限子弹
# #让子弹移动
# bullet.bulletMove()
# 如果子弹还活着,绘制出来,否则 ,直接从列表中移除子弹
if eBullet.live:
eBullet.displayBullet()
# 让子弹移动
eBullet.bulletMove()
#判断敌方子弹是否碰撞
eBullet.hitWall()
if MainGame.PI_TANK and MainGame.PI_TANK.live:
eBullet.hitMyTank()
else:
MainGame.Enemy_bullet_list.remove(eBullet)
#展示爆炸方法 到 列表
def displayExplodes(self):
for explode in MainGame.Explode_list:
if explode.live:
explode.dipiayplode()
else:
MainGame.Explode_list.remove(explode)
# 结束游戏
def endGame(self):
print("谢谢使用")
pygame.quit()
sys.exit()
#获取程序期间所有事件【鼠标与键盘】
def getEvent(self):
eventlist = pygame.event.get() #中从队列中获取单个事件
for event in eventlist:#对eventlist进行遍历
#判断event.type 是否为QUIT
if event.type == pygame.QUIT:
print("游戏结束")
self.endGame()
if event.type == pygame.KEYDOWN:
print(event.key)
if event.key == pygame.K_ESCAPE and not MainGame.PI_TANK:
#调用我方坦克的方法
self.creatMyTank()
print("重生我方坦克")
if MainGame.PI_TANK and MainGame.PI_TANK.live:
if event.key == pygame.K_LEFT:
print("坦克向左移动")
MainGame.PI_TANK.direction = "L"
MainGame.PI_TANK.stop = False
# MainGame.PI_TANK.move()
elif event.key == pygame.K_RIGHT:
print("坦克向右移动")
MainGame.PI_TANK.direction = "R"
MainGame.PI_TANK.stop = False
# MainGame.PI_TANK.move()
elif event.key == pygame.K_UP:
print("坦克向上移动")
# MainGame.PI_TANK.move()
MainGame.PI_TANK.direction = "U"
MainGame.PI_TANK.stop = False
elif event.key == pygame.K_DOWN:
print("坦克向下移动")
MainGame.PI_TANK.direction = "D"
MainGame.PI_TANK.stop = False
# MainGame.PI_TANK.move()
elif event.key == pygame.K_SPACE:
print("发射子弹")
if len(MainGame.Bullet_list) < 9999:
# 产生一个子弹
没有合适的资源?快使用搜索试试~ 我知道了~
这是我做的坦克大战的项目现在免费分享
共24个文件
gif:8个
png:5个
xml:4个
0 下载量 91 浏览量
2024-11-17
14:26:39
上传
评论
收藏 50KB ZIP 举报
温馨提示
这是我做的坦克大战的项目现在免费分享
资源推荐
资源详情
资源评论
收起资源包目录
python坦克大战项目包.zip (24个子文件)
python坦克大战项目包
图标包
左1.gif 2KB
collision_.png 10KB
右.gif 2KB
敌方子弹.png 6KB
我方子弹.png 3KB
上1.gif 2KB
墙壁.png 5KB
爆炸.png 5KB
下.gif 2KB
左.gif 2KB
下1.gif 2KB
上.gif 2KB
右1.gif 2KB
主程序.py 18KB
.idea
workspace.xml 28KB
misc.xml 294B
python坦克大战项目包.iml 291B
inspectionProfiles
profiles_settings.xml 174B
modules.xml 313B
.gitignore 190B
__pycache__
主程序.cpython-39.pyc 2KB
坦克类.cpython-39.pyc 2KB
爆炸效果类.cpython-39.pyc 664B
子弹类.cpython-39.pyc 774B
共 24 条
- 1
资源评论
零希
- 粉丝: 541
- 资源: 47
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功