from api import app from bridzik import Bridzik, Card, Card_colors, Card_values, BridzikException import json from flask import render_template, url_for, flash, redirect from api.forms import GuessForm, PlayForm, AdminForm from api.utils import get_points_sums, sort_card_list b = Bridzik() players = [ 'Jakub', 'Timo', 'Katka', 'Ondrej' ] @app.route('/bridzik_api/get_status/') def get_status(id: int): return json.dumps(b.get_status(int(id)), cls=Card.JSONEncoder) @app.route('/bridzik//status') def status(player): player = int(player) game_status = b.get_status(player) action = None form = None player_cards = sort_card_list(b.series[-1].get_last_round().player_cards[player]) game_status['player_cards'] = [str(c) for c in player_cards] points_sums = get_points_sums(game_status['standings']) if b.is_completed() or b.series[-1].get_last_round().get_active_player() != player: pass elif not b.series[-1].get_last_round().is_guessing_completed(): form = GuessForm(max_guess= 8 - b.series[-1].get_last_round().round_number) action = 'guess' else: form = PlayForm() form.card.choices = [(str(c), str(c)) for c in player_cards] action = 'play' return render_template( 'status.html', status=game_status, player=player, action=action, form=form, players=players, points_sums=points_sums ) @app.route('/bridzik//guess', methods=['POST']) def guess(player): player = int(player) form = GuessForm() try: b.add_player_guess(player, int(form.guess.data)) except BridzikException: flash('Nie je možné zadať tip.') return redirect(url_for('status', player=player)) @app.route('/bridzik//play_card', methods=['POST']) def play_card(player): player = int(player) player_cards = b.series[-1].get_last_round().player_cards[player] form = PlayForm() form.card.choices = [(str(c), str(c)) for c in player_cards] color, value = form.card.data.split('_') try: card = Card(Card_colors[color], Card_values[value]) except KeyError: flash('Chyba. Opakuj pokus znovu.') try: b.play_card(player, card) except BridzikException: flash('Nie je možné zahrať kartu.') return redirect(url_for('status', player=player)) @app.route('/bridzik/admin', methods=['GET', 'POST']) def admin(): form = AdminForm() if form.validate_on_submit(): players[0] = form.player0.data players[1] = form.player1.data players[2] = form.player2.data players[3] = form.player3.data return redirect(url_for('admin')) else: form.player0.data = players[0] form.player1.data = players[1] form.player2.data = players[2] form.player3.data = players[3] return render_template('admin.html', form=form)