SaveText.Ru

Pacman
  1. import pygame, sys, random
  2.  
  3. TIMER = 1000
  4.  
  5. W_W = 1000  # ширина окна (ось x)
  6. W_H = 500  # высота окна (ось y)
  7.  
  8. m = W_H // 20
  9. n = W_W // 20
  10. grid = [[0] * n for i in range(m)]
  11.  
  12. for i in range(m):
  13.     for j in range(n):
  14.         rand = random.randint(1, 10)
  15.         if rand < 3:
  16.             grid[i][j] = pygame.Rect(j * 20, i * 20, 20, 20)
  17. SPEED = 5
  18. SIZE = 20
  19. FPS = 10
  20. fpsClock = pygame.time.Clock()
  21.  
  22. UP = (0, -1)
  23. DOWN = (0, 1)
  24. LEFT = (-1, 0)
  25. RIGHT = (1, 0)
  26.  
  27.  
  28. def finish():
  29.     pygame.quit()
  30.     sys.exit(0)
  31.  
  32. Display = pygame.display.set_mode((W_W, W_H))
  33.  
  34. # заранее прописываем цвета, которые используем в игре (если нужно)
  35. # данные о цветах берём в RGB формате (примеры основных цветов ниже)
  36. BLACK = (0, 0, 0)
  37. WHITE = (255, 255, 255)
  38. RED = (255, 0, 0)
  39. GREEN = (0, 255, 0)
  40. BLUE = (0, 0, 255)
  41.  
  42. # Наш герой
  43. hero = pygame.image.load("kek.png")
  44. hero = pygame.transform.scale(hero, (20, 20))  # изменили размер картинки персонажа
  45. hero_pos = hero.get_rect()
  46.  
  47. # Наш враг
  48. enemy = pygame.image.load("enemy.jpg")
  49. enemy = pygame.transform.scale(enemy, (20, 20))
  50. enemy_pos = enemy.get_rect()
  51. enemy_pos.x = random.randint(0, W_W - SIZE) // 20 * 20
  52. enemy_pos.y = random.randint(0, W_H - SIZE) // 20 * 20
  53.  
  54. # Наша монета
  55. money = pygame.image.load("money.png")
  56. money = pygame.transform.scale(money, (20, 20))
  57. money_pos = money.get_rect()
  58. money_pos.x = random.randint(0, W_W - SIZE) // 20 * 20
  59. money_pos.y = random.randint(0, W_H - SIZE) // 20 * 20
  60.  
  61.  
  62. DISPLAY = pygame.display.set_mode((W_W, W_H))
  63. # добавили имя окна (будет видно в верхнем левом углу
  64. pygame.display.set_caption("PACMAN")
  65.  
  66. # количество кадров в секунду
  67. FPS = 60
  68. # отслеживаем время
  69. fpsClock = pygame.time.Clock()
  70.  
  71.  
  72. # мы сами задали/написали главную функцию с названием main (можно и другое название)
  73. def main():
  74.     score = 0
  75.     time_left = 0
  76.     # цикл с условием – бесконечный, так как всегда равен Истине (True)
  77.     while true:
  78.         # Положение персонажа в координатах таблицы
  79.         y, x = hero_pos.x // 20, hero_pos.y // 20
  80.         Display.fill((255, 255, 255))
  81.         for i in range(m):
  82.             for j in range(n):
  83.                 if grid[i][j]:
  84.                     pygame.draw.rect(Display, (255, 0, 0), grid[i][j])
  85.         for event in pygame.event.get():  # для каждого существующего действия извне
  86.             if event.type == pygame.QUIT:  # если игрок нажал на крестик
  87.                 finish()
  88.             keys = pygame.key.get_pressed()
  89.             if x > 0:
  90.                 if keys[pygame.K_w] and grid[x - 1][y] == 0:
  91.                     hero_pos.move_ip(0, -20)
  92.             if x < m - 1:
  93.                 if keys[pygame.K_s] and grid[x + 1][y] == 0:
  94.                     hero_pos.move_ip(0, 20)
  95.             if y > 0:
  96.                 if keys[pygame.K_a] and grid[x][y - 1] == 0:
  97.                     hero_pos.move_ip(-20, 0)
  98.             if y < n - 1:
  99.                 if keys[pygame.K_d] and grid[x][y + 1] == 0:
  100.                     hero_pos.move_ip(20, 0)
  101.  
  102.         if pygame.time.get_ticks() // TIMER > time_left:
  103.             time_left += 1
  104.             if hero_pos.y < enemy_pos.y and grid[x - 1][y] == 0:
  105.                 enemy_pos.move_ip(0, -20)
  106.             elif hero_pos.y > enemy_pos.y and grid[x + 1][y] == 0:
  107.                 enemy_pos.move_ip(0, 20)
  108.             elif hero_pos.x < enemy_pos.x and grid[x][y - 1] == 0:
  109.                 enemy_pos.move_ip(-20, 0)
  110.             elif hero_pos.x < enemy_pos.x and grid[x][y + 1] == 0:
  111.                 enemy_pos.move_ip(20, 0)
  112.  
  113.         DISPLAY.blit(hero, hero_pos)  # соединяем прямоугольник персонажа и картинку
  114.  
  115.         if hero_pos.colliderect(money_pos):
  116.             money_pos.x = random.randint(0, W_W - SIZE) // 20 * 20
  117.             money_pos.y = random.randint(0, W_H - SIZE) // 20 * 20
  118.             score += 1
  119.             print(score)
  120.  
  121.         if hero_pos.colliderect(enemy_pos):
  122.             return 0
  123.  
  124.         Display.blit(enemy, enemy_pos)
  125.         Display.blit(money, money_pos)
  126.  
  127.         # обновляем окно игры
  128.         pygame.display.update()
  129.         # возращаемся к нчалу цикла, после времени (выставили в FPS)
  130.         fpsClock.tick(FPS)
  131.  
  132.  
  133. pygame.display.update()
  134. fpsClock.tick(FPS)
  135.  
  136. # ОТСЮДА НАЧИНАЕТСЯ РАБОТА ПРОГРАММЫ
  137. main()  # вызвали функцию, которую ранее прописали, ждём пока не выйдем из цикла
  138.  
  139. pygame.quit()  # корректно завершаем работу с библиотекой pygame
  140. sys.exit()  # корректно завершаем работу программы, если всё ок, то 0 выдаст функция

Share with your friends:

Print