Advertisement
Guest User

Untitled

a guest
Apr 25th, 2017
1,028
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.78 KB | None | 0 0
  1. import pygame
  2. from pygame import *
  3. from player import *
  4. from blocks import *
  5.  
  6. #Объявляем переменные
  7. WIN_WIDTH = 800 #Ширина создаваемого окна
  8. WIN_HEIGHT = 640 # Высота
  9. DISPLAY = (WIN_WIDTH, WIN_HEIGHT) # Группируем ширину и высоту в одну переменную
  10. BACKGROUND_COLOR = "#7FC7FF"
  11.  
  12. class Camera(object):
  13.     def __init__(self, camera_func, width, height):
  14.         self.camera_func = camera_func
  15.         self.state = Rect(0, 0, width, height)
  16.  
  17.     def apply(self, target):
  18.         return target.rect.move(self.state.topleft)
  19.  
  20.     def update(self, target):
  21.         self.state = self.camera_func(self.state, target.rect)
  22.        
  23. def camera_configure(camera, target_rect):
  24.     l, t, _, _ = target_rect
  25.     _, _, w, h = camera
  26.     l, t = -l+WIN_WIDTH / 2, -t+WIN_HEIGHT / 2
  27.  
  28.     l = min(0, l)                           # Не движемся дальше левой границы
  29.     l = max(-(camera.width-WIN_WIDTH), l)   # Не движемся дальше правой границы
  30.     t = max(-(camera.height-WIN_HEIGHT), t) # Не движемся дальше нижней границы
  31.     t = min(0, t)                           # Не движемся дальше верхней границы
  32.  
  33.     return Rect(l, t, w, h)        
  34.  
  35.  
  36. def main():
  37.     pygame.init() # Инициация PyGame, обязательная строчка
  38.     screen = pygame.display.set_mode(DISPLAY) # Создаем окошко
  39.     pygame.display.set_caption("Cloudy") # Пишем в шапку
  40.     bg = Surface((WIN_WIDTH,WIN_HEIGHT)) # Создание видимой поверхности
  41.                                          # будем использовать как фон
  42.     bg.fill(Color(BACKGROUND_COLOR))     # Заливаем поверхность сплошным цветом
  43.    
  44.     hero = Player(55,55) # создаем героя по (x,y) координатам
  45.     left = right = False # по умолчанию - стоим
  46.     up = False
  47.    
  48.     entities = pygame.sprite.Group() # Все объекты
  49.     platforms = [] # то, во что мы будем врезаться или опираться
  50.    
  51.     entities.add(hero)
  52.            
  53.     level = [
  54.        "+++++++++++++++++++++++++++++",
  55.        "+                           +",
  56.        "+                           +",
  57.        "+----        +            --+",
  58.        "+                           +",
  59.        "+                           +",
  60.        "+                           +",
  61.        "+   *********               +",
  62.        "+                           +",
  63.        "+                     ----- +",
  64.        "+                -----      +",
  65.        "+           -----           +",
  66.        "+      -----                +",
  67.        "+                     -     +",
  68.        "+                     -     +",
  69.        "+---------------------------+",
  70.        "+                           +",
  71.        "+      ---                  +",
  72.        "+                           +",
  73.        "+-------       ----         +",
  74.        "+                           +",
  75.        "+                    -      +",
  76.        "+                       --  +",
  77.        "+                           +",
  78.        "+                           +",
  79.        "+++++++++++++++++++++++++++++"]
  80.        
  81.     timer = pygame.time.Clock()
  82.     x=y=0 # координаты
  83.     for row in level: # вся строка
  84.         for col in row: # каждый символ
  85.             if col == "-":
  86.                 pf = Platform(x,y)
  87.                 entities.add(pf)
  88.                 platforms.append(pf)
  89.             elif col == "+":
  90.                 pf = Platform2(x,y)
  91.                 entities.add(pf)
  92.                 platforms.append(pf)
  93.             elif col == "*":
  94.                 pf = BlockDie(x,y)
  95.                 entities.add(pf)
  96.                 platforms.append(pf)
  97.  
  98.             x += PLATFORM_WIDTH #блоки платформы ставятся на ширине блоков
  99.         y += PLATFORM_HEIGHT    #то же самое и с высотой
  100.         x = 0                   #на каждой новой строчке начинаем с нуля
  101.  
  102.    
  103.     total_level_width  = len(level[0])*PLATFORM_WIDTH # Высчитываем фактическую ширину уровня
  104.     total_level_height = len(level)*PLATFORM_HEIGHT   # высоту
  105.    
  106.     camera = Camera(camera_configure, total_level_width, total_level_height)
  107.    
  108.     while 1: # Основной цикл программы
  109.         timer.tick(60)
  110.         for e in pygame.event.get(): # Обрабатываем события
  111.             if e.type == QUIT:
  112.                 raise SystemExit, "QUIT"
  113.             if e.type == KEYDOWN and e.key == K_UP:
  114.                 up = True
  115.             if e.type == KEYDOWN and e.key == K_LEFT:
  116.                 left = True
  117.             if e.type == KEYDOWN and e.key == K_RIGHT:
  118.                 right = True
  119.  
  120.  
  121.             if e.type == KEYUP and e.key == K_UP:
  122.                 up = False
  123.             if e.type == KEYUP and e.key == K_RIGHT:
  124.                 right = False
  125.             if e.type == KEYUP and e.key == K_LEFT:
  126.                 left = False
  127.  
  128.         screen.blit(bg, (0,0))      # Каждую итерацию необходимо всё перерисовывать
  129.  
  130.  
  131.         camera.update(hero) # центризируем камеру относительно персонажа
  132.         hero.update(left, right, up,platforms) # передвижение
  133.         #entities.draw(screen) # отображение
  134.         for e in entities:
  135.             screen.blit(e.image, camera.apply(e))
  136.        
  137.        
  138.         pygame.display.update()     # обновление и вывод всех изменений на экран
  139.        
  140.  
  141. if __name__ == "__main__":
  142.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement