---
# System prepended metadata

title: Untitled

---

- https://github.com/FilipCichowski/pasjans/blob/main/CMakeLists.txt#L2 - można jakoś nazwać ten projekt
- https://github.com/FilipCichowski/pasjans/blob/main/CMakeLists.txt#L6 - ogólnie to powinno się to rozbić na trzy rzeczy
```
add_executable(solitare)

target_include_directories(solitare PUBLIC include) 
# cmake będzie brał dla tego targetu pliku do includów z tego folderu, 
# więc w Deck.cpp nie będziesz pisał #include "../headers/Deck.h" 
# tylko ładniej #include "Deck.h"

target_sources(solitare PRIVATE ...)
# tutaj dodajesz pliki *.c *.cpp
# polecam poszukać jak działa PUBLIC PRIVATE i INTERFACE w CMake'u
```

- https://github.com/FilipCichowski/pasjans/blob/main/headers/Structs.h#L1 - header guardy to ogólnie jest kontrowersyjny temat. właściwie każdy kompilator wspiera już `#pragma once` i jest to o wiele wygodniejsze w użyciu. przy małych projektach jeszcze spoko, ale kiedy już idziesz w dziesiątki plików nagłówkowych to masz ochotę sobie strzelić w łeb.

- https://github.com/FilipCichowski/pasjans/blob/main/headers/Structs.h#L7 - to aż się prosi, żeby zrobić coś w stylu:
```c++
enum class Suit {
    hearts, diamonds, clubs, spades 
};

enum class Rank {
   nine, ten, ..., ace 
};

struct Card {
    Suit suit;
    Rank rank;
}
```

zdecydowanie lepiej to opisuje czym jest karta, bo po id to się można tylko domyślać, jakie id co oznacza.


- https://github.com/FilipCichowski/pasjans/blob/main/headers/Structs.h#L11 tu powino być `using`. `typedef` to naleciałość z C

- https://github.com/FilipCichowski/pasjans/blob/main/headers/Deck.h#L9 przyjmuje się, że `public` jest przed `private`

- https://github.com/FilipCichowski/pasjans/blob/main/headers/Deck.h#L8 jeśli dobrze rozumiem, to zakładasz, że ostatnią kartą w Decku jest karta na ręce. Strasznie to nieintuicyjne, więc ja bym zrobił sobie pole `Card hand` i przez to pole swapował karty.

- https://github.com/FilipCichowski/pasjans/blob/main/src/Deck.cpp#L8 wywaliłbym to do private skoro jest tak naprawdę używana tylko w konstruktorze. albo nazwałbym to `shuffle` bo w sumie to ta funkcja robi

- https://github.com/FilipCichowski/pasjans/blob/main/src/Deck.cpp#L10 nie musisz tworzyć obiektów po drodze. powinno zadziałać coś takiego.
```
std::shuffle(temp.begin(), temp.end(), std::mt19937(std::random_device{}));
```