Skip to content

Instantly share code, notes, and snippets.

@warmuuh
Last active October 29, 2015 09:10
Show Gist options
  • Save warmuuh/ecd29dd86b68e09e7994 to your computer and use it in GitHub Desktop.
Save warmuuh/ecd29dd86b68e09e7994 to your computer and use it in GitHub Desktop.
import scala.io.StdIn
import scala.util.Random
import scala.util.Try
/**
* @author pmucha
*/
object rps extends App {
def k[A](x: A)(f: A => Unit): A = { f(x); x } // kestrel combinator
object Weapon extends Enumeration{
type WeaponType = Value
val ROCK, PAPER, SCISSOR, LIZARD, SPOCK = Value
}
def chooseRandomWeapon(name:String) = {
k(Weapon(Random.nextInt(Weapon.maxId)))(w => println(s"$name chose $w"))
}
def chooseWeapon(name:String): Weapon.WeaponType = {
println("choose weapon: " + Weapon.values.map(w => s"(${w.id}) $w").mkString(", "))
return Try(k(Weapon(StdIn.readInt()))(w => println(s"$name chose $w"))).getOrElse(chooseWeapon(name))
}
def play(w1:Weapon.WeaponType, w2:Weapon.WeaponType) = {
val result = (Weapon.maxId + w1.id - w2.id) % Weapon.maxId
val resultStr = List("Tie","P2 Won","P1 Won")(if (result == 0) 0 else (result%2 +1))
println(resultStr)
}
if (args contains "human")
play(chooseWeapon("Player"), chooseRandomWeapon("Computer"))
else
play(chooseRandomWeapon("Computer1"), chooseRandomWeapon("Computer2"))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment