Advertisement
MrFreemanHR

CosmoDesant Game

Nov 14th, 2021
743
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.44 KB | None | 0 0
  1. import play
  2. from time import time
  3. from random import randint
  4.  
  5. # Установка заднего фона
  6. play.set_backdrop('dark blue')
  7.  
  8. # Главный герой
  9. starship = play.new_image(
  10.   image='starship.png',
  11.   size=10,
  12. )
  13.  
  14. # Настройки игры
  15. starship_speed = 5
  16. enemy_generation_time = 3
  17. enemy_random_time = 3
  18. starship_hearts = 3
  19. fireTime = 1
  20.  
  21. # Хранилище всех врагов
  22. enemyList = []
  23. oldTime = time()
  24. oldEnemyTime = time()
  25. heartsContainer = []
  26. fireList = []
  27. lastFire = time()
  28. isHeartComplete = False
  29. score = 0
  30. score_txt = play.new_text(
  31.   words="0",
  32.   x=play.screen.right - 30,
  33.   y=play.screen.top - 30,
  34. )
  35.  
  36. # Старт игры
  37. @play.when_program_starts
  38. async def startGame():
  39.   await drawHearts()
  40.  
  41. # Функция генерации сердечек
  42. async def drawHearts():
  43.   global heartsContainer, isHeartComplete
  44.   y = play.screen.top - 30
  45.   x = play.screen.left + 30
  46.   for i in range(starship_hearts):
  47.     heart = play.new_image(
  48.       image='heart.png',
  49.       x=x + i * 50,
  50.       y=y,
  51.       size=5,
  52.     )
  53.     await play.timer(seconds=1)
  54.     heartsContainer.append(heart)
  55.   # Анимация мигающих сердечек
  56.   for i in range(6):
  57.     for heart in heartsContainer:
  58.       if i % 2 == 0:
  59.         heart.hide()
  60.       else:
  61.         heart.show()
  62.     await play.timer(seconds=0.5)
  63.   isHeartComplete = True
  64.  
  65.  
  66. # Функция смены настроения у врагов
  67. def enemyAction(enemy):
  68.   # Выполняем поведение в зависимости от настроения
  69.   if enemy.behavior == 1:
  70.     enemy.y -= 1
  71.   elif enemy.behavior == 2 or enemy.behavior == 4:
  72.     enemy.y += randint(-5, 5)
  73.     enemy.x += randint(-5, 5)
  74.   elif enemy.behavior == 3:
  75.     enemy.y += 1
  76.   # Ограничения от ковида
  77.   if enemy.y >= play.screen.top - 10:
  78.     enemy.behavior = 1
  79.  
  80. # Функция генерации врагов
  81. def generateEnemy():
  82.   y = play.screen.top - 10
  83.   x = randint(-300, 300)
  84.   enemy = play.new_image(
  85.     image='enemy.png',
  86.     y=y, x=x,
  87.     size=15,
  88.   )
  89.   enemy.behavior = 1
  90.   return enemy
  91.  
  92. # Функция генерации выстрела
  93. def generateFire():
  94.   y = starship.y
  95.   x = starship.x
  96.   fire = play.new_image(
  97.     image='lasershot.png',
  98.     x=x, y=y,
  99.     size=10,
  100.     angle=90
  101.   )
  102.   return fire
  103.  
  104. # Функция мигания корабля
  105. async def flashingStarship():
  106.   global starship
  107.   for i in play.repeat(6):
  108.     if i % 2 == 0:
  109.       starship.hide()
  110.     else:
  111.       starship.show()
  112.     await play.timer(seconds=0.5)
  113.     await play.animate()
  114.   starship.show()
  115.  
  116. # Игровой цикл
  117. @play.repeat_forever
  118. async def game():
  119.   global oldTime, enemyList, fireList, lastFire, heartsContainer, score, score_txt
  120.   # Отрисовка очков
  121.   score_txt.words = str(score)
  122.   # Управление ГГ
  123.   if play.key_is_pressed('a'):
  124.     starship.x -= starship_speed
  125.   if play.key_is_pressed('d'):
  126.     starship.x += starship_speed
  127.   if play.key_is_pressed('w'):
  128.     starship.y += starship_speed
  129.   if play.key_is_pressed('s'):
  130.     starship.y -= starship_speed
  131.   if play.key_is_pressed('space'):
  132.     if time() - lastFire >= fireTime:
  133.       fire = generateFire()
  134.       fireList.append(fire)
  135.       lastFire = time()
  136.   # Генерация врагов
  137.   if time() - oldTime >= enemy_generation_time:
  138.     enemy = generateEnemy()
  139.     enemyList.append(enemy)
  140.     oldTime = time()
  141.   # Поведение врагов
  142.   # Проверяем, пришло ли время сменить настроение
  143.   global oldEnemyTime
  144.   if time() - oldEnemyTime >= enemy_random_time:
  145.     for enemy in enemyList:
  146.       enemy.behavior = randint(1, 4)
  147.     oldEnemyTime = time()
  148.   # Исполнение поведения врагов
  149.   for enemy in enemyList:
  150.     enemyAction(enemy)
  151.   # Отрисовка пулек и их движение
  152.   for i in range(len(fireList)):
  153.     # Движение вверх
  154.     fireList[i].y += 5
  155.     # Проверка: улетела ли пулька слишком далеко?
  156.     if fireList[i].y >= play.screen.top - 30:
  157.       fireList[i].hide()
  158.       del fireList[i]
  159.       i -= 1
  160.       continue
  161.     # Попали ли мы во врага?
  162.     for j in range(len(enemyList)):
  163.       if enemyList[j].is_touching(fireList[i]):
  164.         fireList[i].hide()
  165.         enemyList[j].hide()
  166.         del fireList[i]
  167.         del enemyList[j]
  168.         i -= 1
  169.         j -= 1
  170.         score += 1
  171.         break
  172.   # Проверка пролета врагов на базу
  173.   for i in range(len(enemyList)):
  174.     if enemyList[i].y <= play.screen.bottom + 30:
  175.       enemyList[i].hide()
  176.       del enemyList[i]
  177.       i -= 1
  178.       heartsContainer[len(heartsContainer)-1].hide()
  179.       del heartsContainer[len(heartsContainer)-1]
  180.       await flashingStarship()
  181.       break
  182.   # Проверка столкновения с врагами
  183.   if isHeartComplete and len(heartsContainer) == 0:
  184.     play.new_text(
  185.       words='Ну все, смэрть',
  186.     )
  187.     await play.timer(seconds=5)
  188.     exit(0)
  189.   if isHeartComplete:
  190.     for i in range(len(enemyList)):
  191.       if starship.is_touching(enemyList[i]):
  192.         enemyList[i].hide()
  193.         del enemyList[i]
  194.         i -= 1
  195.         heartsContainer[len(heartsContainer)-1].hide()
  196.         del heartsContainer[len(heartsContainer)-1]
  197.         await flashingStarship()
  198.         break
  199.  
  200. play.start_program()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement