Skip to content
Snippets Groups Projects
Commit 9e484f91 authored by Robert Goldmann's avatar Robert Goldmann
Browse files

added tile to display board games by player count and choice recommend random game

parent 2026c146
No related branches found
No related tags found
No related merge requests found
...@@ -2,5 +2,6 @@ ...@@ -2,5 +2,6 @@
/settings.json /settings.json
/pageSettings.json /pageSettings.json
/pageSettings_backup.json /pageSettings_backup.json
/boardGames.json
.idea/ .idea/
/*.ics /*.ics
<style>
.boardGameTile {
background-color: #2F2F2F;
font-size: 2.5vmin;
border-radius: 1vh;
font-weight: bold;
flex-direction: row;
}
.boardGameTile .content {
display: flex;
flex-direction: column;
align-items: center;
width: 85%;
height: 85%;
text-align: center;
}
.boardGameTile .centered {
text-align: center;
}
.boardGameTile .text-left {
text-align: left;
}
.boardGameTile td {
padding: 0 4vmin;
vertical-align: top;
}
.boardGameTile .headline {
font-size: 3.5vmin;
padding-bottom: 2vmin;
}
.boardGameTile .small {
font-size: 2vmin;
}
.boardGameTile .randomGame {
border: 0.4vmin solid white;
border-radius: 1vmin;
padding: 2vmin
}
</style>
<div class="boardGameTile">
<div class="content">
<table>
<tr>
<td class="centered headline">
Spiele
<div class="small">max. 2 Spieler</div>
</td>
<td class="centered headline">
Spiele
<div class="small">min. 3 Spieler</div>
</td>
<td class="centered headline">
Spiele
<div class="small">&gt; 2 Spieler</div>
</td>
<td class="headline">
Spielvorschlag
<div class="small">(Klicken für neuen Vorschlag)</td>
</tr>
<tr>
<td>
<ul class="text-left">
{% for game in gamesForTwo %}
<li>{{ game.name }}</li>
{% endfor %}
</ul>
</td>
<td>
<ul class="text-left">
{% for game in gamesAtLeastThree %}
<li>{{ game.name }}</li>
{% endfor %}
</ul>
</td>
<td>
<ul class="text-left">
{% for game in gamesForThreeOrMore %}
<li>{{ game.name }}</li>
{% endfor %}
</ul>
</td>
<td>
<div class="randomGame">
<div>{{ randomGame.name }}</div>
<div class="small">{{ randomGame.minPlayers }} - {{ randomGame.maxPlayers }} Spieler</div>
</div>
</td>
</tr>
</table>
</div>
</div>
import os
import random
from typing import Dict
from flask import Blueprint
from logic.service.ServiceManager import ServiceManager
from logic.tile.Tile import Tile
class BoardGameTile(Tile):
EXAMPLE_SETTINGS_FILE = {
"games": [
{
"name": "Carcassonne",
"minPlayers": 2,
"maxPlayers": 6
}
]
}
EXAMPLE_SETTINGS = {
"path": "path/to/my/games.json"
}
def __init__(self, uniqueName: str, settings: Dict, intervalInSeconds: int):
super().__init__(uniqueName, settings, intervalInSeconds)
self._previousRandomGame = None
def fetch(self, pageName: str) -> Dict:
jsonService = ServiceManager.get_instance().get_service_by_type_name('JsonService')
cacheKey = f'{pageName}_{self._uniqueName}_{self._settings["path"]}'
games = jsonService.get_data(cacheKey, self._intervalInSeconds, self._settings)['data']['games']
games = sorted(games, key=lambda game: game['name'])
gamesForTwo = [game for game in games if game['maxPlayers'] == 2 and game['minPlayers'] == 2]
gamesAtLeastThree = [game for game in games if game['minPlayers'] >= 3]
gamesForThreeOrMore = [game for game in games if game['maxPlayers'] > 2]
randomGame = random.choice(games)
while randomGame == self._previousRandomGame:
randomGame = random.choice(games)
self._previousRandomGame = randomGame
return {
'gamesForTwo': gamesForTwo,
'gamesAtLeastThree': gamesAtLeastThree,
'gamesForThreeOrMore': gamesForThreeOrMore,
'randomGame': randomGame
}
def render(self, data: Dict) -> str:
return Tile.render_template(os.path.dirname(__file__), __class__.__name__,
gamesForTwo=data['gamesForTwo'],
gamesAtLeastThree=data['gamesAtLeastThree'],
gamesForThreeOrMore=data['gamesForThreeOrMore'],
randomGame=data['randomGame'])
def construct_blueprint(self, pageName: str, *args, **kwargs):
return Blueprint(f'{pageName}_{__class__.__name__}_{self.get_uniqueName()}', __name__)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment