カテゴリー
Scala

「三山崩しゲーム」

下はMain.scalaです。ハイライターがScala無かったので、JavaScriptになってます。

import java.util.Random

object Main {
  def main(args: Array[String]): Unit = {
    val msg: java.util.Hashtable[String, String] = new java.util.Hashtable[String, String]
    //val msg = collection.mutable.HashMap.empty[String, String]
    //msg.put("yama","山は")
    msg.put("you", "あなた")
    msg.put("comp", "コンピュータ")
    msg.put("took", "%sが,山 %d から%d個取った\n")
    msg.put("take", "石を取って!(1〜%d) > ")
    msg.put("cond", "現在の石の数: %d, %d, %d\n\n")
    msg.put("win", "%sの勝ち\n")
    val rnd: Random = new Random
    val bVal: Boolean = rnd.nextBoolean
    val env: Env = new Env(Array[Int](2, 4, 5), bVal, msg)
    env.print
    System.out.printf("%sが先攻\n", if (bVal) {
      msg.get("you")
    }
    else {
      msg.get("comp")
    })
    while (env.num(0) > 0 || env.num(1) > 0 || env.num(2) > 0) {
      env.read
      env.eval
      env.print
    }
    System.out.printf(msg.get("win"), if (env.turn) {
      msg.get("you")
    }
    else {
      msg.get("comp")
    })
  }
}

下はEnv.scalaですが、やはりJavaScriptになってます。

import java.util
import java.util.{Random, Scanner}
import scala.util.control.Breaks

class Env(var num: Array[Int], var turn: Boolean, var msg:util.Hashtable[String, String]) {
  this.msg = msg
  private val scanner = new Scanner(System.in)
  private var x: Int = -1
  private var y: Int = -1

  def read: Env = {
    val b1 = new Breaks
    if (!this.turn) {
      this
    } else {
      b1.breakable {
        while (true) {
          System.out.printf("山は?(1~3) > ")
          this.y = scanner.nextInt() - 1
          System.out.printf(this.msg.get("take"), if (this.num(this.y) > 3) 3
          else this.num(this.y))
          this.x = scanner.nextInt
          if (this.x > 0 && this.x <= this.num(this.y))
             b1.break()
        }
      }
      this
    }
  }

  def eval: Env = {
    val b1 = new Breaks
    if (!this.turn) {
      b1.breakable {
        while (true) {
          val rnd2: Random =new Random()
          this.y = rnd2.nextInt(3)
          val rnd: Random = new Random
          this.x = rnd.nextInt(3) + 1
          if (this.x <= this.num(this.y))
            b1.break()
        }
      }
    }
    this.num(this.y) -= this.x
    this.turn = !this.turn
    this
  }

  def print: Env = {
    if (this.turn && !(this.y == -1)) System.out.printf(this.msg.get("took"), this.msg.get("comp"), this.y + 1, this.x)
    System.out.printf(this.msg.get("cond"), this.num(0),this.num(1), this.num(2))
    this
  }
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

inserted by FC2 system