Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.65 KB | None | 0 0
  1. import sys
  2. import os
  3. import pygame
  4.  
  5. pygame.init()
  6.  
  7. FPS = 50
  8. WIDTH = 400
  9. HEIGHT = 300
  10. STEP = 10
  11. TILE_WIDTH = TILE_HEIGHT = 50
  12.  
  13.  
  14. screen = pygame.display.set_mode((WIDTH, HEIGHT))
  15. clock = pygame.time.Clock()
  16.  
  17. all_sprites = pygame.sprite.Group()
  18. tiles_group = pygame.sprite.Group()
  19. player_group = pygame.sprite.Group()
  20.  
  21.  
  22. def load_image(name, colorkey=None):
  23. fullname = os.path.join('data', name)
  24. try:
  25. image = pygame.image.load(fullname)
  26. except pygame.error as message:
  27. print('Cannot load image: ', name)
  28. raise SystemExit(message)
  29. image = image.convert_alpha()
  30. if colorkey is not None:
  31. if colorkey is -1:
  32. colorkey = image.get_at((0, 0))
  33. image.set_colorkey(colorkey)
  34. return image
  35.  
  36.  
  37. def start_screen():
  38. intro_text = ["ЗАСТАВКА", "",
  39. "Правила игры",
  40. "Если в правилах несколько строк,",
  41. "приходится выводить их построчно"]
  42.  
  43. fon = pygame.transform.scale(load_image('fon.jpg'), (WIDTH, HEIGHT))
  44. screen.blit(fon, (0, 0))
  45. font = pygame.font.Font(None, 30)
  46. text_coord = 50
  47. for line in intro_text:
  48. string_rendered = font.render(line, 1, pygame.Color('black'))
  49. intro_rect = string_rendered.get_rect()
  50. text_coord += 10
  51. intro_rect.top = text_coord
  52. intro_rect.x = 10
  53. text_coord += intro_rect.height
  54. screen.blit(string_rendered, intro_rect)
  55.  
  56. while True:
  57. for event in pygame.event.get():
  58. if event.type == pygame.QUIT:
  59. terminate()
  60. elif event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN:
  61. return # начинаем игру
  62. pygame.display.flip()
  63. clock.tick(FPS)
  64.  
  65.  
  66. def terminate():
  67. pygame.quit()
  68. sys.exit()
  69.  
  70.  
  71. def load_level(filename):
  72. filename = 'data/' + filename
  73. with open(filename, 'r') as map_file:
  74. level_map = [line.strip() for line in map_file]
  75. max_width = max(map(len, level_map))
  76. return list(map(lambda x: x.ljust(max_width, '.'), level_map))
  77.  
  78.  
  79. def generate_level(level):
  80. new_player, x, y = None, None, None
  81. for y in range(len(level)):
  82. for x in range(len(level[y])):
  83. if level[y][x] == '.':
  84. Tile('empty', x, y)
  85. elif level[y][x] == '#':
  86. Tile('wall', x, y)
  87. elif level[y][x] == '@':
  88. Tile('empty', x, y)
  89. new_player = Player(x, y)
  90. return new_player
  91.  
  92.  
  93. tile_images = {
  94. 'wall': load_image('box.png'),
  95. 'empty': load_image('grass.png'),
  96. 'player': load_image('mario.png')
  97. }
  98.  
  99.  
  100. class Tile(pygame.sprite.Sprite):
  101. def __init__(self, tile_type, pos_x, pos_y):
  102. super().__init__(tiles_group, all_sprites)
  103. self.image = tile_images[tile_type]
  104. self.rect = self.image.get_rect().move(TILE_WIDTH * pos_x,
  105. TILE_HEIGHT * pos_y)
  106.  
  107.  
  108. class Player(pygame.sprite.Sprite):
  109. def __init__(self, pos_x, pos_y):
  110. super().__init__(player_group, all_sprites)
  111. self.image = tile_images['player']
  112. self.rect = self.image.get_rect().move(TILE_WIDTH * pos_x + 15,
  113. TILE_HEIGHT * pos_y + 5)
  114.  
  115.  
  116. class Camera:
  117. def __init___(self):
  118. self.dx = 0
  119. self.dy = 0
  120.  
  121. def apply(self, obj): # Фокусировка на объекте
  122. obj.rect.x += self.dx
  123. obj.rect.y += self.dy
  124.  
  125. def update(self, target): # перемещение объектов
  126. self.dx = -(target.rect.x + target.rect.w // 2 - WIDTH // 2)
  127. self.dy = -(target.rect.y + target.rect.h // 2 - HEIGHT // 2)
  128.  
  129.  
  130. start_screen()
  131. level = load_level('levelex.txt')
  132. player = generate_level(level)
  133. camera = Camera()
  134.  
  135. running = True
  136. while running:
  137. for event in pygame.event.get():
  138. if event.type == pygame.QUIT:
  139. running = False
  140. elif event.type == pygame.KEYDOWN:
  141. if event.key == pygame.K_LEFT:
  142. player.rect.x -= STEP
  143. if event.key == pygame.K_RIGHT:
  144. player.rect.x += STEP
  145. if event.key == pygame.K_UP:
  146. player.rect.y -= STEP
  147. if event.key == pygame.K_DOWN:
  148. player.rect.y += STEP
  149.  
  150. camera.update(player)
  151.  
  152. for sprite in all_sprites:
  153. camera.apply(sprite)
  154.  
  155. screen.fill(pygame.Color('#000000'))
  156. tiles_group.draw(screen)
  157. player_group.draw(screen)
  158.  
  159. pygame.display.flip()
  160. clock.tick(FPS)
  161. pygame.quit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement