рд╣рдо рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдорд░ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВред рднрд╛рдЧ 2. рд╕рдмрдкрд╛рд░реНрдЯ 1, рд╕реНрддрд░ рд╕рдВрдкрд╛рджрдХ рдмрдирд╛рдиреЗ рдХреА рддреИрдпрд╛рд░реА


рдирдорд╕реНрдХрд╛рд░ рджреЛрд╕реНрддреЛрдВ!

рд╣рдо рдЕрдкрдиреЗ рдорд╛рд░рд┐рдпреЛрдмреЙрдп рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рд╢реБрд░реБрдЖрдд рдпрд╣реАрдВ рд╣реИ , рдирд┐рд░рдВрддрд░рддрд╛ рдпрд╣рд╛рдВ рд╣реИ ред рджреВрд╕рд░реЗ рднрд╛рдЧ рдХреЗ рдЗрд╕ рдЙрдк-рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдПрдХ рд╕реНрддрд░ рд╕рдВрдкрд╛рджрдХ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рддреИрдпрд╛рд░реА рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддреН: рдирд╛рдпрдХ рдХреЛ рдПрдХ рдЯрд░реНрдмреЛ рд░рди рдореЛрдб, рдШрд╛рддрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо, рдореВрд╡рд┐рдВрдЧ рдореЙрдиреНрд╕реНрдЯрд░, рдЯреЗрд▓реАрдкреЛрд░реНрдЯрд░реНрд╕, рдПрдХ рд░рд╛рдЬрдХреБрдорд╛рд░реА рдФрд░ рдПрдХ рд╕реНрддрд░ рдХрд╛ рдкрд╛рд░реНрд╕рд░, рддрд╛рдХрд┐ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдЗрд╕ рд╕рдм рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рди рд╣реЛрдВред

рдЕрдкрдЧреНрд░реЗрдб рд╣реАрд░реЛ


рд╣рдорд╛рд░реЗ рд╣реАрд░реЛ рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдЬреЛрдбрд╝реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдбреЗрдЯ рд╡рд┐рдзрд┐ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВред

рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рд╕реНрдерд┐рд░рд╛рдВрдХ рдЬреЛрдбрд╝реЗрдВ
MOVE_EXTRA_SPEED = 2.5 #  JUMP_EXTRA_POWER = 1 #    ANIMATION_SUPER_SPEED_DELAY = 0.05 #      


рдЕрдЧрд▓рд╛, рдЧрддрд┐ рдореЗрдВ рдмрд╛рдПрдБ - рджрд╛рдПрдБ рдЧрддрд┐ рдПрдирд┐рдореЗрд╢рди рдЬреЛрдбрд╝реЗрдВред рд╣рдо рдПрдХ рд╣реА рдЪрд┐рддреНрд░ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рдлреНрд░реЗрдо рджрд░ рдХреЗ рд╕рд╛рде
 #    boltAnim = [] boltAnimSuperSpeed = [] for anim in ANIMATION_RIGHT: boltAnim.append((anim, ANIMATION_DELAY)) boltAnimSuperSpeed.append((anim, ANIMATION_SUPER_SPEED_DELAY)) self.boltAnimRight = pyganim.PygAnimation(boltAnim) self.boltAnimRight.play() self.boltAnimRightSuperSpeed = pyganim.PygAnimation(boltAnimSuperSpeed) self.boltAnimRightSuperSpeed.play() #    boltAnim = [] boltAnimSuperSpeed = [] for anim in ANIMATION_LEFT: boltAnim.append((anim, ANIMATION_DELAY)) boltAnimSuperSpeed.append((anim, ANIMATION_SUPER_SPEED_DELAY)) self.boltAnimLeft = pyganim.PygAnimation(boltAnim) self.boltAnimLeft.play() self.boltAnimLeftSuperSpeed = pyganim.PygAnimation(boltAnimSuperSpeed) self.boltAnimLeftSuperSpeed.play() 

