102 lines
5.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Импортировать стандартные модули, используемые в этой игре
# Модуль экрана не импортируется, потому что он передается как объект в вызываемую функцию
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)