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