This is a simpler version of the classic Macao card game for one player. You choose the number of players: one of them is you and the rest are bots. Each player will get 5 cards to begin with. You can finish the card straight away if you consider that your deck is weak. If you choose to play, however, these are the rules:
- At each turn, you can either put down a card of draw another one from the game deck.
- You need to put down cards on a current card according to either its suit or its rank. For example, Spades Six can be placed above Spades 4 or Clubs Six.
- If you put down 2 or 3, the next player has to draw 2 or 3 cards, respectively. If you has 2 or 3, he can put it down no matter the suit and add 2 or 3 cards, respectively, to the total sum.The next player can either draw that number of cards or do the same thing. A player who needs to draw cards can also put down a 4 and the cards will be canceled.
- If you put down A, the next player will be skipped. He can put down another A, so the next 2 players will be skipped.
- If you put down a 7, you can change the suit of the card that has to be placed down.
- When you get to one card, you have to type "macao", otherwise you need to draw 3 cards.
- The player that puts down all of his cards wins the game.
When you can't put down any cards due to certain circumstances the game will automatically draw the number of cards that you have to.
Have fun!
Aveți voie cu cod generat de modele de limbaj la care nu ați contribuit semnificativ doar în folder-ul generated
.
Codul generat pus "ca să fie"/pe care nu îl înțelegeți se punctează doar pentru puncte bonus, doar în contextul
în care oferă funcționalități ajutătoare și doar dacă are sens.
O cerință nu se consideră îndeplinită dacă este realizată doar ca o serie de apeluri proxy către cod generat.
- minim o funcționalitate majoritar doar cu LLM
- minim 2-3 funcționalități ~50% voi, ~50% LLM-ul
- minim 2-3 funcționalități suficient de complicate pe care un LLM nu le poate implementa
- Nume proiect (poate fi schimbat ulterior)
- Scurtă descriere a temei alese, ce v-ați propus să implementați
- definirea a minim 3-4 clase folosind compunere cu clasele definite de voi
- constructori de inițializare
- pentru o aceeași (singură) clasă: constructor de copiere,
operator=
de copiere, destructor
-
operator<<
pentru toate clasele pentru afișare (std::ostream) - cât mai multe
const
(unde este cazul) - implementarea a minim 3 funcții membru publice pentru funcționalități specifice temei alese, dintre care cel puțin 1-2 funcții mai complexe
- nu doar citiri/afișări sau adăugat/șters elemente într-un/dintr-un vector
- scenariu de utilizare a claselor definite:
- crearea de obiecte și apelarea tuturor funcțiilor membru publice în main
- vor fi adăugate în fișierul
tastatura.txt
DOAR exemple de date de intrare de la tastatură (dacă există); dacă aveți nevoie de date din fișiere, creați alte fișiere separat
- tag de
git
: de exempluv0.1
- serviciu de integrare continuă (CI); exemplu: GitHub Actions
- separarea codului din clase în
.h
(sau.hpp
) și.cpp
- moșteniri:
- minim o clasă de bază și 3 clase derivate
- ierarhia trebuie să fie cu bază proprie, nu derivată dintr-o clasă predefinită
- clasă cu atribut de tip pointer la o clasă de bază cu derivate
- funcții virtuale (pure) apelate prin pointeri de bază din clasa care conține atributul de tip pointer de bază
- minim o funcție virtuală va fi specifică temei (e.g. nu simple citiri/afișări)
- constructori virtuali (clone): sunt necesari, dar nu se consideră funcții specifice temei
- apelarea constructorului din clasa de bază din constructori din derivate
- smart pointers (recomandat, opțional)
-
dynamic_cast
/std::dynamic_pointer_cast
pentru downcast cu sens
- suprascris cc/op= pentru copieri/atribuiri corecte, copy and swap
- excepții
- ierarhie proprie cu baza
std::exception
sau derivată dinstd::exception
; minim 3 clase pentru erori specifice - utilizare cu sens: de exemplu,
throw
în constructor (sau funcție care întoarce un obiect),try
/catch
înmain
- ierarhie proprie cu baza
- funcții și atribute
static
- STL
- cât mai multe
const
- la sfârșit: commit separat cu adăugarea unei noi clase derivate fără a modifica restul codului, pe lângă cele 3 derivate deja adăugate
- noua derivată nu poate fi una existentă care a fost ștearsă și adăugată din nou
- tag de
git
: de exempluv0.2
- 2 șabloane de proiectare (design patterns)
- o clasă șablon cu sens; minim 2 instanțieri
- preferabil și o funcție șablon (template) cu sens; minim 2 instanțieri
- tag de
git
: de exempluv0.3
sauv1.0