Competição: Acelerador Blokus Duo
XV Jornadas Sobre Sistemas Reconfiguráveis, Fevereiro 2019
Regras do Blokus Duo
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | ||||||||||||||
2 | ||||||||||||||
3 | ||||||||||||||
4 | ||||||||||||||
5 | S | |||||||||||||
6 | ||||||||||||||
7 | ||||||||||||||
8 | ||||||||||||||
9 | ||||||||||||||
a | S | |||||||||||||
b | ||||||||||||||
c | ||||||||||||||
d | ||||||||||||||
e |
|
Permitido | Proíbido | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
o | o | ||||||||||||||||
o | o | o | o | ||||||||||||||
o | h | h | o | h | h | ||||||||||||
k | o | h | h | k | o | h | h | ||||||||||
k | s | k | s | ||||||||||||||
k | s | s | s | k | s | s | s | ||||||||||
k | k | s | k | k | s |
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.
- A pontuação é calculada no final do jogo, e é obtida pela contagem do número total de quadrados/casas nas peças que ficaram por colocar no tabuleiro. O jogador que colocar mais "casas" ganha, independentemente do número de peças.
Exemplo: se no final do jogo o jogador A ficar com 2 peças um Monomino e Domino (total 3 casas), e o jogador B ficar apenas com 1 Tetrominode (total 4 casas). Ganha o jogador A.
- Existe um bónus de 15 pontos se todas as peças forem colocadas, ou 20 pontos se a última peça for o monomino a).
- A jogada inválida implica perder o jogo imediatamente.
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: | |||||||||||||||||||||||||||||||||||||||
0: | 1: | 2: | 3: | 4: | 5: | 6: | 7: | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Protocolo de comunicação
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | ||||||||||||||
2 | ||||||||||||||
3 | ||||||||||||||
4 | ||||||||||||||
5 | ||||||||||||||
6 | ||||||||||||||
7 | ||||||||||||||
8 | ||||||||||||||
9 | ||||||||||||||
a | ||||||||||||||
b | ||||||||||||||
c | ||||||||||||||
d | ||||||||||||||
e |
|
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.
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.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | |||||||
2 | 1 | 1 | 2 | |||||||||||
3 | 1 | 2 | ||||||||||||
4 | 1 | 2 | ||||||||||||
5 | 1 | 2 | ||||||||||||
6 | 2 | |||||||||||||
7 | 2 | |||||||||||||
8 | 2 | |||||||||||||
9 | 2 | |||||||||||||
a | 2 | |||||||||||||
b | ||||||||||||||
c | ||||||||||||||
d | ||||||||||||||
e |
|
# Seq | De: Árbitro Para: FPGA 1 | De: FPGA 1 Para: Árbitro | De: Árbitro Para: FPGA 2 | De: FPGA 2 Para : Árbitro |
---|---|---|---|---|
1 | 0 | 0 | ||
2 | 1AA | 1BB | ||
3 | 25 | |||
4 | 53e0 | |||
5 | 3A53e0 | |||
6 | a8e0 | |||
7 | 4a8e0 | |||
8 | 21k7 | |||
9 | 421k7 | |||
10 | 94j0 | |||
11 | 494j0 | |||
12 | 61a0 | |||
13 | 461a0 | |||
14 | 71b3 | |||
15 | 471b3 | |||
(o jogo continua) |