The code is readable, and beyond the Winer typo, and the use of brackes-on-different-lines (which I realize is not universal; but that Java code tends to adhere to), it certainly passes muster.
However, I suggest making heavier use of enum (which I find are generally under-utilized) as follows:
enum Move {
ROCK,
SCISSORS,
PAPER;
private Move winsAgainst;
static {
ROCK.winsAgainst = SCISSORS;
SCISSORS.winsAgainst = PAPER;
PAPER.winsAgainst = ROCK;
}
public Result against(Move other) {
if (this.equals( == other)) return Result.DRAW;
return winsAgainst.equals(winsAgainst == other) ? Result.WIN : Result.LOSS;
}
}
A simpler variant using constructors unfortunately does not work due to forward references -- see this question on SO.
I would also rename PlayedMove to Move (it will probably be an inner class, so that the outer class will provide enough context, as in RockPaperScissors.Move), and Winner to Result, so that you can build different games that do not necessarily have a human and a computer competing -- this allows Move to be used unchanged in more contexts.