'''
新增功能:
1.完善音效类
2.添加开场音效
3.我方坦克发射子弹音效
'''
from pygame.sprite import Sprite
import pygame, time, random
screen_width = 700
screen_height = 500
Bk_color = pygame.Color(200, 155, 0)
TEXT_COLOR = pygame.Color(111, 0, 110)
#定义一个基类
class BaseItem(Sprite):
def __init__(self, color, width, height):
# Call the parent class (Sprite) constructor
pygame.sprite.Sprite.__init__(self)
class Maingame():
window = None
my_tank = None
Wall = None
# 存储敌方坦克的列表
enemyTanklist = []
# 定义敌方坦克的数量
enemyTankCount = 5
# 存储我方子弹的列表
myBulletlist = []
#存储敌方子弹的列表
enemyBulletlist = []
#存储爆炸效果的列表
explodelist = []
#存储墙壁的列表
walllist = []
def __init__(self):
pass
# 开始游戏
def starGame(self):
# 加载主窗口
# -初始化窗口
pygame.display.init()
# 设置窗口的大小及显示
Maingame.window = pygame.display.set_mode([screen_width, screen_height])
# 初始化我方坦克
self.createMytank()
# 初始化敌方坦克,并添加到列表中
self.createEnemyTank()
#初始化墙壁
self.createWall()
# 设置窗口的标题
pygame.display.set_caption('坦克大战1.0')
# 一直显示
while True:
# 使用坦克移动的速度慢一点
time.sleep(0.02)
# 给窗口设置填充色
Maingame.window.fill(Bk_color)
# 获取事件
self.getEvent()
# 绘制文字
Maingame.window.blit(self.getTextSuface('敌方坦克剩余数量%d' % len(Maingame.enemyTanklist)), (10, 10))
# 调用坦克显示的方法
#判断我方坦克是否存活
if Maingame.my_tank and Maingame.my_tank.live:
Maingame.my_tank.displayTank()
else:
#删除我方坦克
del Maingame.my_tank
Maingame.my_tank = None
# 循环遍历敌方坦克列表,展示敌方坦克
self.blitEnemyTank()
# 循环遍历显示我方坦克的子弹
self.blitMyBullet()
# 循环遍历敌方子弹列表,显示敌方子弹
self.blitenemyBullet()
# 循环遍历爆炸列表,展示爆炸效果
self.blitExplode()
#循环遍历墙壁列表来展示
self.blitWall()
# 调用移动方法
# 如果坦克的开关是开启,才可以移动
if Maingame.my_tank and Maingame.my_tank.live:
if not Maingame.my_tank.stop:
Maingame.my_tank.move()
#检测我方坦克是否与墙壁发生碰撞
Maingame.my_tank.hitWall()
# 检测我方坦克是否与敌方坦克发生碰撞
Maingame.my_tank.myTank_hit_enemyTank()
pygame.display.update()
#循环遍历墙壁列表来展示
def blitWall(self):
for wall in Maingame.walllist:
#判断墙壁是否存活
if wall.live:
#调用墙壁的显示方法
wall.displayWall()
else:
#从墙壁列表移除
Maingame.walllist.remove(wall)
#调用墙壁的显示方法
wall.displayWall()
#初始化墙壁
def createWall(self):
for i in range(6):
#初始化墙壁
wall = Wall (i *150,220)
#将墙壁添加到列表中
Maingame.walllist.append(wall)
#创建我方坦克的方法
def createMytank(self):
Maingame.my_tank = MyTank(350,300)
#创建music对象
music = Music('../img/start.wav')
#播放音乐
music.play()
# 初始化敌方坦克,并添加到列表中
def createEnemyTank(self):
top = 100
# 循环生成敌方坦克
for i in range(Maingame.enemyTankCount):
left = random.randint(100,200)
speed = random.randint(1, 3)
enemy = EnemyTank(left, top, speed)
Maingame.enemyTanklist.append(enemy)
#循环展示爆炸效果
def blitExplode(self):
for explode in Maingame.explodelist:
#判断是否活着
if explode.live:
#展示
explode.displayExplode()
else:
#在爆炸列表中移除
Maingame.explodelist.remove(explode)
# 循环遍历敌方坦克列表,展示敌方坦克
def blitEnemyTank(self):
for enemyTank in Maingame.enemyTanklist:
#判断当前敌方坦克是否活着
if enemyTank.live:
enemyTank.displayTank()
enemyTank.randMove()
#调用检测是否与墙壁碰撞
enemyTank.hitWall()
#检测敌方坦克是否与我方坦克发生碰撞
if Maingame.my_tank and Maingame.my_tank.live:
enemyTank.enemyTank_hit_myTank()
#发射子弹
enemyBullet = enemyTank.shot()
# 判断敌方子弹是否是None,如果不是None则加入敌方子弹列表中
if enemyBullet:
#将敌方子弹存储到敌方列表中
Maingame.enemyBulletlist.append(enemyBullet)
else:#不活着,从敌方坦克列表中移除
Maingame.enemyTanklist.remove(enemyTank)
# 循环遍历我方子弹存储列表
def blitMyBullet(self):
for myBullet in Maingame.myBulletlist:
# 判断当前的子弹是否是活着的状态,如果是则进行显示及移动
if myBullet.live:
myBullet.displayBullet()
# 调用子弹的移动方法
myBullet.move()
#调用检测我方子弹是否与敌方坦克发生碰撞!!!
myBullet.myBullet_hit_enemyTank()
# 检测我方子弹是否与墙壁碰撞
myBullet.hitWall()
# 否则在列表
else:
Maingame.myBulletlist.remove(myBullet)
# 循环遍历敌方子弹列表,展示敌方子弹
def blitenemyBullet(self):
for enemyBullet in Maingame.enemyBulletlist:
if enemyBullet.live: # 判断地方子弹是否存活
enemyBullet.displayBullet()
# 调用子弹的移动方法
enemyBullet.move()
#调用地方子弹与我方坦克碰撞的方法
enemyBullet.enemyBullet_hit_myTank()
#检测我方子弹是否与墙壁碰撞
enemyBullet.hitWall()
#否则在列表中删除
else:
Maingame.enemyBulletlist.remove(enemyBullet)
# 结束游戏
def endGame(self):
print('END GAME '
'-----------'
'Reporting Officer'
'Enemy situation detected 1.1 kilometers ahead'
'########'
'keep up with'
)
exit()
# 左上角文字的绘制
def getTextSuface(self, text):
# 初始化字体模块
pygame.font.init()
# 查看所有的字体
# print(pygame.font.get_fonts())
# 获取字体font对象
font = pygame.font.SysFont('kaiti', 18)
# 绘制文字信息
textSurface = font.render(text, True, TEXT_COLOR)
return textSurface
# 获取事件
def getEvent(self):
# 获取所有事件
e
没有合适的资源?快使用搜索试试~ 我知道了~
坦克大战游戏基础含图标+音效Tank
共56个文件
py:23个
gif:15个
xml:10个
需积分: 0 0 下载量 90 浏览量
2023-07-25
23:58:41
上传
评论
收藏 2.7MB ZIP 举报
温馨提示
空格 射击 Esc 复活
资源推荐
资源详情
资源评论
收起资源包目录
tk.zip (56个子文件)
tk
kk
img
p1tankU.gif 3KB
blast2.gif 3KB
p1tankL.gif 4KB
enemy1D.gif 4KB
fire.wav 68KB
Tank.wav 2MB
blast0.gif 744B
blast1.gif 2KB
enemymissile.gif 377B
p1tankR.gif 4KB
start.wav 863KB
hit.wav 23KB
enemy1R.gif 4KB
blast4.gif 6KB
enemy1L.gif 4KB
blast3.gif 4KB
steels.gif 2KB
p1tankD.gif 3KB
enemy1U.gif 4KB
tt
tank04.py 3KB
tank10.py 9KB
tank17.py 17KB
tank19.py 19KB
tank22.py 21KB
tank01.py 1KB
tank07.py 5KB
tank02.py 2KB
tank16.py 14KB
.idea
workspace.xml 2KB
tt.iml 291B
misc.xml 189B
inspectionProfiles
Project_Default.xml 457B
profiles_settings.xml 174B
modules.xml 263B
.gitignore 50B
tank18.py 18KB
tank03.py 3KB
tank13.py 11KB
tank21.py 21KB
tank09.py 8KB
tank14.py 12KB
tank12.py 10KB
tank05.py 4KB
tank15.py 13KB
tank06.py 5KB
tank08.py 7KB
tank20.py 20KB
tank11.py 10KB
main.py 512B
.idea
workspace.xml 9KB
misc.xml 189B
inspectionProfiles
Project_Default.xml 457B
profiles_settings.xml 174B
modules.xml 269B
tank1.iml 291B
.gitignore 50B
共 56 条
- 1
资源评论
码盾
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功