Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import play
- from time import time
- from random import randint
- # Установка заднего фона
- play.set_backdrop('dark blue')
- # Главный герой
- starship = play.new_image(
- image='starship.png',
- size=10,
- )
- # Настройки игры
- starship_speed = 5
- enemy_generation_time = 3
- enemy_random_time = 3
- starship_hearts = 3
- fireTime = 1
- # Хранилище всех врагов
- enemyList = []
- oldTime = time()
- oldEnemyTime = time()
- heartsContainer = []
- fireList = []
- lastFire = time()
- isHeartComplete = False
- score = 0
- score_txt = play.new_text(
- words="0",
- x=play.screen.right - 30,
- y=play.screen.top - 30,
- )
- # Старт игры
- @play.when_program_starts
- async def startGame():
- await drawHearts()
- # Функция генерации сердечек
- async def drawHearts():
- global heartsContainer, isHeartComplete
- y = play.screen.top - 30
- x = play.screen.left + 30
- for i in range(starship_hearts):
- heart = play.new_image(
- image='heart.png',
- x=x + i * 50,
- y=y,
- size=5,
- )
- await play.timer(seconds=1)
- heartsContainer.append(heart)
- # Анимация мигающих сердечек
- for i in range(6):
- for heart in heartsContainer:
- if i % 2 == 0:
- heart.hide()
- else:
- heart.show()
- await play.timer(seconds=0.5)
- isHeartComplete = True
- # Функция смены настроения у врагов
- def enemyAction(enemy):
- # Выполняем поведение в зависимости от настроения
- if enemy.behavior == 1:
- enemy.y -= 1
- elif enemy.behavior == 2 or enemy.behavior == 4:
- enemy.y += randint(-5, 5)
- enemy.x += randint(-5, 5)
- elif enemy.behavior == 3:
- enemy.y += 1
- # Ограничения от ковида
- if enemy.y >= play.screen.top - 10:
- enemy.behavior = 1
- # Функция генерации врагов
- def generateEnemy():
- y = play.screen.top - 10
- x = randint(-300, 300)
- enemy = play.new_image(
- image='enemy.png',
- y=y, x=x,
- size=15,
- )
- enemy.behavior = 1
- return enemy
- # Функция генерации выстрела
- def generateFire():
- y = starship.y
- x = starship.x
- fire = play.new_image(
- image='lasershot.png',
- x=x, y=y,
- size=10,
- angle=90
- )
- return fire
- # Функция мигания корабля
- async def flashingStarship():
- global starship
- for i in play.repeat(6):
- if i % 2 == 0:
- starship.hide()
- else:
- starship.show()
- await play.timer(seconds=0.5)
- await play.animate()
- starship.show()
- # Игровой цикл
- @play.repeat_forever
- async def game():
- global oldTime, enemyList, fireList, lastFire, heartsContainer, score, score_txt
- # Отрисовка очков
- score_txt.words = str(score)
- # Управление ГГ
- if play.key_is_pressed('a'):
- starship.x -= starship_speed
- if play.key_is_pressed('d'):
- starship.x += starship_speed
- if play.key_is_pressed('w'):
- starship.y += starship_speed
- if play.key_is_pressed('s'):
- starship.y -= starship_speed
- if play.key_is_pressed('space'):
- if time() - lastFire >= fireTime:
- fire = generateFire()
- fireList.append(fire)
- lastFire = time()
- # Генерация врагов
- if time() - oldTime >= enemy_generation_time:
- enemy = generateEnemy()
- enemyList.append(enemy)
- oldTime = time()
- # Поведение врагов
- # Проверяем, пришло ли время сменить настроение
- global oldEnemyTime
- if time() - oldEnemyTime >= enemy_random_time:
- for enemy in enemyList:
- enemy.behavior = randint(1, 4)
- oldEnemyTime = time()
- # Исполнение поведения врагов
- for enemy in enemyList:
- enemyAction(enemy)
- # Отрисовка пулек и их движение
- for i in range(len(fireList)):
- # Движение вверх
- fireList[i].y += 5
- # Проверка: улетела ли пулька слишком далеко?
- if fireList[i].y >= play.screen.top - 30:
- fireList[i].hide()
- del fireList[i]
- i -= 1
- continue
- # Попали ли мы во врага?
- for j in range(len(enemyList)):
- if enemyList[j].is_touching(fireList[i]):
- fireList[i].hide()
- enemyList[j].hide()
- del fireList[i]
- del enemyList[j]
- i -= 1
- j -= 1
- score += 1
- break
- # Проверка пролета врагов на базу
- for i in range(len(enemyList)):
- if enemyList[i].y <= play.screen.bottom + 30:
- enemyList[i].hide()
- del enemyList[i]
- i -= 1
- heartsContainer[len(heartsContainer)-1].hide()
- del heartsContainer[len(heartsContainer)-1]
- await flashingStarship()
- break
- # Проверка столкновения с врагами
- if isHeartComplete and len(heartsContainer) == 0:
- play.new_text(
- words='Ну все, смэрть',
- )
- await play.timer(seconds=5)
- exit(0)
- if isHeartComplete:
- for i in range(len(enemyList)):
- if starship.is_touching(enemyList[i]):
- enemyList[i].hide()
- del enemyList[i]
- i -= 1
- heartsContainer[len(heartsContainer)-1].hide()
- del heartsContainer[len(heartsContainer)-1]
- await flashingStarship()
- break
- play.start_program()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement