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


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

Last modified: Monday, 9 December 2019, 3:43 AM