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


Скористаємось шаблоном гри:

У цьому проекті використаємо зображення Маріо, монети та цеглинок з файлів mario coin wall (файли потрібно розмістити у каталозі Python34 диску С)

Завантажимо у проект файли із зображенням Маріо та створимо прямокутну область mariorect, у якій він буде відображатись.

mario=pygame.image.load("mario.png")
mariorect = mario.get_rect()

Аналогічно завантажуємо решту файлів проекту.


Задаємо початкове положення Маріо:

mariox=50
marioy=400

Створюємо список координат, у яких будуть розміщені цеглинки гри, а також статус видимості монеток. Починаючи із координат x=150 та y=320 створюємо 5 цеглинок, кожні 100 пікселів по горизонталі та 50 по вертикалі. На початку гри статус видимості усіх монеток дорівнює одиниці.

game=[]
x=150
y=320
for k in range(5):
    pos=[(x,y),1]
    game.append(pos)
    x=x+100
    y=y-50


Події клавіатури

Головний герой буде рухатись за клавішами стрілок праворуч-ліворуч та вгору. Програмуємо ігровий блок, після screen.fill(WHITE)

    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            mariox-=5
        if event.key == pygame.K_RIGHT:
            mariox+=5
        if event.key == pygame.K_UP:
            marioy-=30
screen.blit(mario, (mariox,marioy))

Важливо обмежити рух - лише в межах ігрового поля. Якщо Маріо має вийти за межі вікна - нехай координати залишаються в межах поля. Перед командою screen.blit(mario, (mariox,marioy)) додайте код:

    if mariox > 700:
        mariox=700
    if mariox < 0:
        mariox=0

Завдання: Додайте команди обмеження руху по вертикалі


Для кожної цеглинки потрібно забезпечити її виведення на екран. Додайте цей код одразу після рядка screen.fill(WHITE)

    for element in game:
        wallx=element[0][0]
        wally=element[0][1]
        screen.blit(wall, (wallx,wally))

Якщо статус видимості монетки рівний 1, то і монетку потрібно вивести на екран, з деяким зміщенням відносно цеглинки, тобто над нею: на 50 пікселів вище, на 10 пікселів правіше. Продовження попереднього циклу:

        if element[1]==1:
            screen.blit(coin, (wallx+10,wally-50))

Маріо постійно "падає" вниз, поки не обмежений цеглинками. Перебування на цеглинці позначимо змінною move, що рівна 0 (одразу після screen.fill (WHITE)  і перед циклом  for element in game:)

 move=0

І якщо ця змінна рівна 0 (Маріо не перебуває на цеглинці), він постійно переміщується вниз. Додайте наступний код перед  виведенням зображення Маріо на екран screen.blit(mario, (mariox,marioy)) )

    if move==0:
        marioy+=5

А всередині циклу for element in game додамо перевірку збігу координат Маріо та цеглинок: якщо Маріо потрапляє на цеглинку, то він перестає "падати", забирає монетку і її статус виведення на екран стає 0.

        if abs(mariox-wallx)<20 and abs((marioy-40)-(wally-50))<40:
            move=1
            element[1]=0


Доповнення

Дослідіть роботу проекту та внесіть зміни для відлагодження коректної ігрової логіки. 

Додайте зображення тла.

Намалюйте схему взаємодій ігрових об'єктів.

Додайте обрахунок балів, отриманих гравцем та виведення їх на екран:

myfont = pygame.font.SysFont('Comic Sans MS', 30) - на початку проекту

В ігровому циклі:

    textrect = myfont.render(text, False, (0, 0, 0))
    screen.blit(textrect,(50,20))

Створіть кілька рівнів гри з різними конфігураціями цеглинок.

Last modified: Wednesday, 20 February 2019, 7:07 AM