Zaawansowane programowanie obiektowe: gra programistyczna 1000-2M26ZPO
1. Screeps i dokumentacja API
2. Role, zadania, SOLID
3. Stan, JSON, migracje
4. Moduły i kontrakty
5. Pętla zdarzeń i CPU
6. Architektura bota
7. Testowalność i przedrzeźnianie
8. Hierarchia komend i planów
9. Asynchroniczność i podział pracy
10. Logistyka wielopokojowa
11. Zaawansowane testy
12. Planowanie ekonomiczne
13. Konflikt
14. Podsumowanie i porównanie wydajności
15. Podsumowanie zajęć i odbiór projektu
Kierunek podstawowy MISMaP
Koordynatorzy przedmiotu
Rodzaj przedmiotu
Tryb prowadzenia
Wymagania (lista przedmiotów)
Założenia (lista przedmiotów)
Założenia (opisowo)
Efekty uczenia się
Student rozumie:
1. Działanie pętli głównej w symulacji, rozróżnia symulacje świata gry oparte o stałe i zmienne kroki czasowe (polling, time driven) i zdarzenia (event driven)
2. Działanie systemu w “miękkim” czasie rzeczywistym i jego ograniczenia
3. Podstawowe problemy nadzoru oprogramowania działającego w trybie ciągłym
4. Modularne zarządzanie stanem: pojęcie trwałości stanu, testowanie nagranej sekwencji zdarzeń, odróżnia stan wewnętrzny modelu od samego obiektu i stanu aplikacji
Student potrafi:
1. Zaprojektować i zaimplementować model świata gry
2. Zaprojektować architekturę bota, strategię, logikę działań; podzielić je na
zadania i akcje
3. Przetestować kod bota wewnątrz i poza środowiskiem gry, przedrzeźniając i symulując je. Odróżnia poziomy wierności symulacji. Potrafi automatyzować proces testowania przy użyciu testów jednostkowych, integracyjnych z użyciem platformy CI
4. Szczegółowo opisać architekturę bota, od strategii do metod i atrybutów, na właściwym poziomie szczegółowości
5. Migrować dane między wersjami kodu w środowisku pracy ciągłej
6. Skutecznie eksplorować dokumentację dużej platformy i budować dokumentację przeznaczoną do takiego wykorzystania
Kompetencje:
1. Programowanie w TypeScript w środowisku Node
2. Implementacja botów (NPC) w grach
Kryteria oceniania
Po 2 punkty przyznawane za każdą pracę domową (x14), 32 punkty za projekt (12 za kod, 10 za projekt i dokumentację, 10 za testowanie). Razem 60 punktów poza turniejem.
Dodatkowo 16 punktów turniejowych przyznawanych za ranking w kategoriach:
• wzrost – powierzchnia pod krzywą RCL po czasie,
• wydajność – powierzchnia pod krzywą energii wydobytej po czasie,
• dokumentacja – najczytelniejsza dokumentacja wg opinii prowadzącego,
• ekspansja – powierzchnia pod krzywą zajmowanych pokoi konfliktowych.
Dodatkowe punkty przyznawane za:
• 4 za najwyższe miejsce (górne 1%)
• 3 za górne 15%
• 2 za górne 25%
• 1 za górne 50%
Progi zaliczeniowe:
• 36 pkt - ocena dostateczna
• 48 pkt - ocena dobra
• 61 pkt - ocena bardzo dobra
Literatura
[1] Screeps LLC “Screeps (official
site),” https://screeps.com/.
[2] Screeps LLC “Screeps API reference,”
https://docs.screeps.com/api/.
[3] Screeps LLC “CPU limit,”
https://docs.screeps.com/cpu-limit.html.
[4] G. Booch Object-oriented analysis
and design with applications,
Addison-Wesley, 2007.
[5] R. Wirfs-Brock and A. McKean Object
design: Roles, responsibilities, and
collaborations, Addison-Wesley, 2003.
[6] E. Gamma, R. Helm, R. Johnson, and
J. Vlissides Design patterns: Elements
of reusable object-oriented software,
Addison-Wesley, 1994.
[7] B. D. Burow “Task system and item
architecture: A dataflow model,”
https://arxiv.org/pdf/cs/0003010.
[8] M. Erikson “Redux toolkit docs,”
https://redux-toolkit.js.org/.
[9] OpenJS Foundation, Inc. “Jest,”
https://jestjs.io/.
[10] A. Fu and V. Contributors “Vitest –
unit test framework powered by vite,”
https://vitest.dev/.
[11] GitLab, Inc. “GitLab CI/CD
reference,”
https://docs.gitlab.com/ee/ci/.
[12] Screeps LLC “Screeps
documentation,”
https://docs.screeps.com/.
[13] M. Corporation “TypeScript
handbook: Everyday types,”
https://www.typescriptlang.org/docs/handbook/2/everyday-types.html.
[14] S. Stedolan “Jq: Command-line JSON
processor,”
https://stedolan.github.io/jq/.
[15] M. Corporation “TypeScript
handbook: modules,”
https://www.typescriptlang.org/docs/handbook/modules.html.
[16] OpenJS Foundation, Inc. “ECMAScript
modules (node.js),”
https://nodejs.org/api/esm.html.
[17] C. Larman Applying UML and
patterns: An introduction to
object-oriented analysis and design and
iterative development, Prentice Hall,
2005.
[18] E. Evans Domain-driven design:
Tackling complexity in the heart of
software, Addison-Wesley, 2004.
[19] K. Sveidqvist and M. Contributors
“Mermaid – JavaScript based diagramming
and charting tool,”
https://mermaid.js.org/.
[20] Screeps LLC “Room controller and
RCL progression,”
https://docs.screeps.com/control.html.
[21] N. Dubien and Contributors
“Fast-check: Property-based testing for
JavaScript,” https://fast-check.dev/.
[22] M. Zalewski and A. Community
“American fuzzy lop (AFL) - fuzzer,”
https://lcamtuf.coredump.cx/afl/.
[23] npm, Inc. “About npm,”
https://docs.npmjs.com/about-npm/.