- All Implemented Interfaces:
- Rule
public class TryToUnBlock
extends AbstractRule
Created by piers on 04/05/17.
I think I can build something pretty simple and very good by combining that paper's thoughts with my own existing ones. I'll confine myself to:
• Four players
• Include multicoloured cards (treating them as being every colour)
• Null clues are permitted
Each person has 30 clues available to them (5 ranks and 5 colours to each of 3 other players). Label these so each is the composition of a rank clue modulo 5 and a colour clue modulo 6.
Every player's hand contains a mixture of identified and unidentified cards. Whenever a player gives a clue, they identify each other player's newest unidentified card (omitting players with no unidentified cards). Sum all the identified ranks modulo 5, sum all the identified colours modulo 6, give the corresponding clue.
Now just add some heuristics. Off the top of my head...
Define a card as "playable", or "dead" = a duplicate of something already played, "safe" = an unplayable duplicate of something not yet discarded, "unsafe" = an unplayable card that isn't safe.
Define a player as "blocked" if none of their identified cards is playable, dead or safe, and there are no cluestones available.
Define a player as "ill-informed" if no identified card is playable or dead, but at least one unidentified card is.
Define a player as "unblocking" if they know of at least one playable 5 or safe card.
Then do the first of these which is possible:
• If there is no unblocking player between you and a blocked one, unblock
• Play
• If any other player is ill-informed, clue
• Discard a dead card
• If any other player has unidentified cards, clue
• Discard a safe card
• Give a dummy clue
• Discard an unidentified card (risking an imperfect score)
• Discard the highest-ranked unsafe card (guaranteeing an imperfect score)
How complex? Is Player 2 able to play if it relies on Player 1 playing a card that they know about?