/app/modles/Game.scala
Scala | 117 lines | 88 code | 29 blank | 0 comment | 7 complexity | 4b2e9d3c750e106c6e15377c9e307223 MD5 | raw file
- package models
- import scala.io._
- import collection.mutable
- import models.MongoDBSetup.mongoDB
- import com.mongodb.casbah.Imports._
- import scala.util.Random
- object Game {
- def getPhrases_Guesses(fileString: Iterator[String]):( List[String], List[Int])= {
- var phrases : List[String]= List()
- var guesses : List[Int] = List()
- for (line <- fileString){
- phrases = phrases:::List(line.split("[|]")(0))
- guesses = guesses ::: List(line.split("[|]")(1).trim.toInt)
- }
- (phrases, guesses)
- }
- def create (id:Long, phrase_1: List[String], guesses_1 : List[Int], current_phrase : String, guesses_left:Int) {
- val game = MongoDBObject("game_id" -> id, "phrase" -> MongoDBList(phrase_1), "guesses" -> MongoDBList(guesses_1), "current_phrase"->"", "current_guess"-> "_", "guesses_left" ->0, "letters_guessed"->"", "suggestions"->"")
- mongoDB += game
- }
- def save (id: Long, fileString: Iterator[String] ){
- val phrase_guesses: (List[String], List[Int]) = Game.getPhrases_Guesses(fileString)
- Game.create(id,phrase_guesses._1, phrase_guesses._2, "", 0)
- }
- def guess_letter(id:Long, letter: Char){
- val d = MongoDBObject("game_id"->id)
- val cursor = models.MongoDBSetup.mongoDB.findOne(d).getOrElse(throw new Exception)
- if (!cursor.get("current_phrase").toString.contains(letter)){
- cursor.update("guesses_left", cursor.get("guesses_left").toString.toInt-1:java.lang.Integer)
- }
- cursor.update("letters_guessed", cursor.get("letters_guessed").toString + " " + letter)
- val current_phrase = cursor.get("current_phrase").toString.split(" ")
- val current_guess = cursor.get("current_guess").toString.replace(" ", "").split(";")
- val simillar = (current_phrase, current_guess).zipped.map((x,y) => (x,y).zipped.map((k,j) => if (k.toLower == letter) k else j))
- val final_string = simillar.map(x=>x.map(y=>y + " ")).map(x=>x.reduce((k,j)=> k + j)).reduce((a,b) => a + ";" + b)
- cursor.update("current_guess", final_string)
- models.MongoDBSetup.mongoDB += cursor
- }
- def read_from_file(file_name: String):String ={
- Source.fromFile(file_name).mkString
- }
- def train_bigram_model(data: String)={
- var m = mutable.Map[Char, Map[Char, Int]]().withDefaultValue(Map[Char, Int]().withDefaultValue(0))
- val len = data.length
- for (x <- 1 until len){
- val c: Int = m(data(x-1))(data(x)) + 1
- m(data(x-1)) += (data(x)-> c )
- }
- m
- }
- def max_letter(id : Long,c:Char,m : mutable.Map[Char, Map[Char, Int]]) = {
- val new_map = m(c)
- val sorted_new_map = new_map.toList.sortBy(-_._2)
- var suggestions = ""
- for (x <- 0 until 5) {
- suggestions += sorted_new_map(x)._1 + " "
- }
- val d = MongoDBObject("game_id"->id)
- val cursor = models.MongoDBSetup.mongoDB.findOne(d).getOrElse(throw new Exception)
- cursor.update("suggestions", suggestions)
- models.MongoDBSetup.mongoDB += cursor
- }
- def suggest_letter(id: Long, l: Char){
- val m = train_bigram_model(read_from_file("training/train.txt"))
- val d = MongoDBObject("game_id"->id)
- val cursor = models.MongoDBSetup.mongoDB.findOne(d)
- val current_guess = "." + cursor.get("current_guess").toString().replace(";", ".")
- max_letter(id,l, m)
- }
- def generate_random_phrase(id: Long) {
- val d = MongoDBObject("game_id"->id)
- val n = MongoDBObject("guesses_left"->100)
- val cursor = models.MongoDBSetup.mongoDB.findOne(d).getOrElse(throw new Exception)
- val phrases = cursor.get("phrase").asInstanceOf[com.mongodb.BasicDBList]
- val guesses = cursor.get("guesses").asInstanceOf[com.mongodb.BasicDBList]
- val phrases_1 = phrases(0).asInstanceOf[com.mongodb.BasicDBList]
- val guesses_1 = guesses(0).asInstanceOf[com.mongodb.BasicDBList]
- val length = phrases_1.length
- val random_index = Random.nextInt(length)
- val current_phrase = phrases_1(random_index)
- val current_guess = current_phrase.toString.split(" ").map(_.length).map(x=> "_ " *x ).reduce((x:String, y:String) => x + ";" + y)
- val current_guesses = guesses_1(random_index)
- cursor.update("guesses_left", current_guesses)
- cursor.update("current_phrase", current_phrase.toString)
- cursor.update("current_guess", current_guess)
- models.MongoDBSetup.mongoDB += cursor
- }
- }