Competição: Acelerador Blokus Duo
XVI Jornadas Sobre Sistemas Reconfiguráveis, Instituto Superior Técnico/ULisboa, 10 de Fevereiro 2020

Regras do Blokus Duo

123456789abcde
1
2
3
4
5 S
6
7
8
9
a S
b
c
d
e
Fig.1: Tabuleiro Blokus Duo
Fig.2: Contacto canto-com-canto
Permitido Proíbido
o o
oo oo
ohh ohh
kohh kohh
ks ks
ksss ksss
kks kks

Tabuleiro

Blokus Duo é jogado num tabuleiro 14x14, tal como ilustrado na Fig.1.

Peças

Cada jogador tem 21 peças diferentes (Fig.3). As rotações permitidas estão ilustradas na Fig.4.

Padrão de rotação da peça:

0: posição original
1: espelho em X (de #0)
2: rotação de 90º
3: espelho de X rodado 90º (espelho de #2 - roda primeiro, depois espelha)
4: rotação de 180º
5: espelho de X rodado 180º (espelho de #4)
6: rotação de 270º
7: espelho de X rodado 270º (espelho de #6)

Restrições aos posicionamento das peças

Regras básicas:
No início, os 2 jogadores têm as 21 peças. Cada jogador tem um conjunto de peças com uma cor diferente para poderem ser identificadas (ex. jogador A tem peças verdes e o jogador B tem peças vermelhas.) Cada jogador joga uma peça de cada vez.
Primeiro movimento:
Os jogadores devem ocupar uma das posições marcada por "S" na Fig.1, em (5,5) ou (a,a) na sua primeira jogada.
Contacto canto-com-canto:
Cada peça jogada tem de ter pelo menos um contacto canto-com-canto com uma peça da mesma cor. Cada peça jogada NÃO pode ter contacto face-com-face com outra peça da mesma cor. Pode haver contacto face-com-face entre peças de cores diferentes. Por exemplo a situação no lado direito da Fig.2 não cumpre com a regra entre as peças vermelhas "k" e "o".

Pontuação

O jogo prossegue até que os dois jogadores passem a jogada, ou um dos jogadores coloque todas as suas peças, ou faça um movimento inválido.

Fig.3: Tipos de peças.
Monomino: Domino: Trominoes: Tetrominodes:
a: b: c: d: e: f: g: h: i:
Pentominoes:
j: k: l: m: n: o: p: q: r: s: t: u:
Fig.4 Padrões de rotação da peça "t"
0: 1: 2: 3: 4: 5: 6: 7:

Protocolo de comunicação

123456789abcde
1
2
3
4
5
6
7
8
9
a
b
c
d
e
Fig.5: Exemplo de código de 4 letras: a4t3

As placas comunicam com o computador do árbitro num porto RS-232 via USB. Neste porto, cada placa deve enviar o seu identificador antes do início do jogo, o movimento em cada jogada, e receber o movimento do oponente.

O canal série deve ser configurado para a velocidade de 115200 bps, sem paridade e 1 stop bit. Toda a comunicação é feita usando caracteres ASCII (case sensitive).

Código de 4 letras

A competição Blokus Duo usa uma codificação de 4 letras para representar uma jogada da placa para o árbitro.

As quatro letras do código representam [X, Y, código do tipo de peça, padrão de rotação da peça]. As "coordenadas X e Y" são definidas em 1-9 e a-e (minúscula) tal como na Fig.1 e 5, e indicam o "centro" da peça a ser jogada, indicada a cinza na Fig.3. O "código do tipo de peça" indica a peça jogada, ver Fig.2, usando uma letra minúscula. A última letra indica a orientação da peça, tal como na Fig.4.

Fig.5 é o exemplo do código de 4 letras "a4t3" no tabuleiro.

"0000" é um código especial que significa "passar a vez".

Protocolo de Comunicação (Preliminar: versão 0.0, 14 Set 2017)

Nota importante: Este é uma versão preliminar do protocolo e pode ainda sofrer alterações.

O canal série deve ser configurado para 115200 bps, sem paridade e 1 stop bit. Toda a comunicação é feita usando caracteres ASCII (case sensitive).

Iniciação:
O árbitro envia "0" para as 2 placas. Cada FPGA deve responder com "1XX" em 1 segundo, onde XX corresponde ao identificador da equipa (atribuído pela organização).
Primeira jogada:
O árbitro envia "25" ou "2A" para obter a jogada do primeiro jogador. "25" significa que o primeiro movimento deve ser feito na posição (5,5) e "2A" para a posição (a,a). A FPGA deve responder com um código de 4 caracteres em 1 segundo.
Segunda jogada:
De seguida, o árbitro envia "35XXXX" ou "3AXXXX" para obter a jogada do segundo jogador. "35" significa que o primeiro movimento deve ser feito na posição (5,5) e "3A" para a posição (a,a). A FPGA deve responder com um código de 4 caracteres em 1 segundo. "XXXX" corresponde à jogada do primeiro jogador.
Jogadas seguintes:
O árbitro envia "4XXXX" (onde "XXXX" é o código da última jogada do oponente). A placa deve responder com um código de 4 caracteres em 1 segundo.
Passar a vez:
Se o jogador não conseguir realizar uma jogada válida, após receber "3XXXX", deve enviar o código "0000" para o árbitro em 1 segundo. Exceder o período de 1 segundo implica eliminação imediata do jogo.
Fim do jogo:
O árbitro envia "9" para indicar fim do jogo. Se for realizado outro jogo, o árbitro envia "0". (caso seja necessário é possível reiniciar a placa após o final do jogo – hard reset).

O protocolo / codigos estão sumarizados na tabela 1.

Tabela 1: Resumo dos códigos de comunicação
Código Enviado por Descrição Código de resposta
0 Árbitro Code 0 initiates the match. Código 1
1XX FPGA Resposta ao código 0
XX: ID da equipa.
nenhum
2X Árbitro Pedido da primeira jogada do primeiro jogador.
X: "5" para o jogador que joga em (5,5) e "A" para (a,a).
Código de 4 letras
3XYYYY Árbitro Pedido da primeira jogada do segundo jogador.
X: "5" para o jogador que joga em (5,5) e "A" para (a,a).
YYYY: jogada do adversário.
Código de 4 letras
4XXXX Árbitro Pedido de jogada.
XXXX: jogada do adversário.
Código de 4 letras
9 Árbitro Fim de jogo. Código "0" pode ser dado.nenhum

Exemplo the comunicação FPGA-Arbitro-FPGA

Um exemplo de uma sequência de mensagens e resultado no tabuleiro são mostraddos na Tabela 2 e Fig.6. Os IDs das equipas 1 e 2 são "AA" e "BB", respectivamente. A primeira equipa a jogar é a equipa 1.

123456789abcde
11111 122
21 12
3 12
4 12
5 12
6 2
7 2
8 2
9 2
a 2
b
c
d
e
Fig.6: Estado do tabuleiro após a mensagem #12 da Tabela 2.
Tabela 2: Exemplo de uma sequência de mensagens entre a equipa/FPGA 1, 2 e o árbitro
# Seq De: Árbitro
Para: FPGA 1
De: FPGA 1
Para: Árbitro
De: Árbitro
Para: FPGA 2
De: FPGA 2
Para : Árbitro
10 0
2 1AA 1BB
325
4 53e0
5 3A53e0
6 a8e0
74a8e0
8 21k7
9 421k7
10 94j0
11494j0
12 61a0
13 461a0
14 71b3
15471b3
(o jogo continua)