Гра "Арканоід"
У цьому проекті м'ячик має відбиватись від рухомої платформи і збивати "цеглинки", розміщені на екрані.
Використаємо зображення м'яча з файлу (файл потрібно розмістити у каталозі Images)
Визначаємо розмір ігрового поля, а також імпортуємо модуль випадкових чисел - він нам знадобиться для гри.
import random
WIDTH = 500
HEIGHT = 500
Визначаємо випадкові координати розміщення м'яча на початку гри:
x=random.randint(10,490)
y=random.randint(10,490)
Створюємо виконавця м'яч у визначених щойно координатах:
ball = Actor("ball")
ball.pos = x, y
Змінні a та b - визначають переміщення м'яча по горизонталі та вертикалі, це будуть випадкові числа:
a = random.randint(2,5)
b = random.randint(2,5)
У функції малювання очищуємо екран та зображаємо на ньому м'яч:
def draw():
screen.clear()
ball.draw()
У функції оновлення маємо змінити положення м'яча, додаючи a та b до координат поточного розміщення м'яча. Але коли м'яч торкається межі екрану, потрібно відбити його у протилежному напрямку. Це виконує команда a = -a після перевірки if ball.left > WIDTH - 50 or ball.left < 0 Для коректної роботи потрібно вказати, що значення a можна змінювати всередині функції update():
def update():
global a
ball.left += a
if ball.left > WIDTH - 50 or ball.left < 0 :
a = -a
global b
ball.top += b
if ball.top > WIDTH - 50 or ball.top < 0 :
b = -b
Події клавіатури
Створимо виконавця - платформу, яка буде рухатись за клавішами стрілок праворуч-ліворуч в нижній частині ігрового вікна. Для цього на початку проекту додамо
platforma = Actor("platforma")
platforma.pos = x, 470
У функцію draw():
platforma.draw()
У функцію update():
if keyboard.left:
platforma.x -= 5
elif keyboard.right:
platforma.x += 5
Крім того, потрібно вказати, що м'яч має відбиватись від платформи при зіткненні з нею. Доцільно доповнити вже існуючу команду if:
if ball.top > WIDTH - 50 or ball.top < 0 or platforma.colliderect(ball):
Ігрові цеглинки
Створимо набір ігрових цеглинок, які повинен збивати м'яч. Для цього потрібно створити список, який називається game, і в цей список будемо записувати виконавців wall, кожен з яких розміщується у випадковій позиції. Таких виконавців нехай буде 10, і їхні координати будуть по всій ширині (від 10 до 490) та у верхній половині по висоті (від 10 до 250).
game=[]
for k in range(10):
x=random.randint(10,490)
y=random.randint(10,250)
wall=Actor("wall")
wall.pos=x,y
game.append(wall)
У функції draw() додаємо команди виведення ігрових цеглинок на екран:
for k in range(10):
game[k].draw()
У функції update() додамо команди перевірки зіткнення м'яча з цеглинками:
for k in range(10): #перебираємо всі цеглинки
if game[k].colliderect(ball): #якщо м'яч торкнувся цеглинки
game[k].pos=-50,-50 #цю цеглинку переміщуємо за межі екрану
b = -b #м'яч відбивається
Доповнення
Реалізуйте одне або кілька ігрових доповнень, можна також додати власні!
1) Збільшити кількість ігрових цеглинок
2) Підрахунок очок і виведення їх на екран
Команда draw.text у функції draw() виводить на екран вміст змінної points:
screen.draw.text(str(points), (10, 10), color=(200, 200, 200))
Подумайте, де потрібно рахувати очки (і не забудьте, що це має бути глобальна змінна)
3) Крім стандартних цеглинок додати виконавців, які приносять додаткові очки
4) Виводити тло як картинку
5) Додати можливість завершення гри, коли м'яч промахується повз платформу
6) Додати можливість переходу на наступний рівень
7) Додати можливість грати двома м'ячиками
Фантазуйте і грайте!