本游戏制作代码量较大
具体代码与图片声源可以在我的GitHub中下载
github地址
下面来看看然后利用python做一个坦克大战游戏

创建子弹类

import pygameclass Bullet(pygame.sprite.Sprite):def __init__(self):pygame.sprite.Sprite.__init__(self)self.bullet_up = pygame.image.load(r"..\image\bullet_up.png")self.bullet_down = pygame.image.load(r"..\image\bullet_down.png")self.bullet_left = pygame.image.load(r"..\image\bullet_left.png")self.bullet_right = pygame.image.load(r"..\image\bullet_right.png")# 子弹方向   速度   生命   碎石self.dir_x, self.dir_y = 0, 0self.speed  = 6self.life   = Falseself.strong = Falseself.bullet = self.bullet_upself.rect = self.bullet.get_rect()self.rect.left, self.rect.right = 3 + 12 * 24, 3 + 24 * 24def changeImage(self, dir_x, dir_y):self.dir_x, self.dir_y = dir_x, dir_yif self.dir_x == 0 and self.dir_y == -1:self.bullet = self.bullet_upelif self.dir_x == 0 and self.dir_y == 1:self.bullet = self.bullet_downelif self.dir_x == -1 and self.dir_y == 0:self.bullet = self.bullet_leftelif self.dir_x == 1 and self.dir_y == 0:self.bullet = self.bullet_rightdef move(self):self.rect = self.rect.move(self.speed * self.dir_x,self.speed * self.dir_y)# 碰撞地图边缘if self.rect.top < 3:self.life = False#    self.rect.left, self.rect.right = 3 + 12 * 24, 3 + 24 * 24if self.rect.bottom > 630 - 3:self.life = False#    self.rect.left, self.rect.right = 3 + 12 * 24, 3 + 24 * 24if self.rect.left < 3:self.life = False#    self.rect.left, self.rect.right = 3 + 12 * 24, 3 + 24 * 24if self.rect.right > 630 - 3:self.life = False

创建敌军坦克

import pygame
import random
import bulletClassclass EnemyTank(pygame.sprite.Sprite):def __init__(self, x = None, kind = None, isred = None):pygame.sprite.Sprite.__init__(self)# 坦克出现前动画是否播放self.flash = Falseself.times = 90# 参数:坦克种类      self.kind = kindif not kind:self.kind = random.choice([1, 2, 3, 4])     # 选择敌军坦克种类        if self.kind == 1:self.enemy_x_0 = pygame.image.load(r"..\image\enemy_1_0.png").convert_alpha()self.enemy_x_3 = pygame.image.load(r"..\image\enemy_1_3.png").convert_alpha()if self.kind == 2:self.enemy_x_0 = pygame.image.load(r"..\image\enemy_2_0.png").convert_alpha()self.enemy_x_3 = pygame.image.load(r"..\image\enemy_2_3.png").convert_alpha()if self.kind == 3:self.enemy_x_0 = pygame.image.load(r"..\image\enemy_3_1.png").convert_alpha()self.enemy_x_3 = pygame.image.load(r"..\image\enemy_3_0.png").convert_alpha()if self.kind == 4:self.enemy_x_0 = pygame.image.load(r"..\image\enemy_4_0.png").convert_alpha()self.enemy_x_3 = pygame.image.load(r"..\image\enemy_4_3.png").convert_alpha()self.enemy_3_0 = pygame.image.load(r"..\image\enemy_3_0.png").convert_alpha()self.enemy_3_2 = pygame.image.load(r"..\image\enemy_3_2.png").convert_alpha()# 参数:是否携带食物self.isred = isredif not None:self.isred = random.choice((True, False, False, False, False))if self.isred:self.tank = self.enemy_x_3else:self.tank = self.enemy_x_0# 参数:坦克位置self.x = xif not self.x:self.x = random.choice([1, 2, 3])self.x -= 1# 运动中的两种图片self.tank_R0 = self.tank.subsurface(( 0, 48), (48, 48))self.tank_R1 = self.tank.subsurface((48, 48), (48, 48))self.rect = self.tank_R0.get_rect()self.rect.left, self.rect.top = 3 + self.x * 12 * 24, 3 + 0 * 24# 坦克速度   方向   生命   子弹生命   子弹延迟self.speed = 1self.dir_x, self.dir_y = 0, 1self.life = 1self.bulletNotCooling = Trueself.bullet = bulletClass.Bullet()# 是否撞墙,撞墙则改变方向self.dirChange = False# 每种坦克不同的属性if self.kind == 2:self.speed = 3if self.kind == 3:self.life = 3def shoot(self):# 赋予子弹生命self.bullet.life = Trueself.bullet.changeImage(self.dir_x, self.dir_y)if self.dir_x == 0 and self.dir_y == -1:self.bullet.rect.left = self.rect.left + 20self.bullet.rect.bottom = self.rect.top + 1elif self.dir_x == 0 and self.dir_y == 1:self.bullet.rect.left = self.rect.left + 20self.bullet.rect.top = self.rect.bottom - 1elif self.dir_x == -1 and self.dir_y == 0:self.bullet.rect.right = self.rect.left - 1self.bullet.rect.top = self.rect.top + 20elif self.dir_x == 1 and self.dir_y == 0:self.bullet.rect.left = self.rect.right + 1self.bullet.rect.top = self.rect.top + 20def move(self, tankGroup, brickGroup, ironGroup):self.rect = self.rect.move(self.speed * self.dir_x, self.speed * self.dir_y)if self.dir_x == 0 and self.dir_y == -1:self.tank_R0 = self.tank.subsurface(( 0, 0),(48, 48))self.tank_R1 = self.tank.subsurface((48, 0),(48, 48))elif self.dir_x == 0 and self.dir_y == 1:self.tank_R0 = self.tank.subsurface(( 0, 48),(48, 48))self.tank_R1 = self.tank.subsurface((48, 48),(48, 48))elif self.dir_x == -1 and self.dir_y == 0:self.tank_R0 = self.tank.subsurface(( 0, 96),(48, 48))self.tank_R1 = self.tank.subsurface((48, 96),(48, 48))elif self.dir_x == 1 and self.dir_y == 0:self.tank_R0 = self.tank.subsurface(( 0, 144),(48, 48))self.tank_R1 = self.tank.subsurface((48, 144),(48, 48))# 碰撞地图边缘if self.rect.top < 3:self.rect = self.rect.move(self.speed * 0, self.speed * 1)self.dir_x, self.dir_y = random.choice(([0,1],[0,-1],[1,0],[-1,0]))elif self.rect.bottom > 630 - 3:self.rect = self.rect.move(self.speed * 0, self.speed * -1)self.dir_x, self.dir_y = random.choice(([0,1],[0,-1],[1,0],[-1,0]))elif self.rect.left < 3:self.rect = self.rect.move(self.speed * 1, self.speed * 0)self.dir_x, self.dir_y = random.choice(([0,1],[0,-1],[1,0],[-1,0]))elif self.rect.right > 630 - 3:self.rect = self.rect.move(self.speed * -1, self.speed * 0)self.dir_x, self.dir_y = random.choice(([0,1],[0,-1],[1,0],[-1,0]))# 碰撞墙体 和坦克if pygame.sprite.spritecollide(self, brickGroup, False, None) \or pygame.sprite.spritecollide(self, ironGroup, False, None) \or pygame.sprite.spritecollide(self, tankGroup, False, None):self.rect = self.rect.move(self.speed * -self.dir_x, self.speed * -self.dir_y)self.dir_x, self.dir_y = random.choice(([0,1],[0,-1],[1,0],[-1,0]))

创建食物类

import pygame
import randomclass Food(pygame.sprite.Sprite):def __init__(self):self.food_boom    = pygame.image.load(r"..\image\food_boom.png").convert_alpha()self.food_clock   = pygame.image.load(r"..\image\food_clock.png").convert_alpha()self.food_gun     = pygame.image.load(r"..\image\food_gun.png").convert_alpha()self.food_iron    = pygame.image.load(r"..\image\food_iron.png").convert_alpha()self.food_protect = pygame.image.load(r"..\image\food_protect.png").convert_alpha()self.food_star    = pygame.image.load(r"..\image\food_star.png").convert_alpha()self.food_tank    = pygame.image.load(r"..\image\food_tank.png").convert_alpha()self.kind = random.choice([1, 2, 3, 4, 5, 6, 7])if self.kind == 1:self.image = self.food_boomelif self.kind == 2:self.image = self.food_clockelif self.kind == 3:self.image = self.food_gunelif self.kind == 4:self.image = self.food_ironelif self.kind == 5:self.image = self.food_protectelif self.kind == 6:self.image = self.food_starelif self.kind == 7:self.image = self.food_tankself.rect = self.image.get_rect()self.rect.left = self.rect.top = random.randint(100, 500)self.life = Falsedef change(self):self.kind = random.choice([1, 2, 3, 4, 5, 6, 7])if self.kind == 1:self.image = self.food_boomelif self.kind == 2:self.image = self.food_clockelif self.kind == 3:self.image = self.food_gunelif self.kind == 4:self.image = self.food_ironelif self.kind == 5:self.image = self.food_protectelif self.kind == 6:self.image = self.food_starelif self.kind == 7:self.image = self.food_tankself.rect.left = self.rect.top = random.randint(100, 500)self.life = True

创建我的坦克

import pygame
import bulletClasstank_T1_0 = r"..\image\tank_T1_0.png"
tank_T1_1 = r"..\image\tank_T1_1.png"
tank_T1_2 = r"..\image\tank_T1_2.png"
tank_T2_0 = r"..\image\tank_T2_0.png"
tank_T2_1 = r"..\image\tank_T2_1.png"
tank_T2_2 = r"..\image\tank_T2_2.png"class MyTank(pygame.sprite.Sprite):def __init__(self, playerNumber):pygame.sprite.Sprite.__init__(self)self.life = Trueif playerNumber == 1:self.tank_L0_image = pygame.image.load(tank_T1_0).convert_alpha()self.tank_L1_image = pygame.image.load(tank_T1_1).convert_alpha()self.tank_L2_image = pygame.image.load(tank_T1_2).convert_alpha()if playerNumber == 2:self.tank_L0_image = pygame.image.load(tank_T2_0).convert_alpha()self.tank_L1_image = pygame.image.load(tank_T2_1).convert_alpha()self.tank_L2_image = pygame.image.load(tank_T2_2).convert_alpha()self.level = 0self.tank = self.tank_L0_imageself.tank_R0 = self.tank.subsurface((0, 0),(48, 48))self.tank_R1 = self.tank.subsurface((48, 0),(48, 48))self.rect = self.tank_R0.get_rect()if playerNumber == 1:self.rect.left, self.rect.top = 3 + 24 * 8, 3 + 24 * 24 if playerNumber == 2:self.rect.left, self.rect.top = 3 + 24 * 16, 3 + 24 * 24 self.speed = 3self.dir_x, self.dir_y = 0, -1self.life = 3self.bulletNotCooling = Trueself.bullet = bulletClass.Bullet()#self.bullet.rect.left, self.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24def shoot(self):self.bullet.life = Trueself.bullet.changeImage(self.dir_x, self.dir_y)if self.dir_x == 0 and self.dir_y == -1:self.bullet.rect.left = self.rect.left + 20self.bullet.rect.bottom = self.rect.top + 1elif self.dir_x == 0 and self.dir_y == 1:self.bullet.rect.left = self.rect.left + 20self.bullet.rect.top = self.rect.bottom - 1elif self.dir_x == -1 and self.dir_y == 0:self.bullet.rect.right = self.rect.left - 1self.bullet.rect.top = self.rect.top + 20elif self.dir_x == 1 and self.dir_y == 0:self.bullet.rect.left = self.rect.right + 1self.bullet.rect.top = self.rect.top + 20if self.level == 1:self.bullet.speed  = 16self.bullet.strong = Falseif self.level == 2:self.bullet.speed  = 16self.bullet.strong = Trueif self.level == 3:self.bullet.speed  = 48self.bullet.strong = Truedef levelUp(self):if self.level < 2:self.level += 1if self.level == 0:self.tank = self.tank_L0_imageif self.level == 1:self.tank = self.tank_L1_imageif self.level == 2:self.tank = self.tank_L2_imageif self.level == 3:self.tank = self.tank_L2_imagedef levelDown(self):if self.level > 0:self.level -= 1if self.level == 0:self.tank = self.tank_L0_imageself.bullet.speed  = 6self.bullet.strong = Falseif self.level == 1:self.tank = self.tank_L1_imageif self.level == 2:self.tank = self.tank_L2_imagedef moveUp(self, tankGroup, brickGroup, ironGroup):self.rect = self.rect.move(self.speed * 0, self.speed * -1)self.tank_R0 = self.tank.subsurface((0, 0),(48, 48))self.tank_R1 = self.tank.subsurface((48, 0),(48, 48))self.dir_x, self.dir_y = 0, -1if self.rect.top < 3:self.rect = self.rect.move(self.speed * 0, self.speed * 1)return Trueif pygame.sprite.spritecollide(self, brickGroup, False, None) \or pygame.sprite.spritecollide(self, ironGroup, False, None):self.rect = self.rect.move(self.speed * 0, self.speed * 1)return Trueif pygame.sprite.spritecollide(self, tankGroup, False, None):self.rect = self.rect.move(self.speed * 0, self.speed * 1)return Truereturn Falsedef moveDown(self, tankGroup, brickGroup, ironGroup):self.rect = self.rect.move(self.speed * 0, self.speed * 1)self.tank_R0 = self.tank.subsurface((0, 48),(48, 48))self.tank_R1 = self.tank.subsurface((48, 48),(48, 48))self.dir_x, self.dir_y = 0, 1if self.rect.bottom > 630 - 3:self.rect = self.rect.move(self.speed * 0, self.speed * -1)return Trueif pygame.sprite.spritecollide(self, brickGroup, False, None) \or pygame.sprite.spritecollide(self, ironGroup, False, None):self.rect = self.rect.move(self.speed * 0, self.speed * -1)return Trueif pygame.sprite.spritecollide(self, tankGroup, False, None):self.rect = self.rect.move(self.speed * 0, self.speed * -1)return Truereturn Falsedef moveLeft(self, tankGroup, brickGroup, ironGroup):self.rect = self.rect.move(self.speed * -1, self.speed * 0)self.tank_R0 = self.tank.subsurface((0, 96),(48, 48))self.tank_R1 = self.tank.subsurface((48, 96),(48, 48))self.dir_x, self.dir_y = -1, 0if self.rect.left < 3:self.rect = self.rect.move(self.speed * 1, self.speed * 0)return Trueif pygame.sprite.spritecollide(self, brickGroup, False, None) \or pygame.sprite.spritecollide(self, ironGroup, False, None):self.rect = self.rect.move(self.speed * 1, self.speed * 0)return Trueif pygame.sprite.spritecollide(self, tankGroup, False, None):self.rect = self.rect.move(self.speed * 1, self.speed * 0)return Truereturn Falsedef moveRight(self, tankGroup, brickGroup, ironGroup):self.rect = self.rect.move(self.speed * 1, self.speed * 0)self.tank_R0 = self.tank.subsurface((0, 144),(48, 48))self.tank_R1 = self.tank.subsurface((48, 144),(48, 48))self.dir_x, self.dir_y = 1, 0if self.rect.right > 630 - 3:self.rect = self.rect.move(self.speed * -1, self.speed * 0)return Trueif pygame.sprite.spritecollide(self, brickGroup, False, None) \or pygame.sprite.spritecollide(self, ironGroup, False, None):self.rect = self.rect.move(self.speed * -1, self.speed * 0)return Trueif pygame.sprite.spritecollide(self, tankGroup, False, None):self.rect = self.rect.move(self.speed * -1, self.speed * 0)return Truereturn False

创建墙体类

import pygamebrickImage = r"..\image\brick.png"
ironImage = r"..\image\iron.png"class Brick(pygame.sprite.Sprite):def __init__(self):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(brickImage)self.rect = self.image.get_rect()class Iron(pygame.sprite.Sprite):def __init__(self):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(ironImage)self.rect = self.image.get_rect()class Map():def __init__(self):self.brickGroup = pygame.sprite.Group()self.ironGroup  = pygame.sprite.Group()# 数字代表地图中的位置# 画砖块X1379 = [2, 3, 6, 7, 18, 19, 22, 23]Y1379 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 17, 18, 19, 20, 21, 22, 23]X28 = [10, 11, 14, 15]Y28 = [2, 3, 4, 5, 6, 7, 8, 11, 12, 15, 16, 17, 18, 19, 20]X46 = [4, 5, 6, 7, 18, 19, 20, 21]Y46 = [13, 14]X5  = [12, 13]Y5  = [16, 17]X0Y0 = [(11,23),(12,23),(13,23),(14,23),(11,24),(14,24),(11,25),(14,25)]for x in X1379:for y in Y1379:self.brick = Brick()self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24self.brickGroup.add(self.brick)for x in X28:for y in Y28:self.brick = Brick()self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24self.brickGroup.add(self.brick)for x in X46:for y in Y46:self.brick = Brick()self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24self.brickGroup.add(self.brick)for x in X5:for y in Y5:self.brick = Brick()self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24self.brickGroup.add(self.brick)for x, y in X0Y0:self.brick = Brick()self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24self.brickGroup.add(self.brick)# 画石头for x, y in [(0,14),(1,14),(12,6),(13,6),(12,7),(13,7),(24,14),(25,14)]:self.iron = Iron()self.iron.rect.left, self.iron.rect.top = 3 + x * 24, 3 + y * 24self.ironGroup.add(self.iron)

主函数

# -*- coding: utf-8 -*-import pygame
import sys
import traceback
import wall
import myTank
import enemyTank
import fooddef main():pygame.init()pygame.mixer.init()resolution = 630, 630screen = pygame.display.set_mode(resolution)pygame.display.set_caption("Tank War ")# 加载图片,音乐,音效.background_image     = pygame.image.load(r"..\image\background.png")home_image           = pygame.image.load(r"..\image\home.png")home_destroyed_image = pygame.image.load(r"..\image\home_destroyed.png")bang_sound          = pygame.mixer.Sound(r"..\music\bang.wav")bang_sound.set_volume(1)fire_sound           = pygame.mixer.Sound(r"..\music\Gunfire.wav")start_sound          = pygame.mixer.Sound(r"..\music\start.wav")start_sound.play()# 定义精灵组:坦克,我方坦克,敌方坦克,敌方子弹allTankGroup     = pygame.sprite.Group()mytankGroup      = pygame.sprite.Group()allEnemyGroup    = pygame.sprite.Group()redEnemyGroup    = pygame.sprite.Group()greenEnemyGroup  = pygame.sprite.Group()otherEnemyGroup  = pygame.sprite.Group()  enemyBulletGroup = pygame.sprite.Group()# 创建地图 bgMap = wall.Map()# 创建食物/道具 但不显示prop = food.Food()# 创建我方坦克myTank_T1 = myTank.MyTank(1)allTankGroup.add(myTank_T1)mytankGroup.add(myTank_T1)myTank_T2 = myTank.MyTank(2)allTankGroup.add(myTank_T2)mytankGroup.add(myTank_T2)# 创建敌方 坦克for i in range(1, 4):enemy = enemyTank.EnemyTank(i)allTankGroup.add(enemy)allEnemyGroup.add(enemy)if enemy.isred == True:redEnemyGroup.add(enemy)continueif enemy.kind == 3:greenEnemyGroup.add(enemy)continueotherEnemyGroup.add(enemy)# 敌军坦克出现动画appearance_image = pygame.image.load(r"..\image\appear.png").convert_alpha()appearance = []appearance.append(appearance_image.subsurface(( 0, 0), (48, 48)))appearance.append(appearance_image.subsurface((48, 0), (48, 48)))appearance.append(appearance_image.subsurface((96, 0), (48, 48)))# 自定义事件# 创建敌方坦克延迟200DELAYEVENT = pygame.constants.USEREVENTpygame.time.set_timer(DELAYEVENT, 200)# 创建 敌方 子弹延迟1000ENEMYBULLETNOTCOOLINGEVENT = pygame.constants.USEREVENT + 1pygame.time.set_timer(ENEMYBULLETNOTCOOLINGEVENT, 1000)# 创建 我方 子弹延迟200MYBULLETNOTCOOLINGEVENT = pygame.constants.USEREVENT + 2pygame.time.set_timer(MYBULLETNOTCOOLINGEVENT, 200)# 敌方坦克 静止8000NOTMOVEEVENT = pygame.constants.USEREVENT + 3pygame.time.set_timer(NOTMOVEEVENT, 8000)delay = 100moving = 0movdir = 0moving2 = 0movdir2 = 0enemyNumber = 3enemyCouldMove      = Trueswitch_R1_R2_image  = TruehomeSurvive         = Truerunning_T1          = Truerunning_T2          = Trueclock = pygame.time.Clock()while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()# 我方子弹冷却事件if event.type == MYBULLETNOTCOOLINGEVENT:myTank_T1.bulletNotCooling = True# 敌方子弹冷却事件if event.type == ENEMYBULLETNOTCOOLINGEVENT:for each in allEnemyGroup:each.bulletNotCooling = True# 敌方坦克静止事件if event.type == NOTMOVEEVENT:enemyCouldMove = True# 创建敌方坦克延迟if event.type == DELAYEVENT:if enemyNumber < 4:enemy = enemyTank.EnemyTank()if pygame.sprite.spritecollide(enemy, allTankGroup, False, None):breakallEnemyGroup.add(enemy)allTankGroup.add(enemy)enemyNumber += 1if enemy.isred == True:redEnemyGroup.add(enemy)elif enemy.kind == 3:greenEnemyGroup.add(enemy)else:otherEnemyGroup.add(enemy)if event.type == pygame.KEYDOWN:if event.key == pygame.K_c and pygame.KMOD_CTRL:pygame.quit()sys.exit()if event.key == pygame.K_e:myTank_T1.levelUp()if event.key == pygame.K_q:myTank_T1.levelDown()if event.key == pygame.K_3:myTank_T1.levelUp()myTank_T1.levelUp()myTank_T1.level = 3if event.key == pygame.K_2:if myTank_T1.speed == 3:myTank_T1.speed = 24else:myTank_T1.speed = 3if event.key == pygame.K_1:for x, y in [(11,23),(12,23),(13,23),(14,23),(11,24),(14,24),(11,25),(14,25)]:bgMap.brick = wall.Brick()bgMap.brick.rect.left, bgMap.brick.rect.top = 3 + x * 24, 3 + y * 24bgMap.brickGroup.add(bgMap.brick)                if event.key == pygame.K_4:for x, y in [(11,23),(12,23),(13,23),(14,23),(11,24),(14,24),(11,25),(14,25)]:bgMap.iron = wall.Iron()bgMap.iron.rect.left, bgMap.iron.rect.top = 3 + x * 24, 3 + y * 24bgMap.ironGroup.add(bgMap.iron)                # 检查用户的键盘操作key_pressed = pygame.key.get_pressed()# 玩家一的移动操作if moving:moving -= 1if movdir == 0:allTankGroup.remove(myTank_T1)if myTank_T1.moveUp(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):moving += 1allTankGroup.add(myTank_T1)running_T1 = Trueif movdir == 1:allTankGroup.remove(myTank_T1)if myTank_T1.moveDown(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):moving += 1allTankGroup.add(myTank_T1)running_T1 = Trueif movdir == 2:allTankGroup.remove(myTank_T1)if myTank_T1.moveLeft(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):moving += 1allTankGroup.add(myTank_T1)running_T1 = Trueif movdir == 3:allTankGroup.remove(myTank_T1)if myTank_T1.moveRight(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):moving += 1allTankGroup.add(myTank_T1)running_T1 = Trueif not moving:if key_pressed[pygame.K_w]:moving = 7movdir = 0running_T1 = TrueallTankGroup.remove(myTank_T1)if myTank_T1.moveUp(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):moving = 0allTankGroup.add(myTank_T1)elif key_pressed[pygame.K_s]:moving = 7movdir = 1running_T1 = TrueallTankGroup.remove(myTank_T1)if myTank_T1.moveDown(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):moving = 0allTankGroup.add(myTank_T1)elif key_pressed[pygame.K_a]:moving = 7movdir = 2running_T1 = TrueallTankGroup.remove(myTank_T1)if myTank_T1.moveLeft(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):moving = 0allTankGroup.add(myTank_T1)elif key_pressed[pygame.K_d]:moving = 7movdir = 3running_T1 = TrueallTankGroup.remove(myTank_T1)if myTank_T1.moveRight(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):moving = 0allTankGroup.add(myTank_T1)if key_pressed[pygame.K_j]:if not myTank_T1.bullet.life and myTank_T1.bulletNotCooling:fire_sound.play()myTank_T1.shoot()myTank_T1.bulletNotCooling = False# 玩家二的移动操作if moving2:moving2 -= 1if movdir2 == 0:allTankGroup.remove(myTank_T2)myTank_T2.moveUp(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)allTankGroup.add(myTank_T2)running_T2 = Trueif movdir2 == 1:allTankGroup.remove(myTank_T2)myTank_T2.moveDown(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)allTankGroup.add(myTank_T2)running_T2 = Trueif movdir2 == 2:allTankGroup.remove(myTank_T2)myTank_T2.moveLeft(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)allTankGroup.add(myTank_T2)running_T2 = Trueif movdir2 == 3:allTankGroup.remove(myTank_T2)myTank_T2.moveRight(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)allTankGroup.add(myTank_T2)running_T2 = Trueif not moving2:if key_pressed[pygame.K_UP]:allTankGroup.remove(myTank_T2)myTank_T2.moveUp(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)allTankGroup.add(myTank_T2)moving2 = 7movdir2 = 0running_T2 = Trueelif key_pressed[pygame.K_DOWN]:allTankGroup.remove(myTank_T2)myTank_T2.moveDown(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)allTankGroup.add(myTank_T2)moving2 = 7movdir2 = 1running_T2 = Trueelif key_pressed[pygame.K_LEFT]:allTankGroup.remove(myTank_T2)myTank_T2.moveLeft(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)allTankGroup.add(myTank_T2)moving2 = 7movdir2 = 2running_T2 = Trueelif key_pressed[pygame.K_RIGHT]:allTankGroup.remove(myTank_T2)myTank_T2.moveRight(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)allTankGroup.add(myTank_T2)moving2 = 7movdir2 = 3running_T2 = Trueif key_pressed[pygame.K_KP0]:if not myTank_T2.bullet.life:# fire_sound.play()myTank_T2.shoot()# 画背景screen.blit(background_image, (0, 0))# 画砖块for each in bgMap.brickGroup:screen.blit(each.image, each.rect)        # 花石头for each in bgMap.ironGroup:screen.blit(each.image, each.rect)        # 画homeif homeSurvive:screen.blit(home_image, (3 + 12 * 24, 3 + 24 * 24))else:screen.blit(home_destroyed_image, (3 + 12 * 24, 3 + 24 * 24))# 画我方坦克1if not (delay % 5):switch_R1_R2_image = not switch_R1_R2_imageif switch_R1_R2_image and running_T1:screen.blit(myTank_T1.tank_R0, (myTank_T1.rect.left, myTank_T1.rect.top))running_T1 = Falseelse:screen.blit(myTank_T1.tank_R1, (myTank_T1.rect.left, myTank_T1.rect.top))# 画我方坦克2if switch_R1_R2_image and running_T2:screen.blit(myTank_T2.tank_R0, (myTank_T2.rect.left, myTank_T2.rect.top))running_T2 = Falseelse:screen.blit(myTank_T2.tank_R1, (myTank_T2.rect.left, myTank_T2.rect.top))    # 画敌方坦克for each in allEnemyGroup:# 判断5毛钱特效是否播放            if each.flash:# 判断画左动作还是右动作if switch_R1_R2_image:screen.blit(each.tank_R0, (each.rect.left, each.rect.top))if enemyCouldMove:allTankGroup.remove(each)each.move(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)allTankGroup.add(each)else:screen.blit(each.tank_R1, (each.rect.left, each.rect.top))if enemyCouldMove:allTankGroup.remove(each)each.move(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)allTankGroup.add(each)                    else:# 播放5毛钱特效if each.times > 0:each.times -= 1if each.times <= 10:screen.blit(appearance[2], (3 + each.x * 12 * 24, 3))elif each.times <= 20:screen.blit(appearance[1], (3 + each.x * 12 * 24, 3))elif each.times <= 30:screen.blit(appearance[0], (3 + each.x * 12 * 24, 3))elif each.times <= 40:screen.blit(appearance[2], (3 + each.x * 12 * 24, 3))elif each.times <= 50:screen.blit(appearance[1], (3 + each.x * 12 * 24, 3))elif each.times <= 60:screen.blit(appearance[0], (3 + each.x * 12 * 24, 3))elif each.times <= 70:screen.blit(appearance[2], (3 + each.x * 12 * 24, 3))elif each.times <= 80:screen.blit(appearance[1], (3 + each.x * 12 * 24, 3))elif each.times <= 90:screen.blit(appearance[0], (3 + each.x * 12 * 24, 3))if each.times == 0:each.flash = True# 绘制我方子弹1if myTank_T1.bullet.life:myTank_T1.bullet.move()    screen.blit(myTank_T1.bullet.bullet, myTank_T1.bullet.rect)# 子弹 碰撞 子弹for each in enemyBulletGroup:if each.life:if pygame.sprite.collide_rect(myTank_T1.bullet, each):myTank_T1.bullet.life = Falseeach.life = Falsepygame.sprite.spritecollide(myTank_T1.bullet, enemyBulletGroup, True, None)# 子弹 碰撞 敌方坦克if pygame.sprite.spritecollide(myTank_T1.bullet, redEnemyGroup, True, None):prop.change()bang_sound.play()enemyNumber -= 1myTank_T1.bullet.life = Falseelif pygame.sprite.spritecollide(myTank_T1.bullet,greenEnemyGroup, False, None):for each in greenEnemyGroup:if pygame.sprite.collide_rect(myTank_T1.bullet, each):if each.life == 1:pygame.sprite.spritecollide(myTank_T1.bullet,greenEnemyGroup, True, None)bang_sound.play()enemyNumber -= 1elif each.life == 2:each.life -= 1each.tank = each.enemy_3_0elif each.life == 3:each.life -= 1each.tank = each.enemy_3_2myTank_T1.bullet.life = Falseelif pygame.sprite.spritecollide(myTank_T1.bullet, otherEnemyGroup, True, None):bang_sound.play()enemyNumber -= 1myTank_T1.bullet.life = False    #if pygame.sprite.spritecollide(myTank_T1.bullet, allEnemyGroup, True, None):#    bang_sound.play()#    enemyNumber -= 1#    myTank_T1.bullet.life = False# 子弹 碰撞 brickGroupif pygame.sprite.spritecollide(myTank_T1.bullet, bgMap.brickGroup, True, None):myTank_T1.bullet.life = FalsemyTank_T1.bullet.rect.left, myTank_T1.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24# 子弹 碰撞 brickGroupif myTank_T1.bullet.strong:if pygame.sprite.spritecollide(myTank_T1.bullet, bgMap.ironGroup, True, None):myTank_T1.bullet.life = FalsemyTank_T1.bullet.rect.left, myTank_T1.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24else:    if pygame.sprite.spritecollide(myTank_T1.bullet, bgMap.ironGroup, False, None):myTank_T1.bullet.life = FalsemyTank_T1.bullet.rect.left, myTank_T1.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24# 绘制我方子弹2if myTank_T2.bullet.life:myTank_T2.bullet.move()    screen.blit(myTank_T2.bullet.bullet, myTank_T2.bullet.rect)# 子弹 碰撞 敌方坦克if pygame.sprite.spritecollide(myTank_T2.bullet, allEnemyGroup, True, None):bang_sound.play()enemyNumber -= 1myTank_T2.bullet.life = False# 子弹 碰撞 brickGroupif pygame.sprite.spritecollide(myTank_T2.bullet, bgMap.brickGroup, True, None):myTank_T2.bullet.life = FalsemyTank_T2.bullet.rect.left, myTank_T2.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24# 子弹 碰撞 brickGroupif myTank_T2.bullet.strong:if pygame.sprite.spritecollide(myTank_T2.bullet, bgMap.ironGroup, True, None):myTank_T2.bullet.life = FalsemyTank_T2.bullet.rect.left, myTank_T2.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24else:    if pygame.sprite.spritecollide(myTank_T2.bullet, bgMap.ironGroup, False, None):myTank_T2.bullet.life = FalsemyTank_T2.bullet.rect.left, myTank_T2.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24# 绘制敌人子弹for each in allEnemyGroup:# 如果子弹没有生命,则赋予子弹生命if not each.bullet.life and each.bulletNotCooling and enemyCouldMove:enemyBulletGroup.remove(each.bullet)each.shoot()enemyBulletGroup.add(each.bullet)each.bulletNotCooling = False# 如果5毛钱特效播放完毕 并且 子弹存活 则绘制敌方子弹if each.flash:if each.bullet.life:# 如果敌人可以移动if enemyCouldMove:each.bullet.move()screen.blit(each.bullet.bullet, each.bullet.rect)# 子弹 碰撞 我方坦克if pygame.sprite.collide_rect(each.bullet, myTank_T1):bang_sound.play()myTank_T1.rect.left, myTank_T1.rect.top = 3 + 8 * 24, 3 + 24 * 24 each.bullet.life = Falsemoving = 0  # 重置移动控制参数for i in range(myTank_T1.level+1):myTank_T1.levelDown()if pygame.sprite.collide_rect(each.bullet, myTank_T2):bang_sound.play()myTank_T2.rect.left, myTank_T2.rect.top = 3 + 16 * 24, 3 + 24 * 24 each.bullet.life = False# 子弹 碰撞 brickGroupif pygame.sprite.spritecollide(each.bullet, bgMap.brickGroup, True, None):each.bullet.life = False# 子弹 碰撞 ironGroupif each.bullet.strong:if pygame.sprite.spritecollide(each.bullet, bgMap.ironGroup, True, None):each.bullet.life = Falseelse:    if pygame.sprite.spritecollide(each.bullet, bgMap.ironGroup, False, None):each.bullet.life = False# 最后画食物/道具if prop.life:screen.blit(prop.image, prop.rect)# 我方坦克碰撞 食物/道具if pygame.sprite.collide_rect(myTank_T1, prop):if prop.kind == 1:  # 敌人全毁for each in allEnemyGroup:if pygame.sprite.spritecollide(each, allEnemyGroup, True, None):bang_sound.play()enemyNumber -= 1prop.life = Falseif prop.kind == 2:  # 敌人静止enemyCouldMove = Falseprop.life = Falseif prop.kind == 3:  # 子弹增强myTank_T1.bullet.strong = Trueprop.life = Falseif prop.kind == 4:  # 家得到保护for x, y in [(11,23),(12,23),(13,23),(14,23),(11,24),(14,24),(11,25),(14,25)]:bgMap.iron = wall.Iron()bgMap.iron.rect.left, bgMap.iron.rect.top = 3 + x * 24, 3 + y * 24bgMap.ironGroup.add(bgMap.iron)                prop.life = Falseif prop.kind == 5:  # 坦克无敌prop.life = Falsepassif prop.kind == 6:  # 坦克升级myTank_T1.levelUp()prop.life = Falseif prop.kind == 7:  # 坦克生命+1myTank_T1.life += 1prop.life = False# 延迟delay -= 1if not delay:delay = 100    pygame.display.flip()clock.tick(60)if __name__ == "__main__":try:main()except SystemExit:passexcept:traceback.print_exc()pygame.quit()input()

