ebSkola

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ē.

SR 2.4.16. Saliktas datu struktūras SR 2.4.14. Vadības struktūras (cikli, sazarojumi) SR 2.4.15. Modulāras programmas un funkcijas

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"]
Saraksts glabā kārtis, vārdnīca glabā spēles statusu.

Darba uzdevuma gaita

1. solis: Datu struktūras (1. līmenis)

  1. Failā data.py izveido sarakstu simboli = ["A", "B", "C", "D", "E", "F", "G", "H"].
  2. Izveido sarakstu klajs ar simboliem dubultotiem (8 pāri = 16 vietas) un samaisi to ar random.shuffle().
  3. Izveido vārdnīcu spele = {"meginajumi": 0, "atrasti_pari": 0, "atvertas": []}, lai sekotu spēles statusam.

2. solis: Spēles cikls (2. līmenis)

  1. Izveido funkciju paradit_klaju(klajs, atvertas), kas ar for ciklu izvada 4×4 režģi: atvērtās kārtis kā simbolu, slēgtās kā ?.
  2. Izveido funkciju izveles_apstrade(speletaja_ievade), kas pārvērš "1A" par saraksta indeksu.
  3. Galvenajā while ciklā lūdz divu kāršu izvēli, atklāj tās un palielina meginajumi.
  4. Ja simboli sakrīt - pievieno indeksus atvertas sarakstam un palielini atrasti_pari.
  5. Cikls beidzas, kad atrasti_pari == 8.

3. solis: Modularitāte un Git (3. līmenis)

  1. Sadali kodu trīs failos: main.py (palaiž spēli), engine.py (loģika), data.py (simboli un sākuma stāvoklis).
  2. Pievieno katrai funkcijai īsu docstring.
  3. Ievēro PEP 8: snake_case, atstarpes ap operatoriem, 4 atstarpes atkāpei.
  4. Veic vismaz 4 jēgpilnus commit ar skaidriem ziņojumiem.
  5. Pievieno README.md ar 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.

  1. Izveido failu atmina.py un ieraksti import random.
  2. Ieraksti klajs = ["A", "A", "B", "B"].
  3. Sajauc to ar random.shuffle(klajs) un izdrukā.
  4. Ieraksti spele = {"meginajumi": 0, "atrasti_pari": 0, "atvertas": []}.
  5. Izdrukā vārdnīcu un pārbaudi visas trīs atslēgas.
  6. 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.

  1. Uzraksti while True: ciklu.
  2. Nolasi divas pozīcijas ar int(input(...)).
  3. Pārvērs abas par indeksiem, atņemot 1.
  4. Izdrukā abus simbolus ar klajs[a] un klajs[b].
  5. Palielini spele["meginajumi"] += 1.
  6. Pievieno pagaidu break, lai cikls neietu bezgalīgi.
  7. 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.

  1. Pievieno nosacījumu if klajs[a] == klajs[b]:.
  2. Palielini tajā spele["atrasti_pari"] += 1 un pievieno abus indeksus sarakstam atvertas.
  3. Izņem pagaidu break un pievieno pareizo: cikls beidzas, kad atrasti visi pāri.
  4. Izdrukā beigās mēģinājumu skaitu ar f-string.
  5. Palaid un izspēlē spēli līdz galam.
  6. Veic commit ar ziņu Pievieno atminas speli un push.
  7. 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.

  1. Nomaini klāju uz 8 simbolu pāriem, piemēram no A līdz H.
  2. Pārbaudi, vai pāru skaits sanāk 8.
  3. Izdrukā klāju kā 4 rindas pa 4 kārtīm.
  4. Pārliecinies, ka spēles beigu nosacījums joprojām ir pareizs.
  5. 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)

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