tank.zip
大小:1.19MB
价格:17积分
下载量:0
评分:
5.0
上传者:2302_77099705
更新日期:2025-09-22

python实现坦克大战

资源文件列表(大概)

文件名
大小
tank/
-
tank/tank/
-
tank/tank/add.wav
127.59KB
tank/tank/background.jpg
74.69KB
tank/tank/bang.wav
9.49KB
tank/tank/blast.wav
52.88KB
tank/tank/boom_dynamic_00.png
4.04KB
tank/tank/boom_dynamic_00_fixed.png
1.48KB
tank/tank/boom_dynamic_01.png
5KB
tank/tank/boom_dynamic_01_fixed.png
2.45KB
tank/tank/boom_dynamic_02.png
5.53KB
tank/tank/boom_dynamic_02_fixed.png
2.97KB
tank/tank/boom_dynamic_03.png
7.96KB
tank/tank/boom_dynamic_03_fixed.png
5.4KB
tank/tank/boom_dynamic_04.png
9.11KB
tank/tank/boom_dynamic_04_fixed.png
6.55KB
tank/tank/boom_dynamic_05.png
5.62KB
tank/tank/boom_dynamic_05_fixed.png
3.06KB
tank/tank/brick.png
636B
tank/tank/bullet_down.png
105B
tank/tank/bullet_left.png
109B
tank/tank/bullet_right.png
109B
tank/tank/bullet_up.png
105B
tank/tank/bullet_up_fixed.png
105B
tank/tank/enemy_down.png
1006B
tank/tank/enemy_left.png
984B
tank/tank/enemy_right.png
989B
tank/tank/enemy_up.png
1009B
tank/tank/fire.wav
67.59KB
tank/tank/Gunfire.wav
1.9KB
tank/tank/hit.wav
790B
tank/tank/others/
-
tank/tank/others/appear.png
15.42KB
tank/tank/others/boom_dynamic.png
87.99KB
tank/tank/others/boom_static.png
22.14KB
tank/tank/others/protect1.png
211B
tank/tank/others/protect2.png
220B
tank/tank/start.wav
862.59KB
tank/tank/tank_down.png
1021B
tank/tank/tank_down_fixed.png
1021B
tank/tank/tank_left.png
993B
tank/tank/tank_left_fixed.png
993B
tank/tank/tank_right.png
992B
tank/tank/tank_right_fixed.png
992B
tank/tank/tank_up.png
1022B
tank/tank/tank_up_fixed.png
1022B
tank/tank.py
18.29KB

资源内容介绍

