- Martin
- Tobias
WindowKill je jednoduchá strieľačka, ale herné okno sa stále zmenšuje. Strieľaj to rohov, aby sa okno úplne nezatvorilo, medzitým, ako bojuješ s nepriateľmi a bossmi v ich vlastných oknách. - Steam
WindowKill je strieľačka pre jedného hráča, hrá sa v okne so začiatočnou veľkosťou 400x400 pixelov, ktoré sa postupne zmenšuje. Neskôr sa začnú objavovať nepriatelia a okno sa bude rýchlejšie zmenšovať. Cieľom tohto projektu je vytvoriť plne funkčný klon tejto hry pomocou HTML, CSS, JavaScriptu a následné exportovanie hry ako plne funkčnej desktopovej aplikácie pre Windows, Linux a MacOS nám umožní framework Tauri 2.0 (áno, je tu použitý Rust na backend, ALE jeho použitie sa dá minimalizovať alebo úplne vynechať).
- Po spustení hry sa okamžite začne okno zmenšovať
- Hráč musí strieľať to hrán okna, aby ho zväčšil v danom smere
- Hráč ostáva umiestnený približne v strede obrazovky, nie okna
- V priebehu hry sa objavujú nepriatelia, ktorých musí hráč eliminovať alebo mu uberú životy
- Čím dlhšie je hráč v hre, tým rýchlejšie sa okno zmenšuje a objavujú sa silnejší nepriatelia
- Akonáhle sa hráča dotkne akákoľvek hrana okna alebo príde o všetky životy, hra skončila
- Možnosť upravovať postavu
- Úprava náročnosti:
- ==Preddefinované náročnosti (EASY, MEDIUM, HARD, IMPOSSIBLE)==
- Neskôr:
- možnosť zmeniť rýchlosť zmenšovania okna
- väčší počet a rýchlosť objavovania sa nepriateľov
- sila, akou sa okno zmenšuje
- sila, akou hráč okno zväčšuje
- Nastavenie ukladania skóre
- Zobrazenie a úprava klávesových skratiek
- Jednoduchá úvodná obrazovka s tlačidlami pre spustenie, otvorenie nastavení a ukončenie hry
- Jednoduchá obrazovka pre koniec hry zobrazujúca aktuálne a najlepšie skóre. Rozdielna pre nové najlepšie skóre. Možnosti pre reštartovanie alebo ukončenie
- Zobrazenie času, ktorý uplynul od začiatku hry
- Zobrazenie životov hráča
- Jednoduché menu pri zastavení hry
- ==Na všetky zobrazenia/skrytia použitá plynulá animácia==
- Náročnosti hry budú ovplyvňovať:
- Rýchlosť a silu zmenšovania okna
- Rýchlosť a silu striel hráča
- Vlastnosti nepriateľov
- Vytváranie nepriateľov na základe náročnosti:
- Môžu sa rýchlejšie pohybovať, uberať viac životov alebo mať viac životov
- Logika pre [[README#Nastavenia hry|Nastavenia hry]]
- Logika pre [[README#Používateľské rozhranie|Používateľské rozhranie]]
- Ukladanie najlepšieho skóre do súboru
- Ukladanie nastavení do súboru
- Ukladanie úspechov hráča do súboru
- Prispôsobenie počiatočnej veľkosti veľkosti obrazovky
- Životy hráča - nepriatelia pri kolízii s hráčom uberú daný počet životov (alebo všetky)
- Klávesové skratky pre kontrolu hry
- ESC pre pozastavenie hry
- Úspechy hráča - pravdepodobne zo Steamu
- Neskôr:
- Viacero synchronizovaných okien
- Hráč bude mať možnosť reštartovať hru pri prehre alebo predčasne pri pozastavení hry
- Veľkosť okna, hracia plocha, skóre by sa malo resetovať
- Skóre sa bude počítať z počtu eliminovaných nepriateľov a času nažive
- Okno sa vizuálne zasekáva pri súčasnom zväčšovaní aj zmenšovaní
- Zmenšovanie sa celkovo zastaví keď sa okno zväčšuje
- Soundtrack
- Zabezpečenie plynulej hry a predídenie podvádzaniu cez konzolu
- Vytvorenie jednoduchého, vizuálne atraktívneho používateľského rozhrania
Projekt WindowKill predstavuje ambiciózny pokus o vytvorenie interaktívnej arkádovej hry s unikátnym mechanizmom meniaceho sa herného priestoru. Implementovaný ako JavaScript klon originálnej hry, projekt demonštruje komplexný prístup k hernému dizajnu a technickej realizácii.
Počas vývoja dosiahneme významný pokrok vo viacerých oblastiach:
- Implementované funkcionality:
- Základná herná mechanika s meniacim sa oknom
- Systém nepriateľov a kolízií
- Rôzne úrovne náročnosti
- Používateľské rozhranie s animáciami
- Systém ukladania skóre a nastavení
- Technické dosiahnutia:
- Úspešná integrácia Tauri frameworku pre desktopovú aplikáciu
- Implementácia cross-platformového riešenia
- Optimalizácia výkonu pre plynulý herný zážitok
- Plánované vylepšenia:
- Rozšírenie herných mechaník
- Vylepšenie vizuálnej stránky
- Pridanie zvukových efektov
- Implementácia viacerých herných módov
Projekt predstavuje komplexný prípad použitia webových technológií na vytvorenie natívnej herného zážitku. Úspešne kombinuje HTML/CSS/JavaScript pre frontend a Rust pre backend cez Tauri framework, čím demonštruje možnosť vytvárať výkonné herné aplikácie pomocou webových technológií.
Projekt nie je len presnou kópiou originálu, ale tiež pridaním vlastných inovácií a vylepšení, čo potvrdzuje vysokú kvalitu implementácie.
Dokumentácia projektu poskytuje detailný náhľad do vývojového procesu a slúži ako cenný zdroj pre budúcich vývojárov, ktorí by chceli implementovať podobné herné mechaniky alebo využiť Tauri framework pre svoje projekty.
Zhrnutie projektu to jednotlivých bodov
- UI
- Game start
- Game end
- Different for new best score
- Settings menu
- Score counter & timer
- Pause menu
- Animations
- Hover FX
- Set app icon
- Disable Windows header
- Custom cursor source
- How to play window at first run
- Mechanics
- Difficulties
- Shrinking power
- More enemies
-
Slower fire rate - Player power
- ? Lost focus - faster shrinking
- Impossible mode - transparent window
- Score multiplier
- Faster shrinking
- Spawn enemies
- Controlled by difficulties
- Faster movement
- More health - technically not implemented, but enemies health is calculated randomly
-
Bigger damage - Faster spawn rate
- Update enemy position calculation to follow player
- Update scoring system to include enemies killed
- Controlled by difficulties
- Settings
- Player options - color change
- Difficulties
- Predefined options
- ? Separate settings for each game aspect
- Save options
-
Shortcuts customization & display
- UI buttons
- Save
- Best score
- ? Encrypt file
- Settings
- Achievements
- Best score
- Dynamic start size
- Dynamic window size
- ? Players health - enemies deal damage
- Keyboard shortcuts
- Disable default shortcuts ! at end also dev tools
- ESC to open pause menu
- Achievements (pravdepodobne zo Steamu)
- Open World - get 37 monitors
- No space left - get killed by window
- Colorful World - play as every basic color
- God of Colors - play as every hex color (16 777 216 unique combinations)
- Kill 100 enemies
- Kill 1000 enemies
- Survive 1 minute
- Survive 5 minutes
- Survive 10 minutes
- Survive 20 minutes
- Score 1000 points
- Score 5000 points
- Score 10000 points
- Separate window to show achievements
- Show notification when achievement is unlocked
- Achievement progress bar
- Game restart
- Score counter
- ? Multiple windows - little help here
- Successfully spawn multiple random windows
- No overlapping
- Successfully spawn enemies in
randomwindows - Correctly transfer enemies between windows
- Spawn bosses in
randomwindows - Successfully transfer projectiles between windows
- Remove old projectiles
- ? Game modes
- Player stays in center of screen (default - currently working on)
- Player movement allowed
- Difficulties
- Other
- ? Good Soundtrack
- Stop music on game over
-
Disable playback start/stop with multimedia keys- tested => event is not reaching app and cannot be blocked by JavaScript/TypeScript
- ? Good Soundtrack
- ! Fix
- !! Correctly set window size on restart
- Fix glitches on resize
- Shrinking stops when resizing
- Window flickering when resizing
- Temporal fix: Incorrect window position when scaling is applied on Windows: When Windows uses display scaling above 100%, it creates a mismatch between physical and logical pixel coordinates. This affects how Tauri handles window positioning
- !! In version 0.2.2 window is not resizing to center, but to top left corner of the screen.
- ! Exclude some colors for enemy
- Typescript migration
- Fix all errors
- Update links in html files
- Update links to scripts in html when migrating to TypeScript
- Update Options Volume to use
numberinstead ofstring! NOT tested - Remove duplicate null checks / update declarations (mainly in
gameUtils.ts) - Update game to version
0.7.0when finished migrating to TypeScript - Update alert to
Dialogplugin Only for display scaling pop-up - Try implement
Updaterplugin - Try implement
Single Instanceplugin - Set all variable types to explicit
- Try creating custom type for
sync-messageevents - Clean up Tauri permissions in
tauri.conf.json
- Pri zmene verzie projektu je potrebné zmeniť číslo verzie v súbore
package.json,src-tauri/tauri.conf.jsonasrc-tauri/Cargo.toml.
npm run tauri dev