Python游戏问题

2024-06-17 08:33:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我的CS类做一个2D python游戏项目,我遇到了一个障碍,我不知道问题是什么:

这个项目占了我成绩的很大一部分,到目前为止我的成绩是a+ 这个项目令人难以置信地令人沮丧

新增

好吧,到目前为止,我的一切都在工作,除了出于某种原因,我的protaganist()卡在了游戏屏幕的左上角!在

另外,我需要一些关于如何创建跳跃动作的想法

如果有人能帮助我,我将无比感激!在

我正在导入一个游戏引擎,我的老师从他的书的网站上提供,但我太长了,我要添加,但我会尽量在底部添加一些

这是我所有的代码:

            import gameEngine
            import pygame
            import math

            pygame.init()

            screen = pygame.display.set_mode((640, 480))


            pygame.mixer.init()

            sndAtk = pygame.mixer.Sound("OOT_AdultLink_Attack1.wav")
            #goal is to create a game
            #must have menu to start game
            #menu should have a start and quit button.. start runs gaming operations and quit exits program
            #sprites for character and enemies and bullets maybe, use one large image and simply move visibiliy
            #this saves memory as 1 image is loaded instead of many
            """
            class game(gameEngine.scene):
                def __init__(self, scene):
                    self.background()

                    self.sprites["spawn.gif", "badguys.gif"]
            """
            """
            protaganist is our hero sprite
            should run left and right, jump left and right
            and attack left and right...
            I might add in the bow and jump attack
            """

            class scrollinggrass(gameEngine.SuperSprite):
                def __init__(self, scene):
                    gameEngine.SuperSprite.__init__(self, scene)
                    self.setImage("gamebackground.jpg")
                    self.rect.centerx = 20
                    self.rect.centery = 500
                    self.rect = self.image.get_rect()
                    self.dx = 10
                    self.dy = 0
                    self.checkKeys()

                def checkKeys(self):


                    keys = pygame.key.get_pressed()
                    if keys[pygame.K_RIGHT]:
                        print("working")
                        self.forward(3)
                        run.play()

                    if keys[pygame.K_LEFT]:
                        self.forward(-3)


            class hearts(gameEngine.SuperSprite):
                def __init__(self, scene):
                    gameEngine.SuperSprite.__init__(self, scene)

                    self.setImage("heart.png")
                    self.setTransparentColor = self.imageMaster.get_at((1,1))
                    self.imageMaster.set_colorkey(self.setTransparentColor)

                    self.setPosition((550 , 30))

            class badguy(gameEngine.SuperSprite):
                def __init__(self, scene):
                    gameEngine.SuperSprite.__init__(self, scene)
                    self.setImage("badguy1.png")
                    self.rect = self.imageMaster.get_rect()
                    self.health = 2
                    self.DEAD = 1
                    self.state = 0



            class protaganist(gameEngine.SuperSprite):
                def __init__(self, scene):
                    gameEngine.SuperSprite.__init__(self, scene)

                    self.imageList = []
                    self.rect = self.imageMaster.get_rect()
                    self.STANDING = 0
                    self.RUNNING = 1
                    self.ATTACKING = 2
                    self.JUMPING = 3
                    self.DEAD = 10
                    self.imageFrame = 0
                    self.state = self.STANDING
                    self.hearts = 1
                    self.heartPts = self.hearts * 3
                    self.stats()


                    self.loadImages()
                #    self.image = self.imageList[0]
                    self.checkKeys()

                def stats(self):
            #sets it up so each heart is essentially 3 hit points
                    if self.heartPts >= 3:
                        self.hearts = 1
                    elif self.heartPts >= 6:
                        self.hearts = 2
                    elif self.heartPts == 9:
                        self.hearts = 3
                    elif self.heartPts > 9:
                        self.heartPts = 9
            # changes state to dead if hp == 0
                    if self.heartPts == 0:
                        self.state = DEAD


                def loadImages(self):

                    self.setPosition((320 , 380))

                    self.setImage("heroSTANDING.gif")
                    self.setTransparentColor = self.imageMaster.get_at((1,1))
                    self.imageMaster.set_colorkey(self.setTransparentColor)



                def checkKeys(self):


                    keys = pygame.key.get_pressed()
                    if keys[pygame.K_RIGHT]:
                        self.state = runRight
                        self.frame += 1
                        if self.frame >= len(self.imageList):
                            self.frame = 1
                        self.image = self.imageList[self.frame]
                      #  self.image = self.image.get_rect()
                       # self.rect.center = (320, 240)
                    if keys[pygame.K_LEFT]:
                        self.state = 1

                    while keys[pygame.K_g]:
                        self.state = Attacking
                        sndAtk.play()
                    if self.state == self.DEAD:
                        self.image = self.deadImgList[0]
                        self.frame += 1
                        self.image = self.deadImgList[self.frame]
                        #self.image = self.image.get_rect()
                        #self.rect.center = (320, 240)


            class game(gameEngine.Scene):
                def __init__ (self):
                    gameEngine.Scene.__init__(self)



                    pygame.display.set_caption("Link's Mediocre Adventure")

                    background = pygame.Surface(screen.get_size())
                    background.fill((0, 0, 0))
                    screen.blit(background, (0, 0))

                    pro = protaganist(self)
                    baddy = badguy(self)
                    baddy1 = badguy(self)
                    heart = hearts(self)
                    grass = scrollinggrass(self)


                    goodlySprites = self.makeSpriteGroup((grass, pro, heart))
                    baddySprites = self.makeSpriteGroup((baddy, baddy1))

                   # self.addSpriteGroup(goodlySprites)
                    self.addGroup((baddySprites))


                    clock = pygame.time.Clock()
                    keepGoing = True
                    while keepGoing:
                        clock.tick(30)
                        for event in pygame.event.get():
                            if event.type == pygame.QUIT:
                                keepGoing = False



                        if pro.state == pro.ATTACKING:
                            if pro.collidesGroup(baddySprites):
                                baddy.health -= 1
                                baddy1.health -= 1
                                if baddy.health == 0:
                                    baddy.reset()
                                elif baddy1.health == 0:
                                    baddy.reset()
                        elif pro.state != pro.ATTACKING:
                            if pro.collideGroup(baddySprites):
                                pro.heartPts -= 1

                        goodlySprites.update()
                        baddySprites.update()

                        goodlySprites.draw(screen)
                        baddySprites.draw(screen)

                        pygame.display.flip()



            def main():

                game.start()

            if __name__ == "__main__":
                game()

游戏引擎

^{pr2}$

Tags: andrectimageselfgetifinitdef
1条回答
网友
1楼 · 发布于 2024-06-17 08:33:17
if pro.state == pro.ATTACKING:
    if pro.collidesWith(baddySprites):
        baddy.health -= 1
        if baddy.health == 0:
            baddy.reset()
elif pro.state != pro.ATTACKING:
    if pro.collidesWith(baddySprites):
        pro.heartPts -= 1

Badystrites是一个精灵群,所以我打赌你必须使用collidesGroup而不是{}。在

^{pr2}$

但即使你这样做,似乎你还是会有问题。也就是说,这段代码只从baddy推断健康,而不是{}。我假设精灵组支持迭代。如果是这样,您应该对每个敌人独立执行碰撞检测。在

for enemy in baddySprites:
    if pro.state == pro.ATTACKING:
        if pro.collidesWith(enemy):
            enemy.health -= 1
            if enemy.health == 0:
                enemy.reset()
    elif pro.state != pro.ATTACKING:
        if pro.collidesWith(enemy):
            pro.heartPts -= 1

相关问题 更多 >