parent
dac613c19f
commit
b8a49997e7
|
@ -26,6 +26,7 @@ BUTTONS = [
|
||||||
Buttons.BTN_7,
|
Buttons.BTN_7,
|
||||||
Buttons.BTN_8,
|
Buttons.BTN_8,
|
||||||
Buttons.BTN_9,
|
Buttons.BTN_9,
|
||||||
|
Buttons.BTN_0,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,7 +75,7 @@ class Menu(State):
|
||||||
def draw(self):
|
def draw(self):
|
||||||
# Draw the menu on screen
|
# Draw the menu on screen
|
||||||
ugfx.clear(ugfx.BLACK)
|
ugfx.clear(ugfx.BLACK)
|
||||||
ugfx.display_image(0, 0, 'settlers_game/title.png')
|
ugfx.display_image(0, 0, 'settlers_of_emf/title.png')
|
||||||
ugfx.text(5, 95, self.question, ugfx.WHITE)
|
ugfx.text(5, 95, self.question, ugfx.WHITE)
|
||||||
i = 0
|
i = 0
|
||||||
for c in self.choices:
|
for c in self.choices:
|
||||||
|
@ -639,6 +640,10 @@ class GameBoard(State):
|
||||||
number = n_copy.pop(0)
|
number = n_copy.pop(0)
|
||||||
self.hexes.append(Hex(coords, resource, number, number['roll'] == 7))
|
self.hexes.append(Hex(coords, resource, number, number['roll'] == 7))
|
||||||
|
|
||||||
|
# Note the initial location of the robber to ensure it moves when activated
|
||||||
|
self.robber_mode = False
|
||||||
|
self.robber_hex = self.get_robber_hex()
|
||||||
|
|
||||||
# Generate lists of unique valid locations for building
|
# Generate lists of unique valid locations for building
|
||||||
self.roads = []
|
self.roads = []
|
||||||
self.settlements = []
|
self.settlements = []
|
||||||
|
@ -712,49 +717,109 @@ class GameBoard(State):
|
||||||
def initialise(self):
|
def initialise(self):
|
||||||
# Register callbacks
|
# Register callbacks
|
||||||
Buttons.enable_interrupt(Buttons.BTN_Menu, self._button_callback)
|
Buttons.enable_interrupt(Buttons.BTN_Menu, self._button_callback)
|
||||||
|
Buttons.enable_interrupt(Buttons.BTN_A, self._button_callback)
|
||||||
Buttons.enable_interrupt(Buttons.BTN_B, self._button_callback)
|
Buttons.enable_interrupt(Buttons.BTN_B, self._button_callback)
|
||||||
Buttons.enable_interrupt(Buttons.BTN_Star, self._button_callback)
|
Buttons.enable_interrupt(Buttons.BTN_Star, self._button_callback)
|
||||||
Buttons.enable_interrupt(Buttons.BTN_Hash, self._button_callback)
|
Buttons.enable_interrupt(Buttons.BTN_Hash, self._button_callback)
|
||||||
|
# For moving the robber
|
||||||
|
Buttons.enable_interrupt(Buttons.JOY_Up, self._button_callback)
|
||||||
|
Buttons.enable_interrupt(Buttons.JOY_Down, self._button_callback)
|
||||||
|
Buttons.enable_interrupt(Buttons.JOY_Left, self._button_callback)
|
||||||
|
Buttons.enable_interrupt(Buttons.JOY_Right, self._button_callback)
|
||||||
|
|
||||||
def deinitialise(self):
|
def deinitialise(self):
|
||||||
# Unregister callbacks
|
# Unregister callbacks
|
||||||
Buttons.disable_interrupt(Buttons.BTN_Menu)
|
Buttons.disable_interrupt(Buttons.BTN_Menu)
|
||||||
|
Buttons.disable_interrupt(Buttons.BTN_A)
|
||||||
Buttons.disable_interrupt(Buttons.BTN_B)
|
Buttons.disable_interrupt(Buttons.BTN_B)
|
||||||
Buttons.disable_interrupt(Buttons.BTN_Star)
|
Buttons.disable_interrupt(Buttons.BTN_Star)
|
||||||
Buttons.disable_interrupt(Buttons.BTN_Hash)
|
Buttons.disable_interrupt(Buttons.BTN_Hash)
|
||||||
|
# For moving the robber
|
||||||
|
Buttons.disable_interrupt(Buttons.JOY_Up)
|
||||||
|
Buttons.disable_interrupt(Buttons.JOY_Down)
|
||||||
|
Buttons.disable_interrupt(Buttons.JOY_Left)
|
||||||
|
Buttons.disable_interrupt(Buttons.JOY_Right)
|
||||||
|
|
||||||
# Ensure all hexes are drawn next time we enter this state
|
# Ensure all hexes are drawn next time we enter this state
|
||||||
for h in self.hexes:
|
for h in self.hexes:
|
||||||
h.changed = True
|
h.changed = True
|
||||||
|
|
||||||
def _button_callback(self, btn):
|
def _button_callback(self, btn):
|
||||||
if btn == Buttons.BTN_Menu:
|
if not self.robber_mode:
|
||||||
self.selection = GameBoard.MAIN_MENU
|
if btn == Buttons.BTN_Menu:
|
||||||
self.done = True
|
self.selection = GameBoard.MAIN_MENU
|
||||||
if btn == Buttons.BTN_B:
|
self.done = True
|
||||||
self.selection = GameBoard.BUILD_MENU
|
if btn == Buttons.BTN_B:
|
||||||
self.done = True
|
self.selection = GameBoard.BUILD_MENU
|
||||||
if btn == Buttons.BTN_Star:
|
self.done = True
|
||||||
# End the turn
|
if btn == Buttons.BTN_Star:
|
||||||
self.selection = GameBoard.END_TURN
|
# Can end the turn if dice were rolled
|
||||||
self.done = True
|
if self.dice.total() != 0:
|
||||||
self.dice.reset()
|
self.selection = GameBoard.END_TURN
|
||||||
for h in self.hexes:
|
self.done = True
|
||||||
h.set_highlight(False)
|
self.dice.reset()
|
||||||
if btn == Buttons.BTN_Hash:
|
for h in self.hexes:
|
||||||
# Only roll the dice if not already rolled
|
|
||||||
if self.dice.total() == 0:
|
|
||||||
self.dice.roll()
|
|
||||||
# Highlight the hexes corresponding with the dice roll
|
|
||||||
num = self.dice.total()
|
|
||||||
for h in self.hexes:
|
|
||||||
if h.number['roll'] == num or (num == 7 and h.robber):
|
|
||||||
h.set_highlight(True)
|
|
||||||
else:
|
|
||||||
h.set_highlight(False)
|
h.set_highlight(False)
|
||||||
self.player.collect(num)
|
if btn == Buttons.BTN_Hash:
|
||||||
# TODO: Move the robber on a seven
|
# Only roll the dice if not already rolled
|
||||||
self.redraw = True
|
if self.dice.total() == 0:
|
||||||
|
self.dice.roll()
|
||||||
|
# Highlight the hexes corresponding with the dice roll
|
||||||
|
num = self.dice.total()
|
||||||
|
for h in self.hexes:
|
||||||
|
if (h.number['roll'] == num and not h.robber) or (num == 7 and h.robber):
|
||||||
|
h.set_highlight(True)
|
||||||
|
else:
|
||||||
|
h.set_highlight(False)
|
||||||
|
# Collect resources corresponding with the dice roll
|
||||||
|
self.player.collect(num)
|
||||||
|
# Activate the robber on a seven
|
||||||
|
if num == 7:
|
||||||
|
self.robber_mode = True
|
||||||
|
self.redraw = True
|
||||||
|
else:
|
||||||
|
h_current = self.get_robber_hex()
|
||||||
|
if btn == Buttons.BTN_A:
|
||||||
|
# The robber may not stay in the same hex, ensure it moved
|
||||||
|
if h_current != self.robber_hex:
|
||||||
|
self.robber_hex = h_current
|
||||||
|
self.robber_hex.set_highlight(False)
|
||||||
|
self.robber_mode = False
|
||||||
|
self.redraw = True
|
||||||
|
# TODO: Steal a card from a player at this hex
|
||||||
|
if btn == Buttons.JOY_Up:
|
||||||
|
self._move_robber(h_current, 4)
|
||||||
|
if btn == Buttons.JOY_Down:
|
||||||
|
self._move_robber(h_current, 1)
|
||||||
|
if btn == Buttons.JOY_Left:
|
||||||
|
self._move_robber(h_current, 0 if h_current.coords[0] % 2 == 0 else 5)
|
||||||
|
if btn == Buttons.JOY_Right:
|
||||||
|
self._move_robber(h_current, 2 if h_current.coords[0] % 2 == 0 else 3)
|
||||||
|
|
||||||
|
def _move_robber(self, h_current, direction):
|
||||||
|
coords = Hex.get_neighbouring_hex_coords(h_current.coords, direction)
|
||||||
|
h_next = self.get_hex_for_coords(coords)
|
||||||
|
self.move_robber(h_current, h_next)
|
||||||
|
self.redraw = True
|
||||||
|
|
||||||
|
def get_robber_hex(self):
|
||||||
|
for h in self.hexes:
|
||||||
|
if h.robber:
|
||||||
|
return h
|
||||||
|
return None
|
||||||
|
|
||||||
|
def get_hex_for_coords(self, coords):
|
||||||
|
for h in self.hexes:
|
||||||
|
if h.coords == coords:
|
||||||
|
return h
|
||||||
|
return None
|
||||||
|
|
||||||
|
def move_robber(self, from_hex, to_hex):
|
||||||
|
if to_hex:
|
||||||
|
from_hex.robber = False
|
||||||
|
from_hex.set_highlight(False)
|
||||||
|
to_hex.robber = True
|
||||||
|
to_hex.set_highlight(True)
|
||||||
|
|
||||||
|
|
||||||
class Settlers:
|
class Settlers:
|
||||||
|
|
Loading…
Reference in New Issue