2025-02-13 Meeting 4TODO1. Code review2. Model View Controller (MVC), PyGame2.1. Video / Materiāli 2.2. Implementēt MVC balstītu spēles struktūru2.3. Implementēt spēlētāja tanka vadību3. Creational Patterns - Singleton, Factory, Prototype, Object Pool3.1. Video / Materiāli3.2. Implementēt Singleton, Factory, Prototype, Object Pool3.3. Implementēt Builder vai Abstract Factory šablonu4. Structural Patterns - Adapter, Decorator, Closure, Flyweight4.1. Video / Materiāli4.2. Implementēt Decorator un Closure pattern4.3. Implementēt vēl papildus Decorator un Closure pattern5. Behavioral Patterns - Observer, Iterator, Command 5.1. Video / Materiāli 5.2. Implementēt Observer, Command, Iterator, Memento patterns5.3. Implementēt uzlabojumus ar behavioral patterns palīdzību5.2. Implementēt Observer, Command, Iterator, Memento patterns5.3. Implementēt uzlabojumus ar behavioral patterns palīdzību6. React, Flux, Redux6.1. Video / Materials (24 Oct 2024, 16:15)6.2. Implementēt React pattern python vidē izmantojot video instrukcijas un template6.3. Pabeigt HighScores ekrānu
Izveidot Github repo, sākt lietot SourceTree vai GitKranken (spēle, design pattern, flask lekcijas folderos iekš viena repo)
Code review fixes
Design patterns uzdevumi
Piemērs kā veikt data classes priekš models
x1from dataclasses import dataclass, field
2from dataclasses_json import dataclass_json
3
4
5
6class Duck:
7 x: float = 0
8 y: float = 0
9
10 def helper(self):
11 self.x /= 10
12
13
14
15class Game:
16 score: int = 0
17 ducks: list[Duck] = field(default_factory=list)
18
19
20if __name__ == "__main__":
21 duck_a = Duck()
22 duck_a.x = 1
23
24 duck_b = Duck()
25 duck_b.x = 2
26
27 game = Game()
28 game.ducks.append(duck_a)
29 game.ducks.append(duck_b)
30
31 with open("game.json", "w") as fp:
32 fp.write(game.to_json(indent=4))
33
34 with open("game.json", "r") as fp:
35 game = Game.from_json(fp.read())
36
37 print(game)
38
Video: https://youtube.com/live/G-FjSQjDky8?feature=share
Whiteboard: https://share.yellowrobot.xyz/quick/2024-12-27-E01C5459-DA94-489D-B7DC-259DDD73E27B.pdf
Materials: https://realpython.com/pygame-a-primer/
Implementēt TODO un UML shēmu: http://share.yellowrobot.xyz/upic/8734c0d130fd735370f25b7f6dd6e1d0_1694639166.png
Iegūt sekojošu rezultātu: http://share.yellowrobot.xyz/upic/522c87cb595310c6495273b1aea5283e_1694638538.png
Sagatave: http://share.yellowrobot.xyz/quick/2023-9-13-06471100-6D2C-4ABA-97FA-7AAEBE39AB35.zip
Iesniegt pirmkodu un screenshots ZIP formātā
Impementēt jaunu klasi ComponentTank, kas pārmantota no ComponentGameObject, UML shēma:
http://share.yellowrobot.xyz/upic/ef642379019e6be4b1b2e44870d3a1fd_1695277114.png
Pievienot dzelteno tanku no pozīcijas (0,0) un (1,0), (0,2) un (0,3) un pārējos virzienos, battle_city_sprites.png.
Implementēt, ka ar bultiņām var braukt pa karti.
Kamēr tanks brauc animācija strāda starp 2 kadriem, kad tanks apstājies animācija arī apstājas
Neļaut uzbraukt uz citiem šķēršļiem
Neļaut izbraukt ārā no kartes
Rezultātam aptuveni jāizskatās šādi (ievērot, ka braucot tanks animējas, bet atlaižot pogas stāv) http://share.yellowrobot.xyz/quick/2023-9-14-6FBC9587-66CD-42AC-803A-AD86EE337955.mp4
Iesniegt pirmkodu un screenshots ZIP formātā
Video: https://youtube.com/live/24KkX73TUV8?feature=share
Sagatave: https://share.yellowrobot.xyz/quick/2024-10-2-128AC6AC-BE41-4533-951A-D7B419DC9970.zip
Implementēt Singleton, Factory, Prototype, Object Pool
Iesniegt screenshot un pirmkodu.
Implementēt Builder vai Abstract Factory šablonu, lai izveidotu 2 dažādus līmeņus vai kartes. Sakot spēli, izlvēleties nejauši starp 2 līmeņiem vai kartēm.
Implementēt funkcionalitāti, ka tanki autonomi braukā pa karti un šauj, darbības mainās ar intervālu game_object.tank_next_move_time
Iesniegt screenshot un pirmkodu.
Video: https://youtube.com/live/yvvDTfwsT7c?feature=share
Materials: https://refactoring.guru/design-patterns
https://www.youtube.com/watch?v=5Va1fslNKEo
Implementēt Decorator pattern: Lai savācot zvaigznes tanks sāktu ātrāk braukt Closure pattern, lai nodrošinātu funkciju ātruma mērīšanu un try..catch
Template: https://share.yellowrobot.xyz/quick/2024-10-10-49B23DD3-ACC4-45B8-B11D-159D0FA9371B.zip
Veikt izmaiņas sagatavē
Balstoties uz sagatavi iepriekš implementēt Closure pattern - decorator_measure_time, lai nomērītu funkcijas izpildes ātrumu.
Implementēt vēl kādu bonusu, kas piešķirtu papildus spējas tankam ar Decorator pattern, piemēram šaut ātrāk lodes
Iesniegt source code kā zip
Video: https://youtube.com/live/pJ1MTSKNdBg?feature=share
Materials: https://refactoring.guru/design-patterns
https://www.youtube.com/watch?v=5Va1fslNKEo
Implementēt Observer, Command, Iterator, Memento patterns (TODOs)
Template: https://share.yellowrobot.xyz/quick/2024-10-17-859BC921-864F-46B3-8960-D306610E3AF0.zip
Implementēt player name Redo funkciju (ar Command Pattern)
Implementēt settings save / load (memento, state)
Implementēt iterator pattern ControllerGame.new_game funkcijā, lai Iterator aizstātu sekojošo 2 for ciklus ar vienu collection, kurš atgriež visas kartes pozīcijas x, y, bet svarīgi, ka pāšā collection/iterator iekšienē nebūtu arī 2x for loops
xxxxxxxxxx
21 for x in range(game.map_size[0]):
2 for y in range(game.map_size[1]):
Video: https://youtube.com/live/pJ1MTSKNdBg?feature=share
Materials: https://refactoring.guru/design-patterns
https://www.youtube.com/watch?v=5Va1fslNKEo
Implementēt Observer, Command, Iterator, Memento patterns (TODOs)
Template: https://share.yellowrobot.xyz/quick/2024-10-17-859BC921-864F-46B3-8960-D306610E3AF0.zip
Implementēt player name Redo funkciju (ar Command Pattern)
Implementēt settings save / load (memento, state)
Implementēt iterator pattern ControllerGame.new_game funkcijā, lai Iterator aizstātu sekojošo 2 for ciklus ar vienu collection, kurš atgriež visas kartes pozīcijas x, y, bet svarīgi, ka pāšā collection/iterator iekšienē nebūtu arī 2x for loops
xxxxxxxxxx
21 for x in range(game.map_size[0]):
2 for y in range(game.map_size[1]):
Video: https://youtube.com/live/raIxZPXzAKI?feature=share
Materiāli: https://reactjs.org/docs/react-component.html https://datafloq.com/read/the-differences-between-three-major-application-architectures-mvc-vs-flux-vs-redux/
Balstoties uz Video instrukcijām, iepazīties ar React programēšanas šablonu Izmantojot sagatavi: https://share.yellowrobot.xyz/quick/2024-10-24-5CAF7251-D0EC-40BD-B8CA-026C3D0E4981.zip
Implementēt, lai būtu šāds rezultāts: http://share.yellowrobot.xyz/quick/2023-10-26-17339E1E-C1EA-42B3-85FE-FADC12B25AD2.mov
Uzdevumi:
Implementēt izmantojot React pattern funkcionalitāti, lai ReactTextBox laukā var ievadīt tekstu (ierakstīt, nodzēst, atstarpes)
Implementēt izmantojot React pattern funkcionalitāti ReactButton
Implementēt, lai var peivienot jaunu high scrore iekš WindowHighScores
Papildus uzdevums, ja teksts pārsniedz TextBox platumu, tad to nobīdīt pa vienam simbolam pa kreisi tā, lai paliek redzami tikai pēdējie simboli, kuri ielien teksta laukā.
Iesniegt pirmkodu un screenshot
Izmantojot 6.2. sagatavi, ievērojot React, Flux principus (setState(..), state, props) implementēt:
Sašķirot iegūtos punktus dilstošā secībā
Rādīt tikai 10 labākos punktus ar vārdu
Prasīt ievadīt vārdu tikai tad, ja lietotājs iekļūst punktu tabulā (10 labākajos)
Pievienot pogu “Aizvērt”, lai nebūtu nepieciešams ar ESC aizstaisīt HighScores ekrānu
Iesniegt pirmkodu un screenshot