-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMEJN_1.1.py
238 lines (217 loc) · 8.62 KB
/
MEJN_1.1.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
# -*- coding: utf-8 -*-
"""
Created on Tue Apr 01 16:16:30 2014
1.1: add graph
@author: Jboeye
"""
import os
import ctypes
ctypes.windll.kernel32.SetConsoleTitleA("Mens, erger je niet.")
class Player:
def __init__(self):
self.score = 0
self.name = None
class Game:
def __init__(self):
self.reset_game()
def prepare_game(self):
self.clear_screen()
self.history = {}
while True:
try:
n_players=int(raw_input('How many players? \n: '))
if n_players>1:
break
else:
print "Number must be higher than 1.\n"
except ValueError:
print "Not a number.\n"
for p in xrange(n_players):
new_player = Player()
self.clear_screen()
while True:
name=str(raw_input('Player %s name? \n: '%(str(p+1))))
if len(name)>0:
if name not in self.name_list:
self.name_list.append(name)
self.clear_screen()
break
else:
print "Name already taken.\n"
else:
print "Name too short.\n"
new_player.name = name
self.players.append(new_player)
self.history[name] = [[],[]]
def reset_scores_and_restart(self):
for player in self.players:
player.score = 0
self.start_game()
def clear_screen(self):
os.system('cls' if os.name == 'nt' else 'clear')
def reset_game(self):
self.players = []
self.name_list = []
self.prepare_game()
self.start_game()
def give_advice(self,player):
target_list = []
special_target_list = []
for competitor in self.players:
if player.name != competitor.name:
if competitor.score > player.score:
target_list.append(competitor)
if (((321-competitor.score)+(321-player.score))<=180) and (321-competitor.score<60):
special_target_list.append(competitor)
print '%s, your current score is %s. \n\nTo finish you need %s points.\n'%(player.name,
str(player.score),
str(321 - player.score))
if len(target_list) == 0:
print 'You are in first place, run for your life.\n'
else:
for target in target_list:
print 'To get %s, score %s points.\n'%(target.name, str(target.score - player.score))
if len(special_target_list)>0:
print 'OR\n'
for target in special_target_list:
score_to_get = (321-target.score)+(321-player.score)
print 'To get %s, score %s points.\n'%(target.name, str(score_to_get))
def check_equal_scores(self,player):
for competitor in self.players:
if ((competitor.name != player.name)
and (player.score > 0)
and (player.score == competitor.score)):
print "%s, you set %s's score to zero.\n"%(player.name,competitor.name)
def set_competitor_to_zero(self,player):
for competitor in self.players:
if ((competitor.name != player.name)
and (player.score > 0)
and (player.score == competitor.score)):
competitor.score = 0
def standings(self,round_n):
scores = []
for player in self.players:
scores.append(player.score)
scores = sorted(scores)[::-1]
position = 1
positions = []
scored_players = 0
sorted_players = []
for score in scores:
for player in self.players:
if player.score == score:
sorted_players.append(player.name)
positions.append(position)
scored_players += 1
position += 1
if len(sorted_players) == len(self.players):
break
self.clear_screen()
print 'Standings, round = %s:'%(round_n)
print '#'*42
for posit in positions:
print posit ,'\t',
print ''
for name in sorted_players:
print name ,'\t',
print ''
for score in scores:
print score ,'\t',
print ''
print '#'*42,'\n'
#response = None
# while True:
# response=str(raw_input('\nPress enter to continue'))
# if response != None:
# break
def final_standings(self):
scores = []
for player in self.players:
scores.append(player.score)
scores = sorted(scores)[::-1]
position = 1
positions = []
scored_players = 0
sorted_players = []
for score in scores:
for player in self.players:
if player.score == score:
sorted_players.append(player.name)
positions.append(position)
scored_players += 1
position += 1
if len(sorted_players) == len(self.players):
break
self.clear_screen()
print 'Final standings:'
print '#'*42
for posit in positions:
print posit ,'\t',
print ''
for name in sorted_players:
print name ,'\t',
print ''
for score in scores:
print score ,'\t',
print ''
print '#'*42,'\n'
print '\n%s WINS!!!\n'%(sorted_players[0])
def start_game(self):
round_n = 1
winner = None
while (winner == None) and (round_n<11):
for player in self.players:
self.clear_screen()
#print 'Current player =', player.name ,"\n"
while True:
try:
self.standings(round_n)
self.give_advice(player)
old_score = player.score
subscore=int(raw_input('Add score for %s \n:'%(player.name)))
print ''
if player.score + subscore == 321:
player.score += subscore
winner = player.name
break
else:
if player.score + subscore > 321:
player.score = 321 - (player.score + subscore)%321
else:
player.score += subscore
self.clear_screen()
self.check_equal_scores(player)
print '%s, your new score = %s\n'%(player.name,str(player.score))
end_turn_decision = str(raw_input("To go to next player, press enter. \nTo cancel score addition press 'c'. \nTo submit other score for same player, press 's'.\n:"))
self.clear_screen()
if end_turn_decision == 'c':
player.score = old_score
print '%s, your score was reset to %s.\n'%(player.name,str(player.score))
elif end_turn_decision == 's':
self.set_competitor_to_zero(player)
else:
self.set_competitor_to_zero(player)
break
except ValueError:
self.clear_screen()
if winner != None:
break
if winner == None:
# if round_n<10:
# self.clear_screen()
# self.standings(round_n)
round_n += 1
self.clear_screen()
if winner == None:
self.final_standings()
else:
self.standings(round_n)
print '%s WINS!!!\n'%(winner)
restart = str(raw_input("To start new game, press 'n'\nTo restart identical game, press 'r' \nTo quit, press enter\n: "))
if restart == 'n':
self.reset_game()
elif restart == 'r':
self.reset_scores_and_restart()
if __name__ == '__main__':
GAME = Game()
print 'Game finished, goodbye.'