рд╕реНрд╡рдпрдВ рдХреЛ рддреЗрдЬ рдХрд░рддреЗ рд╕рдордп рдПрдирд┐рдореЗрд╢рди рдХреЗ 2 рд╕реЗрдЯ рдЬреЛрдбрд╝реЗ рдЧрдПред AbnimRightSuperSpeed , self.boltAnimLeftSuperSpeed , рд╣рдо рдЙрдиреНрд╣реЗрдВ рдереЛрдбрд╝рд╛ рдХрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ

рдЪрд▓рд┐рдП рдЕрдм рд╣рдо рдЕрдкрдбреЗрдЯ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддреЗ рд╣реИрдВред

рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВ
 def update(self, left, right, up, running, platforms): 


рддреНрд╡рд░рдг рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЪрд░рд┐рддреНрд░ рдХреА рдЪрд╛рд▓ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрджрд▓реЗрдВред
 if up: if self.onGround: # ,       self.yvel = -JUMP_POWER if running and (left or right): #       self.yvel -= JUMP_EXTRA_POWER #    self.image.fill(Color(COLOR)) self.boltAnimJump.blit(self.image, (0, 0)) if left: self.xvel = -MOVE_SPEED #  = x- n self.image.fill(Color(COLOR)) if running: #   self.xvel-=MOVE_EXTRA_SPEED #    if not up: #     self.boltAnimLeftSuperSpeed.blit(self.image, (0, 0)) #     else: #    if not up: #    self.boltAnimLeft.blit(self.image, (0, 0)) #    if up: #    self.boltAnimJumpLeft.blit(self.image, (0, 0)) #    if right: self.xvel = MOVE_SPEED #  = x + n self.image.fill(Color(COLOR)) if running: self.xvel+=MOVE_EXTRA_SPEED if not up: self.boltAnimRightSuperSpeed.blit(self.image, (0, 0)) else: if not up: self.boltAnimRight.blit(self.image, (0, 0)) if up: self.boltAnimJumpRight.blit(self.image, (0, 0)) 


рдФрд░ рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдмрд╛рдИрдВ рдкрд╛рд░реА рдХреЛ рджрдмрд╛рдиреЗ рдХреА рдШрдЯрдирд╛ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЬреЛрдбрд╝реЗрдВред
 running = False *** if e.type == KEYDOWN and e.key == K_LSHIFT: running = True *** if e.type == KEYUP and e.key == K_LSHIFT: running = False 

рд╕рднреА рдкреНрд░рдореБрдЦ рдХреЛрдб рдпрд╣рд╛рдБ

рдФрд░ Hero.update () рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рддрд░реНрдХ рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВ
 hero.update(left, right, up, running, platforms) 


рд╣рдо рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ (рдореИрдВрдиреЗ рдХреНрд░реВрд░ рдорд╛рд░рд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд░рдВрдЧ рдХрд╛рд▓рд╛ , рдХреНрд░реВрд░ рд░рдВрдЧ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛)
рдХреЛрдИ рддреНрд╡рд░рдг рдирд╣реАрдВ

рддреНрд╡рд░рдг рдХреВрджреЛ


рдЬрд╛рдирд▓реЗрд╡рд╛ рд╕реНрдкрд╛рдЗрдХреНрд╕


рдЕрд╕рд▓реА рдирд╛рдпрдХ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЦрддрд░рд╛ рд╣реИред рдЪрд▓реЛ рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдмреНрд▓реЙрдХ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд╕рдВрдкрд░реНрдХ рдореЗрдВ рддрддреНрдХрд╛рд▓ рдореГрддреНрдпреБ рд╣реЛрдЧреАред

рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдПрдХ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВред
 class BlockDie(Platform): def __init__(self, x, y): Platform.__init__(self, x, y) self.image = image.load("%s/blocks/dieBlock.png" % ICON_DIR) 


