Advertisement
Guest User

Untitled

a guest
Apr 25th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.03 KB | None | 0 0
  1. from pygame import *
  2. import pyganim
  3. import blocks
  4. import os
  5.  
  6. MOVE_SPEED = 7
  7. WIDTH = 48
  8. HEIGHT = 64
  9. COLOR =  "#888888"
  10. JUMP_POWER = 10
  11. GRAVITY = 0.35 # Сила, которая будет тянуть нас вниз
  12. ANIMATION_DELAY = 0.1 # скорость смены кадров
  13. ICON_DIR = os.path.dirname(__file__) #  Полный путь к каталогу с файлами
  14.  
  15. ANIMATION_RIGHT = [('%s/star/r1.png' % ICON_DIR),
  16.             ('%s/star/r2.png' % ICON_DIR),
  17.             ('%s/star/r3.png' % ICON_DIR),
  18.             ('%s/star/r4.png' % ICON_DIR),
  19.             ('%s/star/r5.png' % ICON_DIR)]
  20. ANIMATION_LEFT = [('%s/star/l1.png' % ICON_DIR),
  21.             ('%s/star/l2.png' % ICON_DIR),
  22.             ('%s/star/l3.png' % ICON_DIR),
  23.             ('%s/star/l4.png' % ICON_DIR),
  24.             ('%s/star/l5.png' % ICON_DIR)]
  25. ANIMATION_JUMP_LEFT = [('%s/star/jl.png' % ICON_DIR, 0.1)]
  26. ANIMATION_JUMP_RIGHT = [('%s/star/jr.png' % ICON_DIR, 0.1)]
  27. ANIMATION_JUMP = [('%s/star/j.png' % ICON_DIR, 0.1)]
  28. ANIMATION_STAY = [('%s/star/0.png' % ICON_DIR, 0.1)]
  29.  
  30. class Player(sprite.Sprite):
  31.     def __init__(self, x, y):
  32.         sprite.Sprite.__init__(self)
  33.         self.xvel = 0   #скорость перемещения. 0 - стоять на месте
  34.         self.startX = x # Начальная позиция Х, пригодится когда будем переигрывать уровень
  35.         self.startY = y
  36.         self.yvel = 0 # скорость вертикального перемещения
  37.         self.onGround = False # На земле ли я?
  38.         self.image = Surface((WIDTH,HEIGHT))
  39.         self.image.fill(Color(COLOR))
  40.         self.rect = Rect(x, y, WIDTH, HEIGHT) # прямоугольный объект
  41.         self.image.set_colorkey(Color(COLOR)) # делаем фон прозрачным
  42. #        Анимация движения вправо
  43.         boltAnim = []
  44.         for anim in ANIMATION_RIGHT:
  45.             boltAnim.append((anim, ANIMATION_DELAY))
  46.         self.boltAnimRight = pyganim.PygAnimation(boltAnim)
  47.         self.boltAnimRight.play()
  48. #        Анимация движения влево        
  49.         boltAnim = []
  50.         for anim in ANIMATION_LEFT:
  51.             boltAnim.append((anim, ANIMATION_DELAY))
  52.         self.boltAnimLeft = pyganim.PygAnimation(boltAnim)
  53.         self.boltAnimLeft.play()
  54.        
  55.         self.boltAnimStay = pyganim.PygAnimation(ANIMATION_STAY)
  56.         self.boltAnimStay.play()
  57.         self.boltAnimStay.blit(self.image, (0, 0)) # По-умолчанию, стоим
  58.        
  59.         self.boltAnimJumpLeft= pyganim.PygAnimation(ANIMATION_JUMP_LEFT)
  60.         self.boltAnimJumpLeft.play()
  61.        
  62.         self.boltAnimJumpRight= pyganim.PygAnimation(ANIMATION_JUMP_RIGHT)
  63.         self.boltAnimJumpRight.play()
  64.        
  65.         self.boltAnimJump= pyganim.PygAnimation(ANIMATION_JUMP)
  66.         self.boltAnimJump.play()
  67.        
  68.  
  69.     def update(self, left, right, up, platforms):
  70.        
  71.         if up:
  72.             if self.onGround: # прыгаем, только когда можем оттолкнуться от земли
  73.                 self.yvel = -JUMP_POWER
  74.             self.image.fill(Color(COLOR))
  75.             self.boltAnimJump.blit(self.image, (0, 0))
  76.                
  77.                        
  78.         if left:
  79.             self.xvel = -MOVE_SPEED # Лево = x- n
  80.             self.image.fill(Color(COLOR))
  81.             if up: # для прыжка влево есть отдельная анимация
  82.                 self.boltAnimJumpLeft.blit(self.image, (0, 0))
  83.             else:
  84.                 self.boltAnimLeft.blit(self.image, (0, 0))
  85.  
  86.         if right:
  87.             self.xvel = MOVE_SPEED # Право = x + n
  88.             self.image.fill(Color(COLOR))
  89.             if up:
  90.                 self.boltAnimJumpRight.blit(self.image, (0, 0))
  91.             else:
  92.                 self.boltAnimRight.blit(self.image, (0, 0))
  93.          
  94.         if not(left or right): # стоим, когда нет указаний идти
  95.             self.xvel = 0
  96.             if not up:
  97.                 self.image.fill(Color(COLOR))
  98.                 self.boltAnimStay.blit(self.image, (0, 0))
  99.            
  100.         if not self.onGround:
  101.             self.yvel +=  GRAVITY
  102.            
  103.         self.onGround = False; # Мы не знаем, когда мы на земле((  
  104.         self.rect.y += self.yvel
  105.         self.collide(0, self.yvel, platforms)
  106.  
  107.         self.rect.x += self.xvel # переносим свои положение на xvel
  108.         self.collide(self.xvel, 0, platforms)
  109.    
  110.     def collide(self, xvel, yvel, platforms):
  111.         for p in platforms:
  112.             if sprite.collide_rect(self, p): # если есть пересечение платформы с игроком
  113.                 if  type(p) == blocks.BlockDie: # если пересакаемый блок - blocks.BlockDie
  114.                     self.die()# умираем
  115.                 else:  
  116.                     if xvel > 0:                      # если движется вправо
  117.                         self.rect.right = p.rect.left # то не движется вправо
  118.  
  119.                     if xvel < 0:                      # если движется влево
  120.                         self.rect.left = p.rect.right # то не движется влево
  121.  
  122.                     if yvel > 0:                      # если падает вниз 
  123.                         self.rect.bottom = p.rect.top # то не падает вниз
  124.                         self.onGround = True          # и становится на что-то твердое
  125.                         self.yvel = 0                 # и энергия падения пропадает
  126.  
  127.                     if yvel < 0:                      # если движется вверх
  128.                         self.rect.top = p.rect.bottom # то не движется вверх
  129.                         self.yvel = 0                 # и энергия прыжка пропадает
  130.                        
  131.     def teleporting(self, goX, goY):
  132.         self.rect.x = goX
  133.         self.rect.y = goY
  134.        
  135.     def die(self):
  136.         time.wait(500)
  137.         self.teleporting(self.startX, self.startY) # перемещаемся в начальные координаты
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement