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. Architektura bota
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 (opisowo)
Efekty kształcenia
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] SamTheCat “Screeps (official site),” [Online]. Available: https://screeps.com/
[] [2] SamTheCat “Screeps API reference,” [Online]. Available: https://docs.screeps.com/api/
[] [3] SamTheCat “CPU limit,” [Online]. Available: 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,”[Online]. Available: https://arxiv.org/pdf/cs/0003010
[] [8] M. Erikson “Redux toolkit docs,” [Online]. Available: https://redux-toolkit.js.org/
[] [9] M. O. Source “Jest,” [Online]. Available: https://jestjs.io/
[] [10] A. Fu and V. Contributors “Vitest – unit test framework powered by vite,” [Online]. Available: https://vitest.dev/
[] [11] GitLab “GitLab CI/CD reference,” [Online]. Available: https://docs.gitlab.com/ee/ci/
[] [12] SamTheCat “Screeps documentation,” [Online]. Available: https://docs.screeps.com/
[] [13] TypeScript “TypeScript handbook: Everyday types,” [Online]. Available: https://www.typescriptlang.org/docs/handbook/2/everyday-types.html
[] [14] S. Stedolan “Jq: Command-line JSON processor,” [Online]. Available: https://stedolan.github.io/jq/
[] [15] TypeScript “TypeScript handbook: modules,” [Online]. Available: https://www.typescriptlang.org/docs/handbook/modules.html
[] [16] Node.js “ECMAScript modules (node.js),” [Online]. Available: 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,” [Online]. Available: https://mermaid.js.org/
[] [20] SamTheCat “Room controller and RCL progression,” [Online]. Available: https://docs.screeps.com/control.html
[] [21] fast-check Contributors “Fast-check: Property-based testing for Java-Script,” [Online]. Available: https://fast-check.dev/
[] [22] M. Zalewski and A. Community “American fuzzy lop (AFL) - fuzzer,” [Online]. Available: https://lcamtuf.coredump.cx/afl/
[] [23] npm “About npm,” [Online]. Available: https://docs.npmjs.com/about-npm/