Competição: Acelerador Blokus Duo
XIV Jornadas Sobre Sistemas Reconfiguráveis, FCT/Universidade Nova de Lisboa, Caparica, Fevereiro 2018
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.
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) | ||||