Арканоід

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

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

У цьому проекті використаємо зображення м'яча з файлу (файл потрібно розмістити у каталозі Python34 диску С)

Для цього потрібно завантажити у проект файл із зображенням ball та створити прямокутну область ballrect, у якій він буде відображатись.

ball=pygame.image.load("ball.png")

ballrect = ball.get_rect()

Також потрібні змінні для зберігання координат розміщення pos_x і pos_y та кроку зміщення м'яча krokx та kroky, які будуть випадковими числами

pos_x=0

pos_y=0

import random

krokx=random.randint(1,5)

kroky=random.randint(1,5)

Наступні команди розмістимо між screen.fill(WHITE) та pygame.display.flip() - вже знайомий рух м'яча, що відбивається від меж вікна.

    if ((pos_x>675) or (pos_x<0)):

        krokx = -krokx

    pos_x += krokx

    if ((pos_y>475) or (pos_y<0)):

        kroky = -kroky

    pos_y += kroky

    player1 = screen.blit(ball, (pos_x,pos_y))


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

Створимо також прямокутну платформу, яка буде рухатись за клавішами стрілок праворуч-ліворуч в нижній частині ігрового вікна:

    if event.type == pygame.KEYDOWN:

        if event.key == pygame.K_LEFT:

            x-=5

        if event.key == pygame.K_RIGHT:

            x+=5

    if x>700:

        x=700

    if x<0:

        x=0

    pygame.draw.rect(screen,BLACK,[x-25,450,50,10])

Не забудьте додати змінну x на початку програми:

x=0


Додамо команди, що дозволять м'ячику відбиватись не лише від меж вікна, але й від рухомої платформи. Якщо координати м'яча (pos_x, pos_y) та платформи (x, 450) збігаються, то м'яч відбивається.

    if abs(x-pos_x)<30 and abs(450-pos_y)<30:

        kroky = -kroky

        krokx = -krokx


Доповнення 1

Створимо набір ігрових цеглинок, які повинен збивати м'яч. Логіка їх побудови наступна: на початку гри створюється ігрове поле з цеглинок, що розміщені по координатах (0-700, кожні 50 по горизонталі, 50-200, кожні 25 по вертикалі). Ці координати занесені у список bricks. Окремий список game містить одиниці на місці кожної відповідної цеглинки.

bricks=[]

game=[]

for x in range(0,700,55):

    for y in range(50,200,25):

        pos=(x,y)

        bricks.append(pos)

        game.append(1)

У процесі гри будемо виводити цеглинки на екран, якщо їх ігрова позиція game рівна 1.

    for nomer in range(len(bricks)):

        if game[nomer]==1:

            pygame.draw.rect(screen,GREEN,(bricks[nomer][0],bricks[nomer][1],50,20))


Якщо м'ячик (координати pos_x, pos_y) потрапляє на цеглинку, слід вилучати її з гри (у списку game вказувати на її місці 0,  координати в списку bricks змінювати на -100,-100), а сам м'ячик - має відбиватись у протилежному напрямку.

        if abs(pos_x-bricks[nomer][0])<20 and abs(bricks[nomer][1]-pos_y)<20:

            game[nomer]=0

            bricks[nomer]=(-100,-100)

            kroky = -kroky

            krokx = -krokx


Доповнення 2

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

Остання зміна: середа 13 лютого 2019 7:58