рдЗрд╕рдХреЗ рдмрд╛рдж, рдирд╛рдпрдХ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЙрд╕рдХреЗ рд╕рдВрдкрд░реНрдХ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдг рд╡рд░реНрдЧ рдореЗрдВ 2 рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВред рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рдореГрддреНрдпреБ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рджреВрд╕рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рд╛рде рдмрдврд╝ рд░рд╣рд╛ рд╣реИ (рдЬреЛ рдиреАрдЪреЗ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдХрд╛рдо рдореЗрдВ рдЖрдПрдЧрд╛)
 def die(self): time.wait(500) self.teleporting(self.startX, self.startY) #     def teleporting(self, goX, goY): self.rect.x = goX self.rect.y = goY 

рдпрд╛рдиреА рдЬрдм рд╣рдо рдорд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдЦреЗрд▓ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕реНрддрд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрдЧреЗ рдЦреЗрд▓рддреЗ рд╣реИрдВред

рдЦреИрд░, рд╣рдо рдЪреМрд░рд╛рд╣реЗ рдкрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдЯрдХрд░рд╛рд╡ () рд╡рд┐рдзрд┐ рдореЗрдВ рдореГрддреНрдпреБ рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВ
 *** if isinstance(p, blocks.BlockDie): #    - blocks.BlockDie self.die()#  *** 


рдЕрдм, рдореБрдЦреНрдп рд╡рд░реНрдЧ рдореЗрдВ рд╣рдо рд╕реНрддрд░ рдмрджрд▓реЗрдВрдЧреЗ
 level = [ "----------------------------------", "- -", "- -- -", "- * -", "- -", "- -- -", "-- -", "- -", "- ---- --- -", "- -", "-- -", "- * -", "- --- -", "- -", "- -", "- * --- * -", "- -", "- ------- ---- -", "- -", "- - -", "- -- -", "- *** -", "- -", "----------------------------------"] 


рдФрд░ рдореГрддреНрдпреБ рдмреНрд▓реЙрдХ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЬреЛрдбрд╝реЗрдВ, рдЕрдЧрд░ рд╕реНрддрд░ рдореЗрдВ "*" рдкреНрд░рддреАрдХ рд╣реИ
 if col == "*": bd = BlockDie(x,y) entities.add(bd) platforms.append(bd) 

рдкрд░рд┐рдгрд╛рдо:


рдкреЛрд░реНрдЯрд▓


рдмрд┐рдирд╛ рдЯреЗрд▓реАрдкреЛрд░реНрдЯ рдХреЗ рдЖрдзреБрдирд┐рдХ рдкреНрд▓рдВрдмрд░ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ? рддреЛ рдЖрдЗрдП рд╣рдо рдЕрдкрдиреЗ рдирд╛рдпрдХ рдХреЛ рдПрдХ рдХрд╛рд▓реА рднреЗрдбрд╝ рди рдмрдирд╛рдПрдВред

рдПрдХ рдирдпрд╛ рдмреНрд▓реЙрдХ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдПрдБред рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмреНрд▓реЙрдХрд╕реЗрдкреА рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ

рдкрд╣рд▓реЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдЬреЛрдбрд╝реЗрдВ
 ANIMATION_BLOCKTELEPORT = [ ('%s/blocks/portal2.png' % ICON_DIR), ('%s/blocks/portal1.png' % ICON_DIR)] 

рдлрд┐рд░ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВред
 class BlockTeleport(Platform): def __init__(self, x, y, goX,goY): Platform.__init__(self, x, y) self.goX = goX #    self.goY = goY #    boltAnim = [] for anim in ANIMATION_BLOCKTELEPORT: boltAnim.append((anim, 0.3)) self.boltAnim = pyganim.PygAnimation(boltAnim) self.boltAnim.play() def update(self): self.image.fill(Color(PLATFORM_COLOR)) self.boltAnim.blit(self.image, (0, 0)) 

рдпрд╣рд╛рдВ рдХреБрдЫ рдирдпрд╛ рдирд╣реАрдВ рд╣реИред рдмрдирд╛рддреЗ рд╕рдордп, рди рдХреЗрд╡рд▓ рдкреЛрд░реНрдЯрд▓ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдирд╛рдпрдХ рдХреЗ рдЖрдВрджреЛрд▓рди рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рднреА рдЬрдм рдЯреЗрд▓реАрдлрд╝реЛрди рдореЗрдВ рд╣рд┐рдЯ рд╣реЛрддреЗ рд╣реИрдВред

