package test; public enum Outcome{ WIN,LOSE,DRAW } -------------------------------------- package test; import java.util.Random; import static test.Outcome.*; interface Item { Outcome compete(Item it); Outcome eval(Paper p); Outcome eval(Scissors s); Outcome eval(Rock r); } class Paper implements Item { @Override public Outcome compete(Item it) { // TODO Auto-generated method stub return it.eval(this); } @Override public Outcome eval(Paper p) { // TODO Auto-generated method stub return DRAW; } @Override public Outcome eval(Scissors s) { // TODO Auto-generated method stub return WIN; } @Override public Outcome eval(Rock r) { // TODO Auto-generated method stub return LOSE; } public String toString() { return "Paper"; } } class Scissors implements Item { @Override public Outcome compete(Item it) { // TODO Auto-generated method stub return it.eval(this); } @Override public Outcome eval(Paper p) { // TODO Auto-generated method stub return LOSE; } @Override public Outcome eval(Scissors s) { // TODO Auto-generated method stub return DRAW; } @Override public Outcome eval(Rock r) { // TODO Auto-generated method stub return WIN; } public String toString() { return "Scissors"; } } class Rock implements Item { @Override public Outcome compete(Item it) { // TODO Auto-generated method stub return it.eval(this); } @Override public Outcome eval(Paper p) { // TODO Auto-generated method stub return WIN; } @Override public Outcome eval(Scissors s) { // TODO Auto-generated method stub return LOSE; } @Override public Outcome eval(Rock r) { // TODO Auto-generated method stub return DRAW; } public String toString() { return "Rock"; } } public class RoShamBo1 { static final int SIZE = 20; private static Random rand = new Random(47); public static Item newItem() { switch (rand.nextInt(3)) { default: case 0: return new Scissors(); case 1: return new Paper(); case 2: return new Rock(); } } public static void match(Item a, Item b) { System.out.println(a + " VS " + b + ":" + a.compete(b)); } public static void main(String[] args) { for (int i = 0; i < SIZE; i++) match(newItem(), newItem()); } }