Example #1
0
 def testFunction_checkCombination(self):
     sud = Validator(4, 8)
     #valid combination
     for startValueOfCombi in range(0, 5):
         combi = list(range(startValueOfCombi, startValueOfCombi + 4))
         #print(str(startValueOfCombi) +" "+ str(startValueOfCombi + 4) +" "+ str(combi) +" "+ str(len(combi)))
         sud.validateCombination(Colorcombination(combi))
Example #2
0
 def __init__(self, lengthOfGuess, numberOfColors, masterCombination,
              maxNumberOfAttempts):
     self.__gameIsRunning = False
     self.__validator = Validator(lengthOfGuess, numberOfColors)
     self.__masterCombination = masterCombination
     self.__validator.validateCombination(masterCombination)
     self.__evaluator = Evaluator(masterCombination)
     self.attempts = Attempts()
     self.__maxNumberOfAttempts = maxNumberOfAttempts
     self.__validator.validateMaxNumberOfAttempts(maxNumberOfAttempts)
     #self.player = HumanPlayer()
     #self.player = NPC_random(lengthOfGuess, numberOfColors, self.attempts)
     #self.player = NPC_hardCoded(lengthOfGuess, numberOfColors, self.attempts)
     self.player = NPC_csp(lengthOfGuess, numberOfColors, self.attempts)
Example #3
0
 def testFunction_checkEvaluation(self):
     sud = Validator(4, 8)
     #valid evaluations
     for startValueOfEval in range(0, 5):
         for endValueOfEval in range(0, 5):
             if (startValueOfEval + endValueOfEval) <= 4:
                 #print(str(startValueOfEval) +" "+ str(endValueOfEval))
                 sud.validateEvaluation(
                     Evaluation(startValueOfEval, endValueOfEval, True))
                 sud.validateEvaluation(
                     Evaluation(startValueOfEval, endValueOfEval, False))
Example #4
0
    def testError_Constructor(self):
        #invalid construcotrs
        for numColors in range(-2, 1):
            for guessLenght in range(-2, 1):
                with self.assertRaises(ValueError):
                    #print(str(guessLenght) +" "+ str(numColors))
                    sud = Validator(guessLenght, numColors)

        #wrong number of colors
        with self.assertRaises(ValueError):
            sud = Validator(4, -1)
        with self.assertRaises(ValueError):
            sud = Validator(4, 0)
        with self.assertRaises(ValueError):
            sud = Validator(4, 3)

        #wrong colorvalues
        with self.assertRaises(ValueError):
            sud = Validator(-1, 4)
        with self.assertRaises(ValueError):
            sud = Validator(0, 4)
        with self.assertRaises(ValueError):
            sud = Validator(5, 4)