рдЕрдЧрд▓рд╛, рдкреЛрд░реНрдЯрд▓ рдХреЗ рд╕рдВрдкрд░реНрдХ рдореЗрдВ рд╣рдорд╛рд░реЗ рдирд╛рдпрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
 *** elif isinstance(p, blocks.BlockTeleport): self.teleporting(p.goX, p.goY) *** 

рдФрд░ рдореИрдк рдореЗрдВ рдПрдХ рдкреЛрд░реНрдЯрд▓ рдЬреЛрдбрд╝реЗрдВред рдХреЗрд╡рд▓ рдЕрдм рд╣рдо рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗред рдЬрдм рд╣рдо рд╕реНрддрд░реАрдп рд╕рдВрдкрд╛рджрдХ рдмрдирд╛рддреЗ рд╣реИрдВ - рддреЛ рдпрд╣ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдПрдХ рдФрд░ рд╕реНрдкреНрд░рд╛рдЗрдЯ рд╕рдореВрд╣ рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдирд┐рдореЗрдЯреЗрдб рдмреНрд▓реЙрдХ рд╣реЛрдВрдЧреЗ
 animatedEntities = pygame.sprite.Group() #   ,    

рдФрд░ рдПрдХ teleporter рдмрдирд╛рдПрдБред
 tp = BlockTeleport(128,512,800,64) entities.add(tp) platforms.append(tp) animatedEntities.add(tp) 

рдЕрдВрдд рдореЗрдВ, рд╕рднреА рдПрдирд┐рдореЗрдЯреЗрдб рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ рдкрд░ рдЕрдкрдбреЗрдЯ () рд╡рд┐рдзрд┐ рдореЗрдВ рдХреЙрд▓ рдЬреЛрдбрд╝реЗрдВ
 animatedEntities.update() #   


рдХреБрдЫ рдЗрд╕ рддрд░рд╣


рд░рд╛рдХреНрд╖рд╕реЛрдВ


рдбрд░рд╛рд╡рдирд╛, рдЪрд▓рддреА, рдШрд╛рддрдХ рд░реЛрд╢рдиреАред

рд░рд╛рдХреНрд╖рд╕реЛрдВ рдФрд░ рдШрд╛рддрдХ рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд░рд╛рдХреНрд╖рд╕ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рднреНрд░рдорд┐рдд рди рд╣реЛрдВред рдЪрд▓рд┐рдП рдЗрд╕реЗ рдмрд╣реБрдд рд╣реА рдореВрд▓ рд░реВрдк рд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ - Monster.py

рдПрдХ рдирдпрд╛ рдореЙрдиреНрд╕реНрдЯрд░ рд╡рд░реНрдЧ рдмрдирд╛рдПрдБред рдЗрд╕рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реЛред
рд╕рдВрдкреВрд░реНрдг рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА
 #!/usr/bin/env python # -*- coding: utf-8 -*- from pygame import * import pyganim import os MONSTER_WIDTH = 32 MONSTER_HEIGHT = 32 MONSTER_COLOR = "#2110FF" ICON_DIR = os.path.dirname(__file__) #       ANIMATION_MONSTERHORYSONTAL = [('%s/monsters/fire1.png' % ICON_DIR), ('%s/monsters/fire2.png' % ICON_DIR )] class Monster(sprite.Sprite): def __init__(self, x, y, left, up, maxLengthLeft,maxLengthUp): sprite.Sprite.__init__(self) self.image = Surface((MONSTER_WIDTH, MONSTER_HEIGHT)) self.image.fill(Color(MONSTER_COLOR)) self.rect = Rect(x, y, MONSTER_WIDTH, MONSTER_HEIGHT) self.image.set_colorkey(Color(MONSTER_COLOR)) self.startX = x #   self.startY = y self.maxLengthLeft = maxLengthLeft #  ,       self.maxLengthUp= maxLengthUp #  ,      ,  self.xvel = left # c   , 0 -    self.yvel = up #    , 0 -   boltAnim = [] for anim in ANIMATION_MONSTERHORYSONTAL: boltAnim.append((anim, 0.3)) self.boltAnim = pyganim.PygAnimation(boltAnim) self.boltAnim.play() def update(self, platforms): #    self.image.fill(Color(MONSTER_COLOR)) self.boltAnim.blit(self.image, (0, 0)) self.rect.y += self.yvel self.rect.x += self.xvel self.collide(platforms) if (abs(self.startX - self.rect.x) > self.maxLengthLeft): self.xvel =-self.xvel #    ,      if (abs(self.startY - self.rect.y) > self.maxLengthUp): self.yvel = -self.yvel #    ,     ,  def collide(self, platforms): for p in platforms: if sprite.collide_rect(self, p) and self != p: #   -  -  self.xvel = - self.xvel #      self.yvel = - self.yvel 

