Python 文本不是';在pygame中,当它应该出现时,不会出现问题

Python 文本不是';在pygame中,当它应该出现时,不会出现问题,python,pygame,Python,Pygame,所以,我在做一个简单的游戏,当玩家与敌人相撞时,它的生命值会下降,出现一个a-5的图形,然后游戏重新开始。但是当我启动程序时,-5弹出,而它甚至不应该弹出,屏幕的其余部分保持黑色。除了一个和混乱的图形无关的警告外,他们没有任何错误。所以,我将粘贴整个代码,因为我认为玩家类、评分方法以及blit方法都有问题 import pygame pygame.init() win = pygame.display.set_mode((500,480)) pygame.display.set_captio

所以,我在做一个简单的游戏,当玩家与敌人相撞时,它的生命值会下降,出现一个a-5的图形,然后游戏重新开始。但是当我启动程序时,-5弹出,而它甚至不应该弹出,屏幕的其余部分保持黑色。除了一个和混乱的图形无关的警告外,他们没有任何错误。所以,我将粘贴整个代码,因为我认为玩家类、评分方法以及blit方法都有问题

import pygame
pygame.init()

win = pygame.display.set_mode((500,480))

pygame.display.set_caption("First Game")

walkRight = [pygame.image.load('Game//R1.png'), pygame.image.load('Game//R2.png'), pygame.image.load('Game//R3.png'), pygame.image.load('Game//R4.png'), pygame.image.load('Game//R5.png'), pygame.image.load('Game//R6.png'), pygame.image.load('Game//R7.png'), pygame.image.load('Game//R8.png'), pygame.image.load('Game//R9.png')]
walkLeft = [pygame.image.load('Game//L1.png'), pygame.image.load('Game//L2.png'), pygame.image.load('Game//L3.png'), pygame.image.load('Game//L4.png'), pygame.image.load('Game//L5.png'), pygame.image.load('Game//L6.png'), pygame.image.load('Game//L7.png'), pygame.image.load('Game//L8.png'), pygame.image.load('Game//L9.png')]
bg = pygame.image.load('Game//bg.jpg')
char = pygame.image.load('Game//standing.png')

clock = pygame.time.Clock()

score = 0

class player(object):
    def __init__(self,x,y,width,height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.vel = 5
        self.isJump = False
        self.left = False
        self.right = False
        self.walkCount = 0
        self.jumpCount = 10
        self.standing = True
        self.hitbox = (self.x + 17, self.y + 11, 29, 52)

    def draw(self, win):
        if self.walkCount + 1 >= 27:
            self.walkCount = 0

        if not(self.standing):
            if self.left:
                win.blit(walkLeft[self.walkCount//3], (self.x,self.y))
                self.walkCount += 1
            elif self.right:
                win.blit(walkRight[self.walkCount//3], (self.x,self.y))
                self.walkCount +=1
        else:
            if self.right:
                win.blit(walkRight[0], (self.x, self.y))
            else:
                win.blit(walkLeft[0], (self.x, self.y))
        self.hitbox = (self.x + 17, self.y + 11, 29, 52)
        #pygame.draw.rect(win, (255,0,0), self.hitbox,2)

    def hit(self):
        self.x = 60
        self.y = 410
        self.walkCount = 0
        font1 = pygame.font.SysFont('comicsans', 100)
        text = font1.render('-5', 1, (255,0,0))
        win.blit(text, (250 - round(text.get_width()/2), 200))
        pygame.display.update()
        i = 0
        while i < 300:
            pygame.time.delay(10)
            i += 1
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    i = 301
                    pygame.quit()
                


class projectile(object):
    def __init__(self,x,y,radius,color,facing):
        self.x = x
        self.y = y
        self.radius = radius
        self.color = color
        self.facing = facing
        self.vel = 8 * facing

    def draw(self,win):
        pygame.draw.circle(win, self.color, (self.x,self.y), self.radius)


class enemy(object):
    walkRight = [pygame.image.load('Game//R1E.png'), pygame.image.load('Game//R2E.png'), pygame.image.load('Game//R3E.png'), pygame.image.load('Game//R4E.png'), pygame.image.load('Game//R5E.png'), pygame.image.load('Game//R6E.png'), pygame.image.load('Game//R7E.png'), pygame.image.load('Game//R8E.png'), pygame.image.load('Game//R9E.png'), pygame.image.load('Game//R10E.png'), pygame.image.load('Game//R11E.png')]
    walkLeft = [pygame.image.load('Game//L1E.png'), pygame.image.load('Game//L2E.png'), pygame.image.load('Game//L3E.png'), pygame.image.load('Game//L4E.png'), pygame.image.load('Game//L5E.png'), pygame.image.load('Game//L6E.png'), pygame.image.load('Game//L7E.png'), pygame.image.load('Game//L8E.png'), pygame.image.load('Game//L9E.png'), pygame.image.load('Game//L10E.png'), pygame.image.load('Game//L11E.png')]

    def __init__(self, x, y, width, height, end):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.end = end
        self.path = [self.x, self.end]
        self.walkCount = 0
        self.vel = 3
        self.hitbox = (self.x + 17, self.y + 2, 31, 57)
        self.health = 10
        self.visible = True

    def draw(self,win):
        self.move()
        if self.visible:
            if self.walkCount + 1 >= 33:
                self.walkCount = 0

            if self.vel > 0:
                win.blit(self.walkRight[self.walkCount //3], (self.x, self.y))
                self.walkCount += 1
            else:
                win.blit(self.walkLeft[self.walkCount //3], (self.x, self.y))
                self.walkCount += 1

            pygame.draw.rect(win, (255,0,0), (self.hitbox[0], self.hitbox[1] - 20, 50, 10))
            pygame.draw.rect(win, (0,128,0), (self.hitbox[0], self.hitbox[1] - 20, 50 - (5 * (10 - self.health)), 10))
            self.hitbox = (self.x + 17, self.y + 2, 31, 57)
            #pygame.draw.rect(win, (255,0,0), self.hitbox,2)

    def move(self):
        if self.vel > 0:
            if self.x + self.vel < self.path[1]:
                self.x += self.vel
            else:
                self.vel = self.vel * -1
                self.walkCount = 0
        else:
            if self.x - self.vel > self.path[0]:
                self.x += self.vel
            else:
                self.vel = self.vel * -1
                self.walkCount = 0

    def hit(self):
        if self.health > 0:
            self.health -= 1
        else:
            self.visible = False
        print('hit')

        

def redrawGameWindow():
    win.blit(bg, (0,0))
    text = font.render('Score: ' + str(score), 1, (0,0,0))
    win.blit(text, (390, 10))
    man.draw(win)
    goblin.draw(win)
    for bullet in bullets:
        bullet.draw(win)
    
    pygame.display.update()


#mainloop
font = pygame.font.SysFont('comicsans', 30, True)
man = player(200, 410, 64,64)
goblin = enemy(100, 410, 64, 64, 450)
shootLoop = 0
bullets = []
run = True
while run:
    clock.tick(27)

    if man.hitbox[1] < goblin.hitbox[1] + goblin.hitbox[3] and man.hitbox [1] + man.hitbox[3] > goblin.hitbox[1]:
        if man.hitbox[0] + man.hitbox[2] > goblin.hitbox[0] and man.hitbox[0] < goblin.hitbox[0] + goblin.hitbox[0]:
            man.hit()
            score += 5

    if shootLoop > 0:
        shootLoop += 1
    if shootLoop > 3:
        shootLoop = 0
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        
    for bullet in bullets:
        if bullet.y - bullet.radius < goblin.hitbox[1] + goblin.hitbox[3] and bullet.y + bullet.radius > goblin.hitbox[1]:
            if bullet.x + bullet.radius > goblin.hitbox[0] and bullet.x - bullet.radius < goblin.hitbox[0] + goblin.hitbox[2]:
                goblin.hit()
                score += 1
                bullets.pop(bullets.index(bullet))
                
        if bullet.x < 500 and bullet.x > 0:
            bullet.x += bullet.vel
        else:
            bullets.pop(bullets.index(bullet))

    keys = pygame.key.get_pressed()

    if keys[pygame.K_SPACE] and shootLoop == 0:
        if man.left:
            facing = -1
        else:
            facing = 1
            
        if len(bullets) < 5:
            bullets.append(projectile(round(man.x + man.width //2), round(man.y + man.height//2), 6, (0,0,0), facing))

        shootLoop = 1

    if keys[pygame.K_LEFT] and man.x > man.vel:
        man.x -= man.vel
        man.left = True
        man.right = False
        man.standing = False
    elif keys[pygame.K_RIGHT] and man.x < 500 - man.width - man.vel:
        man.x += man.vel
        man.right = True
        man.left = False
        man.standing = False
    else:
        man.standing = True
        man.walkCount = 0
        
    if not(man.isJump):
        if keys[pygame.K_UP]:
            man.isJump = True
            man.right = False
            man.left = False
            man.walkCount = 0
    else:
        if man.jumpCount >= -10:
            neg = 1
            if man.jumpCount < 0:
                neg = -1
            man.y -= (man.jumpCount ** 2) * 0.5 * neg
            man.jumpCount -= 1
        else:
            man.isJump = False
            man.jumpCount = 10
            
    redrawGameWindow()

pygame.quit()

导入pygame
pygame.init()
win=pygame.display.set_模式((500480))
pygame.display.set_标题(“第一场游戏”)
walkRight=[pygame.image.load('Game//R1.png')、pygame.image.load('Game//R2.png')、pygame.image.load('Game//R3.png')、pygame.image.load('Game//R5.png')、pygame.image.load('Game//R6.png')、pygame.image.load('Game//R7.png')、pygame.image.load('Game//R8.png')、pygame.image.load('Game//R9.png')]
walkLeft=[pygame.image.load('Game//L1.png')、pygame.image.load('Game//L2.png')、pygame.image.load('Game//L3.png')、pygame.image.load('Game//L5.png')、pygame.image.load('Game//L6.png')、pygame.image.load('Game//L7.png')、pygame.image.load('Game//L8.png')、pygame.image.load('Game//L9.png')]
bg=pygame.image.load('Game//bg.jpg')
char=pygame.image.load('Game//standing.png')
clock=pygame.time.clock()
分数=0
类播放器(对象):
定义初始值(自、x、y、宽度、高度):
self.x=x
self.y=y
self.width=宽度
自我高度=高度
self.vel=5
self.isJump=False
self.left=False
self.right=False
self.walkCount=0
self.jumpCount=10
自立
self.hitbox=(self.x+17,self.y+11,29,52)
def抽签(自我,赢):
如果self.walkCount+1>=27:
self.walkCount=0
如果不是(自立):
如果self.left:
blit(walkLeft[self.walkCount//3],(self.x,self.y))
self.walkCount+=1
elif self.right:
blit(walkRight[self.walkCount//3],(self.x,self.y))
self.walkCount+=1
其他:
如果你是对的:
win.blit(walkRight[0],(self.x,self.y))
其他:
win.blit(walkleet[0],(self.x,self.y))
self.hitbox=(self.x+17,self.y+11,29,52)
#pygame.draw.rect(赢,(255,0,0),self.hitbox,2)
def命中(自身):
self.x=60
self.y=410
self.walkCount=0
font1=pygame.font.SysFont('comicsans',100)
text=font1.render('-5',1,(255,0,0))
blit(文本,(250-round(text.get_width()/2),200))
pygame.display.update()
i=0
而我<300:
pygame。时间。延迟(10)
i+=1
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
i=301
pygame.quit()
类(对象):
定义初始(自、x、y、半径、颜色、面):
self.x=x
self.y=y
自半径=半径
self.color=颜色
自我面对
self.vel=8*端面
def抽签(自我,赢):
pygame.draw.circle(赢,self.color,(self.x,self.y),self.radius)
类敌人(对象):
walkRight=[pygame.image.load('Game//R1E.png')、pygame.image.load('Game//R2E.png')、pygame.image.load('Game//R4E.png')、pygame.image.load('Game//R5E.png')、pygame.image.load('Game//R6E.png')、pygame.image.load('Game//R7E.png')、pygame.image.load('Game//R8E.png')、pygame.image.load('Game//R9E.png')),pygame.image.load('Game//R10E.png'),pygame.image.load('Game//R11E.png')]
walkLeft=[pygame.image.load('Game//L1E.png')、pygame.image.load('Game//L2E.png')、pygame.image.load('Game//L4E.png')、pygame.image.load('Game//L5E.png')、pygame.image.load('Game//L7E.png')、pygame.image.load('Game//L8E.png')、pygame.image.load('Game//L9E.png')),pygame.image.load('Game//L10E.png'),pygame.image.load('Game//L11E.png')]
定义初始(自、x、y、宽度、高度、终点):
self.x=x
self.y=y
self.width=宽度
自我高度=高度
self.end=结束
self.path=[self.x,self.end]
self.walkCount=0
self.vel=3
self.hitbox=(self.x+17,self.y+2,31,57)
自我健康=10
self.visible=True
def抽签(自我,赢):
self.move()
如果自可见:
如果self.walkCount+1>=33:
self.walkCount=0
如果self.vel>0:
blit(self.walkRight[self.walkCount//3],(self.x,self.y))
self.walkCount+=1
其他:
blit(self.walkLeft[self.walkCount//3],(self.x,self.y))
self.walkCount+=1
pygame.draw.rect(赢,(255,0,0),(self.hitbox[0],self.hitbox[1]-20,50,10))
pygame.draw.rect(赢,(0128,0),(self.hitbox[0],self.hitbox[1]-20,50-(5*(10-自我健康)),10))
self.hitbox=(self.x+17,self.y+2,31,57)
#pygame.draw.rect(赢,(255,0,0),self.hitbox,2)
def移动(自我):
如果self.vel>0:
如果self.x+self.velself.path[0]:
self.x+=self.vel
其他:
self.vel=self.vel*-1
self.walkCount=0
def命中(自身):
如果self.health>0:
自我健康-=1
其他:
self.visible=False
打印('hit')