4. tēma: 4.3 Modularitāte un koda sadalīšana

Tavs šīs stundas izaicinājums: Izprast programmatūras arhitektūras pamatprincipus un sadalīt spēles loģiku vairākos izolētos failos, izveidojot pārskatāmu un profesionālu projekta struktūru.

2.4.15. Veido modulāras programmas un funkcijas.
2.4.6. Plāno un dokumentē programmatūras izstrādes procesu.

Teorija: Koda arhitektūra un moduļi

Python valodā jebkurš fails ar .py paplašinājumu ir Module (Modulis). Koda dalīšana moduļos padara to lasāmu, novērš viena milzīga faila veidošanos un ļauj komandai strādāt vienlaicīgi pie dažādām projekta daļām.

Visiem Tavas spēles moduļiem jāatrodas vienā Directory (Mapē), lai dators varētu tos automātiski atrast bez sarežģītas ceļu konfigurēšanas.

1. uzdevums: Varoņa profila interfeiss (UI modulis)

Izveido atsevišķu moduli, kura vienīgais uzdevums ir vizuāla datu formatēšana, atdalot dizainu no loģikas.

Izpildes soļi:

  1. VS Code izveido jaunu mapi rpg_spele un atver to.
  2. Izveido failu ui.py (User Interface modulis).
  3. Tajā definē funkciju def radit_pasi(vards, klase):, kas izvada formatētu tekstu ar rāmīšiem, spēlētāja vārdu un klasi (piemēram, "Kareivis").
  4. Tajā pašā mapē izveido galveno failu main.py.
  5. Faila main.py pirmajā rindā ieraksti: import ui.
  6. Izsauc funkciju, nosūtot tai savus datus: ui.radit_pasi("Gendalfs", "Burvis"). Palaid main.py un pārbaudi rezultātu.

2. uzdevums: Nejaušais laupījums (Inventāra modulis)

Izmanto specifisko importēšanu, lai savienotu savu izveidoto moduli ar Python iebūvēto random moduli.

Izpildes soļi:

  1. Mapē izveido failu inventars.py. Faila sākumā importē bibliotēku: import random.
  2. Sagatavo sarakstu: lietas = ["Zobens", "Vairogs", "Dzira", "Nūja"].
  3. Definē funkciju def atvert_ladi():, kas izmanto random.choice() un atgriež (return) vienu priekšmetu no saraksta.
  4. Pārej uz main.py failu. Augšā pievieno: from inventars import atvert_ladi.
  5. Failā main.py izveido for ciklu ar 3 iterācijām. Cikla iekšienē izsauc atvert_ladi() un ar formatētu virkni paziņo, ko spēlētājs atrada.

3. uzdevums: Mini-Arēnas dzinējs (Galvenā cilpa)

Uzprogrammē Game loop (Spēles galveno cilpu), kas integrē matemātiskos aprēķinus no viena faila un grafiku no otra.

Izpildes soļi:

  1. Izveido failu kauja.py. Importē random un definē divas funkcijas: speletaja_uzbrukums() (atgriež int no 5 līdz 15) un ienaidnieka_uzbrukums() (atgriež int no 2 līdz 10).
  2. Izveido failu grafika.py. Definē funkciju zimet_hp(vards, hp), kas izdrukā vārdu un HP joslu (piemēram, reizinot tekstu: "█" * hp).
  3. Atver main.py. Importē kauja un grafika moduļus.
  4. Definē sākuma mainīgos: speletaja_hp = 20 un orka_hp = 30.
  5. Izveido ciklu while speletaja_hp > 0 and orka_hp > 0:. Ciklā pieprasi lietotājam nospiest Enter, lai uzbruktu.
  6. Atskaiti no katra tēla HP pretinieka uzbrukuma vērtību (izsaucot atbilstošās funkcijas no kauja.py). Uzreiz pēc tam izsauc grafika.zimet_hp() abiem tēliem. Pievieno pārbaudi, lai HP nekļūtu negatīvs.
  7. Iesūtīt uzdevuma github saiti e-klasē.

Papildus uzdevums: Konfigurācijas modulis (Iestatījumi)

Izveido atsevišķu failu spēles globālo parametru glabāšanai, atvieglojot balansa regulēšanu.

Izpildes soļi:

  1. Izveido failu konfiguracija.py. Šajā failā neiekļauj nevienu funkciju, tikai definē konstantus mainīgos (Constants ar lielajiem burtiem): MAX_HP = 100, BAZES_SPEKS = 15, SPELTATAJA_VARDS = "Varonis".
  2. Failā main.py veic importēšanu: import konfiguracija as konf (izmanto Alias (Pseidonīmu) īsākam pierakstam).
  3. Aizstāj visus cietkodētos (Hardcoded) sākuma parametrus main.py skriptā ar atsauci uz konfigurācijas failu (piemēram, speletaja_hp = konf.MAX_HP).
  4. Izmaini vērtības konfiguracija.py failā un pārliecinies, ka izmaiņas automātiski atspoguļojas galvenajā spēlē.

Biežākās kļūdas (un kā tās labot):

Koda piemērs: Koda sadalīšana

# ==========================================
# 1. fails: cina.py (Modulis aprēķiniem)
def aprekinat_bojajumu(ierocis):
    if ierocis == "zobens":
        return 15
    return 5

# ==========================================
# 2. fails: main.py (Galvenais skripts)
import cina

speletaja_ierocis = "zobens"

# Izsaucam funkciju, norādot moduļa vārdu "cina"
bojajums = cina.aprekinat_bojajumu(speletaja_ierocis)

print(f"Tu cērti ar {speletaja_ierocis} un izdari {bojajums} bojājumu!")
Tu cērti ar zobens un izdari 15 bojājumu!
⬅ Iepriekšējā stunda Nākamā stunda ➡