minitruco-android
minitruco-android copied to clipboard
Não deixar JogadorCPU aceitar truco em jogo perdido
Isso foi muito mitigado com a limitação do aceite do truco ao jogador humano, mas talvez tenhamos que ver isso também.
(mas talvez seja só caso de blefe)
Ok, a situação é a seguinte:
- Jogo está "ganho" (elaborar isso) para a dupla do bot
- Bot é o último da rodada (pé?)
- É meio duh ele trucar, porque...
- É TOTALMENTE duh se um dos outros dois aceitar (eles já vão perder)
Então, para o último item (aceitar truco com jogo perdido):
Se eu (bot) recebi um pedido de truco e não tem mais como ganhar essa partida eu não devo aceitar truco jamais (é provocação)
Logo, o melhor lugar para implementar isso é JogadorBot.
possoPerderMaoNessaRodada = (rodada = 2a. && resultado da 1a. != vitória minha) || rodada = 3a.
estouPerdendoEstaRodada = max(cartasJogadasPelaMinhaDupla.valorTruco) < max(cartasJogadasPelaOutraDupla.valorTruco)
possoReverterPerdaDaMao = aindaNaoJogueiEssaRodada && max(cartasNaMao.valorTruco) > max(cartasJogadasPelaOutraDupla.valorTruco)
desses três vem a primeira regra:
ao receber pedido de aumento:
se (possoPerderMaoNessaRodada
&& estouPerdendoEssaRodada
&& !possoReverterPerdaDaMao
)
responde não, nem passa pela Estrategia
vale a pena ver se a estratégia já não está fazendo isso
E voltando para o outro item: não trucar se já estiver com o jogo ganho...
Para fazer isso agora, eu teria que mexer no JogadorCPU (o que é um hack bem feio). Fiz uma exploração de tentar sinalizar isso no SituacaoJogo (de forma a permitir que as estratégias tenham essa inteligência), mas o código ali está bem enroscado:
- o
JogadorBot
mantém uma instância única deSituacaoJogo
(economia de alocação herdada do Java ME), e ela é atualizada em parte peloJogoLocal
, e em parte pelo próprioJogadorBot
. Eu tentei pelo menos consolidar essa atualização noJogoLocal
(que é onde faz mais sentido), mas percebi que:- o
JogadorHumano
e oJogadorBot
mantém o controle sobre se a dupla pode ou não pedir aumento (acho até que tem um TODO pra mudar isso em algum lugar, porque é algo que permite bugs como #29), então um prereq é retornar esse controle paraJogo
- o
Então as tarefas aqui seriam, pela ordem:
- [ ] Centralizar o controle sobre a dupla poder pedir ou não aumento no
JogoLocal
(e de repente incorporar isso na notificação de vez?) - [ ] Colocar um equivalente de
cartasRestantes
do JogadorBot no Jogo com isso dá pra - [ ] Consolidar atualização do
SituacaoJogo
no próprio Jogo - [ ] Limar a instância fixa e fazer o jogo retornar um novo
SituacaoJogo
sempre
Tudo isso seria para permitir mudanças sãs em SituacaoJogo
, e aí uma delas seria colocar a propriedade que sinaliza se o jogo está perdido (e, portanto, a estratégia não deve aceitar truco, a não ser que ainda tenha carta pra ganhar, ou algo assim).
(cheguei a mover a criação do SituacaoJogo
para JogoLocal
, mas deu alguma zica; tá no stash stash@{0}: On bot-reboot: tentativa de isolar a criação do SituaçãoJogo
)