5.6 Noslēguma projekts: Atmiņu kāršu spēle
Stundas uzdevums: Apvienot 5. tēmā apgūtās sarakstu, vārdnīcu un for ciklu prasmes terminālī spēlējamā kāršu pāru atrašanas spēlē.
70 min plāns: Ievads un kritēriju pārruna (~10 min) · 1. uzdevums (~15 min) - izveido klāju un spēles stāvokli · 2. uzdevums (~25 min) - uzraksti divu kāršu atvēršanu · 3. uzdevums (~20 min) - pievieno pāru pārbaudi un iesniedz GitHub. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.
Pirms sāc: šis ir 5. tēmas noslēguma projekts. Izmanto tikai apgūto: sarakstus, vārdnīcas, for un while ciklus. Sāc ar mazu 2x2 klāju un tikai pēc tam palielini to.
Teorija: spēles stāvoklis dzīvo datu struktūrās
Programma izveido 4×4 (16 kāršu) galdiņu ar 8 simbolu pāriem (piem., AABB...). Visas kārtis sākumā ir aizvērtas. Spēlētājs ievada divu kāršu pozīcijas (piem., 1A un 3D) - programma tās uz brīdi atklāj. Ja simboli sakrīt, kārtis paliek atvērtas; ja nē, tiek aizvērtas. Spēle beidzas, kad atrasti visi pāri. Beigās tiek izvadīts mēģinājumu skaits.
spele = {
"meginajumi": 0,
"atrasti_pari": 0,
"atvertas": []
}
klajs = ["A", "A", "B", "B"]
Darba uzdevuma gaita
1. solis: Datu struktūras (1. līmenis)
- Failā
data.pyizveido sarakstusimboli = ["A", "B", "C", "D", "E", "F", "G", "H"]. - Izveido sarakstu
klajsar simboliem dubultotiem (8 pāri = 16 vietas) un samaisi to arrandom.shuffle(). - Izveido vārdnīcu
spele = {"meginajumi": 0, "atrasti_pari": 0, "atvertas": []}, lai sekotu spēles statusam.
2. solis: Spēles cikls (2. līmenis)
- Izveido funkciju
paradit_klaju(klajs, atvertas), kas arforciklu izvada 4×4 režģi: atvērtās kārtis kā simbolu, slēgtās kā?. - Izveido funkciju
izveles_apstrade(speletaja_ievade), kas pārvērš"1A"par saraksta indeksu. - Galvenajā
whileciklā lūdz divu kāršu izvēli, atklāj tās un palielinameginajumi. - Ja simboli sakrīt - pievieno indeksus
atvertassarakstam un palieliniatrasti_pari. - Cikls beidzas, kad
atrasti_pari == 8.
3. solis: Modularitāte un Git (3. līmenis)
- Sadali kodu trīs failos:
main.py(palaiž spēli),engine.py(loģika),data.py(simboli un sākuma stāvoklis). - Pievieno katrai funkcijai īsu docstring.
- Ievēro PEP 8: snake_case, atstarpes ap operatoriem, 4 atstarpes atkāpei.
- Veic vismaz 4 jēgpilnus commit ar skaidriem ziņojumiem.
- Pievieno
README.mdar palaišanas instrukciju.
Praktiskie uzdevumi
1. uzdevums -
Izveido klāju un spēles stāvokli
Beigās tev būs sajaukts kāršu klājs un vārdnīca, kas seko spēles gaitai.
- Izveido failu
atmina.pyun ierakstiimport random. - Ieraksti
klajs = ["A", "A", "B", "B"]. - Sajauc to ar
random.shuffle(klajs)un izdrukā. - Ieraksti
spele = {"meginajumi": 0, "atrasti_pari": 0, "atvertas": []}. - Izdrukā vārdnīcu un pārbaudi visas trīs atslēgas.
- Palaid divas reizes un pārbaudi, vai klāja secība mainās.
Gatavs, kad: klājs katrā palaišanā ir citā secībā, un vārdnīcā ir tieši trīs atslēgas.
2. uzdevums -
Uzraksti divu kāršu atvēršanu
Beigās spēlētājs varēs nosaukt divas pozīcijas un redzēt to simbolus.
- Uzraksti
while True:ciklu. - Nolasi divas pozīcijas ar
int(input(...)). - Pārvērs abas par indeksiem, atņemot 1.
- Izdrukā abus simbolus ar
klajs[a]unklajs[b]. - Palielini
spele["meginajumi"] += 1. - Pievieno pagaidu
break, lai cikls neietu bezgalīgi. - Palaid un izmēģini vienu gājienu.
Gatavs, kad: programma parāda divus simbolus un mēģinājumu skaitītājs kļūst 1.
3. uzdevums -
Pievieno pāru pārbaudi un iesniedz GitHub
Beigās spēle beigsies, kad atrasti visi pāri.
- Pievieno nosacījumu
if klajs[a] == klajs[b]:. - Palielini tajā
spele["atrasti_pari"] += 1un pievieno abus indeksus sarakstamatvertas. - Izņem pagaidu
breakun pievieno pareizo: cikls beidzas, kad atrasti visi pāri. - Izdrukā beigās mēģinājumu skaitu ar f-string.
- Palaid un izspēlē spēli līdz galam.
- Veic commit ar ziņu
Pievieno atminas speliun push. - Iesniedz krātuves saiti skolotājam.
Gatavs, kad: spēle beidzas pati, kad atrasti abi pāri, un parāda, cik mēģinājumos tas izdevās.
Papildu uzdevums - Palielini klāju līdz 4x4
Ja pamatdarbs ir gatavs, pārej no 4 kārtīm uz 16.
- Nomaini klāju uz 8 simbolu pāriem, piemēram no
AlīdzH. - Pārbaudi, vai pāru skaits sanāk 8.
- Izdrukā klāju kā 4 rindas pa 4 kārtīm.
- Pārliecinies, ka spēles beigu nosacījums joprojām ir pareizs.
- Palaid un izspēlē pilnu spēli.
Gatavs, kad: spēle strādā ar 16 kārtīm un beidzas pēc astoņiem atrastiem pāriem.
Biežākās kļūdas (un kā tās labot)
- Atvērtās kārtis pazūd: glabā atvērto indeksu sarakstu un izmanto to, drukājot galdiņu.
- Kārtis nav sajauktas: izmanto
random.shuffle()tikai pēc pāru saraksta izveides. - Indekss neatbilst pozīcijai: pieraksti formulu, kas no rindas/kolonnas iegūst saraksta indeksu.
- Spēle nebeidzas: pārbaudi, vai
atrasti_paripalielinās tikai tad, kad pāris tiešām sakrīt.
Vērtēšanas kritēriji
| Kritērijs | Sācis (1-3) | Turpina (4-6) | Apguvis (7-8) | Padziļināti (9-10) |
|---|---|---|---|---|
| Datu struktūras | Dati tiek glabāti atsevišķos mainīgajos. | Lieto sarakstu, bet vārdnīca trūkst vai izmantota nepareizi. | Lieto sarakstu kāršu klājam un vārdnīcu spēles statusam. | Izmanto ligzdotas struktūras (piem., saraksts vārdnīcā) un papildu metaliela informāciju. |
| Cikli un iterācija | Cikls neizpildās vai izraisa kļūdu. | Cikls strādā, bet izvade nav glīta. | For cikls korekti izvada režģi, while cikls pareizi pārtraucas. | Pievienota validācija lietotāja ievadei (kļūdas neavarē programmu). |
| Modularitāte un stils | Viens fails, nav PEP 8. | Sadalīts vairākos failos, bet imports vai struktūra nepilnīga. | 3 faili, korekta moduļu sadarbība, PEP 8, docstring. | Profesionāla struktūra: type hints, README, GitHub ar 4+ commit. |
Pašpārbaudes saraksts
- Programma startē, palaižot tikai
main.py. - Galdiņš tiek izvadīts pārskatāmā 4×4 režģī.
- Ja kārtis sakrīt, tās paliek atvērtas; ja nē - tiek aizvērtas.
- Spēles beigās tiek izvadīts mēģinājumu skaits.
- GitHub vēsturē ir vismaz 4 saturīgi commit.
- Failā
README.mdir instrukcija, kā spēli palaist.