新增功能:
1.敌方tank自由移动
'''
#导入pygame模块
import pygame,time
import random
_display=pygame.display
COLOR_BLACK=pygame.Color(0,0,0)
COLOR_RED=pygame.Color(255,255,255)
class MainGame():
#游戏主窗口
window=None
TANK_P1=None
SCREEN_HEIGHT=500
SCREEN_WIDTH=800
EnemyTank_list=[]
EnemyTank_count=5
def __init__(self):
pass
def startGame(self):
_display.init()
#创建窗口加载窗口
MainGame.window=_display.set_mode([MainGame.SCREEN_WIDTH,MainGame.SCREEN_HEIGHT])
MainGame.TANK_P1 = Tank(400, 300)
# 生成敌方tank
self.createEnemyTank()
#设置一下游戏标题
_display.set_caption("坦克大战v1.03")
while True:
# 使用坦克移动的速度慢一点
time.sleep(0.02)
MainGame.window.fill(COLOR_BLACK)
# 获取事件
self.getEvent()
#将绘制文字得到的小画布,粘贴到窗口中
MainGame.window.blit(self.getTextface("剩余敌方坦克%d辆"%5),(5,5))
#展示tank
MainGame.TANK_P1.displayTank()
#循环展示敌方tank
self.displayEnemyTank()
# 增加tank的开关,控制其移动
if MainGame.TANK_P1.stop == False:
MainGame.TANK_P1.move()
#窗口的刷新 #让窗口持续刷新操作
_display.update()
def createEnemyTank(self):
top = 100
# 循环生成敌方坦克
for i in range(MainGame.EnemyTank_count):
left = random.randint(0, 600)
speed = random.randint(1, 4)
eTank = EnemyTank(left, top, speed)
MainGame.EnemyTank_list.append(eTank)
#循环展示敌方tank
def displayEnemyTank(self):
for eTank in MainGame.EnemyTank_list:
eTank.displayTank()
# tank的移动方法
eTank.randMove()
def endGame(self):
print("谢谢使用")
#结束python解释器
exit()
#添加左上角提示文字
def getTextface(self,text):
#初始化字体模块
pygame.font.init()
font=pygame.font.SysFont('kaiti',18)
#使用对应的字符完成相关内容的绘制
textSurface=font.render(text,True,COLOR_RED)
return textSurface
#获取程序期间所有事件(鼠标事件,键盘事件)
def getEvent(self):
#获取所有事件
eventList=pygame.event.get()
#对事件进行判断
for event in eventList:
#判断事件是否是quit,如果是,退出
if event.type==pygame.QUIT:
self.endGame()
#判断事件类型是否是按键按下
if event.type==pygame.KEYDOWN:
#具体是哪一个按键的处理
if event.key==pygame.K_LEFT:
print("坦克向左掉头,移动")
#修改方向
MainGame.TANK_P1.direction='L'
MainGame.TANK_P1.stop=False
# MainGame.TANK_P1.move()
if event.key==pygame.K_RIGHT:
print("坦克向右掉头,移动")
#修改方向
MainGame.TANK_P1.direction='R'
MainGame.TANK_P1.stop=False
# MainGame.TANK_P1.move()
if event.key == pygame.K_UP:
print("坦克向上掉头,移动")
# 修改方向
MainGame.TANK_P1.direction = 'U'
MainGame.TANK_P1.stop = False
# MainGame.TANK_P1.move()
if event.key == pygame.K_DOWN:
print("坦克向下掉头,移动")
# 修改方向
MainGame.TANK_P1.direction = 'D'
MainGame.TANK_P1.stop = False
# MainGame.TANK_P1.move()
elif event.key==pygame.K_SPACE:
print("发射子弹")
# 结束游戏方法
if event.type==pygame.KEYUP:
#松开的是方向键,才更改移动开关状态
if event.key==pygame.K_LEFT or event.key==pygame.K_RIGHT or \
event.key == pygame.K_UP or event.key==pygame.K_DOWN:
#修改坦克的移动状态
MainGame.TANK_P1.stop=True
#坦克类
class Tank():
def __init__(self,left,top):
self.images={
'U':pygame.image.load('img/p1tankU.gif'),
'D': pygame.image.load('img/p1tankD.gif'),
'L': pygame.image.load('img/p1tankL.gif'),
'R': pygame.image.load('img/p1tankR.gif')
}
self.direction='U'
self.image=self.images[self.direction]
#坦克所在的区域
self.rect=self.image.get_rect()
#指定坦克初始化位置 分别距x,y轴的位置
self.rect.left=left
self.rect.top=top
#设置tank的开关
self.stop = True
#设置tank的速度
self.speed=4
#展示坦克(将坦克这个surface绘制到窗口中blit())
def displayTank(self):
#1.重新设置tank 的图片
self.image=self.images[self.direction]
#2.将坦克加入到窗口中
MainGame.window.blit(self.image,self.rect)
#坦克中添加速度属性,实现坦克移动
def move(self):
if self.direction=='L':
if self.rect.left>0:
self.rect.left-=self.speed
elif self.direction=='R':
if self.rect.left+self.rect.width<MainGame.SCREEN_WIDTH:
self.rect.left+=self.speed
elif self.direction=='U':
if self.rect.top > 0:
self.rect.top-=self.speed
elif self.direction=='D':
if self.rect.top + self.rect.height< MainGame.SCREEN_HEIGHT:
self.rect.top += self.speed
def hitWalls(self):
pass
def shot(self):
pass
def display(self):
pass
#我方坦克
class MyTank(Tank):
def __init__(self):
pass
def hitEnemyTank(self):
pass
#完善tank类
#敌方坦克类
class EnemyTank(Tank):
def __init__(self,left,top,speed):
#加载图片集
self.images={
'U':pygame.image.load('img/enemy1U.gif'),
'D':pygame.image.load('img/enemy1D.gif'),
'L':pygame.image.load('img/enemy1L.gif'),
'R':pygame.image.load('img/enemy1R.gif')
}
#方向,随机生成敌方坦克的方向
self.direction=self.randDirection()
#根据方向获取图片
self.image=self.images[self.direction]
#区域
self.rect=self.image.get_rect()
#对left和top进行赋值
self.rect.left=left
self.rect.top=top
#速度
self.speed=speed
#移动开关键
self.stop=True
#薪增加一个步数变量 step
self.step=50
#建立随机生成enemytank的四个方向
def randDirection(self):
num=random.randint(1,4)
if num==1:
return 'U'
if num == 2:
return 'D'
if num == 3:
return 'L'
if num == 1:
return 'R'
#实现敌方tank的自由移动
def randMove(self):
if self.step<=0:
self.direction=self.randDirection()
self.step=50
else:
self.move()
self.step-=1
def hitMyTank(self):
pass
#子弹类
class Bullet():
def __init__(self):
pass
def bulletMove(self):
pass
def displayBullet(self):
pass
def hitEnemyTank(self):
pass
def hitMyTank(self):
pass
def hitWalls(self):
pass
#墙壁类
class Wall():
def __init__(self):
pass
def displayWalls(self):
pass
#爆炸效果类
class Explode():
def __init__(self):
pass
def displayExplode(self):
pass
#音乐类
class Music():
def __init__(self):
pass
def play(self):
pass
if __name__=='__main__':
MainGame().startGame()