@@ -21,6 +21,50 @@ <h2 class="mb-4"><a href="#frogger-game" id="frogger-game">Frogger Game</a></h2>
2121const rows = 10 ;
2222const cols = 8 ;
2323let frog , cars , gameOver , win , level , maxLevel ;
24+ let levelTheme ;
25+
26+ const levelThemes = [
27+ {
28+ name : 'Setup' ,
29+ bg : '#1e1e2f' ,
30+ road : '#252540' ,
31+ safe : '#222c37' ,
32+ line : '#0078D4' ,
33+ desc : 'Setting up your dev container...'
34+ } ,
35+ {
36+ name : 'Install' ,
37+ bg : '#1e2f1e' ,
38+ road : '#2a4025' ,
39+ safe : '#234022' ,
40+ line : '#4CAF50' ,
41+ desc : 'Installing dependencies...'
42+ } ,
43+ {
44+ name : 'Build' ,
45+ bg : '#2f1e1e' ,
46+ road : '#402525' ,
47+ safe : '#402222' ,
48+ line : '#FF9800' ,
49+ desc : 'Building your project...'
50+ } ,
51+ {
52+ name : 'Test' ,
53+ bg : '#1e2f2f' ,
54+ road : '#254040' ,
55+ safe : '#224040' ,
56+ line : '#00BCD4' ,
57+ desc : 'Running tests...'
58+ } ,
59+ {
60+ name : 'Deploy' ,
61+ bg : '#2f2f1e' ,
62+ road : '#404025' ,
63+ safe : '#404022' ,
64+ line : '#FFC107' ,
65+ desc : 'Deploying to production!'
66+ }
67+ ] ;
2468
2569
2670function getCarsForLevel ( lvl ) {
@@ -72,13 +116,18 @@ <h2 class="mb-4"><a href="#frogger-game" id="frogger-game">Frogger Game</a></h2>
72116 return config ;
73117}
74118
119+
75120function resetGame ( newLevel ) {
76121 frog = { x : 3 , y : 9 } ;
77122 level = typeof newLevel === 'number' ? newLevel : 1 ;
78123 maxLevel = 5 ;
79124 cars = getCarsForLevel ( level ) ;
80125 gameOver = false ;
81126 win = false ;
127+ // Set theme for this level
128+ levelTheme = levelThemes [ ( level - 1 ) % levelThemes . length ] ;
129+ // Set background color
130+ canvas . style . background = levelTheme . bg ;
82131}
83132
84133resetGame ( 1 ) ;
@@ -185,6 +234,7 @@ <h2 class="mb-4"><a href="#frogger-game" id="frogger-game">Frogger Game</a></h2>
185234 }
186235}
187236
237+
188238function draw ( ) {
189239 ctx . clearRect ( 0 , 0 , canvas . width , canvas . height ) ;
190240 // Draw code editor background (lines)
@@ -209,24 +259,27 @@ <h2 class="mb-4"><a href="#frogger-game" id="frogger-game">Frogger Game</a></h2>
209259 }
210260 ctx . restore ( ) ;
211261 // Draw safe zones (as terminal/code header/footer)
212- ctx . fillStyle = '#222c37' ;
262+ ctx . fillStyle = levelTheme . safe ;
213263 ctx . fillRect ( 0 , 0 , canvas . width , grid ) ;
214264 ctx . fillRect ( 0 , canvas . height - grid , canvas . width , grid ) ;
215265 // Draw road (pipeline)
216- ctx . fillStyle = '#252540' ;
266+ ctx . fillStyle = levelTheme . road ;
217267 ctx . fillRect ( 36 , grid , canvas . width - 36 , canvas . height - 2 * grid ) ;
218268 // Draw a pipeline line
219- ctx . strokeStyle = '#0078D4' ;
269+ ctx . strokeStyle = levelTheme . line ;
220270 ctx . lineWidth = 4 ;
221271 ctx . beginPath ( ) ;
222272 ctx . moveTo ( 36 , canvas . height / 2 ) ;
223273 ctx . lineTo ( canvas . width , canvas . height / 2 ) ;
224274 ctx . stroke ( ) ;
225- // Draw level indicator
275+ // Draw level indicator and theme name
226276 ctx . fillStyle = '#fff' ;
227277 ctx . font = 'bold 18px sans-serif' ;
228278 ctx . textAlign = 'left' ;
229- ctx . fillText ( 'Level: ' + level + ' / ' + maxLevel , 48 , 32 ) ;
279+ ctx . fillText ( 'Level: ' + level + ' / ' + maxLevel + ' - ' + levelTheme . name , 48 , 32 ) ;
280+ // Draw theme description
281+ ctx . font = 'italic 14px sans-serif' ;
282+ ctx . fillText ( levelTheme . desc , 48 , 54 ) ;
230283 drawFrog ( ) ;
231284 drawCars ( ) ;
232285 if ( gameOver ) {
0 commit comments