1- // game.js z aktywacją gracza ruchem i wstrzymaniem wrogów przed aktywacją
2-
31const canvas = document . getElementById ( "gameCanvas" ) ;
42const ctx = canvas . getContext ( "2d" ) ;
5- canvas . width = 800 ;
6- canvas . height = 600 ;
73
4+ let player1 = null ;
5+ let player2 = null ;
6+
7+ function resizeCanvas ( ) {
8+ const ratio = 4 / 3 ;
9+ const w = window . innerWidth ;
10+ const h = window . innerHeight ;
11+ if ( w / h > ratio ) {
12+ canvas . height = h ;
13+ canvas . width = h * ratio ;
14+ } else {
15+ canvas . width = w ;
16+ canvas . height = w / ratio ;
17+ }
18+ if ( player1 ) {
19+ player1 . y = canvas . height - 50 ;
20+ player1 . x = canvas . width / 2 - 60 ;
21+ }
22+ if ( player2 ) {
23+ player2 . y = canvas . height - 50 ;
24+ player2 . x = canvas . width / 2 + 60 ;
25+ }
26+ }
27+ window . addEventListener ( 'resize' , resizeCanvas ) ;
28+
29+ let wakeLock = null ;
30+ async function requestWakeLock ( ) {
31+ try {
32+ if ( 'wakeLock' in navigator ) {
33+ wakeLock = await navigator . wakeLock . request ( 'screen' ) ;
34+ }
35+ } catch ( err ) {
36+ console . warn ( "WakeLock error:" , err ) ;
37+ }
38+ }
39+ document . addEventListener ( "visibilitychange" , ( ) => {
40+ if ( wakeLock !== null && document . visibilityState === "visible" ) {
41+ requestWakeLock ( ) ;
42+ }
43+ } ) ;
44+ requestWakeLock ( ) ;
845
946const pauseBtn = document . createElement ( "button" ) ;
1047pauseBtn . innerText = "⏸️ Pauza" ;
11- pauseBtn . style . position = "absolute" ;
48+ pauseBtn . className = "game-button" ;
49+ pauseBtn . style . right = "120px" ;
1250pauseBtn . style . top = "10px" ;
13- pauseBtn . style . left = "10px" ;
14- pauseBtn . style . zIndex = 10 ;
1551pauseBtn . onclick = ( ) => paused = ! paused ;
1652document . body . appendChild ( pauseBtn ) ;
1753
1854const restartBtn = document . createElement ( "button" ) ;
1955restartBtn . innerText = "🔄 Restart" ;
20- restartBtn . style . position = "absolute" ;
56+ restartBtn . className = "game-button" ;
57+ restartBtn . style . right = "10px" ;
2158restartBtn . style . top = "10px" ;
22- restartBtn . style . left = "100px" ;
23- restartBtn . style . zIndex = 10 ;
2459restartBtn . onclick = ( ) => newGame ( ) ;
2560document . body . appendChild ( restartBtn ) ;
2661
62+ // resizeCanvas();
63+
64+
2765
2866const playerColors = [ "white" , "lime" , "cyan" , "orange" , "violet" ] ;
2967const enemySprites = {
@@ -67,6 +105,14 @@ class Player {
67105 this . respawnTimer = 0 ;
68106 }
69107
108+ moveLeft ( ) {
109+ this . x = Math . max ( this . x - this . speed , this . width / 2 ) ;
110+ }
111+
112+ moveRight ( ) {
113+ this . x = Math . min ( this . x + this . speed , canvas . width - this . width / 2 ) ;
114+ }
115+
70116 draw ( ) {
71117 if ( this . active && this . alive ) {
72118 ctx . beginPath ( ) ;
@@ -118,6 +164,7 @@ class Player {
118164 }
119165}
120166
167+
121168class Enemy {
122169 constructor ( x , y , type ) {
123170 this . x = x ;
@@ -146,12 +193,13 @@ class Enemy {
146193 }
147194}
148195
149- let player1 , player2 ;
196+
150197let enemies = [ ] ;
151198
152199function newGame ( ) {
153200 player1 = new Player ( canvas . width / 2 - 60 , randomColor ( ) ) ;
154201 player2 = new Player ( canvas . width / 2 + 60 , randomColor ( ) ) ;
202+ resizeCanvas ( ) ;
155203 enemyBullets = [ ] ;
156204 level = 1 ;
157205 gameOver = false ;
@@ -321,12 +369,13 @@ function activatePlayer(player) {
321369 player . active = true ;
322370}
323371
372+
324373window . addEventListener ( "keydown" , ( e ) => {
325- if ( e . key === "a" ) { player1 . x -= player1 . speed ; activatePlayer ( player1 ) ; }
326- if ( e . key === "d" ) { player1 . x += player1 . speed ; activatePlayer ( player1 ) ; }
374+ if ( e . key === "a" ) { player1 . moveLeft ( ) ; activatePlayer ( player1 ) ; }
375+ if ( e . key === "d" ) { player1 . moveRight ( ) ; activatePlayer ( player1 ) ; }
327376 if ( e . key === " " ) { player1 . shoot ( ) ; activatePlayer ( player1 ) ; }
328- if ( e . key === "ArrowLeft" ) { player2 . x -= player2 . speed ; activatePlayer ( player2 ) ; }
329- if ( e . key === "ArrowRight" ) { player2 . x += player2 . speed ; activatePlayer ( player2 ) ; }
377+ if ( e . key === "ArrowLeft" ) { player2 . moveLeft ( ) ; activatePlayer ( player2 ) ; }
378+ if ( e . key === "ArrowRight" ) { player2 . moveRight ( ) ; activatePlayer ( player2 ) ; }
330379 if ( e . key === "ArrowUp" ) { player2 . shoot ( ) ; activatePlayer ( player2 ) ; }
331380 if ( e . key === "r" ) newGame ( ) ;
332381} ) ;
@@ -341,6 +390,7 @@ canvas.addEventListener("touchstart", (e) => {
341390 else player1 . shoot ( ) ;
342391} , { passive : false } ) ;
343392
393+
344394const ws = new WebSocket ( "ws://" + location . hostname + "/ws" ) ;
345395ws . onmessage = ( event ) => {
346396 const data = JSON . parse ( event . data ) ;
@@ -353,6 +403,7 @@ ws.onmessage = (event) => {
353403 if ( data . j2f ) { player2 . shoot ( ) ; activatePlayer ( player2 ) ; }
354404} ;
355405
406+
356407waitForSprites ( ( ) => {
357408 newGame ( ) ;
358409 draw ( ) ;
0 commit comments