CardGameController::showCards()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 5
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 8
rs 10
ccs 0
cts 5
cp 0
crap 2
1
<?php
2
3
namespace App\Controller;
4
5
use App\Card\Deck;
6
7
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
8
use Symfony\Component\HttpFoundation\Response;
9
use Symfony\Component\HttpFoundation\Request;
10
use Symfony\Component\HttpFoundation\Session\SessionInterface;
11
use Symfony\Component\Routing\Annotation\Route;
12
use Exception;
13
14
class CardGameController extends AbstractController
15
{
16
    #[Route("/card", name: "card_start")]
17
    public function home(): Response
18
    {
19
        return $this->render('card/home.html.twig');
20
    }
21
22
    #[Route('/card/deck', name: 'show_cards')]
23
    public function showCards(SessionInterface $session): Response
24
    {
25
        $deck = new Deck();
26
        $session->set('deck', $deck);
27
28
        return $this->render('card/deck.html.twig', [
29
            'deck' => $deck,
30
        ]);
31
    }
32
33
    #[Route('/card/deck/shuffle', name: 'shuffle_deck')]
34
    public function shuffleDeck(SessionInterface $session): Response
35
    {
36
        $deck = new Deck();
37
        $deck->shuffle();
38
39
        $session->set('deck', $deck);
40
41
        return $this->render('card/shuffle.html.twig', [
42
            'deck' => $deck,
43
        ]);
44
    }
45
46
    #[Route('/card/deck/draw', name: 'draw_card')]
47
    public function drawCard(SessionInterface $session): Response
48
    {
49
        // Check if deck is not in session
50
        if (!$session->has('deck')) {
51
            $deck = new Deck(); // Create a new deck of cards
52
            $session->set('deck', $deck);
53
        }
54
55
        // Retrieve deck from session
56
        $deck = $session->get('deck');
57
58
59
        if ($deck->remainingCardsCount() < 1) {
60
            throw new Exception("Cannot draw more cards. No cards left in deck.");
61
        }
62
63
        // Draw a card
64
        $drawnCard = $deck->drawCard();
65
66
        // Update the session
67
        $session->set('deck', $deck);
68
69
        return $this->render('card/draw.html.twig', [
70
            'drawnCard' => $drawnCard,
71
            'remainingCardsCount' => $deck->remainingCardsCount(),
72
        ]);
73
    }
74
75
    #[Route('/card/deck/draw/{number<\d+>}', name: 'draw_cards')]
76
    public function drawCards(int $number, SessionInterface $session): Response
77
    {
78
        // Check if deck is not in session
79
        if (!$session->has('deck')) {
80
            $deck = new Deck(); // Create a new deck of cards
81
            $session->set('deck', $deck);
82
        }
83
84
        // Retrieve deck from session
85
        $deck = $session->get('deck');
86
87
        if ($number > $deck->remainingCardsCount()) {
88
            throw new Exception("Cannot draw $number cards. Only {$deck->remainingCardsCount()} cards left in deck.");
89
        }
90
91
        // Draw the number of cards from the deck
92
        $drawnCards = [];
93
        for ($i = 0; $i < $number; $i++) {
94
            $drawnCard = $deck->drawCard();
95
            $drawnCards[] = $drawnCard;
96
        }
97
98
        // Update the session
99
        $session->set('deck', $deck);
100
101
        return $this->render('card/draw_many.html.twig', [
102
            'drawnCards' => $drawnCards,
103
            'remainingCardsCount' => $deck->remainingCardsCount(),
104
        ]);
105
    }
106
107
}
108