老师 你好 谢谢您上次的指点,我重新写了代码,问题如期解决了,在我模仿了您到子弹运动的代码后 写出了下面的代码,这个是我自己写的,不是您的代码,出现了两点问题:
#导入需要的模块
import pygame,sys,time,random
#主逻辑
class MainGame:
#设置屏宽,屏高
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 800
#初始化我方飞机
myplane = None
eplane_list = []
eplane_count = 4
bullet_list = []
#设置主屏
screen = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT),0,32)
def __init__(self):
pass
#开始游戏,加载各种对象和事件
def startgame(self):
#加载屏幕
pygame.display.set_mode()
#加载标题
pygame.display.set_caption('War Of Sky')
#加载我方飞机
MainGame.myplane = MyPlane(350,600)
self.create_eplane()
while True:
self.event()
# 加载背景
Background().display()
#加载我方飞机
MainGame.myplane.display()
#加载我方飞机移动方法
if MainGame.myplane and not MainGame.myplane.stop:
MainGame.myplane.move()
#time.sleep(0.02)
self.blitbullet()
#time.sleep(0.02)
#加载地方飞机
self.bliteplane()
pygame.display.update()
#创建地方坦克
def create_eplane(self):
top = 0
speed = random.randint(3,8)
for i in range(MainGame.eplane_count):
left = random.randint(0,7)
eplane = Eplane(left*100,top,speed)
MainGame.eplane_list.append(eplane)
#展示敌方坦克
def bliteplane(self):
for eplane in MainGame.eplane_list:
eplane.display()
eplane.rand_move()
#展示我方子弹
def blitbullet(self):
for bullet in MainGame.bullet_list:
bullet.display()
bullet.move()
#设置游戏结束方法
def endgame(self):
print("谢谢参与测试")
exit()
#设置各种事件方法
def event(self):
eventlist = pygame.event.get()
for event in eventlist:
#游戏结束方法
if event.type == pygame.QUIT:
self.endgame()
#设置我方飞机移动时显示的图片
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
MainGame.myplane.dirction = 'U'
MainGame.myplane.stop = False
if event.key == pygame.K_DOWN:
MainGame.myplane.dirction = 'D'
MainGame.myplane.stop = False
if event.key == pygame.K_LEFT:
MainGame.myplane.dirction = 'L'
MainGame.myplane.stop = False
if event.key == pygame.K_RIGHT:
MainGame.myplane.dirction = 'R'
MainGame.myplane.stop = False
if event.key == pygame.K_SPACE:
m = Bullet()
MainGame.bullet_list.append(m)
if event.type == pygame.KEYUP:
MainGame.myplane.stop = True
#设置背
class Background:
def display(self):
background = 'img/sky.gif'
sky = pygame.image.load(background).convert()
MainGame.screen.blit(sky,(0,0))
#设置我方飞机
class MyPlane:
#我方飞机方法属性名
def __init__(self,left,top):
#设置上下左右图片
self.images = {
'U':pygame.image.load('img/planeU.gif'),
'D':pygame.image.load('img/planeU.gif'),
'L':pygame.image.load('img/planeL.gif'),
'R':pygame.image.load('img/planeR.gif')
}
self.dirction = 'U'
self.image = self.images[self.dirction]
#设置我方飞机位置及获取坐标
self.rect = self.image.get_rect()
self.rect.left = left
self.rect.top = top
#设置我方飞机速度
self.speed = 10
#设置我方飞机移动开关
self.stop = True
#子弹发射方法
def shot(self):
return Bullet()
#移动方法
def move(self):
if self.dirction == 'U':
if self.rect.top >=0:
self.rect.top -= self.speed
if self.dirction == 'D':
if self.rect.top <= MainGame.SCREEN_HEIGHT - self.rect.height:
self.rect.top += self.speed
if self.dirction == 'L':
if self.rect.left >= 0:
self.rect.left -= self.speed
if self.dirction == 'R':
if self.rect.left <= MainGame.SCREEN_WIDTH - self.rect.width:
self.rect.left += self.speed
#显示方法
def display(self):
self.image = self.images[self.dirction]
MainGame.screen.blit(self.image,self.rect)
#设置敌方飞机
class Eplane(MyPlane):
def __init__(self,left,top,speed):
self.images = {
'U': pygame.image.load('img/eplaneU.gif'),
'D': pygame.image.load('img/eplaneU.gif'),
'L': pygame.image.load('img/eplaneU.gif'),
'R': pygame.image.load('img/eplaneU.gif')
}
self.dirction = self.rand_dirction()
self.image = self.images[self.dirction]
# 设置敌方飞机位置及获取坐标
self.rect = self.image.get_rect()
self.rect.left = left
self.rect.top = top
# 设置地方方飞机速度
self.speed = speed
# 设置地方方飞机移动开关
self.stop = True
#新增步数属性
self.step = 35
def rand_dirction(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 rand_move(self):
if self.step == 0:
self.dirction = self.rand_dirction()
self.step = 35
else:
if self.rect.top >=0 and self.rect.left >=0 and self.rect.top <= MainGame.SCREEN_HEIGHT - self.rect.height\
and self.rect.left <= MainGame.SCREEN_WIDTH - self.rect.width:
self.move()
self.step -= 1
else:
self.dirction = self.rand_dirction()
self.move()
#设置子弹类
class Bullet:
#初始化变量属性方法
def __init__(self):
#1.图片
self.image = pygame.image.load('img/bullet.gif')
#2.方向
self.dirction = MainGame.myplane.dirction
#3.位置
self.rect = self.image.get_rect()
if self.dirction == 'U':
self.rect.left = MainGame.myplane.rect.left + MainGame.myplane.rect.width/2 - self.rect.width+12
self.rect.top = MainGame.myplane.rect.top - self.rect.height
if self.dirction == 'D':
self.rect.left = MainGame.myplane.rect.left + MainGame.myplane.rect.width/2 - self.rect.width+12
self.rect.top = MainGame.myplane.rect.top - self.rect.height
if self.dirction == 'L':
self.rect.left = MainGame.myplane.rect.left + MainGame.myplane.rect.width/2 - self.rect.width+12
self.rect.top = MainGame.myplane.rect.top - self.rect.height
if self.dirction == 'R':
self.rect.left = MainGame.myplane.rect.left + MainGame.myplane.rect.width/2 - self.rect.width+12
self.rect.top = MainGame.myplane.rect.top - self.rect.height
#4.子弹的速度
self.speed = MainGame.myplane.speed * 2
#子弹的移动方法
def move(self):
if self.rect.top >=0:
self.rect.top -= self.speed
else:
pass
#子弹的展示
def display(self):
MainGame.screen.blit(self.image,self.rect)
#开始游戏
MainGame().startgame()
第一点问题在 while Ture:后面 加载我方飞机后面 time.sleep(0.02)当这行代码不写成注释后,一旦我方飞机移动,敌方飞机会比较卡,这个该怎么解决呢?写成注释后,效果还可以。
第二点:游戏开始后,电脑运行时消耗很大,风扇会响。我的电脑是外星人顶配,i9处理器+GTX1080Ti显卡+16G内存,应该排除配置问题。请问测试代码消耗大正常吗,游戏写完变成exe后,这种现象是否会减弱呢?