forked from wy/PyMastermind
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Game.py
77 lines (63 loc) · 2.05 KB
/
Game.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
########################
# Author: ~wy
# Date: 25/12/2017
# Description: Represents the Game State
########################
from Answer import Answer
from Guess import Guess
from Evaluation import Evaluation
import random
import datetime
import MastermindConstants
class Game:
def __init__(self):
self.currentLevel = 1
self.Answer = None
self.Guesses = []
self.Evaluations = []
self.status = "Not Won"
self.startTime = datetime.datetime.now()
self.endTime = None
def reset(self):
self.__init__()
def get_time_elapsed(self):
return (self.endTime - self.startTime).seconds
def get_answer(self):
return self.Answer
def get_status(self):
return self.status
def pick_answer(self, choices=None):
if choices is None:
arr = MastermindConstants.starting_recommendation
input_var = ""
for i in range(0, 4):
input_var += random.choice(arr)
choices = input_var
self.Answer = Answer(choices)
def get_level(self):
return self.currentLevel
def make_guess(self, choices):
guess = Guess(choices)
self.Guesses.append(guess)
self.evaluate_guess()
self.currentLevel += 1
if self.currentLevel == 7:
self.endTime = datetime.datetime.now()
def evaluate_guess(self):
guess = self.Guesses[-1].get_choices()
answer = self.Answer.get_choices()
evaluation = Evaluation.evaluate(guess,answer)
self.Evaluations.append(evaluation)
if Game.has_won(evaluation):
self.status = "Won"
self.endTime = datetime.datetime.now()
@staticmethod
def has_won(evaluation):
return evaluation == MastermindConstants.winning_evaluation
def get_evaluation(self):
return self.Evaluations[-1]
def __str__(self):
s = ""
for i in range(1, self.currentLevel):
s += "{}[{}]{}\n".format(self.Evaluations[i - 1], i, self.Guesses[i - 1])
return s