Competição: Acelerador Blokus Duo
XV Jornadas Sobre Sistemas Reconfiguráveis, Fevereiro 2019

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.

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)