Rock-paper-scissors: Difference between revisions

add supercollider
m (→‎traditional, 3 choices: added/changed wording in the REXX section header.)
(add supercollider)
Line 4,659:
4:1 Play: q
</pre>
 
 
=={{header|SuperCollider}}==
 
<pre>
// play it in the REPL:
 
a = RockPaperScissors.new;
a.next(Scissors);
a.next(Scissors);
a.next(Scissors);
a.next(Paper);
</pre>
 
An implementation using classes
 
<pre>
Rock {
 
*play { |other|
^other.rock + this + "against" + other
}
 
*rock {
^"tie"
}
 
*paper {
^"lose"
}
 
*scissors {
^"win"
}
 
*losesAgainst {
^Paper
}
 
 
}
 
Paper {
 
*play { |other|
^other.paper + this + "against" + other
}
 
*paper {
^"tie"
}
 
*scissors {
^"lose"
}
 
*rock {
^"win"
}
 
*losesAgainst {
^Scissors
}
 
}
 
Scissors {
 
*play { |other|
^other.scissors + this + "against" + other
}
 
*scissors {
^"tie"
}
 
*rock {
^"lose"
}
 
*paper {
^"win"
}
 
*losesAgainst {
^Rock
}
 
}
 
RockPaperScissors {
var opponentMoves;
 
*new {
^super.new.init
}
 
init {
opponentMoves = Bag.new;
}
 
findBestMatch {
var typicalMove = opponentMoves.wchoose;
if(typicalMove.isNil) { ^[Rock, Paper, Scissors].choose };
^typicalMove.losesAgainst
}
 
next { |otherMove|
var myMove = this.findBestMatch;
opponentMoves.add(otherMove);
^play(otherMove, myMove)
}
 
}
 
 
 
 
 
</pre>
 
 
=={{header|Tcl}}==
83

edits