88 lines
2.8 KiB
Python
88 lines
2.8 KiB
Python
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/<id>')
|
|
def get_status(id: int):
|
|
return json.dumps(b.get_status(int(id)), cls=Card.JSONEncoder)
|
|
|
|
@app.route('/bridzik/<player>/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/<player>/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/<player>/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)
|