Я играю с Pygame и играю в память.
В моей игре памяти мне нужно иметь маленькое меню в середине нижней части экрана и список игроков в верхней части экрана. Менеджер игры выведет сообщение в верхнем левом углу экрана.
Игровая доска, на которой будут размещаться карты, должна быть в центре экрана с небольшим полем справа и слева и примерно в 200 пикселей сверху и снизу (например, если ширина и высота экрана равна 1200 x 800, игровая доска должна иметь ширину от 2 до 1998 и высоту от 200 до 600.
Я сделал скриншот моей идеи:
Я выдвинул идею прокручиваемой платы с картами, хотя сейчас она жестко закодирована, мне больше нужна идея, а не код, так как мне просто трудно понять, как она должна работать.
Игровая доска (игровая доска на скриншоте) должна перемещаться через клавиатуру (стрелки вверх, вправо, вниз, влево). Я хочу добавить больше карт, чем 4 в каждом столбце и 12 в каждом ряду, таким образом, чтобы при наличии большего количества карт, чем 12 x 4, игровое поле можно было перемещать, но не выходя из красного квадрата, отмеченного на скриншоте (так что это прокручиваемая поверхность). Я хочу ограничить область прокрутки шириной 1200 и высотой 400 пикселей, но таким образом, чтобы область прокручивалась только внутри красной области.
Если это не может работать или планируется иначе, есть ли способ зарегистрировать клики по-другому? Скажем, когда я перемещаю клавиши таким образом, что область меню находится над игровым полем, а меню нажимается, я не хочу, чтобы щелкала и карта в меню. Есть ли способ заблокировать контент в меню?
Добавление примера кода ниже:
from pygame import *
import sys
init()
screen_width = 1200
screen_height = 800
screen = display.set_mode((screen_width, screen_height))
board_width = 2000
board_height = 1000
playable_board = Surface((board_width, board_height))
playable_board = playable_board.convert()
screen.fill((255, 255, 255))
#draw.rect(playable_board, (125, 125, 125), (2, 200, board_width, board_height))
for x in range(0, 50):
draw.rect(playable_board, (100, 100, 100), (x * 100 + 5, 200, 90, 90))
draw.rect(playable_board, (100, 100, 100), (x * 100 + 5, 310, 90, 90))
draw.rect(playable_board, (100, 100, 100), (x * 100 + 5, 420, 90, 90))
draw.rect(playable_board, (100, 100, 100), (x * 100 + 5, 530, 90, 90))
# draw.rect(playable_board, (100, 100, 100), (x * 100 + 5, 640, 90, 90))
point_x = 0
point_y = 0
point_change = -30
animationTimer = time.Clock()
endProgram = False
while not endProgram:
for e in event.get():
pass
key_pressed = key.get_pressed()
if e.type == QUIT:
endProgram = True
if e.type == MOUSEBUTTONUP:
mouse_x, mouse_y = e.pos
display.set_caption(('Coordinates: ' + str(mouse_x + abs(point_x)) + 'x' + str(mouse_y + abs(point_y))))
draw.rect(playable_board, (50, 200, 50), (mouse_x + abs(point_x), mouse_y + abs(point_y), 10, 10))
if key_pressed[K_LEFT]:
point_x -= point_change
if key_pressed[K_RIGHT]:
point_x += point_change
if key_pressed[K_UP]:
point_y -= point_change
if key_pressed[K_DOWN]:
point_y += point_change
if point_x > 0:
point_x = 0
if point_x < -(board_width - screen_width):
point_x = -(board_width - screen_width)
if point_y > 0:
point_y = 0
if point_y < -(board_height - screen_height):
point_y = -(board_height - screen_height)
screen.blit(playable_board, (point_x, point_y, screen_width, screen_height))
draw.rect(screen, (100, 255, 100), (500, 650, 200, 150))
draw.rect(screen, (100, 255, 100), (100, 0, 1000, 50))
draw.rect(screen, (100, 255, 100), (0, 70, 250, 100))
animationTimer.tick(60)
display.update()