Izveidot GIT repo (nosharot un atsūtīt https://github.com/evaldsurtans)
Atsūtīt ar uz Whatsapp repo link. Regulāri veikt commits un pushes visām izmaiņām nevis tikai pēdējām
Spēles piemērs:
https://www.youtube.com/watch?v=MU4psw3ccUI
Vizuālajam izmantot šīs game sprites - pašam nekas nav jāzīmē:
https://share.yellowrobot.xyz/quick/2025-1-24-990F0997-CF25-49F1-8E88-F40C78C918AD.zip
Spēlē nepieciešamās funkcijas:
Ar klaviatūras bultiņām var pārvietot pa labi un pa kreisi kosmosa kuģi
Ar space var šaut lodi (Lode arī OOP, vizuāli var zīmēt kastīti ar pozīciju). Sadursmēm nav jabūt pixel-prefect
Spēles līmenis tiek uzģenerēts tā, ka trīs dažādu veidu citplanētieši tiek sakārtoti rindās un pārvietojas no vienas ekrāna malas līdz otrai , ieturot savu pozīciju, līdz kāds no citplanētiešiem pirmais sasniedz ekrāna malu, ja nošauti visi gar malu, tad jāpietovujoas nākamajiem pie malām
Pa ekrāna augšu ar nejaušiem intervāliem pārvietojas citplanētiešu šķīvītis
Tiklīdz kā lode sasniedz
Opcionāli var uztaisīt arī aizsargbarjeras
Jābūt punktu un spēlētāja dzīvibu uzskaitei
Jāvar jebkurā brīdī spēli apturēt un viss spēles stāvoklis jāsaglabā JSON failā, pēc tam var no jauna sākt spēlēt un atgriezties iepriekšējā stāvoklī
Pirms sākt programmēt spēli, izmantojot mermaidjs sagatavot UML class diagram par to kāda būs spēles struktūra un UML sequence diagram kāda būs spēles loģika, iepushot šīs diagrammas MD formātā GIT (Var izmantot piemēram Typora, lai sagtavotu). Kad diagrammas ir sagatavotas, iepushot uz evaldsurtans un dot ziņu whatsapp.
Izmanot Python un PyGame vidi
Implementēt spēli OOP (Object Oriented Programming) veidā
Izmantot Inheritance / Pārmantošanu tā, ka visiem alien kopīgās funkcijas atrodas bāzes klasē.
Polymorphism - strādāt at bāzes klases funkcijām piemēram alien.action(), kaut arī pati funkcija var būt implementēta tikai child klasēs - pēc iespējas mazāk strādāt ar specifiskām klasēm, izmantot cik vien var bāzes klašu funkcijas, BET kodam jāatrodas child klasēs kur tas ir specifisks. Katram alien tipam jābūt savai loģikai. Loģika atrodas controller klasēs.
Encapsulation - izveidot getters/ setters visām klasēm, member mainīgajiem nepiekļūstam pa no ārpuses
Izmantot design patterns
MVC - Model View Controller
Model - dažādas klases nevis vnk Model - Game state glabājās dataclasses un nesatur funkcijas!
Controller - dažādas klases nevis vnk Controller - strādā ar dataclasess un tiek izsaukti no View, kad kaut kas notiek izsauc event emitters, kurus noķer view
View - PyGame applikācija, saņem UI/IO inputs, klausās controller events un zīmē spēli
Observer - dispatch event un add event listener - veids kā komunicē Controller <-> View un kā saņem user inputs iekš View. Visi aliens savā starpā sazinās izmantojot Events, piemēram, kad viens sasniedz sienu, visiem pārējiem paziņo, ka jālido pretējā virzienā.
Singleton - Pieejama instance no visām vietām kodā - piemēram GameState, kur var apstrādāt punktus, līmeņusutt (atkal klases nosaukums nav Singleton!)
Factory - pēc izkārtojuma struktūras ģenerēt aliens objektus
Visām python funkcijām und atiem izmantot Typing (definēt tipus)
Kodā visām funkcijām viens input - viens output - nedrīkst būt daudzi return kodā
Visi mainīgie vienā stilā un angļu valodā
Nerakstīt kodu makaronos - pēc iespējas vairāk sadalīt vairākos atsevišķos funkciju izsaukumos
Spēlei fiksēta izmēra logs (nav nepieciešams full-screen)
Spēlei nav nepieciešami nekādi MENUS var sākt spēlēt uzreiz un pēc spēles vnk viens paziņojums pēc kura var atsākt spēlēt
⚠️ Spēlē jābūt dažādiem citplanēšienu tipiem, kurus šaut
Izmantot environment.yaml failu, lai iestatītu Python vidi ar micromamba, micromamba vai anaconda nevis pip
Izmantojiet konstantes ar aprakstošiem nosaukumiem (piemēram, ALIEN_ROWS, MAX_BULLETS) tā vietā, lai izkaisītu “maģiskās” vērtības pa kodu.
Jāpanāk, ka spēle neatkarīgi no datora ātruma strādā vienā atrumā (clock.tick(60) vai delta_time starp kadriem)
Errors jāloggo ar loguru logger.exception() un paziņojums jāizvada konsolē ar logger.info() logger.warning(), logger.error() un logger.debug()
Projekta failu struktūrai jābūt
xxxxxxxxxx
81project/
2├─ models/
3├─ controllers/
4├─ views/
5├─ utils/
6├─ assets/images/
7├─ environment.yaml
8├─ main.py
Piemērs MVC
Model daļa
Controller daļa
View daļa
Kodam jābūt PEP8 stilā
xxxxxxxxxx
351import math
2
3# Constants should be in uppercase with underscores
4PI = 3.14159
5
6# Function names should be lowercase, with words separated by underscores
7def calculate_area(radius):
8 """Calculate the area of a circle given its radius."""
9 if radius < 0:
10 raise ValueError("Radius cannot be negative")
11 return PI * radius ** 2
12
13# Class names should use CamelCase
14class Circle:
15 """A class representing a circle."""
16
17 def __init__(self, radius):
18 self.radius = radius
19
20 def area(self):
21 """Calculate the area of the circle."""
22 return calculate_area(self.radius)
23
24 def circumference(self):
25 """Calculate the circumference of the circle."""
26 return 2 * PI * self.radius
27
28# Use 4 spaces per indentation level
29def main():
30 circle = Circle(5)
31 print(f"Area: {circle.area()}")
32 print(f"Circumference: {circle.circumference()}")
33
34if __name__ == "__main__":
35 main()