Gomoku, também chamado de go-moku, é um jogo tradicional Asiático, jogado na China desde 700 DC, cujo princípio se assemelha ao Jogo da Velha ou Connect 4.
O jogo acontece num tabuleiro de tamanho por 15x15 (em algumas versões 19x19), e os jogadores vão colocando suas peças alternadamente no tabuleiro (brancas e pretas): vence quem conseguir alinhar 5 ou mais peças de sua cor na horizontal, vertical ou diagonal.
O primeiro movimento é sempre efetuado pelo jogador com peças brancas.
Ao longo do curso deverão ser implementados jogadores de gomoku em lisp, prolog e java, que se enfrentarão em campeonatos.
Cada jogador deverá manter seu próprio estado do jogo. O tabuleiro do jogo será de tamanho variável, podendo ser quadrado ou retangular e contendo no mínimo 5 casas (vertical e horizontal) e no máximo 19 casas (ex.: 10x10, 19x5, 5x5, 10x7, etc). Um gerenciador irá organizar os campeonatos, fazendo as chamadas necessárias aos jogadores.
Cada jogador deverá implementar no mínimo 2 métodos, que serão chamados pelo gerenciador:
start(linha, coluna, inicia): Inicia o jogo. Recebe o número de linhas e colunas do tabuleiro, e um número indicando se deve iniciar o jogo ou não (inicia=1: jogador branco, gera uma jogada; inicia=0: jogador preto, não faz nenhum movimento).
joga(linha, coluna): Recebe a jogada efetuada pelo oponente e reponde com uma nova jogada, com 0 ≤ linha < número máximo de linhas e 0 ≤ coluna < número máximo de colunas. Caso a jogada retornada seja inválida, o jogador será declarado perdedor.
Um exemplo de sequência de jogo seria:
start(10, 10, 0) -> INICIALIZA PRETO
start(10, 10, 1) -> INICIALIZA BRANCO
(5, 5) -> BRANCO JOGA
play(5, 5)
(5, 6) -> PRETO JOGA
play(5, 6)
(6, 5) -> BRANCO JOGA
play(6, 5)
(5, 7) -> PRETO JOGA
play(5, 7)
(7, 5) -> BRANCO JOGA
play(7, 5)
(5, 8) -> PRETO JOGA
play(5, 8)
(8, 5) -> BRANCO JOGA
play(8, 5)
(5, 9) -> PRETO JOGA
play(5, 9)
(4, 5) -> BRANCO VENCE
Ao final do campeonato, serão contabilizados os números de pontos de cada jogador (serão computados 3 pontos para cada vitória e 1 ponto por empate). Aquele que possuir mais pontos irá obter nota 10, aquele que tiver menos pontos receberá nota 5, e os outros terão suas notas calculadas de acordo com a seguinte função:
nota = 5*(pontos - min)/(max - min) + 5
onde pontos representa o número de pontos do jogador, max representa o número de pontos conseguidos pelo campeão e min representa o número mínimo de pontos conseguidos por qualquer jogador do campeonato.
Por exemplo: se o jogador conseguir 4 vitórias e 3 empates, ou seja, 15 pontos, e o campeão tiver 30 pontos e o pior classificado 10, então sua nota final após o campeonato será 5*(15-10)/(30-10)+5 = 5*5/20+5=6.25.
O jogador que tiver cometido mais de 10% de jogadas inválidas terá nota 5 - 5 * PJI (porcentagem de jogadas inválidas). Por exemplo, se um jogador, em 20% das partidas, cometer uma jogada inválida, receberá nota 5 - 5*20% = 4.
Cada jogador terá um segundo para efetuar a sua jogada. Jogadores que ultapassarem este tempo serão desclassificados por jogada inválida.
Os projetos devem ser entregues até no máximo às 23:59h da quinta-feira, dois dias após a prova da linguagem correspondente. Haverá uma penalidade de 20% por dia de atraso na entrega do jogador. Por exemplo, um aluno que entregar seu jogador no sábado a tarde (dois dias de atraso), receberá apenas 60% da nota correspondente do campeonato.