Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使我的pygame级别更高效?_Python_Python 3.x_Performance_Pygame - Fatal编程技术网

Python 如何使我的pygame级别更高效?

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

我一直在重做我的游戏,以使其更有效,在我有功能的每一个级别,它有大约300+重复行代码的每一个级别,我已经把它拿出来,但我正试图让一级功能正常。下面是我的代码,任何关于如何让我的代码玩1级游戏的帮助,当我现在运行游戏时,它只显示背景屏幕,没有敌人、平台或角色

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()