4. tēma: Funkcijas un Modularitāte. 3. stunda: Modularitāte.

Tavs šīs stundas izaicinājums: Izprast koda arhitektūras pamatprincipus un sadalīt savu spēles loģiku vairākos moduļos, izveidojot pārskatāmu un profesionālu failu sistēmu.

SR 2.4.15. (Programmas sadalīšana moduļos)

Teorija: Koda arhitektūra un Moduļi

Python valodā jebkurš .py fails ir modulis. Koda dalīšana moduļos padara to lasāmu un ļauj komandai strādāt vienlaicīgi. Visiem Tavas spēles failiem jāatrodas vienā mapē, lai dators tos varētu atrast.

# Iedomājies, ka vienā mapē tev ir divi faili:
# 1. spele.py (tavs galvenais fails)
# 2. ieroci.py (modulis, kurā ir funkcija saut())

# --- 1. variants: Drošais imports ---
import ieroci

ieroci.saut() # Funkcijai obligāti jāliek priekšā faila "uzvārds"

# --- 2. variants: Ērtais imports ---
from ieroci import saut

saut() # Funkciju var saukt pa tiešo, bez "uzvārda"

1. uzdevums: Varoņa Pase (Vienkāršs)

Paredzamais laiks: 15 minūtes
Sāksim ar vienkāršu vizuālo moduli. Tu izveidosi failu, kura vienīgais mērķis ir glīti parādīt spēlētāja datus, un izsauksi to no galvenā faila.

Izpildes soļi:

  1. Izveido mapi rpg_spele un atver to VS Code.
  2. Izveido failu ui.py (User Interface). Tajā definē funkciju def radit_pasi(vards, klase):, kas izvada formatētu tekstu ar spēlētāja vārdu un klasi (piemēram, "Kareivis" vai "Mags").
  3. Tajā pašā mapē izveido failu main.py.
  4. Faila main.py augšā ieraksti: import ui.
  5. Izsauc funkciju, nosūtot tai datus: ui.radit_pasi("Gendalfs", "Burvis").
  6. Palaid main.py caur termināli.

Sagaidāmais rezultāts terminālī:

+----------------------+
| SPĒLĒTĀJA PROFILS |
| Vārds: Gendalfs |
| Klase: Burvis |
+----------------------+

2. uzdevums: Nejaušais laupījums (Viduvējs)

Paredzamais laiks: 20 minūtes
Izmanto from ... import, lai padarītu kodu īsāku. Tu izveidosi sistēmu, kas no lādēm met ārā nejaušus priekšmetus, apvienojot savu moduli ar Python iebūvēto random moduli.

Izpildes soļi:

  1. Mapē izveido jaunu failu inventars.py. Faila augšā pievieno: import random.
  2. Sagatavo sarakstu: lietas = ["Zobens", "Vairogs", "Dziras pudele", "Koka nūja"].
  3. Definē funkciju def atvert_ladi():, kas ar random.choice(lietas) atgriež (return) vienu nejaušu priekšmetu.
  4. Pārej uz main.py. Pašā augšā pievieno jaunu rindu: from inventars import atvert_ladi.
  5. Failā main.py izveido for ciklu, kas atkārtojas 3 reizes. Katrā ciklā izsauc atvert_ladi() un ar print() paziņo spēlētājam, ko viņš atrada.

Sagaidāmais rezultāts (var atšķirties):

Tu atvēri lādi un atradi: Vairogs!
Tu atvēri lādi un atradi: Koka nūja!
Tu atvēri lādi un atradi: Vairogs!

3. uzdevums: Mini-Arēnas Dzinējs (Padziļināts)

Paredzamais laiks: 35 minūtes
Uzprogrammē spēles galveno cilpu (game loop), kas savieno datu aprēķinus no viena faila ar vizuālo attēlojumu no otra faila. Šis simulē īstu spēļu izstrādes arhitektūru!

Sistēmas plāns un soļi:

  1. Fails 1: kauja.py — Importē random. Definē funkciju def speletaja_uzbrukums():, kas atgriež skaitli no 5 līdz 15. Definē otru funkciju def ienaidnieka_uzbrukums():, kas atgriež skaitli no 2 līdz 10.
  2. Fails 2: grafika.py — Definē funkciju def zimet_hp(vārds, hp):. Liec tai izdrukāt vārdu un tik daudz '█' simbolu, cik ir HP (padoms: print(vārds + ": " + "█" * hp)).
  3. Fails 3: main.py — Importē kauja un grafika.
  4. Galvenā loģika ( main.py):
    • Definē mainīgos: speletaja_hp = 20 un orka_hp = 30.
    • Izveido while speletaja_hp > 0 and orka_hp > 0: ciklu.
    • Ciklā: pieprasi input("Spied Enter, lai uzbruktu!").
    • Atskaiti no orka_hp spēlētāja uzbrukuma vērtību (izmantojot funkciju no kauja.py).
    • Atskaiti no speletaja_hp orka uzbrukuma vērtību.
    • Izsauc grafika.zimet_hp abiem tēliem, lai parādītu atlikušo dzīvību.
  5. Pabeidz kodu ar paziņojumu ārpus cikla, kurš uzvarēja.
Svarīgi: Pārliecinies, ka HP nenokrīt zem nulles. Ja gribi būt precīzs, pirms HP zīmēšanas pārbaudi if hp < 0: hp = 0.

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

Koda paraugs failu sadarbībai

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

# ==========================================

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

speletaja_ierocis = "zobens"
bojajums = cina.aprekinat_bojajumu(speletaja_ierocis)

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