›_ ebskola.lv
← 5.5

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

Pirms sāc: izmanto iepriekš apgūto un šīs lapas teorijas/koda piemērus. Ja vajadzīga jauna komanda vai rīks, vispirms atrodi tās paraugu teorijas sadaļā.

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.

70 min plāns: datu struktūras ~20 min, spēles cikls ~30 min, modularitāte un GitHub ~20 min.

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 - Iesildies ar gatavu piemēru

Šis ir īss iesildīšanās uzdevums. Nokopē sagatavi, ielīmē to pareizajā koda vietā un palaid. Šeit pietiek droši izmēģināt tēmu 5.6 Noslēguma projekts: Atmiņu kāršu spēle; detalizētu izpratni veidosi nākamajos uzdevumos.

Kopējamais piemērs vai sagatave: izmanto šo bloku kā starta punktu, nevis kā gala risinājumu.

spele = {
    "meginajumi": 0,
    "atrasti_pari": 0,
    "atvertas": []
}

klajs = ["A", "A", "B", "B"]
  1. Atver darba failu vai rīku. Python fragmentu ievieto main.py failā un palaid no termināļa.
  2. Nokopē visu piemēra bloku no šī uzdevuma un ielīmē to norādītajā vietā.
  3. Palaid kodu tieši tādu, kāds tas ir, un pārliecinies, ka parādās rezultāts, izvade vai vismaz nav kļūdas paziņojuma.
  4. Atrodi vienu drošu vietu, ko drīkst mainīt: tekstu, skaitli, krāsu, mainīgā vērtību vai testa ierakstu.
  5. Maini tikai šo vienu vērtību un palaid kodu vēlreiz.
  6. Salīdzini rezultātu pirms un pēc izmaiņas. Ja parādās kļūda, atcel pēdējo izmaiņu un palaid vēlreiz.
  7. Turpini pie 2. uzdevuma tikai tad, kad šis mazais piemērs darbojas.

2. uzdevums - Ievieto algoritmu projektā

Pievieno šīs stundas paņēmienu kā nelielu, strādājošu projekta daļu.

  1. Izvēlies vienu konkrētu projekta vietu: ievadi, aprēķinu, izvēli, ciklu, datu struktūru, funkciju vai rezultāta izvadi.
  2. Nosauc funkcijas un mainīgos pēc to lomas, piemēram, punkti, gajiens, atbilde, rezultats vai parbauda_ievadi().
  3. Uzraksti funkciju vai koda bloku, kas nolasa sākuma datus, tos apstrādā un atgriež vai izvada rezultātu.
  4. Savieno šo kodu ar jau esošo projekta plūsmu, nevis atstāj to atsevišķā demonstrācijā.
  5. Pievieno vienu īsu komentāru pie sarežģītākās darbības.
  6. Pārbaudi, ka iepriekšējais kods joprojām darbojas pēc jaunā fragmenta pievienošanas.
  7. Salabo pirmo atrasto kļūdu pirms paplašini risinājumu.
  8. Veic Git commit ar īsu ziņu par pievienoto funkcionalitāti.

3. uzdevums - Testē kodu un izdari secinājumu

Pārbaudi, vai algoritms darbojas paredzami vairākās situācijās.

  1. Izveido trīs testa scenārijus: parasta ievade, robežgadījums un kļūdaina vai tukša ievade.
  2. Palaid parasto scenāriju un pārbaudi termināļa izvadi.
  3. Palaid robežgadījumu ar mazāko, lielāko vai tukšāko vērtību, ko šis kods var saņemt.
  4. Palaid kļūdaino scenāriju un pārbaudi, vai programma neavarē.
  5. Izlabo vienu konkrētu problēmu kodā, datos vai ievades pārbaudē.
  6. Pārbaudi labojumu vēlreiz ar visiem trim scenārijiem.
  7. Beigās pieraksti vienu secinājumu: kura koda rinda vai algoritma solis vislabāk palīdzēja saprast tēmu 5.6 Noslēguma projekts: Atmiņu kāršu spēle.

Papildu uzdevums - Pievieno mazu funkciju

Ja pamatdarbs ir pabeigts, paplašini projektu ar vienu nelielu programmētu uzlabojumu.

  1. Izvēlies vienu mazu papildinājumu, kas izmanto to pašu šīs stundas paņēmienu.
  2. Pievieno vienu jaunu mainīgo, funkciju, nosacījumu, ciklu, datu elementu vai rezultāta izvadi.
  3. Savieno papildinājumu ar esošo projekta kodu.
  4. Pārbaudi, ka pamatfunkcija un papildinājums darbojas kopā.
  5. Saglabā izmaiņas ar Git commit tikai pēc veiksmīgas pārbaudes.

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

⬅ Iepriekšējā stunda Tēmas apkopojums ➡