数字当てゲーム
30分プログラム、その706。ヒット&ブローという数字当てゲームを作ってみました。
元々は二人用のゲームで
- 互いに4桁の数字を決める
- お互いに4桁数字を言い合う
- 場所と数字が一致すればヒット、数字だけがならボールと答える
というルールです。
最初、ゲームの名前が分からなくて、「ハングマン (ゲーム) - Wikipediaに似たゲーム」と呼んでいたので、そういうクラス名になっています。気にしないでください。
使い方
$ fsc HangMan.scala $ scala Main input 4 digit number > 1111 hit: 3, ball: 1 input 4 digit number > 1234 hit: 1, ball: 0 input 4 digit number > 5678 hit: 0, ball: 1 input 4 digit number > 6785 hit: 0, ball: 1 input 4 digit number > 1167 hit: 3, ball: 0 input 4 digit number > 1116 hit: 3, ball: 0 input 4 digit number > 1117 hit: 4, ball: 0 CLEAR!!
ソースコード
class Response(val hit : Int, val ball : Int){ override def toString = "hit: " + hit + ", ball: " + ball } object Main { def main(args : Array[String]) { var hangman = new HangMan while(true){ print("input 4 digit number > ") val s = readLine.toList (hangman check s) match { case None => println("Error") case Some(x) => { println(x) if(x.hit == 4) { println("CLEAR!!") hangman = new HangMan } } } } } } class HangMan { val answer = Math.floor(Math.random * 9999).toInt.toString.toList // カンニング def peek = answer def check(input : List[Char]) : Option[Response] = { if(input.size != 4) None else { val res = (answer zip input).foldLeft((0,0)) { (res, in) => if( in._1 == in._2 ) (res._1 + 1, res._2) else if( answer contains in._2 ) (res._1, res._2 + 1) else res } Some(new Response(res._1, res._2)) } } }