| 9 | import static enums.Outcome.*; |
| 10 | |
| 11 | enum RoShamBo5 implements Competitor<RoShamBo5> { |
| 12 | PAPER, SCISSORS, ROCK; |
| 13 | static EnumMap<RoShamBo5,EnumMap<RoShamBo5,Outcome>> |
| 14 | table = new EnumMap<>(RoShamBo5.class); |
| 15 | static { |
| 16 | for(RoShamBo5 it : RoShamBo5.values()) |
| 17 | table.put(it, new EnumMap<>(RoShamBo5.class)); |
| 18 | initRow(PAPER, DRAW, LOSE, WIN); |
| 19 | initRow(SCISSORS, WIN, DRAW, LOSE); |
| 20 | initRow(ROCK, LOSE, WIN, DRAW); |
| 21 | } |
| 22 | static void initRow(RoShamBo5 it, |
| 23 | Outcome vPAPER, Outcome vSCISSORS, Outcome vROCK) { |
| 24 | EnumMap<RoShamBo5,Outcome> row = |
| 25 | RoShamBo5.table.get(it); |
| 26 | row.put(RoShamBo5.PAPER, vPAPER); |
| 27 | row.put(RoShamBo5.SCISSORS, vSCISSORS); |
| 28 | row.put(RoShamBo5.ROCK, vROCK); |
| 29 | } |
| 30 | @Override public Outcome compete(RoShamBo5 it) { |
| 31 | return table.get(this).get(it); |
| 32 | } |
| 33 | public static void main(String[] args) { |
| 34 | RoShamBo.play(RoShamBo5.class, 20); |
| 35 | } |
| 36 | } |
| 37 | /* Output: |
| 38 | ROCK vs. ROCK: DRAW |
| 39 | SCISSORS vs. ROCK: LOSE |