Kmom02::cardHand()   A
last analyzed

Complexity

Conditions 4
Paths 6

Size

Total Lines 35
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 4
eloc 17
c 2
b 0
f 0
nc 6
nop 2
dl 0
loc 35
rs 9.7
1
<?php
2
3
namespace App\Controller;
4
5
use App\Card\Card;
6
use App\Card\CardGraphic;
7
use App\Card\CardHand;
8
use App\Card\DeckOfCards;
9
use Exception;
10
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
11
use Symfony\Component\HttpFoundation\Request;
12
use Symfony\Component\HttpFoundation\Response;
13
use Symfony\Component\HttpFoundation\Session\SessionInterface;
14
use Symfony\Component\Routing\Annotation\Route;
15
16
class Kmom02 extends AbstractController
17
{
18
    #[Route("/session", name: "session", methods: ['GET'])]
19
    public function session(
20
        SessionInterface $session
21
    ): Response {
22
23
        //Get all session data
24
        $allData = $session->all();
25
26
        $data = [
27
            "session" => $allData
28
        ];
29
30
        return $this->render('session.html.twig', $data);
31
    }
32
33
    #[Route("/session/delete", name: "delete_session", methods: ['POST'])]
34
    public function deleteSession(
35
        SessionInterface $session
36
    ): Response {
37
        //Clear session content and destroy session
38
        $session->clear();
39
        $session->invalidate();
40
41
        //Add info flash that session is deleted
42
        $this->addFlash(
43
            'notice',
44
            'Session is deleted!'
45
        );
46
        return $this->redirectToRoute('session');
47
    }
48
49
    #[Route("/card", name: "card", methods: ['GET'])]
50
    public function card(): Response
51
    {
52
        return $this->render('card.html.twig');
53
    }
54
55
    #[Route("/card/deck", name: "card_deck", methods: ['GET', 'POST'])]
56
    public function cardDeck(
57
        SessionInterface $session
58
    ): Response {
59
        //Visar samtliga kort i kortleken sorterade per färg och värde.
60
        $carddeck = $session->get("card_deck");
61
62
        if (!$carddeck) {
63
            $carddeck = new DeckOfCards();
64
        }
65
        /** @var DeckOfCards $carddeck */
66
67
        //Add cards sorted
68
        $carddeck->sortCards();
69
70
        //Add deck to session
71
        $session->set("card_deck", $carddeck);
72
73
        $cards = [];
74
        foreach ($carddeck->getValues() as $card) {
75
            $newCard = new CardGraphic($card);
76
            $cards[] = $newCard->getValue();
77
        }
78
79
        $data = [
80
            "header" => "All cards sorted",
81
            "cardValues" => $cards
82
        ];
83
84
        return $this->render('show_deck.html.twig', $data);
85
    }
86
87
    #[Route("/card/deck/shuffle", name: "card_shuffle", methods: ['POST'])]
88
    public function cardShuffle(
89
        SessionInterface $session
90
    ): Response {
91
        //Återställ kortlek
92
        $carddeck = new DeckOfCards();
93
94
        //shuffle carddeck
95
        $carddeck->shuffleCards();
96
97
        $cards = [];
98
        foreach ($carddeck->getValues() as $card) {
99
            $newCard = new CardGraphic($card);
100
            $cards[] = $newCard->getValue();
101
        }
102
103
        //Sätt uppdaterad deck till session
104
        $session->remove('card_deck');
105
        $session->set("card_deck", $carddeck);
106
107
        $data = [
108
            "header" => "All cards shuffled",
109
            "cardValues" => $cards
110
        ];
111
112
        return $this->render('show_deck.html.twig', $data);
113
    }
114
115
    #[Route("/card/deck/draw", name: "card_draw", methods: ['GET', 'POST'])]
116
    public function cardDraw(
117
        SessionInterface $session
118
    ): Response {
119
        //Hämta kortlek från session
120
        $carddeck = $session->get("card_deck");
121
122
        if (!$carddeck) {
123
            $carddeck = new DeckOfCards();
124
        }
125
        /** @var DeckOfCards $carddeck */
126
127
        //Dra 1 kort från kortleken
128
        $values = $carddeck->drawCard();
129
        $card = new CardGraphic($values);
130
131
        //Spara uppdaterad deck till session
132
        $session->set("card_deck", $carddeck);
133
134
        //Visa kort och antal kvar i kortlek
135
        $data = [
136
            "header" => "Draw one card",
137
            "num_cards" => $carddeck->getNumberCards(),
138
            "value" => $card->getValue(),
139
        ];
140
141
        return $this->render('draw_card.html.twig', $data);
142
    }
143
144
    #[Route("/card/deck/draw/{num<\d+>}", name: "card_hand", methods: ['GET', 'POST'])]
145
    public function cardHand(
146
        int $num,
147
        SessionInterface $session
148
    ): Response {
149
        //Hämta kortlek från session
150
        $carddeck = $session->get("card_deck");
151
152
        if (!$carddeck) {
153
            $carddeck = new DeckOfCards();
154
        }
155
        /** @var DeckOfCards $carddeck */
156
157
        if ($num > $carddeck->getNumberCards()) {
158
            throw new Exception("Can not draw more cards than available in deck!");
159
        }
160
161
        //Dra flera kort från kortlek
162
        $hand = new cardHand();
163
        for ($i = 0; $i < $num; $i++) {
164
            $value = $carddeck->drawCard();
165
            $card = new CardGraphic($value);
166
            $hand->add($card);
167
        }
168
169
        //Spara uppdaterad deck till session
170
        $session->set("card_deck", $carddeck);
171
172
        $data = [
173
            "header" => "Draw multiple cards",
174
            "num_cards" => $carddeck->getNumberCards(),
175
            "values" => $hand->getValues(),
176
        ];
177
178
        return $this->render('draw_cards.html.twig', $data);
179
    }
180
}
181