Tavs šīs stundas izaicinājums: Nodalīt stāstu no koda. Tu iemācīsies izmantot Google Sheets, lai izveidotu strukturētu spēles pasauli, un eksportēt to CSV formātā. Tas ļaus Tev uzrakstīt 100 istabu spēli, nepievienojot nevienu jaunu Python funkciju!
SR 2.3.5. (Datu strukturēšana izklājlapās) un SR 2.4.1. (Sistēmas dekompozīcija)Profesionālā spēļu izstrādē mēs cenšamies pēc modularitātes. Programmētājs uzbūvē "dzinēju" (Python kodu), bet rakstnieks sagatavo "degvielu" (Google Sheets stāstu).
| Kolonna (Galvene) | Nozīme | Piemērs |
|---|---|---|
id |
Unikāls numurs katrai lokācijai. | 1 |
teksts |
Kas notiek šajā vietā? | Tu stāvi pie upes... |
izvele_a |
Darbības nosaukums. | Peldēt |
merkis_a |
Kurp šī izvēle ved (Nākamās vietas ID)? | 2 |
id, nosaukums, teksts, izvele_a, merkis_a, izvele_b, merkis_b.merkis_a un merkis_b ailēs ieraksti tikai skaitļus (tās lokācijas ID, uz kuru spēlētājam jādodas).pasaule.csv un ievieto sava Python projekta mapē.tests.py un faila augšā ieraksti import csv.pasaule.csv lasīšanas režīmā ("r") ar UTF-8 kodējumu.csv.DictReader(fails), lai datus nolasītu.for ciklu, kas iet cauri šim "lasītājam" un izprintē katras lokācijas ID un nosaukumu.1. "Aklie zari": Ja Tavā izvēlē mērķis ir ID5, bet tabulā nav rindas, kas sākas ar ID5, spēle šajā brīdī avarēs ar kļūdu.
2. Galveņu nesakritība: Python kodā Tu atsauksies uz kolonnu nosaukumiem (piem.,rinda['izvele_a']). Ja tabulā ierakstīji "Izvele A", kods atgriezīs KeyError.
3. Komati tekstā: Ja stāstā lieto komatus, Google Sheets tos eksportējot automātiski ieliks pēdiņās. Pythoncsvmodulis to saprot, tāpēc droši lieto pieturzīmes stāstā!
import csv
# Atveram eksportēto failu
with open('pasaule.csv', mode='r', encoding='utf-8') as f:
# DictReader pārvērš katru CSV rindu par Python vārdnīcu (dict),
# kur atslēgas ir tabulas pirmās rindas (galveņu) nosaukumi.
lasitajs = csv.DictReader(f)
for rinda in lasitajs:
print(f"ID: {rinda['id']} | Vieta: {rinda['nosaukums']}")
print(f"Apraksts: {rinda['teksts'][:30]}...") # Izvada tikai pirmos 30 burtus
print("-" * 20)