Example #5
0
class GameCoordinator():
    def __init__(self, lengthOfGuess, numberOfColors, masterCombination,
                 maxNumberOfAttempts):
        self.__gameIsRunning = False
        self.__validator = Validator(lengthOfGuess, numberOfColors)
        self.__masterCombination = masterCombination
        self.__validator.validateCombination(masterCombination)
        self.__evaluator = Evaluator(masterCombination)
        self.attempts = Attempts()
        self.__maxNumberOfAttempts = maxNumberOfAttempts
        self.__validator.validateMaxNumberOfAttempts(maxNumberOfAttempts)
        #self.player = HumanPlayer()
        #self.player = NPC_random(lengthOfGuess, numberOfColors, self.attempts)
        #self.player = NPC_hardCoded(lengthOfGuess, numberOfColors, self.attempts)
        self.player = NPC_csp(lengthOfGuess, numberOfColors, self.attempts)

    def playGame(self):
        if not self.__gameIsRunning:
            self.__gameStart()
            while self.__gameIsRunning:
                if self.attempts.getNumberOfAttempts(
                ) < self.__maxNumberOfAttempts:
                    self.__playRound()
                else:
                    self.__gameLost()
                    return FinalScore(
                        False, self.attempts.getNumberOfAttempts(),
                        self.__validator.validateForNoObviousErrors(
                            self.attempts))
            return FinalScore(
                True, self.attempts.getNumberOfAttempts(),
                self.__validator.validateForNoObviousErrors(self.attempts))

    def __gameStart(self):
        self.attempts.clearAttempts()
        self.__gameIsRunning = True
        print("\nStarted a new MindMaster Game.")
        print("Setup is " + str(self.__validator) +
              ", you have a maximum number of " +
              str(self.__maxNumberOfAttempts) + " attempts.")
        self.player.introduceYourself()

    def __endGame(self):
        self.__gameIsRunning = False
        self.player.debriefing(
            self.__validator.validateForNoObviousErrors(self.attempts))

    def __playRound(self):
        gameIsFinished = self.__getAndProcessCombination()
        if gameIsFinished:
            self.__gameWon()
        else:
            print(
                str(self.attempts.getLastAttempt()) + " {" +
                str(self.attempts.getNumberOfAttempts()) + "/" +
                str(self.__maxNumberOfAttempts) + "}")

    def __gameLost(self):
        self.__endGame()
        print("\nYou lost the game.")
        print("You have reached the maximum number of " +
              str(self.attempts.getNumberOfAttempts()) + " tries.")
        print("You best attempt was " + str(self.attempts.getBestAttempt()) +
              ".")

    def __gameWon(self):
        self.__endGame()
        try:
            self.__validator.validateAttempts(self.attempts)
        except ValueError:
            print("\n Game has ended, but there was an error.")

        print("\nYou won the game.")
        print("The MasterCombination was: " + str(self.__masterCombination) +
              ". You needed " + str(self.attempts.getNumberOfAttempts()) +
              " of " + str(self.__maxNumberOfAttempts) + " tries.")
        if self.__validator.validateForNoObviousErrors(self.attempts):
            print("\nBut you could have done better, believe me ..")

    def __getAndProcessCombination(self):
        newCombination = self.__getNewUserCombination()
        evaluation = self.__evaluator.evaluateCombination(newCombination)
        self.attempts.addEvaluatedCombination(
            EvaluatedCombination(newCombination, evaluation))
        return evaluation.gameFinished

    def __getNewUserCombination(self):
        while (True):
            try:
                userCmbi = Colorcombination(self.player.readInputIn())
                self.__validator.validateCombination(userCmbi)
                break
            except ValueError as e:
                print(
                    str(e) +
                    ". Combination not valid, do it again. Just write the color values seperated by a whitespace and hit enter."
                )
        return userCmbi

    def setMasterCombination(self, masterCombination):
        if not self.__gameIsRunning:
            self.__masterCombination = masterCombination
            self.__validator.validateCombination(masterCombination)
            self.__evaluator = Evaluator(masterCombination)
Example #6
0
    def testError_checkEvaluation(self):
        sud = Validator(4, 8)
        #invalid evaluations
        for startValueOfEval in range(-2, 0):
            for endValueOfEval in range(-2, 0):
                #print(str(startValueOfEval) +" "+ str(endValueOfEval))
                with self.assertRaises(ValueError):
                    sud.validateEvaluation(
                        Evaluation(startValueOfEval, endValueOfEval, True))
                    sud.validateEvaluation(
                        Evaluation(startValueOfEval, endValueOfEval, False))

        for startValueOfEval in range(4, 6):
            for endValueOfEval in range(1, 6):
                #print(str(startValueOfEval) +" "+ str(endValueOfEval))
                with self.assertRaises(ValueError):
                    sud.validateEvaluation(
                        Evaluation(startValueOfEval, endValueOfEval, True))
                    sud.validateEvaluation(
                        Evaluation(startValueOfEval, endValueOfEval, False))

        for startValueOfEval in range(1, 6):
            for endValueOfEval in range(4, 6):
                #print(str(startValueOfEval) +" "+ str(endValueOfEval))
                with self.assertRaises(ValueError):
                    sud.validateEvaluation(
                        Evaluation(startValueOfEval, endValueOfEval, True))
                    sud.validateEvaluation(
                        Evaluation(startValueOfEval, endValueOfEval, False))
