Mas somos nós no recebeJogada(jogada jog) que devemos ver se a jogada do adversário é válida, ou essa checagem será feita pelo monitor de algum jeito e portanto nós podemos supor que a jogada passada para nós pelo recebeJogada(jogada jog) é sempre válida?
E no caso que nós tenhamos que checar se a jogada do adversário é válida, e também no caso de vencer normalmente, o que fazemos quando acabar o jogo?
Algum print, alguma função será chamada, o que?
EDIT:
Umas outras perguntas:
E caso nosso programa escolha usar a Pie Rule para trocar de time, nós que temos que atualizar nosso tabuleiro e time para continuar correto certo? E o mesmo vale para quando o adversario executa Pie Rule certo?
E quando o jogo é inicializado (a função inicializaJogo(int time)), como o time branco sempre começa, caso nós sejamos o time branco, já temos que executar novaJogada() ou ela será chamada depois apropriadamente por o que quer que esteja rodando nosso código?
Acho que será o segundo caso né porque senão como retornaremos o resultado do novaJogada() pelo inicializaJogo(int time)?
Você deve manter seu tabuleiro, da forma que quiser. Note que o tabuleiro não é
parâmetro das funções...
Entendi que o monitor vai fazer um main() em que chama as funções... Seu programa deve ter seu main também, para seus testes, mas não precisa se preocupar com ele para o campeonato.
abraços,
--
carlinhos
O tabuleiro padrão será o inclinado para direita ou para esquerda?
Para esquerda: http://commons.wikimedia.org/w/thumb.php?f=Hex%20board%2011x11.svg&width=500px
Para direita:

Ok. Mas como que "declaramos" que a jogada recebida foi inválida? Simplesmente ignoramos ela, damos algum print, retornamos algum valor... o que?
Pois caso recebemos uma jogada inválida ou completamos o objetivo do Hex, o jogo termina, então ai temos que dar algum print ou retornar algum valor ou o "programa campeonato" do monitor vai "detectar" essas ocorrencias e terminar o jogo sozinho?
Isso que fiquei em duvida porque o enunciado e o PDF sobre o campeonato não especificam o que fazer ou o que acontece quando o jogo termina.
E Felipe, acho que isso não faz diferença já que você pode colocar uma peça em qualquer lugar vazio, e porque o tabuleiro pode ser representado como uma matriz (que nem o enunciado diz).
Opa agora fui ver, faz diferença sim :P
Seria errado então assumir que o certo seria o inclinado para a esquerda, como aquela imagem da wikimedia, que também é a que foi colocada no enunciado?
Claro, só aumentando ele pra ser 14x14...
1) Sobre o tabuleiro
Ele é inclinado para esquerda mesmo. Posição mais a esquerda é o (0,0) e a mais a direita a (13, 13).
2) Sobre as jogadas
O fluxo de uma rodada é a seguinte:
a) através da funcao novaJogada(), um jogador fornece a jogada;
b) em seguida o programa gerenciador (que nós estamos fazendo) verifica se a jogada é de fato válida;
c) caso não for o jogador perdeu;
d) caso for válida, o adversário recebe essa jogada.
Acho que isso responde as perguntas.
3) Sobre o estado do jogo
A única interface entre o programa gerenciador e o seu programa são aquelas três funções dadas. Por isso, seu programa deve saber o estado do jogo por si só, já que sabe as jogadas que você fez e recebeu as jogadas do adversário.
4) Main
Novamente lembro a todos que o main de vocês só deve servir para vocês testarem o ep de vocês. Ele não será usado na competição e, portanto, não deve ter grandes funcionalidades. Eu recomendo que todos façam um main para que vocês possam jogar contra seus programas.
além disso, quanto tempo cada jogador terá para jogar?
Façam o programa como se você estivesse fazendo um ep que não tivesse a competição. A única coisa que precisam fazer é seguir essas especificações.
1) Seu código deve usar a struct Jogada dada anteriormente
2) Seu código deve ter aquelas três funções dadas
3) Seu main deve ser simples:
3a) Usar a funcão inicializaJogo() para criar um novo jogo;
3b) Espera uma jogada do jogador humano vinda da entrada padrão (o usuário entra com uma jogada como 2 4);
3c) Informa jogador computador usando recebeJogada();
3d) Computador joga usando novaJogada();
3e) Volta para a 3b
Agora ficou mais claro o que vocês tem que fazer?
Eu acho que todos que tem dúvida quanto a isso poderiam aparecer na monitoria para conversar e entender melhor.