5
5
import constants
6
6
7
7
import project .game .calculations as calculations
8
+ import project .game .computer_player as computer_player
8
9
9
10
10
11
class Model :
@@ -14,8 +15,9 @@ def __init__(self, game_name, map_name, players): # only when creating new game
14
15
self .map_name = map_name
15
16
self .game_end = False
16
17
17
- self .players = [Player (p ["name" ], p ["colour" ]) for p in players ]
18
+ self .players = [Player (p ["name" ], p ["colour" ], p [ "control" ] ) for p in players ]
18
19
self .current_player = self .players [0 ]
20
+ self .computer_logic = computer_player .Logic ()
19
21
20
22
self .world = World (self .map_name , self .players ) # assigns settlements to players
21
23
@@ -27,24 +29,46 @@ def all_units(self):
27
29
def next_turn (self ):
28
30
self .current_player .end_turn ()
29
31
30
- # Getting new turn
32
+ # Getting new human player turn
31
33
if not self .is_winner (): # if more than 1 player alive
32
- self .current_player = self . get_next_player ()
34
+ self .cycle_player ()
33
35
else :
34
36
self .game_end = True
35
37
36
38
self .current_player .start_turn ()
37
39
38
40
def get_next_player (self ):
39
41
valid_choice = False
40
- player = self .current_player
42
+ index = self .players .index (self .current_player )
43
+
41
44
while not valid_choice : # wont be infinite, as to be called at least two players are left.
42
- if self . players . index ( player ) < len (self .players ) - 1 :
43
- player = self . players [ self . players . index ( player ) + 1 ]
45
+ if index < len (self .players ) - 1 :
46
+ index += 1
44
47
else :
45
- player = self .players [0 ]
46
- valid_choice = not player .is_dead ()
47
- return player
48
+ index = 0
49
+
50
+ valid_choice = not self .players [index ].is_dead () and self .players [index ].get_control () == "human"
51
+
52
+ return self .players [index ]
53
+
54
+ def cycle_player (self ):
55
+ valid_choice = False
56
+
57
+ while not valid_choice : # wont be infinite, as to be called at least two players are left.
58
+ if self .players .index (self .current_player ) < len (self .players ) - 1 :
59
+ self .current_player = self .players [self .players .index (self .current_player ) + 1 ]
60
+ else :
61
+ self .current_player = self .players [0 ]
62
+
63
+ # Computer takes go, then we go on to find next human player
64
+ if self .current_player .get_control () == "computer" :
65
+ self .computer_logic .take_go (self ) # of current player
66
+ if self .current_player .is_dead ():
67
+ self .current_player .units = []
68
+
69
+ valid_choice = not self .current_player .is_dead () and self .current_player .get_control () == "human"
70
+
71
+ return self .current_player
48
72
49
73
def try_spawn (self , unit_type , position ):
50
74
if not self .get_unit (position ):
@@ -145,13 +169,18 @@ def get_attacks(self, unit):
145
169
attacks .append ([x , y ])
146
170
return attacks
147
171
172
+ def computer_turn (self ):
173
+ pass
174
+
148
175
149
176
class Player :
150
177
""" Each player of the game, which holds their units, key values and links to settlements etc"""
151
- def __init__ (self , name , colour ):
178
+ def __init__ (self , name , colour , control ):
152
179
self .name = name
153
180
self .colour = colour
154
- self .camera_focus = [None , None ] # TODO: system to auto-scroll to spawn
181
+ self .control = control
182
+
183
+ self .camera_focus = [None , None ] # TODO: system to assign player 1 city (as "spawn") on creation
155
184
self .show_minimap = False
156
185
157
186
self .units = []
@@ -162,22 +191,12 @@ def __init__(self, name, colour):
162
191
self .dead = False
163
192
self .max_score = self .ap
164
193
165
- # self.wood = 0
166
- # self.stone = 0
167
- # self.metal = 0
168
-
169
- # def add_wood(self, amount):
170
- # self.wood += amount
171
- #
172
- # def add_stone(self, amount):
173
- # self.stone += amount
174
- #
175
- # def add_metal(self, amount):
176
- # self.metal += amount
177
-
178
194
def get_name (self ):
179
195
return self .name
180
196
197
+ def get_control (self ):
198
+ return self .control
199
+
181
200
def is_dead (self ):
182
201
return self .dead
183
202
@@ -258,38 +277,13 @@ class Tile:
258
277
def __init__ (self , tile_type , position ):
259
278
self .type = tile_type
260
279
self .position = position
261
- # self.wood, self.stone, self.metal = constants.TILE_DATA[tile_type]
262
280
263
281
def get_type (self ):
264
282
return self .type
265
283
266
284
def get_position (self ):
267
285
return self .position
268
286
269
- # def take_wood(self, amount=1): # defaults, left for future in case decide change.
270
- # if self.wood > 0:
271
- # self.wood = self.wood - amount
272
- # if self.wood < 0:
273
- # self.wood = 0 # ensures resource is fully used, but cant go negative.
274
- # return True
275
- # return False
276
- #
277
- # def take_stone(self, amount=1):
278
- # if self.stone > 0:
279
- # self.stone = self.stone - amount
280
- # if self.stone < 0:
281
- # self.stone = 0
282
- # return True
283
- # return False
284
- #
285
- # def take_metal(self, amount=1):
286
- # if self.metal > 0:
287
- # self.metal = self.metal - amount
288
- # if self.metal < 0:
289
- # self.metal = 0
290
- # return True
291
- # return False
292
-
293
287
294
288
class City :
295
289
def __init__ (self , name , position ):
0 commit comments