{"id":196432,"date":"2013-10-07T11:14:03","date_gmt":"2013-10-07T07:14:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=196432"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=196432","title":{"rendered":"<span class=\"post_title\">\u041f\u0438\u0448\u0435\u043c \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u0440 \u043d\u0430 Python. \u0427\u0430\u0441\u0442\u044c 2. \u041f\u043e\u0434\u0447\u0430\u0441\u0442\u044c 1, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0443\u0440\u043e\u0432\u043d\u0435\u0439<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/a12\/368\/d84\/a12368d8468a2e6ef3f08c525d2b6b8c.png\"\/><br \/>  \u041f\u0440\u0438\u0432\u0435\u0442, \u0434\u0440\u0443\u0437\u044c\u044f!<\/p>\n<p>  \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u0430\u0448\u0438\u043c \u041c\u0430\u0440\u0438\u043e\u0411\u043e\u0435\u043c. \u041d\u0430\u0447\u0430\u043b\u043e <a href=\"http:\/\/habrahabr.ru\/post\/193888\/\">\u0442\u0443\u0442<\/a>. \u0412 \u044d\u0442\u043e\u0439 \u043f\u043e\u0434\u0447\u0430\u0441\u0442\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0443\u0440\u043e\u0432\u043d\u0435\u0439, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e: \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0443\u0440\u0431\u043e \u0440\u0435\u0436\u0438\u043c \u0431\u0435\u0433\u0430 \u0433\u0435\u0440\u043e\u044e, \u0441\u043c\u0435\u0440\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u0434\u0432\u0438\u0436\u0443\u0449\u0438\u0435\u0441\u044f \u043c\u043e\u043d\u0441\u0442\u0440\u044b, \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0435\u0440\u044b, \u043f\u0440\u0438\u043d\u0446\u0435\u0441\u0441\u0443 \u0438 \u043f\u0430\u0440\u0441\u0435\u0440 \u0443\u0440\u043e\u0432\u043d\u0435\u0439, \u0434\u0430\u0431\u044b \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0434\u0447\u0430\u0441\u0442\u0438 \u043d\u0435 \u043e\u0442\u0432\u043b\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u0441\u0451 \u044d\u0442\u043e. <br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h4>Upgrade \u0433\u0435\u0440\u043e\u044f<\/h4>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0430\u0448\u0435\u043c\u0443 \u0433\u0435\u0440\u043e\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u043a\u043e\u0440\u044f\u0442\u044c\u0441\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u043a\u043e\u0434 \u043c\u0435\u0442\u043e\u0434\u0430 <b>update<\/b>.<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442  <\/p>\n<pre><code class=\"python\">MOVE_EXTRA_SPEED = 2.5 # \u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 JUMP_EXTRA_POWER = 1 # \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u043b\u0430 \u043f\u0440\u044b\u0436\u043a\u0430 ANIMATION_SUPER_SPEED_DELAY = 0.05 # \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u043c\u0435\u043d\u044b \u043a\u0430\u0434\u0440\u043e\u0432 \u043f\u0440\u0438 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0438 <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0432\u043b\u0435\u0432\u043e \u2014 \u0432\u043f\u0440\u0430\u0432\u043e \u0432 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435. \u041c\u044b \u0432\u0441\u0442\u0430\u0432\u0438\u043c \u0442\u0435 \u0436\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438, \u043d\u043e \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0441\u043c\u0435\u043d\u044b \u043a\u0430\u0434\u0440\u043e\u0432  <\/p>\n<pre><code class=\"python\">#        \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0432\u043f\u0440\u0430\u0432\u043e         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() #        \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0432\u043b\u0435\u0432\u043e                 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() <\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043b\u0438 2 \u043d\u0430\u0431\u043e\u0440\u0430 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0439 \u043f\u0440\u0438 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0438 <b>self.boltAnimRightSuperSpeed <\/b>, <b>self.boltAnimLeftSuperSpeed <\/b>, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0438\u0445 \u0447\u0443\u0442\u044c \u043d\u0438\u0436\u0435<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0439\u043c\u0435\u043c\u0441\u044f \u0441\u0430\u043c\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c <b>update<\/b><\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <b>running<\/b>  <\/p>\n<pre><code class=\"python\">def update(self, left, right, up, running, platforms): <\/code><\/pre>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0438.  <\/p>\n<pre><code class=\"python\">if up:       if self.onGround: # \u043f\u0440\u044b\u0433\u0430\u0435\u043c, \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043e\u0442 \u0437\u0435\u043c\u043b\u0438           self.yvel = -JUMP_POWER           if running and (left or right): # \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0438 \u043c\u044b \u0434\u0432\u0438\u0436\u0435\u043c\u0441\u044f                  self.yvel -= JUMP_EXTRA_POWER # \u0442\u043e \u043f\u0440\u044b\u0433\u0430\u0435\u043c \u0432\u044b\u0448\u0435           self.image.fill(Color(COLOR))           self.boltAnimJump.blit(self.image, (0, 0))                         if left:       self.xvel = -MOVE_SPEED # \u041b\u0435\u0432\u043e = x- n       self.image.fill(Color(COLOR))       if running: # \u0435\u0441\u043b\u0438 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435             self.xvel-=MOVE_EXTRA_SPEED # \u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0433\u0430\u0435\u043c\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435             if not up: # \u0438 \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u0440\u044b\u0433\u0430\u0435\u043c                 self.boltAnimLeftSuperSpeed.blit(self.image, (0, 0)) # \u0442\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0443\u044e \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e         else: # \u0435\u0441\u043b\u0438 \u043d\u0435 \u0431\u0435\u0436\u0438\u043c             if not up: # \u0438 \u043d\u0435 \u043f\u0440\u044b\u0433\u0430\u0435\u043c                 self.boltAnimLeft.blit(self.image, (0, 0)) # \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f          if up: # \u0435\u0441\u043b\u0438 \u0436\u0435 \u043f\u0440\u044b\u0433\u0430\u0435\u043c                   self.boltAnimJumpLeft.blit(self.image, (0, 0)) # \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e \u043f\u0440\u044b\u0436\u043a\u0430   if right:          self.xvel = MOVE_SPEED # \u041f\u0440\u0430\u0432\u043e = 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))  <\/code><\/pre>\n<p>  \u0418 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043b\u0435\u0432\u043e\u0433\u043e \u0448\u0438\u0444\u0442\u0430.   <\/p>\n<pre><code class=\"python\">running = False *** if e.type == KEYDOWN and e.key == K_LSHIFT:            running = True ***  if e.type == KEYUP and e.key == K_LSHIFT:            running = False <\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u043a\u043e\u0434\u044b \u043a\u043b\u0430\u0432\u0438\u0448 <a href=\"http:\/\/www.pygame.org\/docs\/ref\/key.html\">\u0442\u0443\u0442<\/a><\/p>\n<p>  \u0418 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 <b>hero.update()<\/b>  <\/p>\n<pre><code class=\"python\">hero.update(left, right, up, running, platforms)  <\/code><\/pre>\n<p>  \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b <i>( \u044f \u0438\u0437\u043c\u0435\u043d\u0438\u043b \u0446\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 \u043d\u0430 \u0447\u0435\u0440\u043d\u044b\u0439<s>, \u0431\u0440\u0443\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0434\u043b\u044f \u0431\u0440\u0443\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u041c\u0430\u0440\u0438\u043e\u0411\u043e\u044f<\/s>)<\/i><br \/>  \u0411\u0435\u0437 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/349\/d4e\/c77\/349d4ec7776b6d68b90d77cab31a79cd.gif\"\/><br \/>  \u041f\u0440\u044b\u0436\u043e\u043a \u0441 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435\u043c<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/a2f\/fa5\/617\/a2ffa5617224bf207487198995677b19.gif\"\/><\/p>\n<h4>\u0421\u043c\u0435\u0440\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0448\u0438\u043f\u044b<\/h4>\n<p>  \u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0433\u0435\u0440\u043e\u044e \u2014 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0432\u0438\u0434 \u0431\u043b\u043e\u043a\u043e\u0432, \u043f\u0440\u0438 \u0441\u043e\u043f\u0440\u0438\u043a\u043e\u0441\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043c\u0435\u0440\u0442\u044c.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439\u0441\u044f \u043e\u0442 Platform.   <\/p>\n<pre><code class=\"python\">class BlockDie(Platform):     def __init__(self, x, y):         Platform.__init__(self, x, y)         self.image = image.load(&quot;%s\/blocks\/dieBlock.png&quot; % ICON_DIR) <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0433\u0435\u0440\u043e\u044f \u043f\u0440\u0438 \u0441\u043e\u043f\u0440\u0438\u043a\u043e\u0441\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u0441 \u043d\u0438\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u0434\u043e\u0431\u0430\u0432\u0438\u043c 2 \u043c\u0435\u0442\u043e\u0434\u0430 \u0432 \u043a\u043b\u0430\u0441\u0441 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430. \u041f\u0435\u0440\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u2014 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0441\u043c\u0435\u0440\u0442\u0438, \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c(\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430\u043c \u0435\u0449\u0435 \u0440\u0430\u0437 \u0447\u0443\u0442\u044c \u043d\u0438\u0436\u0435)  <\/p>\n<pre><code class=\"python\">def die(self):         time.wait(500)         self.teleporting(self.startX, self.startY) # \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c\u0441\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b  def teleporting(self, goX, go Y):         self.rect.x = goX         self.rect.y = goY <\/code><\/pre>\n<p>  \u0422.\u0435. \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0443\u043c\u0438\u0440\u0430\u0435\u043c, \u0438\u0433\u0440\u0430 \u0437\u0430\u043c\u0438\u0440\u0430\u0435\u0442 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0437\u0430\u0442\u0435\u043c \u043c\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c\u0441\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0438 \u0438\u0433\u0440\u0430\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>  \u041d\u0443 \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u0430\u043c\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0438 \u0441 \u0431\u043b\u043e\u043a\u043e\u043c \u0441\u043c\u0435\u0440\u0442\u0438 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 collide()  <\/p>\n<pre><code class=\"python\">*** if isinstance(p, blocks.BlockDie): # \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0441\u0430\u043a\u0430\u0435\u043c\u044b\u0439 \u0431\u043b\u043e\u043a - blocks.BlockDie      self.die()# \u0443\u043c\u0438\u0440\u0430\u0435\u043c *** <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0443\u0440\u043e\u0432\u0435\u043d\u044c  <\/p>\n<pre><code class=\"python\">level = [        &quot;----------------------------------&quot;,        &quot;-                                -&quot;,        &quot;-                       --       -&quot;,        &quot;-        *                       -&quot;,        &quot;-                                -&quot;,        &quot;-            --                  -&quot;,        &quot;--                               -&quot;,        &quot;-                                -&quot;,        &quot;-                   ----     --- -&quot;,        &quot;-                                -&quot;,        &quot;--                               -&quot;,        &quot;-            *                   -&quot;,        &quot;-                            --- -&quot;,        &quot;-                                -&quot;,        &quot;-                                -&quot;,        &quot;-  *   ---                  *    -&quot;,        &quot;-                                -&quot;,        &quot;-   -------         ----         -&quot;,        &quot;-                                -&quot;,        &quot;-                         -      -&quot;,        &quot;-                            --  -&quot;,        &quot;-           ***                  -&quot;,        &quot;-                                -&quot;,        &quot;----------------------------------&quot;] <\/code><\/pre>\n<p>  \u0418 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0430 \u0441\u043c\u0435\u0440\u0442\u0438, \u0435\u0441\u043b\u0438 \u0432 \u0443\u0440\u043e\u0432\u043d\u0435 \u0435\u0441\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b &quot;*&quot;  <\/p>\n<pre><code class=\"python\">if col == &quot;*&quot;:    bd = BlockDie(x,y)    entities.add(bd)    platforms.append(bd) <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/ec9\/79a\/713\/ec979a713c7a0c54b9fd9fe3c5fdc1f8.gif\"\/><\/p>\n<h4>\u041f\u043e\u0440\u0442\u0430\u043b\u044b<\/h4>\n<p>  \u041a\u0430\u043a\u043e\u0439 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0441\u0430\u043d\u0442\u0435\u0445\u043d\u0438\u043a \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u0435\u0437 \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0430? \u0422\u0430\u043a \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u0433\u0435\u0440\u043e\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0431\u0435\u043b\u043e\u0439 \u0432\u043e\u0440\u043e\u043d\u043e\u0439.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u0431\u043b\u043e\u043a\u0430. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0432 \u0444\u0430\u0439\u043b\u0435 <b>blocks.py<\/b><\/p>\n<p>  C\u043f\u0435\u0440\u0432\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b  <\/p>\n<pre><code class=\"python\">ANIMATION_BLOCKTELEPORT = [             ('%s\/blocks\/portal2.png' % ICON_DIR),             ('%s\/blocks\/portal1.png' % ICON_DIR)] <\/code><\/pre>\n<p>  \u0417\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441.  <\/p>\n<pre><code class=\"python\">class BlockTeleport(Platform):     def __init__(self, x, y, goX,goY):         Platform.__init__(self, x, y)         self.goX = goX # \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f         self.goY = goY # \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f         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)) <\/code><\/pre>\n<p>   \u0422\u0443\u0442 \u043d\u0435\u0442 \u043d\u0438 \u0447\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u0442\u0430\u043b\u0430, \u043d\u043e \u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0433\u0435\u0440\u043e\u044f, \u043f\u0440\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0438 \u0432 \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0435\u0440. <\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0430\u0448\u0435\u043c\u0443 \u0433\u0435\u0440\u043e\u044e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0441\u043e\u043f\u0440\u0438\u043a\u043e\u0441\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u0441 \u043f\u043e\u0440\u0442\u0430\u043b\u043e\u043c  <\/p>\n<pre><code class=\"python\">*** elif isinstance(p, blocks.BlockTeleport): \tself.teleporting(p.goX, p.goY) *** <\/code><\/pre>\n<p>  \u0418 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0434\u0438\u043d \u043f\u043e\u0440\u0442\u0430\u043b \u043d\u0430 \u043a\u0430\u0440\u0442\u0443. \u0422\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u043c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u041a\u043e\u0433\u0434\u0430 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u2014 \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0433\u0447\u0435.<br \/>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0433\u0440\u0443\u043f\u043f\u0443 \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438  <\/p>\n<pre><code class=\"python\">animatedEntities = pygame.sprite.Group() # \u0432\u0441\u0435 \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0433\u0435\u0440\u043e\u044f <\/code><\/pre>\n<p>  \u0418 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0435\u0440.   <\/p>\n<pre><code class=\"python\">tp = BlockTeleport(128,512,800,64) entities.add(tp) platforms.append(tp) animatedEntities.add(tp) <\/code><\/pre>\n<p>  \u0412 \u043a\u043e\u043d\u0446\u0435, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 <b>update() <\/b>\u0443 \u0432\u0441\u0435\u0445 \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432  <\/p>\n<pre><code class=\"python\">animatedEntities.update() # \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e  <\/code><\/pre>\n<p>  \u041a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a <br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/c78\/678\/319\/c7867831937442ee67a7aad009107fb4.gif\"\/><\/p>\n<h4>\u041c\u043e\u043d\u0441\u0442\u0440\u044b<\/h4>\n<p>  \u0421\u0442\u0440\u0430\u0448\u043d\u044b\u0435, \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0433\u0430\u044e\u0449\u0438\u0435\u0441\u044f, \u0441\u043c\u0435\u0440\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u043f\u0430\u0441\u043d\u044b\u0435 <i>\u043e\u0433\u043e\u043d\u044c\u043a\u0438.<\/i><\/p>\n<p>  \u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u043c\u043e\u043d\u0441\u0442\u0440\u043e\u0432 \u043e\u0442 \u0441\u043c\u0435\u0440\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u043e\u043d\u0441\u0442\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c, \u043f\u043e\u0436\u0430\u043b\u0443\u0439.<\/p>\n<p>  \u0411\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u0434\u0430\u0431\u044b \u043d\u0435 \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c\u0441\u044f. \u041d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e \u043e\u0447\u0435\u043d\u044c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e \u2014 <b>monsters.py<\/b><\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 <b>Monster<\/b>. \u0412 \u043d\u0451\u043c \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0442\u0430\u043a\u043e\u0433\u043e, \u0447\u0435\u0433\u043e \u043c\u044b \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u0438 \u0440\u0430\u043d\u0435\u0435.<br \/>  \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0432\u0441\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430  <\/p>\n<pre><code class=\"python\">#!\/usr\/bin\/env python # -*- coding: utf-8 -*-  from pygame import * import pyganim import os  MONSTER_WIDTH = 32 MONSTER_HEIGHT = 32 MONSTER_COLOR = &quot;#2110FF&quot; ICON_DIR = os.path.dirname(__file__) #  \u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438   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 # \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b         self.startY = y         self.maxLengthLeft = maxLengthLeft # \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0439\u0442\u0438 \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443         self.maxLengthUp= maxLengthUp # \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0439\u0442\u0438 \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c         self.xvel = left # c\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438, 0 - \u0441\u0442\u043e\u0438\u0442 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435         self.yvel = up # \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438, 0 - \u043d\u0435 \u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f         boltAnim = []         for anim in ANIMATION_MONSTERHORYSONTAL:             boltAnim.append((anim, 0.3))         self.boltAnim = pyganim.PygAnimation(boltAnim)         self.boltAnim.play()               def update(self, platforms): # \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u0433\u0435\u0440\u043e\u044f                              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) &gt; self.maxLengthLeft):             self.xvel =-self.xvel  # \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0448\u043b\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0442\u043e \u0438\u0434\u0435\u0438 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443         if (abs(self.startY - self.rect.y) &gt; self.maxLengthUp):             self.yvel = -self.yvel # \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0448\u043b\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0442\u043e \u0438\u0434\u0435\u0438 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c      def collide(self, platforms):         for p in platforms:             if sprite.collide_rect(self, p) and self != p: # \u0435\u0441\u043b\u0438 \u0441 \u0447\u0435\u043c-\u0442\u043e \u0438\u043b\u0438 \u043a\u0435\u043c-\u0442\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c                self.xvel = - self.xvel # \u0442\u043e \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443                self.yvel = - self.yvel <\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043c\u043e\u043d\u0441\u0442\u0440\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c 6 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432: <b>\u0445<\/b>, <b>y <\/b> \u2014 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, <b>left <\/b> \u2014 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438, <b>up<\/b> \u2014 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438, <b>maxLengthLeft<\/b> \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0439\u0442\u0438 \u043c\u043e\u043d\u0441\u0442\u0440, <b>maxLengthUp<\/b> \u2014 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443, \u043d\u043e \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043c\u0435\u0440\u0442\u044c \u0433\u0435\u0440\u043e\u044e \u043e\u0442 \u0441\u043e\u043f\u0440\u0438\u043a\u043e\u0441\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0441 \u043e\u0433\u043d\u0435\u043c.<\/p>\n<p>  \u0417\u0430\u043c\u0435\u043d\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0438  <\/p>\n<pre><code class=\"python\">if isinstance(p, blocks.BlockDie): # \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0441\u0430\u043a\u0430\u0435\u043c\u044b\u0439 \u0431\u043b\u043e\u043a - blocks.BlockDie            self.die()# \u0443\u043c\u0438\u0440\u0430\u0435\u043c <\/code><\/pre>\n<p>  \u041d\u0430   <\/p>\n<pre><code class=\"python\"> if isinstance(p, blocks.BlockDie) or isinstance(p, monsters.Monster): # \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0441\u0430\u043a\u0430\u0435\u043c\u044b\u0439 \u0431\u043b\u043e\u043a- blocks.BlockDie \u0438\u043b\u0438 Monster             self.die()# \u0443\u043c\u0438\u0440\u0430\u0435\u043c <\/code><\/pre>\n<p>  \u0418 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442 \u0441 \u0444\u0430\u0439\u043b\u0430 <b>monsters.py<\/b><\/p>\n<p>  \u0418, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u043d\u0441\u0442\u0440\u0430 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0433\u0440\u0443\u043f\u043f\u0443 \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c \u043d\u0430\u0448\u0438\u0445 \u043c\u043e\u043d\u0441\u0442\u0440\u0438\u043a\u043e\u0432.  <\/p>\n<pre><code class=\"python\">monsters = pygame.sprite.Group() # \u0412\u0441\u0435 \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0433\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b <\/code><\/pre>\n<p>  \u0412\u043e\u043f\u0440\u043e\u0441: <i>\u0414\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0430\u043c \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u0430? \u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439? \u0412\u0435\u0434\u044c \u0432 \u0433\u0440\u0443\u043f\u043f\u0435 \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432 <b>animatedEntities<\/b> \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 <b>update<\/b><\/i>()<br \/>  \u041e\u0442\u0432\u0435\u0442: \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 <b>update()<\/b>\u0431\u0435\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0430 \u0432 \u0433\u0440\u0443\u043f\u043f\u0435 <b>monsters<\/b> \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0430\u043c\u043e\u0433\u043e \u043c\u043e\u043d\u0441\u0442\u0440\u0430.  <\/p>\n<pre><code class=\"python\">mn = Monster(190,200,2,3,150,15) entities.add(mn) platforms.append(mn) monsters.add(mn) <\/code><\/pre>\n<p>  \u0418 \u0434\u0432\u0438\u0433\u0430\u0435\u043c \u0435\u0433\u043e  <\/p>\n<pre><code class=\"python\">monsters.update(platforms) # \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0433\u0430\u0435\u043c \u0432\u0441\u0435\u0445 \u043c\u043e\u043d\u0441\u0442\u0440\u043e\u0432 <\/code><\/pre>\n<p>  \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/1bd\/1c1\/542\/1bd1c1542f35c1ed7e4f71e1601d48fe.gif\"\/><\/p>\n<h4>\u041f\u0440\u0438\u043d\u0446\u0435\u0441\u0441\u0430<\/h4>\n<p>  \u0414\u0435\u043b\u043e \u0447\u0435\u0441\u0442\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u0430\u043d\u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u2014 \u0441\u043f\u0430\u0441\u0442\u0438 \u043f\u0440\u0438\u043d\u0446\u0435\u0441\u0441\u0443.<\/p>\n<p>  \u041a\u043b\u0430\u0441\u0441 \u043f\u0440\u0438\u043d\u0446\u0435\u0441\u0441\u044b \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0447\u0442\u043e-\u043b\u0438\u0431\u043e \u043d\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u0434 \u0435\u0433\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443. \u041a\u0442\u043e \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u0441\u044f \u2014 \u0438\u0441\u043a\u0430\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 <b>blocks.py<\/b><\/p>\n<p>  \u041d\u0430\u0448\u0435\u043c\u0443 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <b>winner<\/b>, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u043c \u0441\u0443\u0434\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0440\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u0443\u0440\u043e\u0432\u0435\u043d\u044c.  <\/p>\n<pre><code class=\"python\">self.winner = False <\/code><\/pre>\n<p>  \u0418 \u0432\u043d\u0435\u0441\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043c\u0435\u0442\u043e\u0434 <b>collide()<\/b>  <\/p>\n<pre><code class=\"python\">elif isinstance(p, blocks.Princess): # \u0435\u0441\u043b\u0438 \u043a\u043e\u0441\u043d\u0443\u043b\u0438\u0441\u044c \u043f\u0440\u0438\u043d\u0446\u0435\u0441\u0441\u044b       self.winner = True # \u043f\u043e\u0431\u0435\u0434\u0438\u043b\u0438!!! <\/code><\/pre>\n<p>  \u0418 \u0434\u0430\u043b\u0435\u0435, \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043d\u0446\u0435\u0441\u0441\u044b  <\/p>\n<pre><code class=\"python\">if col == &quot;P&quot;:    pr = Princess(x,y)    entities.add(pr)    platforms.append(pr)    animatedEntities.add(pr) <\/code><\/pre>\n<p>  \u041d\u0435 \u0437\u0430\u0431\u044b\u0432 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b \u00abP\u00bb \u0432 \u0443\u0440\u043e\u0432\u0435\u043d\u044c.<\/p>\n<p>  \u0421\u043c\u043e\u0442\u0440\u0438\u043c<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/332\/08b\/4db\/33208b4dbe38a0f1074a35c42d73ad36.gif\"\/><\/p>\n<h4>\u0423\u0440\u043e\u0432\u0435\u043d\u044c<\/h4>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043c\u044b \u0434\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0434\u043e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0443\u0440\u043e\u0432\u043d\u044f. \u0418\u0445 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <b>levels<\/b>. \u041f\u0440\u0438\u0432\u043e\u0436\u0443 \u043f\u0440\u0438\u043c\u0435\u0440 \u0443\u0440\u043e\u0432\u043d\u044f \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 <b>1.txt<\/b>  <\/p>\n<pre><code class=\"css\">[ ----------------------------------| -               *                -| -             *          *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  \/ <\/code><\/pre>\n<p>  \u0427\u0442\u043e \u043c\u044b \u0442\u0443\u0442 \u0432\u0438\u0434\u0438\u043c? \u041d\u0438 \u0447\u0435\u0433\u043e \u0442\u0430\u043a\u043e\u0433\u043e, \u0447\u0435\u0433\u043e \u0431\u044b \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0438 \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043f\u0435\u0440\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c). \u0421\u043f\u0435\u0440\u0432\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 <b>&quot;[&quot;,&quot;-&quot;, &quot;*&quot;,&quot;]&quot;,&quot;|&quot;<\/b><br \/>  \u0413\u0434\u0435 <b>&quot;[&quot;<\/b> \u2014 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u0440\u0441\u0435\u0440\u0443 \u043d\u0430\u0447\u0430\u043b\u043e \u0443\u0440\u043e\u0432\u043d\u044f<br \/>   <b>&quot;]&quot;<\/b> \u2014 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0432\u0435\u043d\u043d\u043e, \u043a\u043e\u043d\u0435\u0446 \u0443\u0440\u043e\u0432\u043d\u044f<br \/>   <b>&quot;|&quot;<\/b> \u2014 \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u043e\u043a\u0438<br \/>   <b>&quot;-&quot;<\/b> \u2014 \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430<br \/>   <b>&quot;*&quot;<\/b> \u2014 \u0448\u0438\u043f\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430<\/p>\n<p>  \u0417\u0430\u0442\u0435\u043c, \u0432 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 <b>\u00abplayer 55 44\u00bb<\/b> \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043d\u0430\u0448\u0435\u0433\u043e \u0433\u0435\u0440\u043e\u044f<br \/>  <b>\u00abportal 128 512 900 35\u00bb<\/b> \u2014 \u043f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0430 \u0447\u0438\u0441\u043b\u0430 \u2014 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u043e\u0440\u0442\u0430\u043b\u0430, \u0432\u0442\u043e\u0440\u044b\u0435 \u2014 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f<br \/>  <b>\u00abmonster 150 200 1 2 150 100\u00bb<\/b> \u2014 \u043f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0430 \u0447\u0438\u0441\u043b\u0430, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043c\u043e\u043d\u0441\u0442\u0440\u0430, \u0437\u0430\u0442\u0435\u043c, \u0432\u0442\u043e\u0440\u044b\u0435 \u0434\u0432\u0430 \u2014 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f, \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438 \u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438.<br \/>  \u041a\u0430\u043a \u0432\u044b \u0443\u0436\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438, \u043a\u0430\u043a \u043f\u043e\u0440\u0442\u0430\u043b\u043e\u0432, \u0442\u0430\u043a \u0438 \u043c\u043e\u043d\u0441\u0442\u0440\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u043c \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f.<br \/>  \u0421\u0438\u043c\u0432\u043e\u043b <b>&quot;\/&quot;<\/b> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043a\u043e\u043d\u0435\u0446 \u0444\u0430\u0439\u043b\u0430. \u0412\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0433\u043e, \u0441\u0447\u0438\u0442\u0430\u043d\u044b \u043d\u0435 \u0431\u0443\u0434\u0443\u0442.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435, \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u0430\u043c \u043f\u0430\u0440\u0441\u0435\u0440. <br \/>  \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435.<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043c \u0432\u0441\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 main() \u0432 \u0442\u0435\u043b\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b  <\/p>\n<pre><code class=\"python\">*** level = [] entities = pygame.sprite.Group() # \u0412\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b animatedEntities = pygame.sprite.Group() # \u0432\u0441\u0435 \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0433\u0435\u0440\u043e\u044f monsters = pygame.sprite.Group() # \u0412\u0441\u0435 \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0433\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b platforms = [] # \u0442\u043e, \u0432\u043e \u0447\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u0440\u0435\u0437\u0430\u0442\u044c\u0441\u044f \u0438\u043b\u0438 \u043e\u043f\u0438\u0440\u0430\u0442\u044c\u0441\u044f if __name__ == &quot;__main__&quot;:     main() <\/code><\/pre>\n<p>  \u0417\u0430\u0442\u0435\u043c, \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u0443\u0440\u043e\u0432\u0435\u043d\u044c, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0439. \u0422\u0430\u043a \u0436\u0435, \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u043d\u0441\u0442\u0440\u043e\u0432 \u0438 \u043f\u043e\u0440\u0442\u0430\u043b\u043e\u0432.<\/p>\n<p>  \u0418 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e  <\/p>\n<pre><code class=\"python\">def loadLevel():     global playerX, playerY # \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u044d\u0442\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0433\u0435\u0440\u043e\u044f      levelFile = open('%s\/levels\/1.txt' % FILE_DIR)     line = &quot; &quot;     commands = []     while line[0] != &quot;\/&quot;: # \u043f\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0448\u043b\u0438 \u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430         line = levelFile.readline() #\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e         if line[0] == &quot;[&quot;: # \u0435\u0441\u043b\u0438 \u043d\u0430\u0448\u043b\u0438 \u0441\u0438\u043c\u0432\u043e\u043b \u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0440\u043e\u0432\u043d\u044f             while line[0] != &quot;]&quot;: # \u0442\u043e, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0448\u043b\u0438 \u0441\u0438\u043c\u0432\u043e\u043b \u043a\u043e\u043d\u0446\u0430 \u0443\u0440\u043e\u0432\u043d\u044f                 line = levelFile.readline() # \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e \u0443\u0440\u043e\u0432\u0435\u043d\u044c                 if line[0] != &quot;]&quot;: # \u0438 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043a\u043e\u043d\u0446\u0430 \u0443\u0440\u043e\u0432\u043d\u044f                     endLine = line.find(&quot;|&quot;) # \u0442\u043e \u0438\u0449\u0435\u043c \u0441\u0438\u043c\u0432\u043e\u043b \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438                     level.append(line[0: endLine]) # \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 &quot;|&quot;                              if line[0] != &quot;&quot;: # \u0435\u0441\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u043f\u0443\u0441\u0442\u0430\u044f          commands = line.split() # \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u043c \u0435\u0435 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b          if len(commands) &gt; 1: # \u0435\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043c\u0430\u043d\u0434 &gt; 1, \u0442\u043e \u0438\u0449\u0435\u043c \u044d\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b             if commands[0] == &quot;player&quot;: # \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0432\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 - player                 playerX= int(commands[1]) # \u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0433\u0435\u0440\u043e\u044f                 playerY = int(commands[2])             if commands[0] == &quot;portal&quot;: # \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0432\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 portal, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u043e\u0440\u0442\u0430\u043b                 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] == &quot;monster&quot;: # \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0432\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 monster, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043c\u043e\u043d\u0441\u0442\u0440\u0430                 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) <\/code><\/pre>\n<p>   \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <b>startX<\/b> \u0438 <b>startY<\/b> \u043a\u0430\u043a \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043d\u0430\u0448\u0435\u043c\u0443 \u0433\u0435\u0440\u043e\u044e.  <\/p>\n<pre><code class=\"python\">def main():     loadLevel() *** hero = Player(playerX,playerY) # \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0433\u0435\u0440\u043e\u044f \u043f\u043e (x,y) \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c *** <\/code><\/pre>\n<p>  <a href=\"https:\/\/github.com\/Velesey\/SuperMarioBoy\/releases\/tag\/0.2.1\">\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/a><br \/>  \u0421\u0435\u0439\u0447\u0430\u0441 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0443\u0440\u043e\u0432\u043d\u044f \u0440\u0443\u043a\u0430\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u043e\u0434\u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u0430\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0443\u0440\u043e\u0432\u043d\u0435\u0439.<br \/>  <b>P.S.<\/b> \u0423\u0440\u043e\u0432\u0435\u043d\u044c, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435, \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u044b\u0439, \u0434\u0435\u0440\u0437\u0430\u0439\u0442\u0435:-)    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/196432\/\"> http:\/\/habrahabr.ru\/post\/196432\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/a12\/368\/d84\/a12368d8468a2e6ef3f08c525d2b6b8c.png\"\/><br \/>  \u041f\u0440\u0438\u0432\u0435\u0442, \u0434\u0440\u0443\u0437\u044c\u044f!<\/p>\n<p>  \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u0430\u0448\u0438\u043c \u041c\u0430\u0440\u0438\u043e\u0411\u043e\u0435\u043c. \u041d\u0430\u0447\u0430\u043b\u043e <a href=\"http:\/\/habrahabr.ru\/post\/193888\/\">\u0442\u0443\u0442<\/a>. \u0412 \u044d\u0442\u043e\u0439 \u043f\u043e\u0434\u0447\u0430\u0441\u0442\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0443\u0440\u043e\u0432\u043d\u0435\u0439, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e: \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0443\u0440\u0431\u043e \u0440\u0435\u0436\u0438\u043c \u0431\u0435\u0433\u0430 \u0433\u0435\u0440\u043e\u044e, \u0441\u043c\u0435\u0440\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u0434\u0432\u0438\u0436\u0443\u0449\u0438\u0435\u0441\u044f \u043c\u043e\u043d\u0441\u0442\u0440\u044b, \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0435\u0440\u044b, \u043f\u0440\u0438\u043d\u0446\u0435\u0441\u0441\u0443 \u0438 \u043f\u0430\u0440\u0441\u0435\u0440 \u0443\u0440\u043e\u0432\u043d\u0435\u0439, \u0434\u0430\u0431\u044b \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0434\u0447\u0430\u0441\u0442\u0438 \u043d\u0435 \u043e\u0442\u0432\u043b\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u0441\u0451 \u044d\u0442\u043e.   <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-196432","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/196432","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=196432"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/196432\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=196432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=196432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=196432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}