Example #7
0
    def testError_checkCombination(self):
        sud = Validator(4, 8)
        #numbers and dimension to low
        for startValueOfCombi in range(-1, 4):
            for endValueOfCombi in range(-1, 4):
                combi = list(range(startValueOfCombi, endValueOfCombi))
                with self.assertRaises(ValueError):
                    #print(str(startValueOfCombi) +" "+ str(endValueOfCombi) +" "+ str(combi) +" "+ str(len(combi)))
                    sud.validateCombination(Colorcombination(combi))
        #numbers and dimension to high
        for startValueOfCombi in range(4, 6):
            for endValueOfCombi in range(4, 6):
                combi = list(range(startValueOfCombi, endValueOfCombi))
                with self.assertRaises(ValueError):
                    #print(str(startValueOfCombi) +" "+ str(endValueOfCombi) +" "+ str(combi) +" "+ str(len(combi)))
                    sud.validateCombination(Colorcombination(combi))

        combi = [1, 1, 1, 1]
        with self.assertRaises(ValueError):
            sud.validateCombination(Colorcombination(combi))
        combi = [1, 1, 2, 1]
        with self.assertRaises(ValueError):
            sud.validateCombination(Colorcombination(combi))
        combi = [1, 2, 1, 3]
        with self.assertRaises(ValueError):
            sud.validateCombination(Colorcombination(combi))
Example #8
0
 def testFunction_Constructor(self):
     #valid construcotrs
     for numColors in range(1, 10):
         for guessLenght in range(1, numColors + 1):
             #print(str(guessLenght) +" "+ str(numColors))
             sud = Validator(guessLenght, numColors)
Example #9
0
    def testError_validateForNoObviousRrrors(self):
        sud = Validator(4, 8)
        attempts = Attempts()

        evaluatedCombi = EvaluatedCombination(Colorcombination([4, 5, 6, 7]),
                                              Evaluation(0, 0, False))
        attempts.addEvaluatedCombination(evaluatedCombi)
        debriefing = sud.validateForNoObviousErrors(attempts)
        if debriefing:
            self.fail()

        evaluatedCombi = EvaluatedCombination(Colorcombination([5, 6, 7, 0]),
                                              Evaluation(1, 0, False))
        attempts.addEvaluatedCombination(evaluatedCombi)
        debriefing = sud.validateForNoObviousErrors(attempts)
        if not debriefing:
            self.fail()

        attempts.clearAttempts()

        evaluatedCombi = EvaluatedCombination(Colorcombination([5, 1, 7, 0]),
                                              Evaluation(1, 1, False))
        attempts.addEvaluatedCombination(evaluatedCombi)
        debriefing = sud.validateForNoObviousErrors(attempts)
        if debriefing:
            self.fail()

        evaluatedCombi = EvaluatedCombination(Colorcombination([5, 6, 7, 0]),
                                              Evaluation(1, 0, False))
        attempts.addEvaluatedCombination(evaluatedCombi)
        debriefing = sud.validateForNoObviousErrors(attempts)
        if debriefing:
            self.fail()

        evaluatedCombi = EvaluatedCombination(Colorcombination([5, 1, 2, 0]),
                                              Evaluation(1, 2, False))
        attempts.addEvaluatedCombination(evaluatedCombi)
        debriefing = sud.validateForNoObviousErrors(attempts)
        if debriefing:
            self.fail()

        evaluatedCombi = EvaluatedCombination(Colorcombination([4, 5, 6, 7]),
                                              Evaluation(0, 0, False))
        attempts.addEvaluatedCombination(evaluatedCombi)
        debriefing = sud.validateForNoObviousErrors(attempts)
        if debriefing:
            self.fail()

        evaluatedCombi = EvaluatedCombination(Colorcombination([1, 2, 5, 0]),
                                              Evaluation(3, 0, False))
        attempts.addEvaluatedCombination(evaluatedCombi)
        debriefing = sud.validateForNoObviousErrors(attempts)
        if not debriefing:
            self.fail()

        attempts.clearAttempts()

        evaluatedCombi = EvaluatedCombination(Colorcombination([5, 1, 7, 0]),
                                              Evaluation(1, 1, False))
        attempts.addEvaluatedCombination(evaluatedCombi)
        debriefing = sud.validateForNoObviousErrors(attempts)
        if debriefing:
            self.fail()

        evaluatedCombi = EvaluatedCombination(Colorcombination([1, 3, 2, 0]),
                                              Evaluation(3, 1, False))
        attempts.addEvaluatedCombination(evaluatedCombi)
        debriefing = sud.validateForNoObviousErrors(attempts)
        if debriefing:
            self.fail()

        evaluatedCombi = EvaluatedCombination(Colorcombination([5, 1, 2, 0]),
                                              Evaluation(1, 2, False))
        attempts.addEvaluatedCombination(evaluatedCombi)
        debriefing = sud.validateForNoObviousErrors(attempts)
        if not debriefing:
            self.fail()