рдПрдХ рд░рд╛рдХреНрд╖рд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ 6 рддрд░реНрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: x , y - рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ, рдмрд╛рдИрдВ - рдХреНрд╖реИрддрд┐рдЬ рдЧрддрд┐, рдКрдкрд░ - рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдЧрддрд┐, рдЕрдзрд┐рдХрддрдо рдЧрддрд┐ред рдЕрдзрд┐рдХрддрдо рджреВрд░реА рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд░рд╛рдХреНрд╖рд╕ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдзрд┐рдХрддрдо рдЧрддрд┐ 1 - рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди, рд▓реЗрдХрд┐рди рд▓рдВрдмрд╡рддред

рдЕрдм рдЖрдЧ рдХреЗ рд╕рдВрдкрд░реНрдХ рд╕реЗ рдирд╛рдпрдХ рдХреЛ рдореМрдд рдЬреЛрдбрд╝реЗрдВред

рддрд╛рд░ рдмрджрд▓реЗрдВ
 if isinstance(p, blocks.BlockDie): #    - blocks.BlockDie self.die()#  

рдкрд░
  if isinstance(p, blocks.BlockDie) or isinstance(p, monsters.Monster): #   - blocks.BlockDie  Monster self.die()#  

рдФрд░ рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЗ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЖрдпрд╛рдд рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛

рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдПрдХ рд░рд╛рдХреНрд╖рд╕ рдХреА рд░рдЪрдирд╛ рдХреЛ рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред

рдЪрд▓реЛ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХрд╛ рдПрдХ рдФрд░ рд╕рдореВрд╣ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЛ рдЬрдЧрд╣ рджреЗрдВрдЧреЗред
 monsters = pygame.sprite.Group() #    

рдкреНрд░рд╢реНрди: рд╣рдореЗрдВ рджреВрд╕рд░реЗ рд╕рдореВрд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдкрд┐рдЫрд▓рд╛ рдХреНрдпреЛрдВ рдЧрд╛рдпрдм рдерд╛? рд╕рдм рдХреЗ рдмрд╛рдж, рдПрдирд┐рдореЗрдЯреЗрдбрдЗрдВрдЯрд░рд╛рдЗрдЯ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдЧреНрд░реБрдк рдореЗрдВ, рд╣рдо рдЕрдкрдбреЗрдЯ () рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВ
рдЙрддреНрддрд░: рдкрд┐рдЫрд▓реЗ рд╕рдореВрд╣ рдореЗрдВ, рд╣рдо рдЕрдкрдбреЗрдЯ () рд╡рд┐рдзрд┐ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рддрд░реНрдХ рдХреЗ рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░ рд░рд╛рдХреНрд╖рд╕реЛрдВ рд╕рдореВрд╣ рдореЗрдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред

рд░рд╛рдХреНрд╖рд╕ рдХреЛ рд╣реА рдкреИрджрд╛ рдХрд░реЛред
 mn = Monster(190,200,2,3,150,15) entities.add(mn) platforms.append(mn) monsters.add(mn) 

рдФрд░ рдЙрд╕реЗ рд╣рд┐рд▓рд╛рдУ
 monsters.update(platforms) #    

рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред


рд░рд╛рдЬрдХреБрдорд╛рд░реА


рдХрд┐рд╕реА рднреА рдкреНрд▓рдВрдмрд░ рдХреЗ рд▓рд┐рдП рд╕рдореНрдорд╛рди рдХреА рдмрд╛рдд рд░рд╛рдЬрдХреБрдорд╛рд░реА рдХреЛ рдмрдЪрд╛рдирд╛ рд╣реИред

рд░рд╛рдЬрдХреБрдорд╛рд░реА рд╡рд░реНрдЧ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рдХрд╛ рдХреЛрдб рдирд╣реАрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред рдХреМрди рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ - рдмреНрд▓реЙрдХрд╕реАрдкреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЗрдЦреЗрдВ

рд╣рдо рд╡рд┐рдЬреЗрддрд╛ рдЧреБрдг рдХреЛ рдЕрдкрдиреЗ рдЪрд░рд┐рддреНрд░ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдиреНрдпрд╛рдп рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рд╕реНрддрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
 self.winner = False 

рдФрд░ рдЯрдХрд░рд╛рдиреЗ () рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ
 elif isinstance(p, blocks.Princess): #    self.winner = True # !!! 


рдФрд░ рдлрд┐рд░, рд░рд╛рдЬрдХреБрдорд╛рд░реА рдирд┐рд░реНрдорд╛рдг рдХреЛрдб рд▓рд┐рдЦреЗрдВ
 if col == "P": pr = Princess(x,y) entities.add(pr) platforms.append(pr) animatedEntities.add(pr) 


"рдкреА" рдкреНрд░рддреАрдХ рдХреЛ рд╕реНрддрд░ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦреЗрдВред

рдирдЬрд╝рд░


рд╕реНрддрд░


рдЕрдВрдд рдореЗрдВ рд╣рдо рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕реНрддрд░ рдкрд░ рдкрд╣реБрдВрдЪ рдЧрдПред рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕реНрддрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦреЗрдВрдЧреЗред рдореИрдВ 1.txt рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдПрдХ рд╕реНрддрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ
 [ ----------------------------------| - * -| - * *P -| ---- *--** --| - -- -| - -| - -| - -| -- ---- | - -| -- -| - ** -| - --- -| - -| - -| - --- -| - -| - -------- * ---- -| - -| - - -| - ** -- -| - * -| - ** -| --------------- *** -- -| - -| - -| ----------------------------------| ] player 55 44 portal 128 512 900 35 portal 170 512 700 64 monster 190 250 2 1 150 10 monster 190 400 2 3 150 150 monster 150 200 1 2 150 100 / 


рд╣рдо рдпрд╣рд╛рдВ рдХреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ? рдЗрд╕рдореЗрдВ рд╕реЗ рдХреБрдЫ рднреА рдЬрд┐рд╕реЗ рдЗрд╕ рдкрдж рдкрд░ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ (рдкрд╣рд▓реЗ рднрд╛рдЧ рд╕рд╣рд┐рдд)ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо "[", "-", "*", "]", "|"
рдЬрд╣рд╛рдВ "[" - рдкрд╛рд░реНрд╕рд░ рдХреЛ рд╕реНрддрд░ рдХреА рд╢реБрд░реБрдЖрдд рджрд┐рдЦрд╛рддрд╛ рд╣реИ
"]" - рдХреНрд░рдорд╢рдГ, рд╕реНрддрд░ рдХрд╛ рдЕрдВрдд
"|" - рд▓рд╛рдЗрди рдХрд╛ рдЕрдВрдд
"-" - рдирд┐рдпрдорд┐рдд рдордВрдЪ
"*" - рд╕реНрдЯрдбреЗрдб рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо

рдлрд┐рд░, рд▓рд╛рдЗрди "рдЦрд┐рд▓рд╛рдбрд╝реА 55 44" рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рдирд╛рдпрдХ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ
"рдкреЛрд░реНрдЯрд▓ 128 512 900 35" - рдкрд╣рд▓реЗ рджреЛ рдирдВрдмрд░ - рдкреЛрд░реНрдЯрд▓ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ, рджреВрд╕рд░реЗ - рдЖрдВрджреЛрд▓рди рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ
"рдореЙрдиреНрд╕реНрдЯрд░ 150 200 1 2 150 100" - рдкрд╣рд▓реЗ рджреЛ рдирдВрдмрд░, рдЗрд╕реА рддрд░рд╣, рд░рд╛рдХреНрд╖рд╕ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ, рдлрд┐рд░, рджреВрд╕рд░реЗ рджреЛ - рдЧрддрд┐ рдХреНрд╖реИрддрд┐рдЬ рдФрд░ рдКрд░реНрдзреНрд╡рд╛рдзрд░, рдФрд░ рдЕрдВрддрд┐рдо - рдПрдХ рджрд┐рд╢рд╛ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рджреВрд░реА рдХреНрд╖реИрддрд┐рдЬ рдФрд░ рд▓рдВрдмрд╡рддред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦ рдЪреБрдХреЗ рд╣реИрдВ, рдЬрд┐рддрдиреЗ рдЪрд╛рд╣реЗрдВ рдЙрддрдиреЗ рдкреЛрд░реНрдЯрд▓ рдФрд░ рд░рд╛рдХреНрд╖рд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд░рд┐рддреНрд░ "/" рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рд╛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ред

рдЕрдм, рддреЛрддрд╛ рд╣реА рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рд╣рдо рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ рдореБрдЦреНрдп рднрд╛рдЧ () рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╕рднреА рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рд╕рдореВрд╣реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
 *** level = [] entities = pygame.sprite.Group() #   animatedEntities = pygame.sprite.Group() #   ,    monsters = pygame.sprite.Group() #    platforms = [] # ,        if __name__ == "__main__": main() 

рдлрд┐рд░, рд╕реНрддрд░ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдЪрд░ рдЦрд╛рд▓реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░рд╛рдХреНрд╖рд╕реЛрдВ рдФрд░ рдкреЛрд░реНрдЯрд▓реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╣рдЯрд╛ рджреЗрдВред

рдФрд░ рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ
 def loadLevel(): global playerX, playerY #   ,    levelFile = open('%s/levels/1.txt' % FILE_DIR) line = " " commands = [] while line[0] != "/": #       line = levelFile.readline() #  if line[0] == "[": #      while line[0] != "]": # ,       line = levelFile.readline() #    if line[0] != "]": #       endLine = line.find("|") #      level.append(line[0: endLine]) #          "|" if line[0] != "": #     commands = line.split() #      if len(commands) > 1: #    > 1,     if commands[0] == "player": #    - player playerX= int(commands[1]) #     playerY = int(commands[2]) if commands[0] == "portal": #    portal,    tp = BlockTeleport(int(commands[1]),int(commands[2]),int(commands[3]),int(commands[4])) entities.add(tp) platforms.append(tp) animatedEntities.add(tp) if commands[0] == "monster": #    monster,    mn = Monster(int(commands[1]),int(commands[2]),int(commands[3]),int(commands[4]),int(commands[5]),int(commands[6])) entities.add(mn) platforms.append(mn) monsters.add(mn) 

рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ рдФрд░ рдЪрд░ startX рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдФрд░ рд╣рдорд╛рд░реЗ рд╣реАрд░реЛ рдХреЗ рд▓рд┐рдП рд╢реБрд░реБрдЖрддреА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ startY ред
 def main(): loadLevel() *** hero = Player(playerX,playerY) #    (x,y)  *** 


рд░рд┐рдЬрд▓реНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ ред

рдЕрдм рд╕реНрддрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рд╛рде рд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рд╕реНрддрд░ рд╕рдВрдкрд╛рджрдХ рдХреЛ рд╣реА рд▓рд┐рдЦреЗрдВрдЧреЗред
PS рдКрдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╕реНрддрд░ рдХрд╛рдлреА рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд╛рдПрдВред

Source: https://habr.com/ru/post/In196432/


All Articles