diff --git a/build.sbt b/build.sbt index 6834d12..d8d1c0a 100644 --- a/build.sbt +++ b/build.sbt @@ -12,4 +12,4 @@ lazy val root = (project in file(".")) libraryDependencies ++= Seq( "org.scalatest" %% "scalatest" % "3.2.19" % Test, "org.scalactic" %% "scalactic" % "3.2.19", -) \ No newline at end of file +) diff --git a/src/main/scala/GuessWhoGame/Board.scala b/src/main/scala/GuessWhoGame/Board.scala index 423dc52..c850c87 100644 --- a/src/main/scala/GuessWhoGame/Board.scala +++ b/src/main/scala/GuessWhoGame/Board.scala @@ -1,7 +1,74 @@ package GuessWhoGame -case class Board (Characters: List[Character]) { - def printCharacterNames(): Unit = { - Characters.foreach(Character => println(Character.name)) +import scala.util.Random +import GuessWhoGame.character._ + +class Board(val characters: List[Character], val selectedCharacter: Character) { + def printCharacterNames(): List[String] = { + characters.map(_.name) + } + + def printRemainingCharacters(remainingCharacters: List[Character]): List[String] = { + remainingCharacters.map(_.name) + } + + def getRemainingCharacters(remainingCharacters: List[Character]): List[Character] = remainingCharacters + + def checkWinCondition(remainingCharacters: List[Character]): Boolean = remainingCharacters.size == 1 + + def handleQuestion(attribute: String, value: Either[String, Boolean], remainingCharacters: List[Character]): List[Character] = { + attribute match { + case "name" => filterByName(value, remainingCharacters) + case "gender" => filterByGender(value, remainingCharacters) + case "haircolor" => filterByHairColor(value, remainingCharacters) + case "eyecolor" => filterByEyeColor(value, remainingCharacters) + case "wearsglasses" => filterByWearGlasses(value, remainingCharacters) + case "hasfacialhair" => filterByFacialHair(value, remainingCharacters) + case _ => + println("Invalid attribute. Try again.") + remainingCharacters + } + } + + def filterByName(value: Either[String, Boolean], remainingCharacters: List[Character]): List[Character] = { + value match { + case Left(name) => remainingCharacters.filter(_.name.equalsIgnoreCase(name)) + case _ => remainingCharacters + } + } + + def filterByGender(value: Either[String, Boolean], remainingCharacters: List[Character]): List[Character] = { + value match { + case Left(gender) => remainingCharacters.filter(_.gender.toString.equalsIgnoreCase(gender)) + case _ => remainingCharacters + } + } + + def filterByHairColor(value: Either[String, Boolean], remainingCharacters: List[Character]): List[Character] = { + value match { + case Left(hairColor) => remainingCharacters.filter(_.hairColor.toString.equalsIgnoreCase(hairColor)) + case _ => remainingCharacters + } + } + + def filterByEyeColor(value: Either[String, Boolean], remainingCharacters: List[Character]): List[Character] = { + value match { + case Left(eyeColor) => remainingCharacters.filter(_.eyeColor.toString.equalsIgnoreCase(eyeColor)) + case _ => remainingCharacters + } + } + + def filterByWearGlasses(value: Either[String, Boolean], remainingCharacters: List[Character]): List[Character] = { + value match { + case Right(wearsGlasses) => remainingCharacters.filter(_.wearsGlasses.exists(_.value == wearsGlasses)) + case _ => remainingCharacters + } + } + + def filterByFacialHair(value: Either[String, Boolean], remainingCharacters: List[Character]): List[Character] = { + value match { + case Right(facialHair) => remainingCharacters.filter(_.facialHair.exists(_.value == facialHair)) + case _ => remainingCharacters + } } } \ No newline at end of file diff --git a/src/main/scala/GuessWhoGame/Character.scala b/src/main/scala/GuessWhoGame/Character.scala deleted file mode 100644 index 00a7363..0000000 --- a/src/main/scala/GuessWhoGame/Character.scala +++ /dev/null @@ -1,4 +0,0 @@ -package GuessWhoGame - -case class Character(val name: String, val gender: String, val hairColor: String, val eyeColor: String, val wearsGlasses: Boolean, val facialHair: Boolean) - diff --git a/src/main/scala/GuessWhoGame/Game.scala b/src/main/scala/GuessWhoGame/Game.scala index 10fc61c..94b57d7 100644 --- a/src/main/scala/GuessWhoGame/Game.scala +++ b/src/main/scala/GuessWhoGame/Game.scala @@ -1,80 +1,98 @@ package GuessWhoGame + import scala.util.Random +import scala.io.StdIn +import GuessWhoGame.character._ +import scala.annotation.tailrec object Game extends App { - val char1: Character = Character("joe", "male", "brown", "blue", wearsGlasses = false, facialHair = false) - val char2: Character = Character("muhammad", "male", "black", "brown", wearsGlasses = true, facialHair = true) - val char3: Character = Character("april", "female", "blonde", "blue", wearsGlasses = true, facialHair = false) - val char4: Character = Character("sally", "female", "blue", "green", wearsGlasses = true, facialHair = true) - val char5: Character = Character("spencer", "male", "brown", "brown", wearsGlasses = false, facialHair = true) - val char6: Character = Character("gemma", "female", "ginger", "Blue", wearsGlasses = true, facialHair = false) - val char7: Character = Character("jamie", "male", "none", "green", wearsGlasses = true, facialHair = true) - val char8: Character = Character("jessica", "female", "green", "green", wearsGlasses = false, facialHair = false) - val char9: Character = Character("bilal", "male", "brown", "green", wearsGlasses = false, facialHair = true) - val char10: Character = Character("lisa", "female", "black", "brown", wearsGlasses = true, facialHair = false) - val char11: Character = Character("tom", "male", "brown", "blue", wearsGlasses = true, facialHair = false) - val char12: Character = Character("cheryl", "female", "blonde", "green", wearsGlasses = false, facialHair = false) - val char13: Character = Character("arei", "male", "brown", "brown", wearsGlasses = false, facialHair = true) - val char14: Character = Character("kelly", "female", "none", "green", wearsGlasses = false, facialHair = false) - val char15: Character = Character("tayamul", "male", "brown", "blue", wearsGlasses = false, facialHair = false) - val char16: Character = Character("elaine", "female", "ginger", "blue", wearsGlasses = false, facialHair = true) - val char17: Character = Character("roshan", "male", "brown", "blue", wearsGlasses = true, facialHair = false) - val char18: Character = Character("patricia", "female", "purple", "yellow", wearsGlasses = false, facialHair = false) - val char19: Character = Character("dave", "male", "none", "yellow", wearsGlasses = false, facialHair = false) - val char20: Character = Character("bobbiana", "female", "Brown", "Blue", wearsGlasses = true, facialHair = false) - - var gameBoard = Board(List(char1, char2, char3, char4, char5, char6, char7, char8, char9, char10, char11, char12, char13, char14, char15, char16, char17, char18, char19, char20)) - - gameBoard.printCharacterNames() - - - //Run example of the game - //Call methods - - /** game start - random character selected (private), characterlist printed to screen - * yes / no question asked - * list filtered based on fulfilment of criteria - * list reprinted to screen - * loop through all options, filtering and reprinting each time - * trigger game end when length of list is 1 ------- could end anytime, defined/earlier in code - * */ - - - -// case class GuessWhoGame.Character( -// name: String, -// gender: String, -// hairColor: String, -// eyeColor: String, -// wearsGlasses: Boolean, -// facialHair: Boolean -// ) - - - - - - - - - + def createGameBoard(): Board = { + val characters = CharacterManager.createCharacters() + val selectedCharacter = CharacterManager.selectRandomCharacter(characters) + new Board(characters, selectedCharacter) + } + + def startGame(board: Board): Unit = { + println("Welcome to the Guess Who game!") + println("Try to guess the character by asking some questions...") + println("Available characters:") + board.printCharacterNames().foreach(println) + + @tailrec + def playGame(remainingCharacters: List[Character]): Unit = { + if (board.checkWinCondition(remainingCharacters)) { + println(s"\nCongratulations, You guessed correctly. The character was ${board.selectedCharacter.name}.") + } else { + println("\nRemaining Characters:") + board.printRemainingCharacters(remainingCharacters).foreach(println) + + val newRemainingCharacters = askQuestion(remainingCharacters) + playGame(newRemainingCharacters) + } + } + + def askQuestion(remainingCharacters: List[Character]): List[Character] = { + println("\nEnter an attribute (hairColor, eyeColor, gender, wearsGlasses, hasFacialHair) to guess or 'name' to guess the character:") + val attribute = StdIn.readLine().toLowerCase() + attribute match { + case "haircolor" => + println("Enter the hair color:") + val hairColor = StdIn.readLine().toLowerCase() + board.handleQuestion(attribute, Left(hairColor), remainingCharacters) + case "eyecolor" => + println("Enter the eye color:") + val eyeColor = StdIn.readLine().toLowerCase() + board.handleQuestion(attribute, Left(eyeColor), remainingCharacters) + case "gender" => + println("Enter the gender (male/female):") + val gender = StdIn.readLine().toLowerCase() + board.handleQuestion(attribute, Left(gender), remainingCharacters) + case "wearsglasses" => + println("Does the character wear glasses? (true/false):") + val wearsGlasses = StdIn.readLine().toLowerCase().toBoolean + board.handleQuestion(attribute, Right(wearsGlasses), remainingCharacters) + case "hasfacialhair" => + println("Does the character have facial hair? (true/false):") + val hasFacialHair = StdIn.readLine().toLowerCase().toBoolean + board.handleQuestion(attribute, Right(hasFacialHair), remainingCharacters) + case "name" => + println("Enter the name of the character:") + val nameInput = StdIn.readLine().toLowerCase() + val newRemainingCharacters = board.handleQuestion(attribute, Left(nameInput), remainingCharacters) + if (board.checkWinCondition(newRemainingCharacters) && board.selectedCharacter.name.equalsIgnoreCase(nameInput)) { + println(s"\nCongratulations, You guessed correctly. The character was ${board.selectedCharacter.name}.") + } else { + println(s"\nGame over, you guessed incorrectly. The character was ${board.selectedCharacter.name}.") + } + newRemainingCharacters + case _ => + println("Invalid attribute. Try again.") + remainingCharacters + } + } + + @tailrec + def replayOrExit(): Unit = { + println("\nDo you want to play again? (yes/no)") + val playAgain = StdIn.readLine().toLowerCase() + playAgain match { + case "yes" | "y" => + println("Starting a new game...") + val newBoard = createGameBoard() + startGame(newBoard) + case "no" | "n" => + println("Thanks for playing Guess Who!") + case _ => + println("Invalid response. Please type 'yes' or 'no'.") + replayOrExit() + } + } + + playGame(board.characters) + replayOrExit() + } + + val initialBoard = createGameBoard() + startGame(initialBoard) } - - - - -//package Week2.Monday.AfternoonTaskSolution -// -//object Sanctuary extends App { -// -// def feedAnimal(animal: Animal) = println(s"You fed ${animal.name} some ${animal.dietType.eats}!") -// -// val hedwigTheSnowyOwl = new Owl("Hedwig", "Snowy Owl", 8, 2, "White", 150) -// val pumbaTheWarthog = new Warthog("Pumbaa", "Common Warthog", 4, "Brown", true) -// val jeffTheDragonfly = new Dragonfly("Jeff", "Blue Eyed Darner", 1, 12, 10, 1) -// -// feedAnimal(hedwigTheSnowyOwl) -// -//} - diff --git a/src/main/scala/GuessWhoGame/GameBoard.scala b/src/main/scala/GuessWhoGame/GameBoard.scala deleted file mode 100644 index fbd132f..0000000 --- a/src/main/scala/GuessWhoGame/GameBoard.scala +++ /dev/null @@ -1,20 +0,0 @@ -package GuessWhoGame - -//full list of characters -//printed to user -//calling the list filter function -//reprinting to adaptations - -class GameBoard(val characters: List[Character]) { - private var remainingCharacters: List[Character] = characters - - def getRemainingCharacters: List[Character] = remainingCharacters - - def eliminateCharacter(character: Character): Unit = { - remainingCharacters = remainingCharacters.filterNot(_ == character) - } - - def resetBoard(): Unit = { - remainingCharacters = characters - } -} \ No newline at end of file diff --git a/src/main/scala/GuessWhoGame/GameLogic.scala b/src/main/scala/GuessWhoGame/GameLogic.scala deleted file mode 100644 index cf1aa6b..0000000 --- a/src/main/scala/GuessWhoGame/GameLogic.scala +++ /dev/null @@ -1,30 +0,0 @@ -package GuessWhoGame - -import scala.util.Random - -//start game (select character) -//ask question -//end game/win condition - -class GameLogic (characters: List[Character]) { - private val board = new GameBoard(characters) - private val selectedCharacter = selectRandomCharacter(characters) - - private def selectRandomCharacter(characters: List[Character]): Character = { - characters(Random.nextInt(characters.size)) - } - - def askQuestion(question: Character => Boolean): Boolean = { - val answer = question(selectedCharacter) - board.getRemainingCharacters.foreach { character => - if (question(character) != answer) board.eliminateCharacter(character) - } - answer - } - - def checkWinCondition: Boolean = board.getRemainingCharacters.size == 1 - - def getSelectedCharacter: Character = selectedCharacter - - def getRemainingCharacters: List[Character] = board.getRemainingCharacters -} diff --git a/src/main/scala/GuessWhoGame/GuessWhoGame.scala b/src/main/scala/GuessWhoGame/GuessWhoGame.scala deleted file mode 100644 index 0aef1bc..0000000 --- a/src/main/scala/GuessWhoGame/GuessWhoGame.scala +++ /dev/null @@ -1,47 +0,0 @@ -import scala.util.Random - -case class Character( - name: String, - gender: String, - hairColor: String, - eyeColor: String, - wearsGlasses: Boolean, - facialHair: Boolean - ) - -class GameBoard(val characters: List[GuessWhoGame.Character]) { - private var remainingCharacters: List[GuessWhoGame.Character] = characters - - def getRemainingCharacters: List[GuessWhoGame.Character] = remainingCharacters - - def eliminateCharacter(character: GuessWhoGame.Character): Unit = { - remainingCharacters = remainingCharacters.filterNot(_ == character) - } - - def resetBoard(): Unit = { - remainingCharacters = characters - } -} - -class GuessWhoGame(characters: List[GuessWhoGame.Character]) { - private val board = new GameBoard(characters) - private val selectedCharacter = selectRandomCharacter(characters) - - private def selectRandomCharacter(characters: List[GuessWhoGame.Character]): GuessWhoGame.Character = { - characters(Random.nextInt(characters.size)) - } - - def askQuestion(question: GuessWhoGame.Character => Boolean): Boolean = { - val answer = question(selectedCharacter) - board.getRemainingCharacters.foreach { character => - if (question(character) != answer) board.eliminateCharacter(character) - } - answer - } - - def checkWinCondition: Boolean = board.getRemainingCharacters.size == 1 - - def getSelectedCharacter: GuessWhoGame.Character = selectedCharacter - - def getRemainingCharacters: List[GuessWhoGame.Character] = board.getRemainingCharacters -} diff --git a/src/main/scala/GuessWhoGame/Plan.sc b/src/main/scala/GuessWhoGame/Plan.sc deleted file mode 100644 index b6098c5..0000000 --- a/src/main/scala/GuessWhoGame/Plan.sc +++ /dev/null @@ -1,38 +0,0 @@ -/** - 1. Classes, Case Classes, Traits - - Classes and Case Classes for character representation - (name: String, gender: String, hairColour: String (hasHair - potential trait), eyeColour: String, wearing Glasses: Boolean, - facialHair: Boolean) - Attributes of each character - gender, hairColour etc - - // Define GuessWhoGame.Character class - case class GuessWhoGame.Character(name: String, gender: String, hairColor: String, eyeColor: String) - - // Define Game class - class GuessWhoGame(characters: List[GuessWhoGame.Character]) { - - 2. Trait for game logic - random character selection - Method for random selection - private val - - 3. Questions and Answers - Method for Yes/No questions - boolean - Use List to show characters - after each question characters are removed - - if correct character guessed = end the game (endGameMethod) - if not correct character = new list is generated and game continues - - 4. TDD - - Write tests for each part of the logic - - Test character creation with attributes - - Test random selection - - Test Yes/No Questions - - Test state changes of the board after each questions - - Test conditions in which the game ends - - - Game will end when the correct character is guessed - - FIND THE LESSON WHERE EXTENSION WAS TALKING TO THE TERMINAL - - Last Step - ReadMe file diff --git a/src/main/scala/GuessWhoGame/Plan1.sc b/src/main/scala/GuessWhoGame/Plan1.sc deleted file mode 100644 index 9583fe1..0000000 --- a/src/main/scala/GuessWhoGame/Plan1.sc +++ /dev/null @@ -1,7 +0,0 @@ -//Game end method? -// def gameEnd: Boolean = remainingCharacters.size == 1 - -//Reveal secret character (only to support testing) -// def revealSecretCharacter: GuessWhoGame.Character = selectedCharacter - - diff --git a/src/main/scala/GuessWhoGame/Questions.scala b/src/main/scala/GuessWhoGame/Questions.scala deleted file mode 100644 index 89cb111..0000000 --- a/src/main/scala/GuessWhoGame/Questions.scala +++ /dev/null @@ -1,27 +0,0 @@ -class Questions { - def askQuestion(attribute: String, value: Either[String, Boolean]): Unit = { - attribute match { - case "name" => - if (selectedCharacter.name == value) remainingCharacters.filter(_.name == value) // game end here! - else remainingCharacters = remainingCharacters.filterNot(_.name == value) - //trigger game end - case "gender" => - if (selectedCharacter.gender == value) remainingCharacters.filter(_.gender == value) - else remainingCharacters = remainingCharacters.filterNot(_.gender == value) - case "hairColor" => - if (selectedCharacter.hairColor == value) remainingCharacters.filter(_.hairColor == value) - else remainingCharacters = remainingCharacters.filterNot(_.hairColor == value) - case "eyeColor" => - if (selectedCharacter.eyeColor == value) remainingCharacters.filter(_.eyeColor == value) - else remainingCharacters = remainingCharacters.filterNot(_.eyeColor == value) - case "wearsGlasses" => - if (selectedCharacter.wearsGlasses == value) remainingCharacters.filter(_.wearsGlasses == value) - else remainingCharacters = remainingCharacters.filterNot(_.wearsGlasses == value) - case "hasFacialHair" => - if (selectedCharacter.hasFacialHair == value) remainingCharacters.filter(_.hasFacialHair == value) - else remainingCharacters = remainingCharacters.filterNot(_.hasFacialHair == value) - - //need for an error case here?? - } - } -} diff --git a/src/main/scala/GuessWhoGame/Sandbox.sc b/src/main/scala/GuessWhoGame/Sandbox.sc deleted file mode 100644 index 09519ad..0000000 --- a/src/main/scala/GuessWhoGame/Sandbox.sc +++ /dev/null @@ -1,21 +0,0 @@ - -//package GuessWhoGame - -class GameBoard(val characters: List[Character]) { - private var remainingCharacters: List[Character] = characters - - def getRemainingCharacters: List[Character] = remainingCharacters - - def printGameBoard(): Unit = { - println("Remaining Characters:") - characters.foreach(character => println(character.name)) - } - - def eliminateCharacter(character: Character): Unit = { - remainingCharacters = remainingCharacters.filterNot(_ == character) - } - - def resetBoard(): Unit = { - remainingCharacters = characters - } -} diff --git a/src/main/scala/GuessWhoGame/character/Character.scala b/src/main/scala/GuessWhoGame/character/Character.scala new file mode 100644 index 0000000..3b0672a --- /dev/null +++ b/src/main/scala/GuessWhoGame/character/Character.scala @@ -0,0 +1,11 @@ +package GuessWhoGame.character + +import GuessWhoGame.character.Gender._ +import GuessWhoGame.character.HairColor._ +import GuessWhoGame.character.EyeColor._ +import GuessWhoGame.character.PersonWithGlasses._ +import GuessWhoGame.character.PersonWithFacialHair._ + + +case class Character(name: String, gender: Gender, hairColor: HairColor, eyeColor: EyeColor, wearsGlasses: Option[PersonWithGlasses], facialHair: Option[PersonWithFacialHair]) + diff --git a/src/main/scala/GuessWhoGame/character/CharacterManager.scala b/src/main/scala/GuessWhoGame/character/CharacterManager.scala new file mode 100644 index 0000000..473d2ff --- /dev/null +++ b/src/main/scala/GuessWhoGame/character/CharacterManager.scala @@ -0,0 +1,37 @@ +package GuessWhoGame.character + +import scala.util.Random + +object CharacterManager { + + import GuessWhoGame.character._ + + def createCharacters(): List[Character] = { + List( + Character("Joe", Gender.Male, HairColor.Brown, EyeColor.Blue, None, None), + Character("Muhammad", Gender.Male, HairColor.Black, EyeColor.Blue, Some(PersonWithGlasses(true)), Some(PersonWithFacialHair(true))), + Character("April", Gender.Female, HairColor.Blonde, EyeColor.Blue, Some(PersonWithGlasses(true)), None), + Character("Sally", Gender.Female, HairColor.Black, EyeColor.Green, Some(PersonWithGlasses(true)), Some(PersonWithFacialHair(true))), + Character("Spencer", Gender.Male, HairColor.Black, EyeColor.Blue, None, Some(PersonWithFacialHair(true))), + Character("Gemma", Gender.Female, HairColor.Red, EyeColor.Blue, Some(PersonWithGlasses(true)), None), + Character("Jamie", Gender.Male, HairColor.None, EyeColor.Green, Some(PersonWithGlasses(true)), Some(PersonWithFacialHair(true))), + Character("Jessica", Gender.Female, HairColor.Green, EyeColor.Green, None, None), + Character("Bilal", Gender.Male, HairColor.Black, EyeColor.Green, None, Some(PersonWithFacialHair(true))), + Character("Lisa", Gender.Female, HairColor.Black, EyeColor.Blue, Some(PersonWithGlasses(true)), None), + Character("Tom", Gender.Male, HairColor.Black, EyeColor.Blue, Some(PersonWithGlasses(true)), None), + Character("Cheryl", Gender.Female, HairColor.Blonde, EyeColor.Green, None, None), + Character("Arei", Gender.Male, HairColor.Black, EyeColor.Blue, None, Some(PersonWithFacialHair(true))), + Character("Kelly", Gender.Female, HairColor.None, EyeColor.Green, None, None), + Character("Tayamul", Gender.Male, HairColor.Blue, EyeColor.Blue, None, None), + Character("Elaine", Gender.Female, HairColor.Red, EyeColor.Blue, None, Some(PersonWithFacialHair(true))), + Character("Roshan", Gender.Male, HairColor.Blue, EyeColor.Blue, Some(PersonWithGlasses(true)), None), + Character("Patricia", Gender.Female, HairColor.Purple, EyeColor.Yellow, None, None), + Character("Dave", Gender.Male, HairColor.None, EyeColor.Yellow, None, None), + Character("Bobbiana", Gender.Female, HairColor.Blue, EyeColor.Blue, Some(PersonWithGlasses(true)), None) + ) + } + + def selectRandomCharacter(characters: List[Character]): Character = { + characters(Random.nextInt(characters.size)) + } +} diff --git a/src/main/scala/GuessWhoGame/character/EyeColor.scala b/src/main/scala/GuessWhoGame/character/EyeColor.scala new file mode 100644 index 0000000..fbafec2 --- /dev/null +++ b/src/main/scala/GuessWhoGame/character/EyeColor.scala @@ -0,0 +1,6 @@ +package GuessWhoGame.character + +object EyeColor extends Enumeration { + type EyeColor = Value + val Blue, Green, Brown, Yellow = Value +} diff --git a/src/main/scala/GuessWhoGame/character/Gender.scala b/src/main/scala/GuessWhoGame/character/Gender.scala new file mode 100644 index 0000000..c3d3151 --- /dev/null +++ b/src/main/scala/GuessWhoGame/character/Gender.scala @@ -0,0 +1,6 @@ +package GuessWhoGame.character + +object Gender extends Enumeration { + type Gender = Value + val Male, Female = Value +} \ No newline at end of file diff --git a/src/main/scala/GuessWhoGame/character/HairColor.scala b/src/main/scala/GuessWhoGame/character/HairColor.scala new file mode 100644 index 0000000..bf712ae --- /dev/null +++ b/src/main/scala/GuessWhoGame/character/HairColor.scala @@ -0,0 +1,6 @@ +package GuessWhoGame.character + +object HairColor extends Enumeration { + type HairColor = Value + val Blonde, Brown, Black, Red, Blue, Green, Purple, None = Value +} \ No newline at end of file diff --git a/src/main/scala/GuessWhoGame/character/PersonWithFacialHair.scala b/src/main/scala/GuessWhoGame/character/PersonWithFacialHair.scala new file mode 100644 index 0000000..3bc4f97 --- /dev/null +++ b/src/main/scala/GuessWhoGame/character/PersonWithFacialHair.scala @@ -0,0 +1,4 @@ +package GuessWhoGame.character + +case class PersonWithFacialHair(value: Boolean) { +} diff --git a/src/main/scala/GuessWhoGame/character/PersonWithGlasses.scala b/src/main/scala/GuessWhoGame/character/PersonWithGlasses.scala new file mode 100644 index 0000000..2e599c8 --- /dev/null +++ b/src/main/scala/GuessWhoGame/character/PersonWithGlasses.scala @@ -0,0 +1,5 @@ +package GuessWhoGame.character + +case class PersonWithGlasses(value: Boolean) { + +} diff --git a/src/main/scala/GuessWhoGame/runthroughTestingGround.sc b/src/main/scala/GuessWhoGame/runthroughTestingGround.sc deleted file mode 100644 index 0ba598d..0000000 --- a/src/main/scala/GuessWhoGame/runthroughTestingGround.sc +++ /dev/null @@ -1,40 +0,0 @@ -case class Character(val name: String, val gender: String, val hairColor: String, val eyeColor: String, val wearsGlasses: Boolean, val facialHair: Boolean) - -case class Board (Characters: List[Character]) { - def printCharacterNames(): Unit = { - Characters.foreach(Character => println(Character.name)) - } -} - -val char1: Character = Character("joe", "male", "brown", "blue", wearsGlasses = false, facialHair = false) -val char2: Character = Character("muhammad", "male", "black", "brown", wearsGlasses = true, facialHair = true) -val char3: Character = Character("april", "female", "blonde", "blue", wearsGlasses = true, facialHair = false) -val char4: Character = Character("sally", "female", "blue", "green", wearsGlasses = true, facialHair = true) -val char5: Character = Character("spencer", "male", "brown", "brown", wearsGlasses = false, facialHair = true) -val char6: Character = Character("gemma", "female", "ginger", "Blue", wearsGlasses = true, facialHair = false) -val char7: Character = Character("jamie", "male", "none", "green", wearsGlasses = true, facialHair = true) -val char8: Character = Character("jessica", "female", "green", "green", wearsGlasses = false, facialHair = false) -val char9: Character = Character("bilal", "male", "brown", "green", wearsGlasses = false, facialHair = true) -val char10: Character = Character("lisa", "female", "black", "brown", wearsGlasses = true, facialHair = false) -val char11: Character = Character("tom", "male", "brown", "blue", wearsGlasses = true, facialHair = false) -val char12: Character = Character("cheryl", "female", "blonde", "green", wearsGlasses = false, facialHair = false) -val char13: Character = Character("arei", "male", "brown", "brown", wearsGlasses = false, facialHair = true) -val char14: Character = Character("kelly", "female", "none", "green", wearsGlasses = false, facialHair = false) -val char15: Character = Character("tayamul", "male", "brown", "blue", wearsGlasses = false, facialHair = false) -val char16: Character = Character("elaine", "female", "ginger", "blue", wearsGlasses = false, facialHair = true) -val char17: Character = Character("roshan", "male", "brown", "blue", wearsGlasses = true, facialHair = false) -val char18: Character = Character("patricia", "female", "purple", "yellow", wearsGlasses = false, facialHair = false) -val char19: Character = Character("dave", "male", "none", "yellow", wearsGlasses = false, facialHair = false) -val char20: Character = Character("bobbiana", "female", "Brown", "Blue", wearsGlasses = true, facialHair = false) - -var gameBoard = Board(List(char1, char2, char3, char4, char5, char6, char7, char8, char9, char10, char11, char12, char13, char14, char15, char16, char17, char18, char19, char20)) - -gameBoard.printCharacterNames() - -//working so far - - - - - - diff --git a/src/main/scala/GuessWhoGame/target/scala-2.12/guesswhogame_2.12-0.1.0-SNAPSHOT.jar b/src/main/scala/GuessWhoGame/target/scala-2.12/guesswhogame_2.12-0.1.0-SNAPSHOT.jar new file mode 100644 index 0000000..d4beef4 Binary files /dev/null and b/src/main/scala/GuessWhoGame/target/scala-2.12/guesswhogame_2.12-0.1.0-SNAPSHOT.jar differ diff --git a/src/main/scala/GuessWhoGame/target/scala-2.12/sync/copy-resource b/src/main/scala/GuessWhoGame/target/scala-2.12/sync/copy-resource new file mode 100644 index 0000000..9d348e7 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/scala-2.12/sync/copy-resource @@ -0,0 +1 @@ +[[{},{}],{}] \ No newline at end of file diff --git a/src/main/scala/GuessWhoGame/target/scala-2.12/update/update_cache_2.12/inputs b/src/main/scala/GuessWhoGame/target/scala-2.12/update/update_cache_2.12/inputs new file mode 100644 index 0000000..fe70f54 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/scala-2.12/update/update_cache_2.12/inputs @@ -0,0 +1 @@ +-1698824257 \ No newline at end of file diff --git a/src/main/scala/GuessWhoGame/target/scala-2.12/update/update_cache_2.12/output b/src/main/scala/GuessWhoGame/target/scala-2.12/update/update_cache_2.12/output new file mode 100644 index 0000000..1036b57 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/scala-2.12/update/update_cache_2.12/output @@ -0,0 +1 @@ +{"cachedDescriptor":".","configurations":[{"configuration":{"name":"compile"},"modules":[{"module":{"organization":"org.scala-lang","name":"scala-library","revision":"2.12.19","configurations":"default","isChanging":false,"isTransitive":true,"isForce":false,"explicitArtifacts":[],"inclusions":[],"exclusions":[],"extraAttributes":{"info.apiURL":"https://www.scala-lang.org/api/2.12.19/"},"crossVersion":{"type":"Disabled"}},"artifacts":[[{"name":"scala-library","type":"jar","extension":"jar","configurations":[],"extraAttributes":{},"allowInsecureProtocol":false},"file:///Users/joe.higgs/.sbt/boot/scala-2.12.19/lib/scala-library.jar"]],"missingArtifacts":[],"evicted":false,"homepage":"https://www.scala-lang.org/","extraAttributes":{"info.apiURL":"https://www.scala-lang.org/api/2.12.19/"},"configurations":[{"name":"test"},{"name":"optional"},{"name":"compile"},{"name":"default"},{"name":"runtime"}],"licenses":[["Apache-2.0","https://www.apache.org/licenses/LICENSE-2.0"]],"callers":[]}],"details":[]},{"configuration":{"name":"compile-internal"},"modules":[{"module":{"organization":"org.scala-lang","name":"scala-library","revision":"2.12.19","configurations":"default","isChanging":false,"isTransitive":true,"isForce":false,"explicitArtifacts":[],"inclusions":[],"exclusions":[],"extraAttributes":{"info.apiURL":"https://www.scala-lang.org/api/2.12.19/"},"crossVersion":{"type":"Disabled"}},"artifacts":[[{"name":"scala-library","type":"jar","extension":"jar","configurations":[],"extraAttributes":{},"allowInsecureProtocol":false},"file:///Users/joe.higgs/.sbt/boot/scala-2.12.19/lib/scala-library.jar"]],"missingArtifacts":[],"evicted":false,"homepage":"https://www.scala-lang.org/","extraAttributes":{"info.apiURL":"https://www.scala-lang.org/api/2.12.19/"},"configurations":[{"name":"test"},{"name":"optional"},{"name":"compile"},{"name":"default"},{"name":"runtime"}],"licenses":[["Apache-2.0","https://www.apache.org/licenses/LICENSE-2.0"]],"callers":[]}],"details":[]},{"configuration":{"name":"docs"},"modules":[],"details":[]},{"configuration":{"name":"optional"},"modules":[],"details":[]},{"configuration":{"name":"plugin"},"modules":[],"details":[]},{"configuration":{"name":"pom"},"modules":[],"details":[]},{"configuration":{"name":"provided"},"modules":[],"details":[]},{"configuration":{"name":"runtime"},"modules":[{"module":{"organization":"org.scala-lang","name":"scala-library","revision":"2.12.19","configurations":"default","isChanging":false,"isTransitive":true,"isForce":false,"explicitArtifacts":[],"inclusions":[],"exclusions":[],"extraAttributes":{"info.apiURL":"https://www.scala-lang.org/api/2.12.19/"},"crossVersion":{"type":"Disabled"}},"artifacts":[[{"name":"scala-library","type":"jar","extension":"jar","configurations":[],"extraAttributes":{},"allowInsecureProtocol":false},"file:///Users/joe.higgs/.sbt/boot/scala-2.12.19/lib/scala-library.jar"]],"missingArtifacts":[],"evicted":false,"homepage":"https://www.scala-lang.org/","extraAttributes":{"info.apiURL":"https://www.scala-lang.org/api/2.12.19/"},"configurations":[{"name":"test"},{"name":"optional"},{"name":"compile"},{"name":"default"},{"name":"runtime"}],"licenses":[["Apache-2.0","https://www.apache.org/licenses/LICENSE-2.0"]],"callers":[]}],"details":[]},{"configuration":{"name":"runtime-internal"},"modules":[{"module":{"organization":"org.scala-lang","name":"scala-library","revision":"2.12.19","configurations":"default","isChanging":false,"isTransitive":true,"isForce":false,"explicitArtifacts":[],"inclusions":[],"exclusions":[],"extraAttributes":{"info.apiURL":"https://www.scala-lang.org/api/2.12.19/"},"crossVersion":{"type":"Disabled"}},"artifacts":[[{"name":"scala-library","type":"jar","extension":"jar","configurations":[],"extraAttributes":{},"allowInsecureProtocol":false},"file:///Users/joe.higgs/.sbt/boot/scala-2.12.19/lib/scala-library.jar"]],"missingArtifacts":[],"evicted":false,"homepage":"https://www.scala-lang.org/","extraAttributes":{"info.apiURL":"https://www.scala-lang.org/api/2.12.19/"},"configurations":[{"name":"test"},{"name":"optional"},{"name":"compile"},{"name":"default"},{"name":"runtime"}],"licenses":[["Apache-2.0","https://www.apache.org/licenses/LICENSE-2.0"]],"callers":[]}],"details":[]},{"configuration":{"name":"scala-doc-tool"},"modules":[],"details":[]},{"configuration":{"name":"scala-tool"},"modules":[{"module":{"organization":"org.scala-lang","name":"scala-compiler","revision":"2.12.19","configurations":"default","isChanging":false,"isTransitive":true,"isForce":false,"explicitArtifacts":[],"inclusions":[],"exclusions":[],"extraAttributes":{},"crossVersion":{"type":"Disabled"}},"artifacts":[[{"name":"scala-compiler","type":"jar","extension":"jar","configurations":[],"extraAttributes":{},"allowInsecureProtocol":false},"file:///Users/joe.higgs/.sbt/boot/scala-2.12.19/lib/scala-compiler.jar"]],"missingArtifacts":[],"evicted":false,"homepage":"https://www.scala-lang.org/","extraAttributes":{},"configurations":[{"name":"test"},{"name":"optional"},{"name":"compile"},{"name":"default"},{"name":"runtime"}],"licenses":[["Apache-2.0","https://www.apache.org/licenses/LICENSE-2.0"]],"callers":[]},{"module":{"organization":"org.scala-lang","name":"scala-compiler","revision":"2.12.19","configurations":"optional","isChanging":false,"isTransitive":true,"isForce":false,"explicitArtifacts":[],"inclusions":[],"exclusions":[],"extraAttributes":{},"crossVersion":{"type":"Disabled"}},"artifacts":[[{"name":"scala-compiler","type":"jar","extension":"jar","configurations":[],"extraAttributes":{},"allowInsecureProtocol":false},"file:///Users/joe.higgs/.sbt/boot/scala-2.12.19/lib/scala-compiler.jar"]],"missingArtifacts":[],"evicted":false,"homepage":"https://www.scala-lang.org/","extraAttributes":{},"configurations":[{"name":"test"},{"name":"optional"},{"name":"compile"},{"name":"default"},{"name":"runtime"}],"licenses":[["Apache-2.0","https://www.apache.org/licenses/LICENSE-2.0"]],"callers":[]},{"module":{"organization":"org.scala-lang","name":"scala-library","revision":"2.12.19","configurations":"default","isChanging":false,"isTransitive":true,"isForce":false,"explicitArtifacts":[],"inclusions":[],"exclusions":[],"extraAttributes":{"info.apiURL":"https://www.scala-lang.org/api/2.12.19/"},"crossVersion":{"type":"Disabled"}},"artifacts":[[{"name":"scala-library","type":"jar","extension":"jar","configurations":[],"extraAttributes":{},"allowInsecureProtocol":false},"file:///Users/joe.higgs/.sbt/boot/scala-2.12.19/lib/scala-library.jar"]],"missingArtifacts":[],"evicted":false,"homepage":"https://www.scala-lang.org/","extraAttributes":{"info.apiURL":"https://www.scala-lang.org/api/2.12.19/"},"configurations":[{"name":"test"},{"name":"optional"},{"name":"compile"},{"name":"default"},{"name":"runtime"}],"licenses":[["Apache-2.0","https://www.apache.org/licenses/LICENSE-2.0"]],"callers":[]},{"module":{"organization":"org.scala-lang","name":"scala-library","revision":"2.12.19","configurations":"optional","isChanging":false,"isTransitive":true,"isForce":false,"explicitArtifacts":[],"inclusions":[],"exclusions":[],"extraAttributes":{"info.apiURL":"https://www.scala-lang.org/api/2.12.19/"},"crossVersion":{"type":"Disabled"}},"artifacts":[[{"name":"scala-library","type":"jar","extension":"jar","configurations":[],"extraAttributes":{},"allowInsecureProtocol":false},"file:///Users/joe.higgs/.sbt/boot/scala-2.12.19/lib/scala-library.jar"]],"missingArtifacts":[],"evicted":false,"homepage":"https://www.scala-lang.org/","extraAttributes":{"info.apiURL":"https://www.scala-lang.org/api/2.12.19/"},"configurations":[{"name":"test"},{"name":"optional"},{"name":"compile"},{"name":"default"},{"name":"runtime"}],"licenses":[["Apache-2.0","https://www.apache.org/licenses/LICENSE-2.0"]],"callers":[]},{"module":{"organization":"org.scala-lang","name":"scala-reflect","revision":"2.12.19","configurations":"default","isChanging":false,"isTransitive":true,"isForce":false,"explicitArtifacts":[],"inclusions":[],"exclusions":[],"extraAttributes":{"info.apiURL":"https://www.scala-lang.org/api/2.12.19/"},"crossVersion":{"type":"Disabled"}},"artifacts":[[{"name":"scala-reflect","type":"jar","extension":"jar","configurations":[],"extraAttributes":{},"allowInsecureProtocol":false},"file:///Users/joe.higgs/.sbt/boot/scala-2.12.19/lib/scala-reflect.jar"]],"missingArtifacts":[],"evicted":false,"homepage":"https://www.scala-lang.org/","extraAttributes":{"info.apiURL":"https://www.scala-lang.org/api/2.12.19/"},"configurations":[{"name":"test"},{"name":"optional"},{"name":"compile"},{"name":"default"},{"name":"runtime"}],"licenses":[["Apache-2.0","https://www.apache.org/licenses/LICENSE-2.0"]],"callers":[]},{"module":{"organization":"org.scala-lang.modules","name":"scala-xml_2.12","revision":"2.2.0","configurations":"default","isChanging":false,"isTransitive":true,"isForce":false,"explicitArtifacts":[],"inclusions":[],"exclusions":[{"organization":"org.scala-lang","name":"*","artifact":"*","configurations":[],"crossVersion":{"type":"Disabled"}}],"extraAttributes":{"info.apiURL":"https://javadoc.io/doc/org.scala-lang.modules/scala-xml_2.13/","info.versionScheme":"early-semver"},"crossVersion":{"type":"Disabled"}},"artifacts":[[{"name":"scala-xml_2.12","type":"bundle","extension":"jar","configurations":[],"url":"https://repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.12/2.2.0/scala-xml_2.12-2.2.0.jar","extraAttributes":{"info.apiURL":"https://javadoc.io/doc/org.scala-lang.modules/scala-xml_2.13/","info.versionScheme":"early-semver"},"allowInsecureProtocol":false},"file:///Users/joe.higgs/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.12/2.2.0/scala-xml_2.12-2.2.0.jar"]],"missingArtifacts":[],"evicted":false,"homepage":"http://www.scala-lang.org/","extraAttributes":{"info.apiURL":"https://javadoc.io/doc/org.scala-lang.modules/scala-xml_2.13/","info.versionScheme":"early-semver"},"configurations":[{"name":"test"},{"name":"optional"},{"name":"compile"},{"name":"default"},{"name":"runtime"}],"licenses":[["Apache-2.0","https://www.apache.org/licenses/LICENSE-2.0"]],"callers":[]},{"module":{"organization":"jline","name":"jline","revision":"2.14.6","configurations":"default","isChanging":false,"isTransitive":true,"isForce":false,"explicitArtifacts":[],"inclusions":[],"exclusions":[],"extraAttributes":{},"crossVersion":{"type":"Disabled"}},"artifacts":[[{"name":"jline","type":"jar","extension":"jar","configurations":[],"url":"https://repo1.maven.org/maven2/jline/jline/2.14.6/jline-2.14.6.jar","extraAttributes":{},"allowInsecureProtocol":false},"file:///Users/joe.higgs/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/jline/jline/2.14.6/jline-2.14.6.jar"]],"missingArtifacts":[],"evicted":false,"extraAttributes":{},"configurations":[{"name":"test"},{"name":"optional"},{"name":"compile"},{"name":"default"},{"name":"runtime"}],"licenses":[["The BSD License","http://www.opensource.org/licenses/bsd-license.php"]],"callers":[]}],"details":[]},{"configuration":{"name":"sources"},"modules":[],"details":[]},{"configuration":{"name":"test"},"modules":[{"module":{"organization":"org.scala-lang","name":"scala-library","revision":"2.12.19","configurations":"default","isChanging":false,"isTransitive":true,"isForce":false,"explicitArtifacts":[],"inclusions":[],"exclusions":[],"extraAttributes":{"info.apiURL":"https://www.scala-lang.org/api/2.12.19/"},"crossVersion":{"type":"Disabled"}},"artifacts":[[{"name":"scala-library","type":"jar","extension":"jar","configurations":[],"extraAttributes":{},"allowInsecureProtocol":false},"file:///Users/joe.higgs/.sbt/boot/scala-2.12.19/lib/scala-library.jar"]],"missingArtifacts":[],"evicted":false,"homepage":"https://www.scala-lang.org/","extraAttributes":{"info.apiURL":"https://www.scala-lang.org/api/2.12.19/"},"configurations":[{"name":"test"},{"name":"optional"},{"name":"compile"},{"name":"default"},{"name":"runtime"}],"licenses":[["Apache-2.0","https://www.apache.org/licenses/LICENSE-2.0"]],"callers":[]}],"details":[]},{"configuration":{"name":"test-internal"},"modules":[{"module":{"organization":"org.scala-lang","name":"scala-library","revision":"2.12.19","configurations":"default","isChanging":false,"isTransitive":true,"isForce":false,"explicitArtifacts":[],"inclusions":[],"exclusions":[],"extraAttributes":{"info.apiURL":"https://www.scala-lang.org/api/2.12.19/"},"crossVersion":{"type":"Disabled"}},"artifacts":[[{"name":"scala-library","type":"jar","extension":"jar","configurations":[],"extraAttributes":{},"allowInsecureProtocol":false},"file:///Users/joe.higgs/.sbt/boot/scala-2.12.19/lib/scala-library.jar"]],"missingArtifacts":[],"evicted":false,"homepage":"https://www.scala-lang.org/","extraAttributes":{"info.apiURL":"https://www.scala-lang.org/api/2.12.19/"},"configurations":[{"name":"test"},{"name":"optional"},{"name":"compile"},{"name":"default"},{"name":"runtime"}],"licenses":[["Apache-2.0","https://www.apache.org/licenses/LICENSE-2.0"]],"callers":[]}],"details":[]}],"stats":{"resolveTime":-1,"downloadTime":-1,"downloadSize":-1,"cached":true},"stamps":{}} \ No newline at end of file diff --git a/src/main/scala/GuessWhoGame/target/scala-2.12/zinc/inc_compile_2.12.zip b/src/main/scala/GuessWhoGame/target/scala-2.12/zinc/inc_compile_2.12.zip new file mode 100644 index 0000000..a71f1c3 Binary files /dev/null and b/src/main/scala/GuessWhoGame/target/scala-2.12/zinc/inc_compile_2.12.zip differ diff --git a/src/test/TestPlan2.sc b/src/main/scala/GuessWhoGame/target/streams/_global/_global/_global/streams/out similarity index 100% rename from src/test/TestPlan2.sc rename to src/main/scala/GuessWhoGame/target/streams/_global/_global/_global/streams/out diff --git a/src/main/scala/GuessWhoGame/target/streams/_global/csrConfiguration/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/_global/csrConfiguration/_global/streams/out new file mode 100644 index 0000000..e69de29 diff --git a/src/main/scala/GuessWhoGame/target/streams/_global/csrProject/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/_global/csrProject/_global/streams/out new file mode 100644 index 0000000..e69de29 diff --git a/src/main/scala/GuessWhoGame/target/streams/_global/dependencyPositions/_global/streams/update_cache_2.12/input_dsp b/src/main/scala/GuessWhoGame/target/streams/_global/dependencyPositions/_global/streams/update_cache_2.12/input_dsp new file mode 100644 index 0000000..f8519e7 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/_global/dependencyPositions/_global/streams/update_cache_2.12/input_dsp @@ -0,0 +1 @@ +-957851064 \ No newline at end of file diff --git a/src/main/scala/GuessWhoGame/target/streams/_global/dependencyPositions/_global/streams/update_cache_2.12/output_dsp b/src/main/scala/GuessWhoGame/target/streams/_global/dependencyPositions/_global/streams/update_cache_2.12/output_dsp new file mode 100644 index 0000000..a67b9cd --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/_global/dependencyPositions/_global/streams/update_cache_2.12/output_dsp @@ -0,0 +1 @@ +{"{\"organization\":\"org.scala-lang\",\"name\":\"scala-library\",\"revision\":\"2.12.19\",\"isChanging\":false,\"isTransitive\":true,\"isForce\":false,\"explicitArtifacts\":[],\"inclusions\":[],\"exclusions\":[],\"extraAttributes\":{},\"crossVersion\":{\"type\":\"Disabled\"}}":{"value":{"$fields":["path","startLine"],"path":"(sbt.Classpaths.jvmBaseSettings) Defaults.scala","startLine":3407},"type":"LinePosition"}} \ No newline at end of file diff --git a/src/main/scala/GuessWhoGame/target/streams/_global/ivyConfiguration/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/_global/ivyConfiguration/_global/streams/out new file mode 100644 index 0000000..e69de29 diff --git a/src/main/scala/GuessWhoGame/target/streams/_global/ivySbt/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/_global/ivySbt/_global/streams/out new file mode 100644 index 0000000..e69de29 diff --git a/src/main/scala/GuessWhoGame/target/streams/_global/moduleSettings/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/_global/moduleSettings/_global/streams/out new file mode 100644 index 0000000..e69de29 diff --git a/src/main/scala/GuessWhoGame/target/streams/_global/projectDescriptors/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/_global/projectDescriptors/_global/streams/out new file mode 100644 index 0000000..e69de29 diff --git a/src/main/scala/GuessWhoGame/target/streams/_global/scalaCompilerBridgeScope/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/_global/scalaCompilerBridgeScope/_global/streams/out new file mode 100644 index 0000000..e69de29 diff --git a/src/main/scala/GuessWhoGame/target/streams/_global/update/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/_global/update/_global/streams/out new file mode 100644 index 0000000..58b0a88 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/_global/update/_global/streams/out @@ -0,0 +1,3 @@ +[debug] not up to date. inChanged = true, force = false +[debug] Updating ... +[debug] Done updating  diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/_global/_global/compileOutputs/previous b/src/main/scala/GuessWhoGame/target/streams/compile/_global/_global/compileOutputs/previous new file mode 100644 index 0000000..8629d42 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/compile/_global/_global/compileOutputs/previous @@ -0,0 +1 @@ +["sbt.Task[scala.collection.Seq[java.nio.file.Path]]",["/Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/classes/GuessWhoGame/Character$.class","/Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/classes/GuessWhoGame/Board.class","/Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/classes/GuessWhoGame/Game$delayedInit$body.class","/Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/classes/GuessWhoGame/Game$.class","/Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/classes/GuessWhoGame/Board$.class","/Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/classes/GuessWhoGame/Game.class","/Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/classes/GuessWhoGame/Character.class","/Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/zinc/inc_compile_2.12.zip"]] \ No newline at end of file diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/_global/_global/discoveredMainClasses/data b/src/main/scala/GuessWhoGame/target/streams/compile/_global/_global/discoveredMainClasses/data new file mode 100644 index 0000000..50b9cf4 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/compile/_global/_global/discoveredMainClasses/data @@ -0,0 +1 @@ +["GuessWhoGame.Game"] \ No newline at end of file diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/bspReporter/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/compile/bspReporter/_global/streams/out new file mode 100644 index 0000000..e69de29 diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/compile/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/compile/compile/_global/streams/out new file mode 100644 index 0000000..e69de29 diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/compileIncremental/_global/streams/export b/src/main/scala/GuessWhoGame/target/streams/compile/compileIncremental/_global/streams/export new file mode 100644 index 0000000..e69de29 diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/compileIncremental/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/compile/compileIncremental/_global/streams/out new file mode 100644 index 0000000..1b20dc1 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/compile/compileIncremental/_global/streams/out @@ -0,0 +1,6 @@ +[debug] [zinc] IncrementalCompile ----------- +[debug] IncrementalCompile.incrementalCompile +[debug] previous = Stamps for: 7 products, 3 sources, 1 libraries +[debug] current source = Set(${BASE}/Board.scala, ${BASE}/Game.scala, ${BASE}/Character.scala) +[debug] > initialChanges = InitialChanges(Changes(added = Set(), removed = Set(), changed = Set(), unmodified = ...),Set(),Set(),API Changes: Set()) +[debug] No changes diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/copyResources/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/compile/copyResources/_global/streams/out new file mode 100644 index 0000000..f25042f --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/compile/copyResources/_global/streams/out @@ -0,0 +1,2 @@ +[debug] Copy resource mappings:  +[debug]   diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/dependencyClasspath/_global/streams/export b/src/main/scala/GuessWhoGame/target/streams/compile/dependencyClasspath/_global/streams/export new file mode 100644 index 0000000..d8fd838 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/compile/dependencyClasspath/_global/streams/export @@ -0,0 +1 @@ +/Users/joe.higgs/.sbt/boot/scala-2.12.19/lib/scala-library.jar diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/exportedProductJars/_global/streams/export b/src/main/scala/GuessWhoGame/target/streams/compile/exportedProductJars/_global/streams/export new file mode 100644 index 0000000..fa0e545 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/compile/exportedProductJars/_global/streams/export @@ -0,0 +1 @@ +/Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/guesswhogame_2.12-0.1.0-SNAPSHOT.jar diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/exportedProducts/_global/streams/export b/src/main/scala/GuessWhoGame/target/streams/compile/exportedProducts/_global/streams/export new file mode 100644 index 0000000..bcbd58e --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/compile/exportedProducts/_global/streams/export @@ -0,0 +1 @@ +/Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/classes diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/externalDependencyClasspath/_global/streams/export b/src/main/scala/GuessWhoGame/target/streams/compile/externalDependencyClasspath/_global/streams/export new file mode 100644 index 0000000..d8fd838 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/compile/externalDependencyClasspath/_global/streams/export @@ -0,0 +1 @@ +/Users/joe.higgs/.sbt/boot/scala-2.12.19/lib/scala-library.jar diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/incOptions/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/compile/incOptions/_global/streams/out new file mode 100644 index 0000000..6b902b1 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/compile/incOptions/_global/streams/out @@ -0,0 +1,2 @@ +[debug] Created transactional ClassFileManager with tempDir = /Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/classes.bak +[debug] Removing the temporary directory used for backing up class files: /Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/classes.bak diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/internalDependencyClasspath/_global/streams/export b/src/main/scala/GuessWhoGame/target/streams/compile/internalDependencyClasspath/_global/streams/export new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/compile/internalDependencyClasspath/_global/streams/export @@ -0,0 +1 @@ + diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/internalDependencyClasspath/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/compile/internalDependencyClasspath/_global/streams/out new file mode 100644 index 0000000..e69de29 diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/mainClass/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/compile/mainClass/_global/streams/out new file mode 100644 index 0000000..e69de29 diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/managedClasspath/_global/streams/export b/src/main/scala/GuessWhoGame/target/streams/compile/managedClasspath/_global/streams/export new file mode 100644 index 0000000..d8fd838 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/compile/managedClasspath/_global/streams/export @@ -0,0 +1 @@ +/Users/joe.higgs/.sbt/boot/scala-2.12.19/lib/scala-library.jar diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/packageBin/_global/streams/inputs b/src/main/scala/GuessWhoGame/target/streams/compile/packageBin/_global/streams/inputs new file mode 100644 index 0000000..c04dfaa --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/compile/packageBin/_global/streams/inputs @@ -0,0 +1 @@ +268969852 \ No newline at end of file diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/packageBin/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/compile/packageBin/_global/streams/out new file mode 100644 index 0000000..669808e --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/compile/packageBin/_global/streams/out @@ -0,0 +1,19 @@ +[debug] Packaging /Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/guesswhogame_2.12-0.1.0-SNAPSHOT.jar ... +[debug] Input file mappings: +[debug]  GuessWhoGame +[debug]  /Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/classes/GuessWhoGame +[debug]  GuessWhoGame/Board.class +[debug]  /Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/classes/GuessWhoGame/Board.class +[debug]  GuessWhoGame/Game.class +[debug]  /Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/classes/GuessWhoGame/Game.class +[debug]  GuessWhoGame/Character.class +[debug]  /Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/classes/GuessWhoGame/Character.class +[debug]  GuessWhoGame/Game$.class +[debug]  /Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/classes/GuessWhoGame/Game$.class +[debug]  GuessWhoGame/Character$.class +[debug]  /Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/classes/GuessWhoGame/Character$.class +[debug]  GuessWhoGame/Game$delayedInit$body.class +[debug]  /Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/classes/GuessWhoGame/Game$delayedInit$body.class +[debug]  GuessWhoGame/Board$.class +[debug]  /Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/classes/GuessWhoGame/Board$.class +[debug] Done packaging. diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/packageBin/_global/streams/output b/src/main/scala/GuessWhoGame/target/streams/compile/packageBin/_global/streams/output new file mode 100644 index 0000000..a9628db --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/compile/packageBin/_global/streams/output @@ -0,0 +1 @@ +-1552160931 \ No newline at end of file diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/scalacOptions/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/compile/scalacOptions/_global/streams/out new file mode 100644 index 0000000..e69de29 diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/unmanagedClasspath/_global/streams/export b/src/main/scala/GuessWhoGame/target/streams/compile/unmanagedClasspath/_global/streams/export new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/compile/unmanagedClasspath/_global/streams/export @@ -0,0 +1 @@ + diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/unmanagedClasspath/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/compile/unmanagedClasspath/_global/streams/out new file mode 100644 index 0000000..e69de29 diff --git a/src/main/scala/GuessWhoGame/target/streams/compile/unmanagedJars/_global/streams/export b/src/main/scala/GuessWhoGame/target/streams/compile/unmanagedJars/_global/streams/export new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/compile/unmanagedJars/_global/streams/export @@ -0,0 +1 @@ + diff --git a/src/main/scala/GuessWhoGame/target/streams/runtime/dependencyClasspathAsJars/_global/streams/export b/src/main/scala/GuessWhoGame/target/streams/runtime/dependencyClasspathAsJars/_global/streams/export new file mode 100644 index 0000000..400fb70 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/runtime/dependencyClasspathAsJars/_global/streams/export @@ -0,0 +1 @@ +/Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/guesswhogame_2.12-0.1.0-SNAPSHOT.jar:/Users/joe.higgs/.sbt/boot/scala-2.12.19/lib/scala-library.jar diff --git a/src/main/scala/GuessWhoGame/target/streams/runtime/exportedProductJars/_global/streams/export b/src/main/scala/GuessWhoGame/target/streams/runtime/exportedProductJars/_global/streams/export new file mode 100644 index 0000000..fa0e545 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/runtime/exportedProductJars/_global/streams/export @@ -0,0 +1 @@ +/Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/guesswhogame_2.12-0.1.0-SNAPSHOT.jar diff --git a/src/main/scala/GuessWhoGame/target/streams/runtime/externalDependencyClasspath/_global/streams/export b/src/main/scala/GuessWhoGame/target/streams/runtime/externalDependencyClasspath/_global/streams/export new file mode 100644 index 0000000..d8fd838 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/runtime/externalDependencyClasspath/_global/streams/export @@ -0,0 +1 @@ +/Users/joe.higgs/.sbt/boot/scala-2.12.19/lib/scala-library.jar diff --git a/src/main/scala/GuessWhoGame/target/streams/runtime/fullClasspathAsJars/_global/streams/export b/src/main/scala/GuessWhoGame/target/streams/runtime/fullClasspathAsJars/_global/streams/export new file mode 100644 index 0000000..400fb70 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/runtime/fullClasspathAsJars/_global/streams/export @@ -0,0 +1 @@ +/Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/guesswhogame_2.12-0.1.0-SNAPSHOT.jar:/Users/joe.higgs/.sbt/boot/scala-2.12.19/lib/scala-library.jar diff --git a/src/main/scala/GuessWhoGame/target/streams/runtime/internalDependencyAsJars/_global/streams/export b/src/main/scala/GuessWhoGame/target/streams/runtime/internalDependencyAsJars/_global/streams/export new file mode 100644 index 0000000..fa0e545 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/runtime/internalDependencyAsJars/_global/streams/export @@ -0,0 +1 @@ +/Users/joe.higgs/Documents/Training/GuessWho/src/main/scala/GuessWhoGame/target/scala-2.12/guesswhogame_2.12-0.1.0-SNAPSHOT.jar diff --git a/src/main/scala/GuessWhoGame/target/streams/runtime/internalDependencyAsJars/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/runtime/internalDependencyAsJars/_global/streams/out new file mode 100644 index 0000000..e69de29 diff --git a/src/main/scala/GuessWhoGame/target/streams/runtime/managedClasspath/_global/streams/export b/src/main/scala/GuessWhoGame/target/streams/runtime/managedClasspath/_global/streams/export new file mode 100644 index 0000000..d8fd838 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/runtime/managedClasspath/_global/streams/export @@ -0,0 +1 @@ +/Users/joe.higgs/.sbt/boot/scala-2.12.19/lib/scala-library.jar diff --git a/src/main/scala/GuessWhoGame/target/streams/runtime/unmanagedClasspath/_global/streams/export b/src/main/scala/GuessWhoGame/target/streams/runtime/unmanagedClasspath/_global/streams/export new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/runtime/unmanagedClasspath/_global/streams/export @@ -0,0 +1 @@ + diff --git a/src/main/scala/GuessWhoGame/target/streams/runtime/unmanagedClasspath/_global/streams/out b/src/main/scala/GuessWhoGame/target/streams/runtime/unmanagedClasspath/_global/streams/out new file mode 100644 index 0000000..e69de29 diff --git a/src/main/scala/GuessWhoGame/target/streams/runtime/unmanagedJars/_global/streams/export b/src/main/scala/GuessWhoGame/target/streams/runtime/unmanagedJars/_global/streams/export new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/main/scala/GuessWhoGame/target/streams/runtime/unmanagedJars/_global/streams/export @@ -0,0 +1 @@ + diff --git a/src/test/TestPlan.sc b/src/test/TestPlan.sc deleted file mode 100644 index 5f98de1..0000000 --- a/src/test/TestPlan.sc +++ /dev/null @@ -1,102 +0,0 @@ -//Examples from earlier: -// -//import org.scalatest.wordspec.AnyWordSpec -// -//class TaxCalculatorSpec extends AnyWordSpec { -// -// val taxCalculator: TaxCalculator = new TaxCalculator -// -// // I've done the first test for you! -// "TaxCalculator.calculateTax" should { -// "return the total amount of tax to pay" when { -// "the income is below the personal tax limit" in { -// val result: Double = taxCalculator.calculateTax(5000) -// -// assert(result == 0) -// } -// "the income is within the basic rate limit" in { -// val result: Double = taxCalculator.calculateTax(20000) -// -// assert(result == 2000) -// } -// "the income is within the higher rate limit" in { -// val result: Double = taxCalculator.calculateTax(60000) -// -// assert(result == 12000) -// } -// "the income is above the higher rate limit" in { -// val result: Double = taxCalculator.calculateTax(150000) -// -// assert(result == 51250) -// } -// } -// } -// -// //Second Test -// "TaxCalculator.isHigherRateTaxpayer" should { -// "return whether the payee is a higher rate tax payer" when { -// "the income is below the higher rate tax limit" in { -// val result: Boolean = taxCalculator.isHigherRateTaxpayer(25000) -// -// assert(!result) -// } -// "the income is above the higher rate tax limit" in { -// val result: Boolean = taxCalculator.isHigherRateTaxpayer(95000) -// -// assert(result) -// } -// } -// } -// -// //Third Test -// "TaxCalculator.calculateTax" should { -// "return a string with the income limit of the payee's current tax band" when { -// "the income is below 0" in { -// val result: String = taxCalculator.formattedCurrentTaxAllowance(-4) -// -// assert(result == "Invalid Input") -// } -// "the income is below the personal tax limit" in { -// val result: String = taxCalculator.formattedCurrentTaxAllowance(5000) -// -// assert(result == "£10,000") -// } -// "the income is within the basic rate limit" in { -// val result: String = taxCalculator.formattedCurrentTaxAllowance(20000) -// -// assert(result == "£50,000") -// } -// "the income is within the higher rate limit" in { -// val result: String = taxCalculator.formattedCurrentTaxAllowance(60000) -// -// assert(result == "£125,000") -// } -// "the income is above the higher rate limit" in { -// val result: String = taxCalculator.formattedCurrentTaxAllowance(150000) -// -// assert(result == "No Limit") -// } -// } -// } -// -// //Extension -// "TaxCalculator.calculateCapitalGainsTax" should { -// "return the total amount of capital gains tax to pay" when { -// "the gains are below the personal gains limit" in { -// val result: Double = taxCalculator.calculateCapitalGainsTax(2000) -// -// assert(result == 0) -// } -// "the gains are within the basic rate limit" in { -// val result: Double = taxCalculator.calculateCapitalGainsTax(30000) -// -// assert(result == 2700) -// } -// "the gains are above the basic rate limit" in { -// val result: Double = taxCalculator.calculateCapitalGainsTax(60000) -// -// assert(result == 11400) -// } -// } -// } -//} \ No newline at end of file diff --git a/src/test/scala/GuessWhoGameSpec/BoardSpec.scala b/src/test/scala/GuessWhoGameSpec/BoardSpec.scala new file mode 100644 index 0000000..2ce86d0 --- /dev/null +++ b/src/test/scala/GuessWhoGameSpec/BoardSpec.scala @@ -0,0 +1,159 @@ +package GuessWhoGameSpec + +import GuessWhoGame._ +import GuessWhoGame.character.{CharacterManager, Character, EyeColor, Gender, HairColor, PersonWithFacialHair, PersonWithGlasses} +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should.Matchers._ + +class BoardSpec extends AnyFlatSpec { + + // Sample characters for testing + val characters: List[Character] = CharacterManager.createCharacters() + + // Initializes the board with the provided characters + "Board" should "initialize with the provided characters" in { + val gameBoard = new Board(characters) + gameBoard.getRemainingCharacters shouldEqual characters + } + + // Selects a character + it should "select a random character at the start of the game and keep this character in the list" in { + val gameBoard = new Board(characters) + characters should contain(gameBoard.getSelectedCharacter) + } + + // Checks the win condition + it should "check win condition correctly" in { + val gameBoard = new Board(characters) + if (characters.size <= 1) { + assert(gameBoard.checkWinCondition()) + } else { + assert(!gameBoard.checkWinCondition()) + } + } + + // Handles questions and eliminates characters based on attributes + it should "eliminate characters correctly based on gender questions" in { + val gameBoard = new Board(characters) + val initialSize = gameBoard.getRemainingCharacters.size + gameBoard.handleQuestion("gender", Left("male")) + val newSize = gameBoard.getRemainingCharacters.size + newSize should be < initialSize + } + + it should "eliminate characters correctly based on name questions" in { + val gameBoard = new Board(characters) + val initialSize = gameBoard.getRemainingCharacters.size + gameBoard.handleQuestion("name", Left("muhammad")) + val newSize = gameBoard.getRemainingCharacters.size + newSize should be < initialSize + } + + it should "eliminate characters correctly based on hair color questions" in { + val gameBoard = new Board(characters) + val initialSize = gameBoard.getRemainingCharacters.size + gameBoard.handleQuestion("hairColor", Left("blonde")) + val newSize = gameBoard.getRemainingCharacters.size + newSize should be < initialSize + } + + it should "eliminate characters correctly based on eye color questions" in { + val gameBoard = new Board(characters) + val initialSize = gameBoard.getRemainingCharacters.size + gameBoard.handleQuestion("eyeColor", Left("blue")) + val newSize = gameBoard.getRemainingCharacters.size + newSize should be < initialSize + } + + it should "eliminate characters correctly based on wears glasses questions" in { + val gameBoard = new Board(characters) + val initialSize = gameBoard.getRemainingCharacters.size + gameBoard.handleQuestion("wearsGlasses", Right(true)) + val newSize = gameBoard.getRemainingCharacters.size + newSize should be < initialSize + } + + it should "eliminate characters correctly based on facial hair questions" in { + val gameBoard = new Board(characters) + val initialSize = gameBoard.getRemainingCharacters.size + gameBoard.handleQuestion("hasFacialHair", Right(true)) + val newSize = gameBoard.getRemainingCharacters.size + newSize should be < initialSize + } + + // Handles incorrect attribute values cleanly + it should "handle incorrect attribute values cleanly" in { + val gameBoard = new Board(characters) + val initialSize = gameBoard.getRemainingCharacters.size + gameBoard.handleQuestion("gender", Left("nonexistent gender")) + val newSize = gameBoard.getRemainingCharacters.size + newSize shouldEqual initialSize + } + + // Handles edge case where all characters have the same attribute + it should "handle edge case where all characters have the same attribute" in { + val sameGenderCharacters = List( + Character("john", Gender.Male, HairColor.Brown, EyeColor.Blue, Some(PersonWithGlasses(false)), Some(PersonWithFacialHair(false))), + Character("paul", Gender.Male, HairColor.Black, EyeColor.Green, Some(PersonWithGlasses(true)), Some(PersonWithFacialHair(true))) + ) + val gameBoard = new Board(sameGenderCharacters) + gameBoard.handleQuestion("gender", Left("male")) + gameBoard.getRemainingCharacters.size shouldEqual 2 + } + + // Prints character names + it should "print character names" in { + val gameBoard = new Board(characters) + val characterNames = gameBoard.printCharacterNames() + characterNames.length should be(20) + characterNames should contain(characters.head.name) + } + + // Handles hair color question correctly + it should "handle hair color question correctly" in { + val gameBoard = new Board(characters) + val remainingCharacters = gameBoard.handleQuestion("hairColor", Left("brown")) + remainingCharacters shouldBe a[List[_]] + all(remainingCharacters.map(_.hairColor)) shouldEqual HairColor.Brown + } + + // Handles eye color question correctly + it should "handle eye color question correctly" in { + val gameBoard = new Board(characters) + val remainingCharacters = gameBoard.handleQuestion("eyeColor", Left("blue")) + remainingCharacters shouldBe a[List[_]] + all(remainingCharacters.map(_.eyeColor)) shouldEqual EyeColor.Blue + } + + // Handles gender question correctly + it should "handle gender question correctly" in { + val gameBoard = new Board(characters) + val remainingCharacters = gameBoard.handleQuestion("gender", Left("male")) + remainingCharacters shouldBe a[List[_]] + all(remainingCharacters.map(_.gender)) shouldEqual Gender.Male + } + + // Handles wears glasses question correctly + it should "handle wears glasses question correctly" in { + val gameBoard = new Board(characters) + val remainingCharacters = gameBoard.handleQuestion("wearsGlasses", Right(true)) + remainingCharacters shouldBe a[List[_]] + all(remainingCharacters.flatMap(_.wearsGlasses)) shouldEqual PersonWithGlasses(true) + } + + // Handles facial hair question correctly + it should "handle facial hair question correctly" in { + val gameBoard = new Board(characters) + val remainingCharacters = gameBoard.handleQuestion("hasFacialHair", Right(true)) + remainingCharacters shouldBe a[List[_]] + all(remainingCharacters.flatMap(_.facialHair)) shouldEqual PersonWithFacialHair(true) + } + + // Handles name guess correctly + it should "handle name guess correctly" in { + val selectedCharacter = characters.head + val gameBoard = new Board(characters, selectedCharacter) + val remainingCharacters = gameBoard.handleQuestion("name", Left(selectedCharacter.name.toLowerCase())) + gameBoard.checkWinCondition(remainingCharacters) should be(true) + } +} diff --git a/src/test/scala/GuessWhoGameSpec/CharacterManagerSpec.scala b/src/test/scala/GuessWhoGameSpec/CharacterManagerSpec.scala new file mode 100644 index 0000000..e750bf3 --- /dev/null +++ b/src/test/scala/GuessWhoGameSpec/CharacterManagerSpec.scala @@ -0,0 +1,50 @@ +package GuessWhoGameSpec + +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should.Matchers._ +import GuessWhoGame.character._ + +class CharacterManagerSpec extends AnyFlatSpec { + + "createCharacters" should "return a list of 20 characters" in { + val characters = CharacterManager.createCharacters() + characters should have size 20 + } + + "createCharacters" should "return characters with unique names" in { + val characters = CharacterManager.createCharacters() + val names = characters.map(_.name) + names.distinct shouldEqual names + } + + "createCharacters" should "return characters with correct attributes" in { + val characters = CharacterManager.createCharacters() + + characters.find(_.name == "Muhammad") shouldBe defined + characters.find(_.name == "Muhammad").get.gender shouldEqual Gender.Male + characters.find(_.name == "Muhammad").get.hairColor shouldEqual HairColor.Black + characters.find(_.name == "Muhammad").get.eyeColor shouldEqual EyeColor.Blue + characters.find(_.name == "Muhammad").get.wearsGlasses shouldEqual Some(PersonWithGlasses(true)) + characters.find(_.name == "Muhammad").get.facialHair shouldEqual Some(PersonWithFacialHair(true)) + } + + "selectRandomCharacter" should "return a character from the list" in { + val characters = CharacterManager.createCharacters() + val selectedCharacter = CharacterManager.selectRandomCharacter(characters) + characters should contain(selectedCharacter) + } + + "selectRandomCharacter" should "return a different character on multiple calls" in { + val characters = CharacterManager.createCharacters() + val selectedCharacter1 = CharacterManager.selectRandomCharacter(characters) + val selectedCharacter2 = CharacterManager.selectRandomCharacter(characters) + selectedCharacter1 should not equal selectedCharacter2 + } + + "selectRandomCharacter" should "throw an exception if the list is empty" in { + val emptyList = List.empty[Character] + assertThrows[NoSuchElementException] { + CharacterManager.selectRandomCharacter(emptyList) + } + } +} \ No newline at end of file diff --git a/src/test/scala/GuessWhoGameSpec/CharacterSpec.scala b/src/test/scala/GuessWhoGameSpec/CharacterSpec.scala index 4156ea4..0e4ad3f 100644 --- a/src/test/scala/GuessWhoGameSpec/CharacterSpec.scala +++ b/src/test/scala/GuessWhoGameSpec/CharacterSpec.scala @@ -1,8 +1,44 @@ -import org.scalatest.FlatSpec +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should.Matchers._ +import GuessWhoGame.character._ +import GuessWhoGame.Board -class CharacterSpec extends FlatSpec { - "GuessWhoGame.Character" should "initialise with 20 characters on the board" in { - val totalChars = Characters.size - assert(GuessWhoGame.gameBoard.size == 20) +class CharacterSpec extends AnyFlatSpec { + + // Test data for individual characters + val Joe = Character("Joe", Gender.Male, HairColor.Brown, EyeColor.Blue, None, None) + val Muhammad = Character("Muhammad", Gender.Male, HairColor.Black, EyeColor.Brown, Some(PersonWithGlasses(true)), Some(PersonWithFacialHair(true))) + val April = Character("April", Gender.Female, HairColor.Blonde, EyeColor.Blue, Some(PersonWithGlasses(true)), None) + val Sally = Character("Sally", Gender.Female, HairColor.Blue, EyeColor.Green, Some(PersonWithGlasses(true)), Some(PersonWithFacialHair(true))) + val Gemma = Character("Gemma", Gender.Female, HairColor.Red, EyeColor.Blue, Some(PersonWithGlasses(true)), None) + + "Board" should "initialise correctly with Joe" in { + val board = new Board(List(Joe), Joe) + board.characters should contain theSameElementsAs List(Joe) + board.selectedCharacter shouldBe Joe + } + + "Board" should "initialise correctly with Muhammad" in { + val board = new Board(List(Muhammad), Muhammad) + board.characters should contain theSameElementsAs List(Muhammad) + board.selectedCharacter shouldBe Muhammad + } + + "Board" should "initialise correctly with April" in { + val board = new Board(List(April), April) + board.characters should contain theSameElementsAs List(April) + board.selectedCharacter shouldBe April + } + + "Board" should "initialise correctly with Sally" in { + val board = new Board(List(Sally), Sally) + board.characters should contain theSameElementsAs List(Sally) + board.selectedCharacter shouldBe Sally + } + + "Board" should "initialise correctly with Gemma" in { + val board = new Board(List(Gemma), Gemma) + board.characters should contain theSameElementsAs List(Gemma) + board.selectedCharacter shouldBe Gemma } -} +} \ No newline at end of file diff --git a/src/test/scala/GuessWhoGameSpec/GameBoardSpec.scala b/src/test/scala/GuessWhoGameSpec/GameBoardSpec.scala deleted file mode 100644 index e612509..0000000 --- a/src/test/scala/GuessWhoGameSpec/GameBoardSpec.scala +++ /dev/null @@ -1,5 +0,0 @@ -package GuessWhoGameSpec - -class GameBoardSpec { - -} diff --git a/src/test/scala/GuessWhoGameSpec/GameLogicSpec.scala b/src/test/scala/GuessWhoGameSpec/GameLogicSpec.scala deleted file mode 100644 index ab2f50f..0000000 --- a/src/test/scala/GuessWhoGameSpec/GameLogicSpec.scala +++ /dev/null @@ -1,5 +0,0 @@ -package GuessWhoGameSpec - -class GameLogicSpec { - -} diff --git a/src/test/scala/GuessWhoGameSpec/GameSpec.scala b/src/test/scala/GuessWhoGameSpec/GameSpec.scala index e2e3897..95fda46 100644 --- a/src/test/scala/GuessWhoGameSpec/GameSpec.scala +++ b/src/test/scala/GuessWhoGameSpec/GameSpec.scala @@ -1,5 +1,43 @@ package GuessWhoGameSpec -object GameSpec { +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should.Matchers +import GuessWhoGame.character._ +import GuessWhoGame._ -} +class GameSpec extends AnyFlatSpec with Matchers { + + "A Character" should "have correct attributes" in { + val char = Character("Joe", Gender.Male, HairColor.Brown, EyeColor.Blue, None, None) + char.name should be("Joe") + char.gender should be(Gender.Male) + char.hairColor should be(HairColor.Brown) + char.eyeColor should be(EyeColor.Blue) + char.wearsGlasses shouldBe None + char.facialHair shouldBe None + } + + "CharacterManager" should "create a list of characters" in { + val characters = CharacterManager.createCharacters() + characters should have size 20 + } + + "CharacterManager" should "select a random character from the list" in { + val characters = CharacterManager.createCharacters() + val selectedCharacter = CharacterManager.selectRandomCharacter(characters) + characters should contain(selectedCharacter) + } + + "Game" should "create a game board" in { + val board = Game.createGameBoard() + board.characters should have size 20 + board.selectedCharacter should not be null + } + + "Game" should "start and play the game" in { + noException should be thrownBy { + val board = Game.createGameBoard() + Game.startGame(board) + } + } +} \ No newline at end of file diff --git a/src/test/scala/GuessWhoGameSpec/QuestionsSpec.scala b/src/test/scala/GuessWhoGameSpec/QuestionsSpec.scala deleted file mode 100644 index fb3bcee..0000000 --- a/src/test/scala/GuessWhoGameSpec/QuestionsSpec.scala +++ /dev/null @@ -1,45 +0,0 @@ -import org.scalatest.FlatSpec - -/** - //naming convention: same as file with spec at the end - class TwoNumbersSpec extends FlatSpec{ - "add" should "add numbers" in { //method name and expected functionality - val nums = new TwoNumbers(1,2) - assert(nums.add==3) //block of code that performs the test, assert is keyword (this and line above) - } //assert gives Boolean value, must evaluate 'true' for test to pass, - } //however sometimes we want it to fail. - */ - -class QuestionsSpec extends FlatSpec{ - -} - - - -//class Questions { -// def askQuestion(attribute: String, value: Either[String, Boolean]): Unit = { -// attribute match { -// case "name" => -// if (selectedCharacter.name == value) remainingCharacters.filter(_.name == value) // game end here! -// else remainingCharacters = remainingCharacters.filterNot(_.name == value) -// //trigger game end -// case "gender" => -// if (selectedCharacter.gender == value) remainingCharacters.filter(_.gender == value) -// else remainingCharacters = remainingCharacters.filterNot(_.gender == value) -// case "hairColor" => -// if (selectedCharacter.hairColor == value) remainingCharacters.filter(_.hairColor == value) -// else remainingCharacters = remainingCharacters.filterNot(_.hairColor == value) -// case "eyeColor" => -// if (selectedCharacter.eyeColor == value) remainingCharacters.filter(_.eyeColor == value) -// else remainingCharacters = remainingCharacters.filterNot(_.eyeColor == value) -// case "wearsGlasses" => -// if (selectedCharacter.wearsGlasses == value) remainingCharacters.filter(_.wearsGlasses == value) -// else remainingCharacters = remainingCharacters.filterNot(_.wearsGlasses == value) -// case "hasFacialHair" => -// if (selectedCharacter.hasFacialHair == value) remainingCharacters.filter(_.hasFacialHair == value) -// else remainingCharacters = remainingCharacters.filterNot(_.hasFacialHair == value) -// -// //need for an error case here?? -// } -// } -//}