Построение фигур на шахматной доске с помощью pygame

#python #pygame #logic

#python #pygame #Логические

Вопрос:

В настоящее время я использую pygame для создания игры в шашки. Пока у меня есть функция, которая успешно создает шахматную доску размером 8×8 (см. Ниже).

Теперь мне нужно создать функцию, которая размещает 12 фигур на обоих концах шахматной доски. У меня есть функция, которая рисует фигуры «draw_piece», но я не могу понять, как их рисовать на шахматной доске. Если бы кто-нибудь мог предоставить какие-либо предложения / псевдокод, это было бы с благодарностью.

 import pygame as pg

class Board:
    
    GREEN = (34, 139, 34)
    CREAM = (245, 222, 179)
    ROW = 8
    COL = 8
    DIMENSIONS = 800
    SQUARE_SIZE = DIMENSIONS//COL
        
    #screen size is 800 x 800
    def draw_squares(self, win):
        win.fill(GREEN)
        for row in range(ROWS):
            for col in range(row % 2, COLS, 2):
                pg.draw.rect(screen, CREAM, (row*SQUARE_SIZE, col *SQUARE_SIZE, SQUARE_SIZE, SQUARE_SIZE))


     def draw_piece(self, screen):
        radius = SQUARE_SIZE // 2 - 15
        pg.draw.circle(screen, self.colour, (self.x, self.y), radius)

 

Комментарии:

1. «Теперь мне нужно создать функцию, которая размещает 12 фигур на обоих концах шахматной доски» как вы хотите расставить 12 фигур?

2. @Rabbid76 извиняется за то, что не уточнил, в типичной начальной позиции для игры в шашки. Так что в строках 0-2 на каждой второй плитке (цвет доски [0]) и в строках 5-7 на каждой другой плитке (цвет доски [0])

3. повторите цикл над каждым другим квадратом для n фигур с каждого конца.

Ответ №1:

Реализовать метод, который преобразует строку и столбец поля в центральную координату поля и рисует фигуру определенного цвета:

 class Board:
    # [...]

    def drawPiece(self, screen, colour, col, row):
        radius = SQUARE_SIZE // 2 - 15
        x = SQUARE_SIZE * col   SQUARE_SIZE // 2
        y = SQUARE_SIZE * row   SQUARE_SIZE // 2
        pg.draw.circle(screen, colour, (x, y), radius)
 

Используйте метод, чтобы нарисовать фигуру на поле. Например, если вы хотите добавить фигуру в верхний левый угол поля, аргументы для строки и столбца равны 0:

 board.drawPiece(screen, PIECE_COLOURS[0], 0, 0)
 

Строка и столбец в правом нижнем углу равны 7:

 board.drawPiece(screen, PIECE_COLOURS[1], 7, 7)
 

Создайте список кортежей со строками и столбцами фигур:

 pices_1 = []
for col in range(8):
    for row in range(3):
        if (col   row) % 2 == 1:
            pices_1.append((col, row)) 
pices_2 = []
for col in range(8):
    for row in range(5, 8):
        if (col   row) % 2 == 1:
            pices_2.append((col, row)) 
 

соответственно

 pices_1 = [(col, row) for col in range(8) for row in range(3) if (col   row) % 2 == 1]
pices_2 = [(col, row) for col in range(8) for row in range(5, 8) if (col   row) % 2 == 1]
 

Нарисуйте фигуры в цикле:

 for col, row in pices_1:
    board.drawPiece(screen, PIECE_COLOURS[0], col, row)    
for col, row in pices_2:
    board.drawPiece(screen, PIECE_COLOURS[1], col, row)
 

Комментарии:

1. Спасибо, это действительно помогает!