parent
57ee3129ac
commit
dac613c19f
|
@ -318,6 +318,9 @@ class Hex:
|
||||||
self.highlight = highlight
|
self.highlight = highlight
|
||||||
self.changed = True
|
self.changed = True
|
||||||
|
|
||||||
|
def kind(self):
|
||||||
|
return self.resource['kind']
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_neighbouring_hex_coords(coords, direction):
|
def get_neighbouring_hex_coords(coords, direction):
|
||||||
return [a + b for a, b in zip(coords, Hex.directions[direction])]
|
return [a + b for a, b in zip(coords, Hex.directions[direction])]
|
||||||
|
@ -334,7 +337,7 @@ class Hex:
|
||||||
if self.robber:
|
if self.robber:
|
||||||
ugfx.text(round(self.centre[0] - Hex.size * 0.75), round(self.centre[1] - text_offset), "Rob ", text_colour)
|
ugfx.text(round(self.centre[0] - Hex.size * 0.75), round(self.centre[1] - text_offset), "Rob ", text_colour)
|
||||||
else:
|
else:
|
||||||
if self.resource['kind'] != 5:
|
if self.kind() != 5:
|
||||||
ugfx.text(round(self.centre[0] - text_offset), round(self.centre[1] - text_offset), "{} ".format(self.number['roll']), text_colour)
|
ugfx.text(round(self.centre[0] - text_offset), round(self.centre[1] - text_offset), "{} ".format(self.number['roll']), text_colour)
|
||||||
|
|
||||||
|
|
||||||
|
@ -414,10 +417,31 @@ class Road:
|
||||||
ugfx.thickline(self.edge[0][0], self.edge[0][1], self.edge[1][0], self.edge[1][1], self.team['colour'], 4, False)
|
ugfx.thickline(self.edge[0][0], self.edge[0][1], self.edge[1][0], self.edge[1][1], self.team['colour'], 4, False)
|
||||||
|
|
||||||
|
|
||||||
|
class Resource():
|
||||||
|
|
||||||
|
def __init__(self, resource):
|
||||||
|
self.resource = resource
|
||||||
|
self.quantity = 0
|
||||||
|
|
||||||
|
def kind(self):
|
||||||
|
return self.resource['kind']
|
||||||
|
|
||||||
|
def colour(self):
|
||||||
|
return self.resource['col']
|
||||||
|
|
||||||
|
def increment(self, num=1):
|
||||||
|
self.quantity = self.quantity + num
|
||||||
|
|
||||||
|
def decrement(self, num=1):
|
||||||
|
self.quantity = self.quantity - num
|
||||||
|
if self.quantity < 0:
|
||||||
|
self.quantity = 0
|
||||||
|
|
||||||
|
|
||||||
class Player:
|
class Player:
|
||||||
"""The player's hand of resource cards and their score and what not."""
|
"""The player's hand of resource cards and their score and what not."""
|
||||||
|
|
||||||
def __init__(self, team, roads, settlements, resources):
|
def __init__(self, team, roads, settlements):
|
||||||
# Player team details
|
# Player team details
|
||||||
self.team = team
|
self.team = team
|
||||||
|
|
||||||
|
@ -425,17 +449,17 @@ class Player:
|
||||||
self.roads = roads
|
self.roads = roads
|
||||||
self.settlements = settlements
|
self.settlements = settlements
|
||||||
|
|
||||||
# Player resources
|
# Player's hand of resources
|
||||||
self.resources = []
|
self.resources = []
|
||||||
for r in resources.copy():
|
for kind in [GameBoard.SHEEP, GameBoard.WHEAT, GameBoard.WOOD, GameBoard.BRICK, GameBoard.ORE]:
|
||||||
r['quantity'] = 0
|
r = Resource(kind)
|
||||||
self.resources.append(r)
|
self.resources.append(r)
|
||||||
|
|
||||||
# Collect starting resources from the hexes adjacent to our starting settlements
|
# Collect starting resources from the hexes adjacent to our starting settlements
|
||||||
for s in [x for x in self.settlements if x.team == self.team]:
|
for s in [x for x in self.settlements if x.team == self.team]:
|
||||||
for h in s.hexes:
|
for h in s.hexes:
|
||||||
if r['kind'] == h.resource['kind']:
|
if r.kind() == h.kind():
|
||||||
r['quantity'] = r['quantity'] + 1
|
r.increment()
|
||||||
|
|
||||||
def score(self):
|
def score(self):
|
||||||
points = 0
|
points = 0
|
||||||
|
@ -443,18 +467,42 @@ class Player:
|
||||||
points = points + s.contents
|
points = points + s.contents
|
||||||
return points
|
return points
|
||||||
|
|
||||||
|
def num_resources(self):
|
||||||
|
return sum([x.quantity for x in self.resources])
|
||||||
|
|
||||||
|
def collect(self, num):
|
||||||
|
if num == 7:
|
||||||
|
# If total number of resources is over 7, lose half of them (rounded down)
|
||||||
|
total = self.num_resources()
|
||||||
|
if total > 7:
|
||||||
|
lose = int(total / 2)
|
||||||
|
while self.num_resources() > total - lose:
|
||||||
|
self.resources[random.randrange(0, len(self.resources))].decrement()
|
||||||
|
else:
|
||||||
|
# Collect resources for each hex adjacent to our settlements that corresponds
|
||||||
|
# with the given dice roll
|
||||||
|
for s in [x for x in self.settlements if x.team == self.team]:
|
||||||
|
for h in s.hexes:
|
||||||
|
if h.number['roll'] == num and not h.robber:
|
||||||
|
for r in self.resources:
|
||||||
|
if r.kind() == h.kind():
|
||||||
|
if s.contents == Settlement.TOWN:
|
||||||
|
r.increment()
|
||||||
|
elif s.contents == Settlement.CITY:
|
||||||
|
r.increment(2)
|
||||||
|
|
||||||
def draw(self):
|
def draw(self):
|
||||||
# Player's team and score
|
# Player's team and score
|
||||||
ugfx.text(5, 8, "{} ".format(self.team['name']), self.team['colour'])
|
ugfx.text(5, 8, "{} ".format(self.team['name']), self.team['colour'])
|
||||||
ugfx.text(5, 28, "Points: {} ".format(self.score()), ugfx.WHITE)
|
ugfx.text(5, 28, "Points: {} ".format(self.score()), ugfx.WHITE)
|
||||||
|
|
||||||
# Player's resources
|
# Player's resources
|
||||||
ugfx.area(0, 280, 120, 40, ugfx.BLACK)
|
ugfx.area(0, 290, 240, 30, ugfx.BLACK)
|
||||||
offset = int(ugfx.width() / len(self.resources))
|
offset = int(ugfx.width() / len(self.resources))
|
||||||
square = int(offset / 3)
|
square = int(offset / 3)
|
||||||
for i in range(len(self.resources)):
|
for i in range(len(self.resources)):
|
||||||
ugfx.area((offset * i) + 1, 285, square, 22, self.resources[i]['col'])
|
ugfx.area((offset * i) + 1, 295, square, 20, self.resources[i].colour())
|
||||||
ugfx.text((offset * i) + 1 + square, 285, "{} ".format(self.resources[i]['quantity']), ugfx.WHITE)
|
ugfx.text((offset * i) + 1 + square, 295, "{} ".format(self.resources[i].quantity), ugfx.WHITE)
|
||||||
|
|
||||||
|
|
||||||
class Dice:
|
class Dice:
|
||||||
|
@ -623,7 +671,7 @@ class GameBoard(State):
|
||||||
self.dice = Dice()
|
self.dice = Dice()
|
||||||
|
|
||||||
# The player details
|
# The player details
|
||||||
self.player = Player(team, self.roads, self.settlements, [GameBoard.SHEEP, GameBoard.WHEAT, GameBoard.WOOD, GameBoard.BRICK, GameBoard.ORE])
|
self.player = Player(team, self.roads, self.settlements)
|
||||||
|
|
||||||
def get_roads_for_settlement(self, settlement):
|
def get_roads_for_settlement(self, settlement):
|
||||||
"""Return a list of roads that connect to the given settlement"""
|
"""Return a list of roads that connect to the given settlement"""
|
||||||
|
@ -704,7 +752,8 @@ class GameBoard(State):
|
||||||
h.set_highlight(True)
|
h.set_highlight(True)
|
||||||
else:
|
else:
|
||||||
h.set_highlight(False)
|
h.set_highlight(False)
|
||||||
# TODO collect resources
|
self.player.collect(num)
|
||||||
|
# TODO: Move the robber on a seven
|
||||||
self.redraw = True
|
self.redraw = True
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue