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.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.
import fails. Ielādē visu moduli. Izsaucot funkciju, obligāti jānorāda moduļa nosaukums.
# Importē visu moduli
import ieroci
# Funkcijas izsaukums prasa moduļa prefiksu
ieroci.saut()
from fails import funkcija. Ielādē tikai konkrētu komponenti. Funkciju var izsaukt tieši, bet jāuzmanās no nosaukumu konfliktiem ar esošo kodu.
# Importē tikai vienu funkciju
from ieroci import saut
# Funkciju var izsaukt tieši
saut()
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.
Izveido atsevišķu moduli, kura vienīgais uzdevums ir vizuāla datu formatēšana, atdalot dizainu no loģikas.
rpg_spele un atver to.ui.py (User Interface modulis).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").main.py.main.py pirmajā rindā ieraksti: import ui.ui.radit_pasi("Gendalfs", "Burvis"). Palaid main.py un pārbaudi rezultātu.Izmanto specifisko importēšanu, lai savienotu savu izveidoto moduli ar Python iebūvēto random moduli.
inventars.py. Faila sākumā importē bibliotēku: import random.lietas = ["Zobens", "Vairogs", "Dzira", "Nūja"].def atvert_ladi():, kas izmanto random.choice() un atgriež (return) vienu priekšmetu no saraksta.main.py failu. Augšā pievieno: from inventars import atvert_ladi.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.Uzprogrammē Game loop (Spēles galveno cilpu), kas integrē matemātiskos aprēķinus no viena faila un grafiku no otra.
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).grafika.py. Definē funkciju zimet_hp(vards, hp), kas izdrukā vārdu un HP joslu (piemēram, reizinot tekstu: "█" * hp).main.py. Importē kauja un grafika moduļus.speletaja_hp = 20 un orka_hp = 30.while speletaja_hp > 0 and orka_hp > 0:. Ciklā pieprasi lietotājam nospiest Enter, lai uzbruktu.kauja.py). Uzreiz pēc tam izsauc grafika.zimet_hp() abiem tēliem. Pievieno pārbaudi, lai HP nekļūtu negatīvs.Izveido atsevišķu failu spēles globālo parametru glabāšanai, atvieglojot balansa regulēšanu.
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".main.py veic importēšanu: import konfiguracija as konf (izmanto Alias (Pseidonīmu) īsākam pierakstam).main.py skriptā ar atsauci uz konfigurācijas failu (piemēram, speletaja_hp = konf.MAX_HP).konfiguracija.py failā un pārliecinies, ka izmaiņas automātiski atspoguļojas galvenajā spēlē.# Slikti: (Ja fails patiesībā saucas ui.py)
import UI_modulis
# Labi:
import ui
# Slikti:
# (Failā main.py): import kauja
# (Failā kauja.py): import main
# Labi:
# Atstāj galveno loģiku main.py, bet palīgmoduļi tikai veic aprēķinus.
random.py). Python ignorēs sistēmas moduli un lādēs Tavu tukšo failu.
# Slikti:
# Sava faila nosaukšana par "random.py" un tad rakstīšana:
import random # Python ielādēs tavu failu, un random.randint() nedarbosies.
# Labi:
# Faila nosaukums: "mans_ģenerators.py"
# ==========================================
# 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!")