
有这个报错,找了半天,不知道什么原因,下边是代码
import pygame
import time
import random
SCREEN_WIDTH=700
SCREEN_HEIGHT=500
BG_COLOR=pygame.Color(0,0,0)
FG_COLOR = pygame.Color(255,255,255)
x,y = 0,0 #初始位置
# 主类
#pygame.init()# 下边都不用初始化了
class MainGame():
my_Tank = None
window = None
#存储敌方坦克的列表
enemyTanklist = []
#定义敌方坦克的数量
enemyTankCount = 5
def __init__(self):
pass
#开始游戏方法
def startGame(self):
#窗口初始化
pygame.display.init()
#窗口大小设置
MainGame.window = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT])
#设置窗口的标题
pygame.display.set_caption(":坦克大战")
#TANK初始化
MainGame.my_Tank = Tank(350,500)
#初始化敌方坦克
self.createEnemyTank()
#无限循环
while True :
time.sleep(0.1)
MainGame.window.fill(BG_COLOR)
self.event()
#在面板上绘制文字
MainGame.window.blit(self.textSurface(), (x+50,y+50))
MainGame.my_Tank.displayTank()
#循环遍历敌方坦克,并展示
self.blitEnemyTank()
#如果坦克的开关开启才可以移动
if not MainGame.my_Tank.stop:
MainGame.my_Tank.move()
pygame.display.update()
#初始化敌方坦克,并将坦克加入到列表中去
def createEnemyTank(self):
top = 100
for i in range(MainGame.enemyTankCount):
left = random.randint(0,600)
speed = random.randint(1,4)
enemy = enmyTank(left, top, speed)
MainGame.enemyTanklist.append(enemy)
# 循环遍历敌方坦克,并展示
def blitEnemyTank(self):
for tank in MainGame.enemyTanklist:
tank.displayTank()
# 结束游戏方法
def endGame(self):
print("Game Over")
exit()
#文本
def textSurface(self):
# 所有字体类型
#print(pygame.font.get_fonts())
# 创建文字对象
font = pygame.font.SysFont("kaiti", 20)
# 输入文字
textSurface = font.render("敌方坦克数量为%d" % 6, True, FG_COLOR)
return textSurface
#获取事件
def event(self):
"""事件退出,若不退出点哪个就是哪个输出"""
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
MainGame.my_Tank.direction = 'U'
MainGame.my_Tank.stop = False
#MainGame.my_Tank.move()
print("按上键,向上方移动")
elif event.key == pygame.K_DOWN:
MainGame.my_Tank.direction = 'D'
MainGame.my_Tank.stop = False
#MainGame.my_Tank.move()
print("按下键,向下方移动")
elif 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("按右键,向右移动")
elif event.key == pygame.K_SPACE:
print("发射子弹")
#松开方向键,坦克停止移动
elif event.type == pygame.KEYUP:
# 判断松开的是上下左右才不动
if event.key == pygame.K_UP or event.key == pygame.K_DOWN or event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
MainGame.my_Tank.stop = True
class Tank():
#添加距离左边left,上边top
def __init__(self, left, right):
#保存加载的图片
self.images={
'U': pygame.image.load(r'F:\Google下载\新建文件夹\tank\img\p1tankU.gif'),
'D': pygame.image.load(r'F:\Google下载\新建文件夹\tank\img\p1tankD.gif'),
'L': pygame.image.load(r'F:\Google下载\新建文件夹\tank\img\p1tankL.gif'),
'R': pygame.image.load(r'F:\Google下载\新建文件夹\tank\img\p1tankR.gif')
}
#方向
self.direction = 'D'
#根据当前的图片的方向获取图片surface
self.image = self.images[self.direction]
#获取图片区域
self.rect = self.image.get_rect()
#设置区域的left和top
self.rect.left = left
self.rect.right = right
self.speed = 10
#连续移动
self.stop = True
def shot(self):
pass
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.height<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<SCREEN_HEIGHT:
self.rect.top += self.speed
def displayTank(self):
#获取展示的对象
self.image = self.images[self.direction]
#把这个对象blit
MainGame.window.blit(self.image, self.rect)
class myTank(Tank):
def __init__(self):
pass
class enmyTank(Tank):
def __init__(self, left ,top, speed):
#加载图片集
self.images = {
'U': pygame.image.load(r'F:\Google下载\新建文件夹\tank\img\enemy1U.gif'),
'D': pygame.image.load(r'F:\Google下载\新建文件夹\tank\img\enemy1D.gif'),
'L': pygame.image.load(r'F:\Google下载\新建文件夹\tank\img\enemy1L.gif'),
'R': pygame.image.load(r'F:\Google下载\新建文件夹\tank\img\enemy1R.gif')
}
#方向,随机方向生成坦克
self.direction = self.randDirect()
# 根据方向获取图片信息
self.image = self.images[self.direction]
#坦克区域
self.rect = self.images[self.direction]
#对left和top进行赋值
self.rect.left = left
self.rect.top = top
#速度
self.speed = speed
#移动开关键
self.flag = True
def randDirect(self):
self.random = random.randint(1,4)
if self.random == 1:
return 'U'
elif self.random == 2:
return 'D'
elif self.random == 3 :
return 'L'
elif self.random == 4:
return 'R'
class Bullet():
def __init__(self):
pass
def bulletMove(self):
pass
def displayBullet(self):
pass
class Wall():
def __init__(self):
pass
def through(self):
pass
class Sound():
def __init__(self):
pass
def music(self):
pass
class Boom():
def __init__(self):
pass
def boomSound(self):
pass
if __name__ == '__main__':
MainGame().startGame()