python写的坦克大战,有点地方不太完善
import pygameimport timeimport randomimport warnings# 图片颜色配置有问题的警告,通过1.py中的方法将图片ICC配置进行删除warnings.filterwarnings("ignore", message="iCCP: known incorrect sRGB profile")class MainGame(): # 游戏主窗口 window = None SCREEN_WIDTH = 800 SCREEN_HEIGHT = 500 # 创建我方坦克 TANK_P1 = None # 存储所有敌方坦克 EnemyTank_list = [] # 创建敌方坦克的数量 EnemyTank_count = 5 # 存储我方子弹的列表 Bullet_list = [] # 存储敌方子弹的列表 Enemy_bullet_list = [] # 爆炸效果列表 Explode_list = [] # 墙壁列表 Wall_list = [] # 开始游戏方法 def startGame(self): pygame.display.init() # 创建窗口加载函数 MainGame.window = pygame.display.set_mode([MainGame.SCREEN_WIDTH,MainGame.SCREEN_HEIGHT]) self.createMyTank() # 创建我方坦克 # MainGame.TANK_P1 = Tank(400,300) # 创建敌方坦克 self.createEnemyTank() self.createWalls() # 设置一下游戏标题 pygame.display.set_caption("坦克大战") # 让窗口持续刷新操作 while True: MainGame.window.fill(pygame.Color(0,0,0)) # 在循环中完成事件的获取 self.getEvent() # 将绘制文字得到的小画布,粘贴到窗口中 MainGame.window.blit(self.getTextSurface("剩余地方坦克%d辆"%len(MainGame.EnemyTank_list)),(5,5)) # 展示墙壁 self.blitWalls() # 将我方坦克加入到窗口中 if MainGame.TANK_P1 and MainGame.TANK_P1.live: MainGame.TANK_P1.displayTank() else: del MainGame.TANK_P1 MainGame.TANK_P1 = None # 循环展示敌方坦克 self.blitEnemyTank() # 根据坦克的开关调用坦克的移动方法 if MainGame.TANK_P1 and not MainGame.TANK_P1.stop: MainGame.TANK_P1.move() MainGame.TANK_P1.hitWalls() MainGame.TANK_P1.hitEnemyTank() # 调用渲染我方子弹列表的方法 self.blitBullet() # 调用渲染我方子弹列表的方法 self.blitEnemyBullet() # 调用爆炸效果方法 self.displayExplode() # 给窗口完成一个填充颜色 time.sleep(0.02) pygame.display.update() # 创建敌方坦克 def createEnemyTank(self): top = 100 for i in range(MainGame.EnemyTank_count): speed = random.randint(3, 6) left = random.randint(1, 7) eTank = EnemyTank(left*100,top,speed) MainGame.EnemyTank_list.append(eTank) def createMyTank(self): MainGame.TANK_P1 = MyTank(400, 300) # 创建音乐对象 music = Music("tank/start.wav") # 调用播放方法 music.play() def createWalls(self): for i in range(1,7): wall = Wall(120*i,240) 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 blitEnemyTank(self): for eTank in MainGame.EnemyTank_list: if eTank.live: eTank.displayTank() eTank.randMove() eTank.hitWalls() # 调用敌方坦克是否碰撞我方坦克的方法 eTank.hitMyTank() # 调用敌方坦克的射击方法 eBullet = eTank.shot() # 如果子弹为None,不加入到列表 if eBullet: # 将子弹加载到敌方子弹列表 MainGame.Enemy_bullet_list.append(eBullet) else: MainGame.EnemyTank_list.remove(eTank) # 将我方子弹渲染到窗口中 def blitBullet(self): for bullet in MainGame.Bullet_list: if bullet.live: bullet.displayBullet() # 让子弹移动 bullet.bulletMove() # 调用我方子弹与敌方坦克的碰撞方法 bullet.hitEnemyTank() # 调用判断子弹是否与墙壁发生碰撞 bullet.hitWalls() else: MainGame.Bullet_list.remove(bullet) # 将敌方子弹加入到窗口中 def blitEnemyBullet(self): for eBullet in MainGame.Enemy_bullet_list: if eBullet.live: eBullet.displayBullet() # 让子弹移动 eBullet.bulletMove() # 调用判断子弹是否与墙壁发生碰撞 eBullet.hitWalls() if MainGame.TANK_P1 and MainGame.TANK_P1.live: eBullet.hitMyTank() else: MainGame.Enemy_bullet_list.remove(eBullet) # 展示爆炸效果列表 def displayExplode(self): for explode in MainGame.Explode_list: if explode.live: explode.displayExplode() music = Music("tank/bang.wav") music.play() else: MainGame.Explode_list.remove(explode) # 获取程序运行期间所有的事件 def getEvent(self): # 1.获取所有事件 eventList = pygame.event.get() # 2. 对事件进行判断处理 for event in eventList: # 判断event.type 是否为QUIT,如果退出的话,直接条用成簇结束方法 if event.type == pygame.QUIT: self.endGame() # 判断事件类型是否为按键按下,如果是,继续判断按键是哪一个 if event.type == pygame.KEYDOWN: # 点击ESC按键让我方坦克重生 if event.key == pygame.K_ESCAPE and not MainGame.TANK_P1: # 调用创建MyTank函数 self.createMyTank() if MainGame.TANK_P1 and MainGame.TANK_P1.live: # 具体是哪一个按键的处理 if event.key == pygame.K_LEFT: print("坦克向左调头,移动") # 修改坦克方向 MainGame.TANK_P1.direction = 'L' MainGame.TANK_P1.stop = False elif event.key == pygame.K_RIGHT: print("坦克向右调头,移动") # 修改坦克方向 MainGame.TANK_P1.direction = 'R' MainGame.TANK_P1.stop = False elif event.key == pygame.K_UP: print("坦克向上调头,移动") # 修改坦克方向 MainGame.TANK_P1.direction = 'U' MainGame.TANK_P1.stop = False elif event.key == pygame.K_DOWN: print("坦克向下调头,移动") # 修改坦克方向 MainGame.TANK_P1.direction = 'D' MainGame.TANK_P1.stop = False elif event.key == pygame.K_SPACE: print("发射子弹") if len(MainGame.Bullet_list) < 3: # 产生一颗子弹 m = Bullet(MainGame.TANK_P1) # 将子弹加入到子弹列表 MainGame

用户评论 (0)

发表评论

captcha