Гра "Маріо"
У цьому проекті головний герой - Маріо, рухається за допомогою кнопок-стрілочок і збирає монети, розміщені над платформами.

У цьому проекті використаємо зображення Маріо, монети та цеглинок з файлів mario coin wall (файли потрібно розмістити у каталозі Images середовища muPython).
На початку проекту задаємо розмір ігрового поля.
import random WIDTH = 500 HEIGHT = 500
Завантажимо у проект файли із зображенням Маріо та тла проекту.
mario = Actor("mario")
mario.pos = 50,400
bg=Actor("bg")
bg.pos=250,250
У функції draw() задаємо показ тла та Маріо. Зверніть увагу на порядок показу: спочатку тло, тоді Маріо (інакше тло перекриватиме зображення персонажа).
def draw():
screen.clear()
bg.draw()
mario.draw()
У функції update() задаємо можливість руху персонажу Маріо за натисненням клавіш стрілок праворуч та ліворуч, а також вгору.
def update():
if keyboard.left:
mario.x -= 5
elif keyboard.right:
mario.x += 5
elif keyboard.up:
mario.y-=30
Важливо обмежити рух - лише в межах ігрового поля. Якщо Маріо має вийти за межі вікна - нехай координати залишаються в межах поля. Наприкінці коду функції update() додайте код
if mario.x > 500:
mario.x=500
if mario.x < 0:
mario.x=0
Завдання: Додайте команди обмеження руху по вертикалі
Створюємо список координат, у яких будуть розміщені цеглинки гри, а також статус видимості монеток. Починаючи із координат x=150 та y=320 створюємо 4 цеглинки, кожні 100 пікселів по горизонталі та 50 по вертикалі. Заносимо всі цеглинки у список game.
game=[]
x=150
y=320
for k in range(4):
wall=Actor("wall")
wall.pos=x,y
game.append(wall)
x=x+100
y=y-50
Для кожної цеглинки потрібно забезпечити її виведення на екран. Додайте цей код в кінці функції draw()
for k in range(4):
game[k].draw()
Завдання. Додати до кожної цеглинки монетку, яка розміщена на 50 пікселів вище за цю цеглинку. Занесіть всі монети в список game1.
Маріо постійно "падає" вниз, поки не обмежений цеглинками. Перебування на цеглинці позначимо змінною move, що рівна 0. Виконаємо перевірку: якщо Маріо торкається хоч однієї цеглинки, ця змінна стає рівною 1. Додайте наступний код в кінці функції update()
move=0
for k in range(4):
if game[k].colliderect(mario):
move=1
Якщо ж ця змінна після циклу рівна 0 (Маріо не перебуває на жодній цеглинці), він постійно переміщується вниз. Додайте наступний код в кінці функції update()
if move==0:
mario.y+=1
В кінці функції update() також додамо код збору монеток: перебираємо всі монетки, і якщо Маріо торкається монетки, то переміщуємо її за межі екрану:
for k in range(4):
if game1[k].colliderect(mario):
game1[k].pos=-50,-50
Доповнення
1) Намалюйте схему взаємодій ігрових об'єктів.
2) Дослідіть роботу проекту та внесіть зміни для відлагодження коректної ігрової логіки.3) Додайте обрахунок балів, отриманих гравцем та виведення їх на екран:
Команда draw.text у функції draw() виводить на екран вміст змінної points:
screen.draw.text(str(points), (10, 10), color=(200, 200, 200))
Подумайте, де потрібно рахувати очки (і не забудьте, що це має бути глобальна змінна)
4) Створіть кілька рівнів гри з різними конфігураціями цеглинок.