运行效果

可以按住上下左右方向键以及WSAD让坦克运动
按0和j可以发射子弹。

python制作坦克大战相关推荐

  1. python制作飞船大战

    上篇博文我们一起实现了贪吃蛇与坦克大战 200行python代码实现贪吃蛇游戏 效果图 按住上下左右键可以让贪吃蛇运动 python制作坦克大战 效果图 可以按住上下左右方向键以及WSAD让坦克运动 ...

  2. python坦克大战_Life is short,you need Python——Python实现坦克大战(一)

    先展示一下效果 搓搓小手手,坦克大战即将开始--https://www.zhihu.com/video/1140743290784817152 一.游戏引擎的安装 安装方式有两种:1.pip安装 wi ...

  3. 微信小游戏制作坦克大战(四)添加敌方坦克,敌方坦克可以随机移动

    微信小游戏制作坦克大战(四)添加敌方坦克,敌方坦克可以随机移动 首先导入敌方坦克素材 重命名为敌方坦克1 敌方坦克也移动到屏幕外面,后面使用克隆体来显示. 我们给敌方坦克添加事件 好的,现在敌方坦克已 ...

  4. 微信小游戏制作坦克大战(六)碰撞检测,主角坦克碰到敌方坦克、炮弹爆炸

    微信小游戏制作坦克大战(六)碰撞检测,主角坦克碰到敌方坦克.炮弹爆炸 导入坦克爆炸效果的图片和声音素材 给主角坦克添加事件 给爆炸动画添加事件 当主角坦克碰到敌方坦克或者炮弹时显示爆炸效果 下一篇文章 ...

  5. Python pygame 坦克大战

    Python pygame 坦克大战 import pygame, time, random from pygame.sprite import SpriteSCREEN_WIDTH = 750 SC ...

  6. 如何用java让坦克发射子弹_java怎么制作坦克大战

    对于一些小游戏的实现方法是很多小伙伴们都好奇的,也有很多小游戏是由Java而制作的,那么你知道java怎么制作坦克大战吗?接下来的内容中我们就一起去看看吧. 详情请参照注释,这里就不多废话了,实现一下 ...

  7. python制作飞机大战游戏准备工作相关知识点

    python制作飞机大战游戏准备工作相关知识点 1.初始化背景 `import pygame` : 导入pygame模块 `pygame.init()` : 导入并初始化所有 `pygame` 模块, ...

  8. 微信小游戏制作坦克大战(五)敌方坦克可以发射炮弹

    微信小游戏制作坦克大战(五)敌方坦克可以发射炮弹 在资源管理器中复制炮弹,重命名为敌人坦克的炮弹. 修改敌方坦克的积木 给敌方坦克炮弹添加事件 现在,敌方坦克已经可以自动发射炮弹啦. 下一篇文章:微信 ...

  9. Python实现坦克大战源码

    Python实现坦克大战小游戏源码,可实现单人及双人模式. import sysimport pygameimport sceneimport bulletimport foodimport tank ...

