tanke-liujiasheng2.zip
老师,帮我看看这个代码(上面是压缩文件,下面是复制的代码)这个坦克大战游戏我一直是按照课程做的,做到这节课做不下去了,实现不了我方子弹与敌方坦克碰撞的效果,运行不报错,但我方子弹和坦克碰撞没有实现消失的效果,我也找不出问题。
#分类:
'''
分类
1.坦克类(敌方坦克,我方坦克)
射击
移动
显示坦克的方法
2.子弹类
移动
显示子弹的方法
3.城墙类
属性:是否可以通过
4.音效类
播放音乐
5.爆炸效果类
显示爆炸效果
6.主窗口
开始运行
结束运行
'''
import pygame,time,random
screen_width=700
screen_height=600
bg_color=pygame.Color(0,0,0)
text_color=pygame.Color(255,0,0)
class MainGame():
window=None
mytank=None
enemytanklist=[]
enemytankcount=5
mytankbulletlist=[]
def __init__(self):
pass
#开始游戏
def startgame(self):
pygame.display.init()
MainGame.window=pygame.display.set_mode([screen_width, screen_height])
#设置窗口的标题
pygame.display.set_caption("坦克大战1.0")
MainGame.mytank=Tank(350,300)#这是初始化加载一次,不能一直加载,一直加载岂不是不死了,加载就是生成
self.createenemytank()
while True:
time.sleep(0.02)
MainGame.window.fill(bg_color)
#要一直获取事件
self.getEvent()
MainGame.window.blit(self.textfont("敌方坦克剩余数量{0}".format(MainGame.enemytankcount)),(10,10))
MainGame.mytank.dispalygame()#这是把加载的图片一直显示,并不是一直加载
self.blitenemytank()
self.mytankbulletdisplay()
if not MainGame.mytank.stop:
MainGame.mytank.move()
pygame.display.update()
def mytankbulletdisplay(self):
for mytankbullet in MainGame.mytankbulletlist:
mytankbullet.displayBullet()
mytankbullet.move()
def createenemytank(self):
top = 100
for i in range(MainGame.enemytankcount):
left = random.randint(50, 600)
speed = random.randint(1, 3)
enemytank1=EnemyTank(left,top,speed)
MainGame.enemytanklist.append(enemytank1)
def blitenemytank(self):
for enemytank in MainGame.enemytanklist:
enemytank.dispalygame()
enemytank.randmove()
#结束游戏
def endgame(self):
print("谢谢使用,欢迎再次使用")
exit()
def getEvent(self):
#获取所有事件
eventlist=pygame.event.get()#获取所有事件
for event in eventlist:#遍历
if event.type==pygame.QUIT:
self.endgame()
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.mytank.stop=True
if event.type==pygame.KEYDOWN:#表示按下的是键盘按键
if event.key==pygame.K_LEFT:
MainGame.mytank.direction = "L"
MainGame.mytank.stop=False
# MainGame.mytank.move()
print('按下左键,坦克向左移动')
elif event.key==pygame.K_RIGHT:
MainGame.mytank.direction="R"
MainGame.mytank.stop = False
#MainGame.mytank.move()
print('按下右键,坦克向右移动')
elif event.key==pygame.K_UP:
print("按下上键,坦克向上移动")
MainGame.mytank.direction="U"
MainGame.mytank.stop = False
# MainGame.mytank.move()
elif event.key==pygame.K_DOWN:
print("按下下键,坦克向下移动")
MainGame.mytank.direction="D"
MainGame.mytank.stop = False
#MainGame.mytank.move()
elif event.key==pygame.K_SPACE:
print("发射子弹")
mytankbullet=Bullet(MainGame.mytank)
MainGame.mytankbulletlist.append(mytankbullet)
def textfont(self,text):
pygame.font.init()
font=pygame.font.SysFont('kaiti',18)#创建字体对象
text_win=font.render(text,True,text_color)
return text_win
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="L"
self.image=self.images[self.direction]
self.rect=self.image.get_rect()#获取图片区域
self.rect.left=left
self.rect.top=top
self.speed=5
self.stop=True
#射击
def shot(self):
pass
#移动
def move(self):
if self.direction == "U":
if self.rect.top>0:
self.rect.top -= self.speed
elif self.direction == "D":
if self.rect.top+self.rect.height<screen_height:
self.rect.top += self.speed
elif self.direction == "L":
if self.rect.left>0:
self.rect.left -= self.speed
elif self.direction == "R":
if self.rect.left+self.rect.height<screen_width:
self.rect.left += self.speed
#加载坦克的方法
def dispalygame(self):
self.image=self.images[self.direction]
MainGame.window.blit(self.image,self.rect)
#我方坦克
class MyTank(Tank):
def __init__(self):
pass
#地方坦克
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()
self.rect.left=left
self.rect.top=top
self.speed=speed
self.stop=True
self.step=60
def randdirection(self):
num=random.randint(1,4)#生成四个随机数,将这四个随机书与方向字典的建关联,则方向也就随机了
if num==1:
return "U"
elif num==2:
return "D"
elif num==3:
return "L"
elif num==4:
return "R"
def randmove(self):
if self.step<=0:
self.direction=self.randdirection()
self.step=60
else:
self.move()
self.step-=1
class Bullet():
def __init__(self,tank):
self.direction=tank.direction
self.speed=6
self.image=pygame.image.load("img/enemymissile.gif")
self.rect=self.image.get_rect()
if self.direction == 'U':
self.rect.left = tank.rect.left + tank.rect.width / 2 - self.rect.width / 2
self.rect.top = tank.rect.top - self.rect.height
elif self.direction == 'D':
self.rect.left = tank.rect.left + tank.rect.width / 2 - self.rect.width / 2
self.rect.top = tank.rect.top + tank.rect.height
elif self.direction == 'L':
self.rect.left = tank.rect.left - self.rect.width / 2 - self.rect.width / 2
self.rect.top = tank.rect.top + tank.rect.width / 2 - self.rect.width / 2
elif self.direction == 'R':
self.rect.left = tank.rect.left + tank.rect.width
self.rect.top = tank.rect.top + tank.rect.width / 2 - self.rect.width / 2
def move(self):
if self.direction=="U":
if self.rect.top>0:
self.rect.top-=self.speed
else:
pass
elif self.direction=="D":
if self.rect.top+self.rect.height<screen_height:
self.rect.top+=self.speed
else:
pass
elif self.direction=="L":
if self.rect.left>0:
self.rect.left-=self.speed
else:
pass
elif self.direction=="R":
if self.rect.left+self.rect.width<screen_width:
self.rect.left+=self.speed
else:
pass
#展示子弹的方法
def displayBullet(self):
MainGame.window.blit(self.image,self.rect)
class Wall():
def __init__(self):
pass
#展示墙壁的方法
def displayWall(self):
pass
#展示效果
class Explode():
def __init__(self):
pass
#展示爆炸效果的方法
def displayExplode(self):
pass
class Music():
def __init__(self):
pass
#播放音乐的方法
def displayMusic(self):
pass
if __name__=="__main__":
MainGame().startgame()