0 Маріо
У цьому проекті головний герой - Маріо, рухається за допомогою кнопок-стрілочок і збирає монети, розміщені над платформами.
У цьому проекті використаємо зображення Маріо, монети та цеглинок з файлів 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) Створіть кілька рівнів гри з різними конфігураціями цеглинок.