The examples in this article share the specific code of python to achieve tank battle for your reference. The specific content is as follows
This game has a large amount of code
The specific code and picture sound source can be downloaded in my GitHub
github address
Let's take a look and use python to make a tank battle game
Create bullet class
import pygame
classBullet(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")
# Bullet direction speed life gravel
self.dir_x, self.dir_y =0,0
self.speed =6
self.life = False
self.strong = False
self.bullet = self.bullet_up
self.rect = self.bullet.get_rect()
self.rect.left, self.rect.right =3+12*24,3+24*24
def changeImage(self, dir_x, dir_y):
self.dir_x, self.dir_y = dir_x, dir_y
if self.dir_x ==0 and self.dir_y ==-1:
self.bullet = self.bullet_up
elif self.dir_x ==0 and self.dir_y ==1:
self.bullet = self.bullet_down
elif self.dir_x ==-1 and self.dir_y ==0:
self.bullet = self.bullet_left
elif self.dir_x ==1 and self.dir_y ==0:
self.bullet = self.bullet_right
def move(self):
self.rect = self.rect.move(self.speed * self.dir_x,
self.speed * self.dir_y)
# Collision map edge
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
Create enemy tanks
import pygame
import random
import bulletClass
classEnemyTank(pygame.sprite.Sprite):
def __init__(self, x = None, kind = None, isred = None):
pygame.sprite.Sprite.__init__(self)
# Whether to play the animation before the tank appears
self.flash = False
self.times =90
# parameter:Tank type
self.kind = kind
if not kind:
self.kind = random.choice([1,2,3,4])
# Choose the type of enemy tank
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()
# parameter:Whether to bring food
self.isred = isred
if not None:
self.isred = random.choice((True, False, False, False, False))if self.isred:
self.tank = self.enemy_x_3
else:
self.tank = self.enemy_x_0
# parameter:Tank position
self.x = x
if not self.x:
self.x = random.choice([1,2,3])
self.x -=1
# Two pictures in motion
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
# Tank speed direction life bullet life bullet delay
self.speed =1
self.dir_x, self.dir_y =0,1
self.life =1
self.bulletNotCooling = True
self.bullet = bulletClass.Bullet()
# Whether it hits the wall, it changes direction
self.dirChange = False
# Different attributes of each tank
if self.kind ==2:
self.speed =3if self.kind ==3:
self.life =3
def shoot(self):
# Give life to bullets
self.bullet.life = True
self.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 +20
self.bullet.rect.bottom = self.rect.top +1
elif self.dir_x ==0 and self.dir_y ==1:
self.bullet.rect.left = self.rect.left +20
self.bullet.rect.top = self.rect.bottom -1
elif self.dir_x ==-1 and self.dir_y ==0:
self.bullet.rect.right = self.rect.left -1
self.bullet.rect.top = self.rect.top +20
elif self.dir_x ==1 and self.dir_y ==0:
self.bullet.rect.left = self.rect.right +1
self.bullet.rect.top = self.rect.top +20
def 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))
# Collision map edge
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]))
# Collision wall and tank
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]))
Create food category
import pygame
import random
classFood(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_boom
elif self.kind ==2:
self.image = self.food_clock
elif self.kind ==3:
self.image = self.food_gun
elif self.kind ==4:
self.image = self.food_iron
elif self.kind ==5:
self.image = self.food_protect
elif self.kind ==6:
self.image = self.food_star
elif self.kind ==7:
self.image = self.food_tank
self.rect = self.image.get_rect()
self.rect.left = self.rect.top = random.randint(100,500)
self.life = False
def change(self):
self.kind = random.choice([1,2,3,4,5,6,7])if self.kind ==1:
self.image = self.food_boom
elif self.kind ==2:
self.image = self.food_clock
elif self.kind ==3:
self.image = self.food_gun
elif self.kind ==4:
self.image = self.food_iron
elif self.kind ==5:
self.image = self.food_protect
elif self.kind ==6:
self.image = self.food_star
elif self.kind ==7:
self.image = self.food_tank
self.rect.left = self.rect.top = random.randint(100,500)
self.life = True
Create my tank
import pygame
import bulletClass
tank_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"classMyTank(pygame.sprite.Sprite):
def __init__(self, playerNumber):
pygame.sprite.Sprite.__init__(self)
self.life = True
if 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 =0
self.tank = self.tank_L0_image
self.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*24if playerNumber ==2:
self.rect.left, self.rect.top =3+24*16,3+24*24
self.speed =3
self.dir_x, self.dir_y =0,-1
self.life =3
self.bulletNotCooling = True
self.bullet = bulletClass.Bullet()
# self.bullet.rect.left, self.bullet.rect.right =3+12*24,3+24*24
def shoot(self):
self.bullet.life = True
self.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 +20
self.bullet.rect.bottom = self.rect.top +1
elif self.dir_x ==0 and self.dir_y ==1:
self.bullet.rect.left = self.rect.left +20
self.bullet.rect.top = self.rect.bottom -1
elif self.dir_x ==-1 and self.dir_y ==0:
self.bullet.rect.right = self.rect.left -1
self.bullet.rect.top = self.rect.top +20
elif self.dir_x ==1 and self.dir_y ==0:
self.bullet.rect.left = self.rect.right +1
self.bullet.rect.top = self.rect.top +20if self.level ==1:
self.bullet.speed =16
self.bullet.strong = False
if self.level ==2:
self.bullet.speed =16
self.bullet.strong = True
if self.level ==3:
self.bullet.speed =48
self.bullet.strong = True
def levelUp(self):if self.level <2:
self.level +=1if self.level ==0:
self.tank = self.tank_L0_image
if self.level ==1:
self.tank = self.tank_L1_image
if self.level ==2:
self.tank = self.tank_L2_image
if self.level ==3:
self.tank = self.tank_L2_image
def levelDown(self):if self.level 0:
self.level -=1if self.level ==0:
self.tank = self.tank_L0_image
self.bullet.speed =6
self.bullet.strong = False
if self.level ==1:
self.tank = self.tank_L1_image
if self.level ==2:
self.tank = self.tank_L2_image
def 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 True
if 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 True
if pygame.sprite.spritecollide(self, tankGroup, False, None):
self.rect = self.rect.move(self.speed *0, self.speed *1)return True
return False
def 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 True
if 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 True
if pygame.sprite.spritecollide(self, tankGroup, False, None):
self.rect = self.rect.move(self.speed *0, self.speed *-1)return True
return False
def 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 True
if 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 True
if pygame.sprite.spritecollide(self, tankGroup, False, None):
self.rect = self.rect.move(self.speed *1, self.speed *0)return True
return False
def 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 True
if 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 True
if pygame.sprite.spritecollide(self, tankGroup, False, None):
self.rect = self.rect.move(self.speed *-1, self.speed *0)return True
return False
Create a wall class
import pygame
brickImage = r"..\image\brick.png"
ironImage = r"..\image\iron.png"classBrick(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(brickImage)
self.rect = self.image.get_rect()classIron(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(ironImage)
self.rect = self.image.get_rect()classMap():
def __init__(self):
self.brickGroup = pygame.sprite.Group()
self.ironGroup = pygame.sprite.Group()
# Numbers represent locations on the map
# Draw bricks
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 *24
self.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 *24
self.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 *24
self.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 *24
self.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 *24
self.brickGroup.add(self.brick)
# Paint stone
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 *24
self.ironGroup.add(self.iron)
Main function
# - *- coding: utf-8-*-import pygame
import sys
import traceback
import wall
import myTank
import enemyTank
import food
def main():
pygame.init()
pygame.mixer.init()
resolution =630,630
screen = pygame.display.set_mode(resolution)
pygame.display.set_caption("Tank War ")
# Load picture,music,Sound effect.
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()
# Define sprite group:Tanks, our tanks, enemy tanks, enemy bullets
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()
# Create a map
bgMap = wall.Map()
# Create food/Props but not displayed
prop = food.Food()
# Create our tank
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)
# Create enemy tanks
for i inrange(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)continue
otherEnemyGroup.add(enemy)
# Enemy tanks appear animation
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)))
# Custom event
# Delay 200 for enemy tank creation
DELAYEVENT = pygame.constants.USEREVENT
pygame.time.set_timer(DELAYEVENT,200)
# Delay 1000 for creating enemy bullets
ENEMYBULLETNOTCOOLINGEVENT = pygame.constants.USEREVENT +1
pygame.time.set_timer(ENEMYBULLETNOTCOOLINGEVENT,1000)
# Create our bullet delay 200
MYBULLETNOTCOOLINGEVENT = pygame.constants.USEREVENT +2
pygame.time.set_timer(MYBULLETNOTCOOLINGEVENT,200)
# Enemy tank stand still 8000
NOTMOVEEVENT = pygame.constants.USEREVENT +3
pygame.time.set_timer(NOTMOVEEVENT,8000)
delay =100
moving =0
movdir =0
moving2 =0
movdir2 =0
enemyNumber =3
enemyCouldMove = True
switch_R1_R2_image = True
homeSurvive = True
running_T1 = True
running_T2 = True
clock = pygame.time.Clock()while True:for event in pygame.event.get():if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# Our bullet cooling event
if event.type == MYBULLETNOTCOOLINGEVENT:
myTank_T1.bulletNotCooling = True
# Enemy bullet cooling event
if event.type == ENEMYBULLETNOTCOOLINGEVENT:for each in allEnemyGroup:
each.bulletNotCooling = True
# Enemy tank stationary event
if event.type == NOTMOVEEVENT:
enemyCouldMove = True
# Delay in creating enemy tanks
if event.type == DELAYEVENT:if enemyNumber <4:
enemy = enemyTank.EnemyTank()if pygame.sprite.spritecollide(enemy, allTankGroup, False, None):break
allEnemyGroup.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 *24
bgMap.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 *24
bgMap.ironGroup.add(bgMap.iron)
# Check user's keyboard operation
key_pressed = pygame.key.get_pressed()
# Player one move
if moving:
moving -=1if movdir ==0:
allTankGroup.remove(myTank_T1)if myTank_T1.moveUp(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):
moving +=1
allTankGroup.add(myTank_T1)
running_T1 = True
if movdir ==1:
allTankGroup.remove(myTank_T1)if myTank_T1.moveDown(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):
moving +=1
allTankGroup.add(myTank_T1)
running_T1 = True
if movdir ==2:
allTankGroup.remove(myTank_T1)if myTank_T1.moveLeft(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):
moving +=1
allTankGroup.add(myTank_T1)
running_T1 = True
if movdir ==3:
allTankGroup.remove(myTank_T1)if myTank_T1.moveRight(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):
moving +=1
allTankGroup.add(myTank_T1)
running_T1 = True
if not moving:if key_pressed[pygame.K_w]:
moving =7
movdir =0
running_T1 = True
allTankGroup.remove(myTank_T1)if myTank_T1.moveUp(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):
moving =0
allTankGroup.add(myTank_T1)
elif key_pressed[pygame.K_s]:
moving =7
movdir =1
running_T1 = True
allTankGroup.remove(myTank_T1)if myTank_T1.moveDown(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):
moving =0
allTankGroup.add(myTank_T1)
elif key_pressed[pygame.K_a]:
moving =7
movdir =2
running_T1 = True
allTankGroup.remove(myTank_T1)if myTank_T1.moveLeft(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):
moving =0
allTankGroup.add(myTank_T1)
elif key_pressed[pygame.K_d]:
moving =7
movdir =3
running_T1 = True
allTankGroup.remove(myTank_T1)if myTank_T1.moveRight(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):
moving =0
allTankGroup.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
# Player two's move operation
if moving2:
moving2 -=1if movdir2 ==0:
allTankGroup.remove(myTank_T2)
myTank_T2.moveUp(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)
allTankGroup.add(myTank_T2)
running_T2 = True
if movdir2 ==1:
allTankGroup.remove(myTank_T2)
myTank_T2.moveDown(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)
allTankGroup.add(myTank_T2)
running_T2 = True
if movdir2 ==2:
allTankGroup.remove(myTank_T2)
myTank_T2.moveLeft(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)
allTankGroup.add(myTank_T2)
running_T2 = True
if movdir2 ==3:
allTankGroup.remove(myTank_T2)
myTank_T2.moveRight(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)
allTankGroup.add(myTank_T2)
running_T2 = True
if 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 =7
movdir2 =0
running_T2 = True
elif key_pressed[pygame.K_DOWN]:
allTankGroup.remove(myTank_T2)
myTank_T2.moveDown(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)
allTankGroup.add(myTank_T2)
moving2 =7
movdir2 =1
running_T2 = True
elif key_pressed[pygame.K_LEFT]:
allTankGroup.remove(myTank_T2)
myTank_T2.moveLeft(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)
allTankGroup.add(myTank_T2)
moving2 =7
movdir2 =2
running_T2 = True
elif key_pressed[pygame.K_RIGHT]:
allTankGroup.remove(myTank_T2)
myTank_T2.moveRight(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)
allTankGroup.add(myTank_T2)
moving2 =7
movdir2 =3
running_T2 = True
if key_pressed[pygame.K_KP0]:if not myTank_T2.bullet.life:
# fire_sound.play()
myTank_T2.shoot()
# Draw background
screen.blit(background_image,(0,0))
# Draw bricks
for each in bgMap.brickGroup:
screen.blit(each.image, each.rect)
# Flower stone
for each in bgMap.ironGroup:
screen.blit(each.image, each.rect)
# Draw home
if homeSurvive:
screen.blit(home_image,(3+12*24,3+24*24))else:
screen.blit(home_destroyed_image,(3+12*24,3+24*24))
# Draw our tank 1ifnot(delay %5):
switch_R1_R2_image = not switch_R1_R2_image
if switch_R1_R2_image and running_T1:
screen.blit(myTank_T1.tank_R0,(myTank_T1.rect.left, myTank_T1.rect.top))
running_T1 = False
else:
screen.blit(myTank_T1.tank_R1,(myTank_T1.rect.left, myTank_T1.rect.top))
# Draw our tank 2if switch_R1_R2_image and running_T2:
screen.blit(myTank_T2.tank_R0,(myTank_T2.rect.left, myTank_T2.rect.top))
running_T2 = False
else:
screen.blit(myTank_T2.tank_R1,(myTank_T2.rect.left, myTank_T2.rect.top))
# Draw enemy tanks
for each in allEnemyGroup:
# Determine whether the 50 cents special effect is playing
if each.flash:
# Determine whether to draw left or right
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:
# Play 5 cents special effects
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
# Draw our bullet 1if myTank_T1.bullet.life:
myTank_T1.bullet.move()
screen.blit(myTank_T1.bullet.bullet, myTank_T1.bullet.rect)
# Bullet collision bullet
for each in enemyBulletGroup:if each.life:if pygame.sprite.collide_rect(myTank_T1.bullet, each):
myTank_T1.bullet.life = False
each.life = False
pygame.sprite.spritecollide(myTank_T1.bullet, enemyBulletGroup, True, None)
# Bullet hits an enemy tank
if pygame.sprite.spritecollide(myTank_T1.bullet, redEnemyGroup, True, None):
prop.change()
bang_sound.play()
enemyNumber -=1
myTank_T1.bullet.life = False
elif 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 -=1
elif each.life ==2:
each.life -=1
each.tank = each.enemy_3_0
elif each.life ==3:
each.life -=1
each.tank = each.enemy_3_2
myTank_T1.bullet.life = False
elif pygame.sprite.spritecollide(myTank_T1.bullet, otherEnemyGroup, True, None):
bang_sound.play()
enemyNumber -=1
myTank_T1.bullet.life = False
# if pygame.sprite.spritecollide(myTank_T1.bullet, allEnemyGroup, True, None):
# bang_sound.play()
# enemyNumber -=1
# myTank_T1.bullet.life = False
# Bullet collision brickGroup
if pygame.sprite.spritecollide(myTank_T1.bullet, bgMap.brickGroup, True, None):
myTank_T1.bullet.life = False
myTank_T1.bullet.rect.left, myTank_T1.bullet.rect.right =3+12*24,3+24*24
# Bullet collision brickGroup
if myTank_T1.bullet.strong:if pygame.sprite.spritecollide(myTank_T1.bullet, bgMap.ironGroup, True, None):
myTank_T1.bullet.life = False
myTank_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 = False
myTank_T1.bullet.rect.left, myTank_T1.bullet.rect.right =3+12*24,3+24*24
# Draw our bullet 2if myTank_T2.bullet.life:
myTank_T2.bullet.move()
screen.blit(myTank_T2.bullet.bullet, myTank_T2.bullet.rect)
# Bullet hits an enemy tank
if pygame.sprite.spritecollide(myTank_T2.bullet, allEnemyGroup, True, None):
bang_sound.play()
enemyNumber -=1
myTank_T2.bullet.life = False
# Bullet collision brickGroup
if pygame.sprite.spritecollide(myTank_T2.bullet, bgMap.brickGroup, True, None):
myTank_T2.bullet.life = False
myTank_T2.bullet.rect.left, myTank_T2.bullet.rect.right =3+12*24,3+24*24
# Bullet collision brickGroup
if myTank_T2.bullet.strong:if pygame.sprite.spritecollide(myTank_T2.bullet, bgMap.ironGroup, True, None):
myTank_T2.bullet.life = False
myTank_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 = False
myTank_T2.bullet.rect.left, myTank_T2.bullet.rect.right =3+12*24,3+24*24
# Draw enemy bullets
for each in allEnemyGroup:
# If the bullet has no life, give life to the bullet
if not each.bullet.life and each.bulletNotCooling and enemyCouldMove:
enemyBulletGroup.remove(each.bullet)
each.shoot()
enemyBulletGroup.add(each.bullet)
each.bulletNotCooling = False
# If the 5 cents special effect is finished and the bullet is alive, draw the enemy bullet
if each.flash:if each.bullet.life:
# If the enemy can move
if enemyCouldMove:
each.bullet.move()
screen.blit(each.bullet.bullet, each.bullet.rect)
# The bullet hit our tank
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 = False
moving =0 #Reset movement control parameters
for i inrange(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
# Bullet collision brickGroup
if pygame.sprite.spritecollide(each.bullet, bgMap.brickGroup, True, None):
each.bullet.life = False
# Bullet collision ironGroup
if each.bullet.strong:if pygame.sprite.spritecollide(each.bullet, bgMap.ironGroup, True, None):
each.bullet.life = False
else:if pygame.sprite.spritecollide(each.bullet, bgMap.ironGroup, False, None):
each.bullet.life = False
# Finally draw the food/Props
if prop.life:
screen.blit(prop.image, prop.rect)
# Our tank collides with food/Props
if pygame.sprite.collide_rect(myTank_T1, prop):if prop.kind ==1: #The enemy is completely destroyed
for each in allEnemyGroup:if pygame.sprite.spritecollide(each, allEnemyGroup, True, None):
bang_sound.play()
enemyNumber -=1
prop.life = False
if prop.kind ==2: #The enemy stands still
enemyCouldMove = False
prop.life = False
if prop.kind ==3: #Bullet enhancement
myTank_T1.bullet.strong = True
prop.life = False
if prop.kind ==4: #Home is protected
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 *24
bgMap.ironGroup.add(bgMap.iron)
prop.life = False
if prop.kind ==5: #Tank invincible
prop.life = False
pass
if prop.kind ==6: #Tank upgrade
myTank_T1.levelUp()
prop.life = False
if prop.kind ==7: #Tank life+1
myTank_T1.life +=1
prop.life = False
# delay
delay -=1if not delay:
delay =100
pygame.display.flip()
clock.tick(60)if __name__ =="__main__":try:main()
except SystemExit:
pass
except:
traceback.print_exc()
pygame.quit()input()
running result
You can press the up, down, left, and right arrow keys and WSAD to move the tank
Press 0 and j to fire bullets.
More interesting classic mini game implementation topics, share with you:
C++ classic games summary
Python classic games summary
python tetris game collection
JavaScript classic games are constantly playing
Summary of classic java games
JavaScript classic games summary
The above is the whole content of this article, I hope it will be helpful to everyone's study.
Recommended Posts