init base cards

This commit is contained in:
2024-04-04 14:44:16 +02:00
parent 0a7bba5f75
commit e2df8a7d5d
4 changed files with 97 additions and 37 deletions
+11 -8
View File
@@ -17,6 +17,7 @@ def vibe_check(t):
message = t.model_validate_json(message)
return await func(self, message)
except ValidationError as e:
print(e)
await self.send_error(e.errors())
return new_f
@@ -59,13 +60,7 @@ class ClientController:
await self.send(Message(type="error", data_type="error", data=error))
async def send_announce_dict(self, notification_type: str, data: dict):
await self.send(
Message(
type=notification_type,
data_type="object",
data=data,
)
)
await self.send(Message(type=notification_type, data_type="object", data=data))
@vibe_check(Message)
async def game_context(self, message: Message):
@@ -100,7 +95,7 @@ class ClientController:
self.player = player
self.player.team.listeners.append(self.send_announce_dict)
self.on_message = self.game_context
self.on_message = self.pregame_context
print("user logged in : " + username)
await self.game_controller.announce_game(self.websocket)
@@ -120,3 +115,11 @@ class ClientController:
await self.send(
Message(type="update", data_type="object", data=player.serialize_team())
)
@vibe_check(Message)
async def pregame_context(self, message: Message):
"""Waits for players"""
if message.type == "ready":
self.player.ready = bool(message.data)
if all(p.ready for p in self.game_controller.game.players):
self.game_controller.start_game()
+2 -9
View File
@@ -22,16 +22,9 @@ async def handler(websocket: WebSocketServerProtocol):
playerServer.message_callbacks.append(handler)
async def game_init():
for _ in range(15):
card = await hero_game.create_card()
hero_game.market_stack.append(card)
await hero_game.distribute_market_cards()
async def main():
await asyncio.gather(gameServer.serve(), playerServer.serve(port=8766), game_init())
await hero_game.init_game()
await asyncio.gather(gameServer.serve(), playerServer.serve(port=8766))
asyncio.run(main())
+67 -19
View File
@@ -1,9 +1,9 @@
#!/usr/bin/env python
from typing import List
import random
from model import (
Card,
CardType,
CardRole,
CardFaction,
CardParser,
Player,
@@ -41,33 +41,82 @@ class Game(Serializable):
self.started = False
def start_game(self):
pass
async def init_game(self):
await self.init_cards()
await self.distribute_market_cards()
self.started = True
async def create_card(self) -> Card:
card = Card(
async def init_cards(self):
"""Creates market cards and fire gem cards from previously loaded cards"""
market_only = [c for c in self.loaded_cards if c.role == CardRole.MARKET]
for c in market_only:
for _ in range(c.init_amount):
self.market_stack.append(
await self.create_card(
Card(
sprite="spritetest",
name=c.name,
cost=c.cost,
card_type=c.card_type,
faction=c.faction,
)
)
)
random.shuffle(self.market)
fire_gems = [c for c in self.loaded_cards if c.role == CardRole.FIRE_GEM]
for c in fire_gems:
for _ in range(c.init_amount):
self.gem_stack.append(
await self.create_card(
Card(
sprite="spritetest",
name=c.name,
cost=c.cost,
card_type=c.card_type,
faction=c.faction,
)
)
)
async def create_card(
self,
card: Card = Card(
card_type=CardType.ACTION,
faction=CardFaction.BLUE,
cost=1,
name="test",
sprite="testsprite",
)
),
) -> Card:
self.cards.append(card)
await self.notify_controller("create", card.serialize_guest())
return card
def create_base_deck(self) -> List[Card]:
return [
Card(
card_type=CardType.ACTION,
faction=CardFaction.BLUE,
cost=1,
name="test",
sprite="testsprite",
)
for _ in range(10)
async def create_base_deck(self, base_deck_name: str = "base") -> List[Card]:
"""Creates the starting base deck for a player.
Use base_deck_name to choose extensions characters"""
base_deck_loaded = [
c
for c in self.loaded_cards
if c.role == CardRole.PERSONAL and c.faction == base_deck_name
]
base_deck = []
for c in base_deck_loaded:
for _ in range(c.init_amount):
base_deck.append(
await self.create_card(
Card(
sprite="spritetest",
name=c.name,
cost=c.cost,
card_type=c.card_type,
faction=c.faction,
)
)
)
random.shuffle(base_deck)
return base_deck
async def create_player(self, username: str, team: Team | None = None) -> Player:
if team is None:
@@ -76,9 +125,8 @@ class Game(Serializable):
player = Player(username, team)
self.players.append(player)
player.stack_pile = self.create_base_deck()
player.stack_pile = await self.create_base_deck("base")
await self.notify_controller("create", player.serialize_guest())
return player
async def create_team(self) -> Team:
+17 -1
View File
@@ -17,6 +17,20 @@ class Player(Serializable):
hand: List[Card]
board: List[Card]
_ready: bool = False
@property
def ready(self):
return self._ready
@ready.setter
def ready(self, value):
self._ready = value
@ready.deleter
def ready(self):
del self._ready
def __init__(self, username: str, team: Team):
super().__init__()
self.stack_pile = []
@@ -67,4 +81,6 @@ class Player(Serializable):
self.hand.append(self.stack_pile.pop())
return self.draw(amount - 1)
finally:
self.team.notify_controller("update", self.serialize_team())
await self.team.notify_controller(
"update", {"uuid": self.uuid, "hand": self.serialize_team()["hand"]}
)