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