Python 如何使我的pygame级别更高效?
我一直在重做我的游戏,以使其更有效,在我有功能的每一个级别,它有大约300+重复行代码的每一个级别,我已经把它拿出来,但我正试图让一级功能正常。下面是我的代码,任何关于如何让我的代码玩1级游戏的帮助,当我现在运行游戏时,它只显示背景屏幕,没有敌人、平台或角色Python 如何使我的pygame级别更高效?,python,python-3.x,performance,pygame,Python,Python 3.x,Performance,Pygame,我一直在重做我的游戏,以使其更有效,在我有功能的每一个级别,它有大约300+重复行代码的每一个级别,我已经把它拿出来,但我正试图让一级功能正常。下面是我的代码,任何关于如何让我的代码玩1级游戏的帮助,当我现在运行游戏时,它只显示背景屏幕,没有敌人、平台或角色 import pygame import time import random from pygame.math import Vector2 as vec pygame.init() # Set the screen size scr
import pygame
import time
import random
from pygame.math import Vector2 as vec
pygame.init()
# Set the screen size
screen = pygame.display.set_mode([700, 500])
# Define the colours for text
black = (0,0,0)
white = (255,255,255)
green = (0,51,0)
light_green = (51,102,0)
PLAYER_FRICTION = 0.0
PLAYER_ACC = 3
HEIGHT = 500
WIDTH = 700
FPS = 60
# Set Display
pygame.display.set_caption('Jungle Blast')
clock = pygame.time.Clock()
class Character(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("TheoHills.png")
self.rect = self.image.get_rect(topleft=(50, 300))
self.x = 50
self.y = 300
self.pos = vec(50, 300)
self.vel = vec(0,0)
self.acc = vec(0,0)
def characterJump(self,platforms):
self.rect.y += 1
hits = pygame.sprite.spritecollide(self, platforms, False)
self.rect.y -= 1
if hits:
self.vel.y = -18
def update(self):
self.acc = vec(0, 0.5)
keys = pygame.key.get_pressed()
if keys[pygame.K_a]:
self.acc.x = -PLAYER_ACC
if keys[pygame.K_d]:
self.acc.x = PLAYER_ACC
# apply friction
self.vel.x *= PLAYER_FRICTION
self.vel += self.acc
self.pos += self.vel
self.rect.midbottom = self.pos
if self.pos.y == 500:
background_image = pygame.image.load("Lose Screen.png")
if self.pos.x > 699:
level2()
class Bullet(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.image.load("Bullet.png").convert()
self.image.set_colorkey(black)
self.rect = self.image.get_rect()
def update(self):
self.rect.x += 10
class levelInd(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("1 out of 5.png")
self.rect = self.image.get_rect(topleft=(20, 20))
self.pos = vec(20, 20)
class Platform(pygame.sprite.Sprite):
def __init__(self, x, y, w, h):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((100, 88))
self.image.fill(black)
self.image = pygame.image.load("Platform1.png")
self.rect = self.image.get_rect(topleft=(x, y))
class Enemy(pygame.sprite.Sprite):
def __init__(self, x, y):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((100, 50))
self.image = pygame.image.load("RobberStanding.png")
self.rect = self.image.get_rect(topleft=(x,y))
def draw_text(surface, text, size, x, y,font_name):
font = pygame.font.SysFont(str(font_name), size)
text_surface = font.render(text, True, black)
text_rect = text_surface.get_rect()
text_rect.topleft = (x, y)
surface.blit(text_surface, text_rect)
class levels():
levelind = levelInd()
character = Character()
all_sprites = pygame.sprite.Group()
platforms = pygame.sprite.Group()
enemies = pygame.sprite.Group()
bullet_list = pygame.sprite.Group()
background_image = pygame.image.load("JungleBackground.png")
running = True
while running:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.display.quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
character.characterJump(platforms)
if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
bullet = Bullet()
bullet.rect.x = character.rect.x + 10
bullet.rect.y = character.rect.y + 50
bullet_list.add(bullet)
all_sprites.add(bullet)
for bullet in bullet_list:
# See if the enemy is hit
enemyHit = pygame.sprite.spritecollide(bullet,enemies,True)
if enemyHit:
enemies.remove(Enemy)
score1 += 10
if bullet.rect.x > 700:
bullet_list.remove(bullet)
if character.rect.y >= 500:
background_image = pygame.image.load("Lose Screen.png")
pygame.display.update()
all_sprites.empty()
death = pygame.sprite.spritecollide(character, enemies, True)
if len(death) > 0:
background_image = pygame.image.load("Lose Screen.png")
all_sprites.empty()
all_sprites.update()
hits = pygame.sprite.spritecollide(character, platforms, False)
for platform in hits:
if character.vel.y > 0:
character.rect.bottom = character.rect.bottom
character.vel.y = 0
elif character.vel.y < 0:
character.rect.top = character.rect.top
character.vel.y = 3
character.pos.y = character.rect.bottom
screen.blit(background_image,[0,0])
all_sprites.draw(screen)
pygame.display.flip()
def level1():
done = False
clock = pygame.time.Clock()
font_name = pygame.font.match_font("Arial")
black = ( 0, 0, 0)
white = ( 255, 255, 255)
x = 300
y = 88
e1 = Enemy(250, 125)
enemies.add(e1)
all_sprites.add(character)
all_sprites.add(levelind)
all_sprites.add(e1)
p1 = Platform(-80, 400, WIDTH - 400, HEIGHT - 10)
p2 = Platform(175, 210, WIDTH - 400, HEIGHT - 10)
p3 = Platform(500, 400, WIDTH - 400, HEIGHT - 10)
all_sprites.add(p1, p2, p3)
platforms.add(p1, p2, p3)
score1 = 0
level1()
导入pygame
导入时间
随机输入
从pygame.math将Vector2导入为vec
pygame.init()
#设置屏幕大小
screen=pygame.display.set_模式([700500])
#定义文本的颜色
黑色=(0,0,0)
白色=(255255)
绿色=(0,51,0)
浅绿色=(51102,0)
玩家摩擦=0.0
玩家_ACC=3
高度=500
宽度=700
FPS=60
#设置显示
pygame.display.set_标题('丛林爆炸')
clock=pygame.time.clock()
类角色(pygame.sprite.sprite):
定义初始化(自):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load(“TheoHills.png”)
self.rect=self.image.get_rect(左上方=(50300))
self.x=50
self.y=300
self.pos=vec(50300)
self.vel=vec(0,0)
self.acc=vec(0,0)
def characterJump(自身、平台):
自校正y+=1
hits=pygame.sprite.spritecollide(self,platforms,False)
自校正y-=1
如果点击:
自我水平y=-18
def更新(自我):
self.acc=vec(0,0.5)
keys=pygame.key.get_pressed()
如果键[pygame.K_a]:
self.acc.x=-PLAYER\u acc
如果键[pygame.K_d]:
self.acc.x=玩家
#施加摩擦力
self.vel.x*=玩家摩擦
self.vel+=self.acc
self.pos+=self.vel
self.rect.midbottom=self.pos
如果自身位置y==500:
background\u image=pygame.image.load(“Lose Screen.png”)
如果自身位置x>699:
二级()
类子弹(pygame.sprite.sprite):
定义初始化(自):
super()。\uuuu init\uuuuu()
self.image=pygame.image.load(“Bullet.png”).convert()
self.image.set_颜色键(黑色)
self.rect=self.image.get_rect()
def更新(自我):
自校正x+=10
类级别索引(pygame.sprite.sprite):
定义初始化(自):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load(“5.png中的1”)
self.rect=self.image.get_rect(左上方=(20,20))
self.pos=vec(20,20)
类平台(pygame.sprite.sprite):
定义初始值(self,x,y,w,h):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.Surface((100,88))
self.image.fill(黑色)
self.image=pygame.image.load(“Platform1.png”)
self.rect=self.image.get_rect(左上=(x,y))
职业敌人(pygame.sprite.sprite):
定义初始化(self,x,y):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.Surface((100,50))
self.image=pygame.image.load(“robertstanding.png”)
self.rect=self.image.get_rect(左上=(x,y))
def绘制文字(表面、文字、大小、x、y、字体名称):
font=pygame.font.SysFont(str(字体名称),大小)
text\u surface=font.render(文本,真,黑色)
text_rect=text_surface.get_rect()
text_rect.topleft=(x,y)
blit(text\u surface,text\u rect)
类级别():
levelind=levelind()
character=字符()
all_sprites=pygame.sprite.Group()
platforms=pygame.sprite.Group()
敌人=pygame.sprite.Group()
bullet\u list=pygame.sprite.Group()
background\u image=pygame.image.load(“JungleBackground.png”)
运行=真
运行时:
时钟滴答声(FPS)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
pygame.display.quit()
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_w:
character.characterJump(平台)
如果event.type==pygame.KEYDOWN和event.key==pygame.K_空间:
bullet=bullet()
bullet.rect.x=character.rect.x+10
bullet.rect.y=字符.rect.y+50
项目符号列表。添加(项目符号)
所有精灵。添加(项目符号)
对于项目符号列表中的项目符号:
#看看敌人是否被击中
enemyHit=pygame.sprite.spritecollide(子弹,敌人,真)
如果灌肠:
敌人。移开(敌人)
分数1+=10
如果bullet.rect.x>700:
项目符号列表。删除(项目符号)
如果character.rect.y>=500:
background\u image=pygame.image.load(“Lose Screen.png”)
pygame.display.update()
所有精灵。空()
死亡=pygame.sprite.spritecollide(角色,敌人,真)
如果len(死亡)>0:
background\u image=pygame.image.load(“Lose Screen.png”)
所有精灵。空()
所有精灵更新()
hits=pygame.sprite.spritecollide(角色、平台、错误)
对于点击中的平台:
如果character.vel.y>0:
character.rect.bottom=character.rect.bottom
字符.vel.y=0
elif字符y级<0:
character.rect.top=character.rect.top
字符.vel.y=3
character.pos.y=character.rect.bottom
blit(背景图像,[0,0])
所有精灵。绘制(屏幕)
pygame.display.flip()
def level1():
完成=错误
clock=pygame.time.clock()
font\u name=pygame.font.match\u font(“Arial”)
黑色=(0,0,0)
class levels():
def __init__(self):
self.levelind = levelInd()
self.character = Character()
self.all_sprites = pygame.sprite.Group()
self.platforms = pygame.sprite.Group()
self.enemies = pygame.sprite.Group()
self.bullet_list = pygame.sprite.Group()
self.background_image = pygame.image.load("1LPqX.png")
self.score1 = 0
self.running = True
def run(self):
while self.running:
self.level1()
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.running = False
pygame.display.quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
self.haracter.characterJump(self.platforms)
if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
bullet = Bullet()
bullet.rect.x = self.character.rect.x + 10
bullet.rect.y = self.character.rect.y + 50
self.bullet_list.add(bullet)
self.all_sprites.add(bullet)
for bullet in self.bullet_list:
# See if the enemy is hit
enemyHit = pygame.sprite.spritecollide(bullet, self.enemies, True)
if enemyHit:
self.enemies.remove(Enemy)
self.score1 += 10
if bullet.rect.x > 700:
self.bullet_list.remove(bullet)
if self.character.rect.y >= 500:
self.background_image = pygame.image.load("1LPqX.png")
pygame.display.update()
self.all_sprites.empty()
death = pygame.sprite.spritecollide(self.character, self.enemies, True)
if len(death) > 0:
self.background_image = pygame.image.load("1LPqX.png")
self.all_sprites.empty()
self.all_sprites.update()
hits = pygame.sprite.spritecollide(self.character, self.platforms, False)
for platform in hits:
if self.character.vel.y > 0:
self.character.rect.bottom = self.character.rect.bottom
self.character.vel.y = 0
elif self.character.vel.y < 0:
self.character.rect.top = self.character.rect.top
self.character.vel.y = 3
self.character.pos.y = self.character.rect.bottom
screen.blit(self.background_image, [0, 0])
self.all_sprites.draw(screen)
pygame.display.flip()
def level1(self):
done = False
clock = pygame.time.Clock()
font_name = pygame.font.match_font("Arial")
black = (0, 0, 0)
white = (255, 255, 255)
x = 300
y = 88
e1 = Enemy(250, 125)
self.enemies.add(e1)
self.all_sprites.add(self.character)
self.all_sprites.add(self.levelind)
self.all_sprites.add(e1)
p1 = Platform(-80, 400, WIDTH - 400, HEIGHT - 10)
p2 = Platform(175, 210, WIDTH - 400, HEIGHT - 10)
p3 = Platform(500, 400, WIDTH - 400, HEIGHT - 10)
self.all_sprites.add(p1, p2, p3)
self.platforms.add(p1, p2, p3)
self.score1 = 0
# level1()
if __name__ == '__main__':
game = levels()
game.run()