最新文章

  1. SAP PM 入门系列8 - PM事务代码
  2. Linux任务计划、周期性任务执行
  3. document的window对象
  4. python 利用pyttsx3文字转语音
  5. python赋值方式
  6. Python——迭代器的几个高级用法
  7. 【10.1】python中的GIL
  8. TensorFlow游乐场及神经网络简介
  9. 【企业微信】h5调试面板
  10. 傅里叶变换之掐死教程
  11. 数据结构之线性表(顺序表、链表、栈、队列)
  12. 蒙牛发言人香港发言措辞欠妥
  13. 深大计算机图形学大作业之虚拟场景建模
  14. ubuntu下修改mysql密码
  15. 单链表 尾插法 C语言
  16. 有多远滚多远 html5游戏,68微信游戏有多远滚多远怎样能得高分
  17. 人工智能之机器学习简介
  18. 7.8 Git 工具 - 高级合并
  19. 用CorelDRAW软件把位图转成矢量图
  20. 爱尔兰哨笛教程(瑞恩牧师)

热门文章

  1. PC端移动端IP查询
  2. WPF 海康威视网络摄像头回调方式实现断连提示,降低时延
  3. python中模块打补丁
  4. C++设计模式之状态模式(state)(行为型)
  5. 默认模式网络(Default mode network, DMN)
  6. java常见面试题(含答案)
  7. HTTP状态404-未找到
  8. 搜遍全网,终于找到一个适合新手入门的物联网教程
  9. 降维算法总结(超全!附代码)
  10. 免费网络测试仪 MiniSMB Hurricane II — 如何测试通过虚拟机发包