player.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. from enum import Enum
  2. from color import Color
  3. from option import Option, OptionCode
  4. import json
  5. class StateCode(str, Enum):
  6. START = "start"
  7. JOIN_OTHERS = "join_others"
  8. PICK_COLOR = "pick_color"
  9. PICK_COLOR_OTHERS = "pick_color_others"
  10. FIRST_DEAL = "first_deal"
  11. DEAL = "deal"
  12. DEAL_OTHER = "deal_other"
  13. SWAP_CARD = "swap_card"
  14. SWAP_CARD_PARTNER = "swap_card_partner"
  15. SWAP_CARD_OTHERS = "swap_card_others"
  16. PLAY_CARD = "play_card"
  17. PLAY_CARD_OTHER = "play_card_other"
  18. PLAYING_CARD = "playing_card"
  19. PLAYING_CARD_OTHER = "playing_card_other"
  20. class ErrorCode(str, Enum):
  21. UNKNOWN_CODE = "unknown_code"
  22. COLOR_ALREADY_CHOSEN = "color_already_chosen"
  23. OPTION_NOT_ALLOWED = "option_not_allowed"
  24. class PlayerState(object):
  25. def __init__(self, code, **kwargs):
  26. self.code = StateCode(code)
  27. self.args = kwargs
  28. class PlayerError(object):
  29. def __init__(self, code, **kwargs):
  30. self.code = ErrorCode(code)
  31. self.args = kwargs
  32. class Player(object):
  33. def __init__(self, color = None, name = None):
  34. self.color = color
  35. self.name = name
  36. self.hand = []
  37. self.options = []
  38. self.message = "Even wachten"
  39. self.set_state(StateCode.START)
  40. self.error = None
  41. self.selected_card = None
  42. self.card_is_changed = False
  43. self.passed = False
  44. def check_option(self, option):
  45. found_option = any(o.isOption(option) for o in self.options)
  46. if not found_option:
  47. self.message = f"{option.text} is niet toegestaan. " + self.message
  48. self.set_error(ErrorCode.OPTION_NOT_ALLOWED, option=option)
  49. return found_option
  50. def set_state(self, state_code, **kwargs):
  51. self.state = PlayerState(state_code, **kwargs)
  52. def set_error(self, error_code, **kwargs):
  53. if error_code != None:
  54. self.error = PlayerError(error_code, **kwargs)
  55. else:
  56. self.error = None
  57. class DogEncoder(json.JSONEncoder):
  58. def default(self, obj):
  59. if hasattr(obj, '__dict__'):
  60. return obj.__dict__
  61. return json.JSONEncoder.default(self, obj)
  62. if __name__ == "__main__":
  63. player = Player(Color.BLUE, "Groen")
  64. player.options = [Option(OptionCode.NEW_GAME, "Nieuw spel", color='green'), Option(OptionCode.JOIN_GAME, "doe mee met een spel")]
  65. player.set_state(StateCode.PICK_COLOR, other_player_name="Rood")
  66. print(player.__dict__)
  67. print(player.options[0].__dict__)
  68. print(json.dumps(player.__dict__, cls=DogEncoder))