本文实例为大家分享了python+pygame实现坦克大战的具体代码,供大家参考,具体内容如下
一、首先导入pygame库



二、源码分享
#coding=utf-8
import pygame
import time
import random
from pygame.sprite import Sprite
SCREEN_WIDTH=800
SCREEN_HEIGHT=500
BG_COLOR=pygame.Color(0,0,0)
TEXT_COLOR=pygame.Color(255,0,0)
#定义一个基类
class BaseItem(Sprite):
def __init__(self,color,width,height):
pygame.sprite.Sprite.__init__(self)
class MainGame():
window=None
my_tank = None
#存储敌方坦克的列表
enemyTankList=[]
enemyTankCount=5
# 存储我方坦克子弹的列表
myBulletList = []
#存储敌方子弹的列表
enemyBulletList=[]
explodeList = []
#创建墙壁列表
wallList = []
def __init__(self):
pass
def startGame(self):
pygame.display.init() #初始化窗口
MainGame.window=pygame.display.set_mode([SCREEN_WIDTH,SCREEN_HEIGHT])
#初始化我方坦克
self.createMyTank()
pygame.display.set_caption('坦克大战1.03')
#初始化敌方坦克
self.createEnemyTank()
self.createWall()
while True:
time.sleep(0.02)
#给窗口设置填充色
MainGame.window.fill(BG_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.blitExplode()
#循环遍历墙壁
self.blitWall()
#循环遍历我方坦克的子弹
self.blitMyBullet()
#循环遍历子弹列表,展示敌方子弹
self.blitEnemyBullet()
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)
def createWall(self):
#初始化墙壁
for i in range(6):
wall = Wall(i*130,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(0,600)
speed = random.randint(1,4)
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)
enemyTank.randMove()
enemyTank.hitWall()
if MainGame.my_tank and MainGame.my_tank.live:
enemyTank.enemyTank_hit_myTank()
#发射子弹
enemyBullet=enemyTank.shot()
if enemyBullet:
MainGame.enemyBulletList.append(enemyBullet)
else:#不活着 删除
MainGame.enemyTankList.remove(enemyTank)
music = Music('img/fire.wav')
music.play()
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('谢谢使用,欢迎再次使用')
exit()
def getTextSuface(self,text):
#初始化字体模块
pygame.font.init()
font=pygame.font.SysFont('kaiti',18)
textSurface=font.render(text,True,TEXT_COLOR)
return textSurface
#获取事件
def getEvent(self):
eventList=pygame.event.get()
for event in eventList:
if event.type == pygame.QUIT:
self.endGame()
if event.type == pygame.KEYDOWN:#如果按下下键
if not MainGame.my_tank:
if event.key== pygame.K_ESCAPE:
self.createMyTank()
if MainGame.my_tank and MainGame.my_tank.live:
#判断上下左右
if event.key == pygame.K_LEFT:
MainGame.my_tank.direction='L'
#修改坦克开关状态
MainGame.my_tank.stop=False
#MainGame.my_tank.move()
print('按下左键,坦克向左移动')
elif event.key == pygame.K_RIGHT:
MainGame.my_tank.direction='R'
MainGame.my_tank.stop = False
#MainGame.my_tank.move()
print('按下右键}СV3Z/J3"GZ疶C*4(4(4("o"
4(4(514(4(CBJ{g4(51}С4((4((С5СФ4(55}С554(514(4(54(4(4)]}}|б4(4(Р4(й(й(4(4(gRF4((5СФ4(4)}}|х"
r'7COjh4(х(l4(4(4(4(4(й4(t4((4(4(4(>["
4(4(5СФ4(4((4(4)5}}|9994(4(Р4(94(4(4(4(4)}}}|}}}|54(54(brZj3ro疒j惚r'&*rokkR2 |