102 lines
5.1 KiB
Python
102 lines
5.1 KiB
Python
# Импортировать стандартные модули, используемые в этой игре
|
||
# Модуль экрана не импортируется, потому что он передается как объект в вызываемую функцию
|
||
from time import sleep
|
||
from random import randint
|
||
from machine import Pin
|
||
|
||
# Функция, которая возвращает название вашей игры
|
||
def get_game_name():
|
||
game_name = "2P Pong"
|
||
return game_name
|
||
|
||
# Основная функция игры, которая вызывается в главном меню тетриса
|
||
def game_loop(oled, led_user_1, led_user_2):
|
||
|
||
# Определить пины кнопок, которые будут использоваться в этой игре и обрабатываться на втором ядра
|
||
up = Pin(15, Pin.IN, Pin.PULL_UP)
|
||
down = Pin(27, Pin.IN, Pin.PULL_UP)
|
||
action_a = Pin(5, Pin.IN, Pin.PULL_UP)
|
||
action_b = Pin(4, Pin.IN, Pin.PULL_UP)
|
||
|
||
# Игровой цикл, который выполняется бесконечно, пока не будет вызвано условие сброса
|
||
while (True):
|
||
|
||
# Хардкодированные значения начальных позиций ракетки
|
||
paddle_1_coord = 27
|
||
paddle_2_coord = 27
|
||
|
||
# Хардкодированные значения начальной позиции и скорости "мяча"
|
||
x_coord = 62
|
||
y_coord = 30
|
||
x_speed = 2
|
||
y_speed = 1
|
||
|
||
# Случайным образом назначить направление мяча в начале игры
|
||
if (randint(0, 1) == 0):
|
||
x_speed = x_speed * -1
|
||
if (randint(0, 1) == 0):
|
||
y_speed = y_speed * -1
|
||
|
||
# Установить в false, когда мяч покидает игровое поле
|
||
game_continue_condition = True
|
||
|
||
# Хранит номер игрока, который победил
|
||
winner = 0
|
||
|
||
# Продолжать игру, пока мяч находится на игровом поле
|
||
while (game_continue_condition):
|
||
|
||
# Нарисовать ракетки и мяч в соответствии с их координатами
|
||
oled.fill(0)
|
||
oled.fill_rect(x_coord, y_coord, 4, 4, 1)
|
||
oled.fill_rect(0, paddle_1_coord, 4, 10, 1)
|
||
oled.fill_rect(124, paddle_2_coord, 4, 10, 1)
|
||
oled.show()
|
||
|
||
# Изменить координаты мяча на значение скорости
|
||
x_coord = x_coord + x_speed
|
||
y_coord = y_coord + y_speed
|
||
|
||
# Инвертировать значение скорости мяча при столкновении с ракеткой, чтобы он отразился
|
||
if ((x_coord > 120) and (y_coord + 2 >= paddle_2_coord) and (y_coord + 2 <= paddle_2_coord + 10)):
|
||
x_speed = x_speed * -1
|
||
if ((x_coord < 8) and (y_coord + 2 >= paddle_1_coord) and (y_coord + 2 <= paddle_1_coord + 10)):
|
||
x_speed = x_speed * -1
|
||
|
||
# Инвертировать значение скорости мяча при столкновении с потолком и полом, чтобы он отразился
|
||
if (y_coord > 58):
|
||
y_speed = y_speed * -1
|
||
if (y_coord < 1):
|
||
y_speed = y_speed * -1
|
||
|
||
# Если мяч проходит мимо ракетки, завершить игру и назначить соответствующего победителя
|
||
if (x_coord > 130):
|
||
game_continue_condition = False
|
||
winner = 1
|
||
if (x_coord < -6):
|
||
game_continue_condition = False
|
||
winner = 2
|
||
|
||
# Изменить координаты ракеток, пока кнопки удерживаются
|
||
if (up.value() == 0):
|
||
if (paddle_2_coord >= 1):
|
||
paddle_2_coord = paddle_2_coord - 2
|
||
if (down.value() == 0):
|
||
if (paddle_2_coord <= 53):
|
||
paddle_2_coord = paddle_2_coord + 2
|
||
if (action_a.value() == 0):
|
||
if (paddle_1_coord >= 1):
|
||
paddle_1_coord = paddle_1_coord - 2
|
||
if (action_b.value() == 0):
|
||
if (paddle_1_coord <= 53):
|
||
paddle_1_coord = paddle_1_coord + 2
|
||
|
||
# Очистить экран и нарисовать таблички с плашки победителей, пока не вернемся к началу игры и не перезапустится код игры
|
||
oled.fill(0)
|
||
if (winner == 1):
|
||
oled.text("PLAYER 1", 32, 24, 1)
|
||
if (winner == 2):
|
||
oled.text("PLAYER 2", 32, 24, 1)
|
||
oled.text("WON", 52, 33, 1)
|
||
oled.show()
|
||
sleep(1) |