Merge pull request 'snake framework' (#24) from sageTheDm/pages:main into main
Reviewed-on: https://interstellardevelopment.org/code/code/interstellar_development/interstellar_website/pulls/24
This commit is contained in:
		
						commit
						8e024186c4
					
				
					 10 changed files with 498 additions and 7 deletions
				
			
		
							
								
								
									
										0
									
								
								secret/endlessRunner/index.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								secret/endlessRunner/index.html
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								secret/endlessRunner/script.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								secret/endlessRunner/script.js
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								secret/endlessRunner/styles.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								secret/endlessRunner/styles.css
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										
											BIN
										
									
								
								secret/images/default.jpeg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								secret/images/default.jpeg
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 573 KiB | 
|  | @ -31,7 +31,7 @@ | ||||||
|           </div> |           </div> | ||||||
|         </a> |         </a> | ||||||
|         <a href="#" target="_blank" class="item"> |         <a href="#" target="_blank" class="item"> | ||||||
|           <img src="images/blackjack.jpg" alt="Image can't be displayed" /> |           <img src="images/default.jpeg" alt="Image can't be displayed" /> | ||||||
|           <h2>Secret Blackjack</h2> |           <h2>Secret Blackjack</h2> | ||||||
|           <div class="description"> |           <div class="description"> | ||||||
|             <p> |             <p> | ||||||
|  | @ -41,7 +41,7 @@ | ||||||
|           </div> |           </div> | ||||||
|         </a> |         </a> | ||||||
|         <a href="#" target="_blank" class="item"> |         <a href="#" target="_blank" class="item"> | ||||||
|           <img src="images/snake.png" alt="Image can't be displayed" /> |           <img src="images/default.jpeg" alt="Image can't be displayed" /> | ||||||
|           <h2>Snake</h2> |           <h2>Snake</h2> | ||||||
|           <div class="description"> |           <div class="description"> | ||||||
|             <p> |             <p> | ||||||
|  | @ -51,7 +51,7 @@ | ||||||
|           </div> |           </div> | ||||||
|         </a> |         </a> | ||||||
|         <a href="#" target="_blank" class="item"> |         <a href="#" target="_blank" class="item"> | ||||||
|           <img src="images/solitaire.png" alt="Image can't be displayed" /> |           <img src="images/default.jpeg" alt="Image can't be displayed" /> | ||||||
|           <h2>Solitaire</h2> |           <h2>Solitaire</h2> | ||||||
|           <div class="description"> |           <div class="description"> | ||||||
|             <p> |             <p> | ||||||
|  | @ -81,7 +81,7 @@ | ||||||
|           </div> |           </div> | ||||||
|         </a> |         </a> | ||||||
|         <a href="#" target="_blank" class="item"> |         <a href="#" target="_blank" class="item"> | ||||||
|           <img src="images/endless_runner.png" alt="Image can't be displayed" /> |           <img src="images/default.jpeg" alt="Image can't be displayed" /> | ||||||
|           <h2>Endless Runner</h2> |           <h2>Endless Runner</h2> | ||||||
|           <div class="description"> |           <div class="description"> | ||||||
|             <p> |             <p> | ||||||
|  |  | ||||||
							
								
								
									
										144
									
								
								secret/snake/game.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								secret/snake/game.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,144 @@ | ||||||
|  | 'use strict'; | ||||||
|  | 
 | ||||||
|  | const upButton = document.getElementById('up'); | ||||||
|  | const downButton = document.getElementById('down'); | ||||||
|  | const leftButton = document.getElementById('left'); | ||||||
|  | const rightButton = document.getElementById('right'); | ||||||
|  | const startButton = document.getElementById('start'); | ||||||
|  | const grid = document.createElement('div'); | ||||||
|  | grid.id = 'grid'; | ||||||
|  | document.querySelector('.game').appendChild(grid); | ||||||
|  | 
 | ||||||
|  | let snake = [{ x: 5, y: 5 }]; | ||||||
|  | let apple = { x: 8, y: 5 }; | ||||||
|  | let direction = { x: 0, y: 0 }; | ||||||
|  | let gameInterval = null; | ||||||
|  | let isGameRunning = false; | ||||||
|  | const gridSize = 10; | ||||||
|  | 
 | ||||||
|  | function initGame() { | ||||||
|  |     grid.style.display = 'grid'; | ||||||
|  |     grid.style.gridTemplateColumns = `repeat(${gridSize}, 1fr)`; | ||||||
|  |     grid.style.gridTemplateRows = `repeat(${gridSize}, 1fr)`; | ||||||
|  |     grid.style.width = '350px'; | ||||||
|  |     grid.style.height = '350px'; | ||||||
|  |     document.getElementById('title').style.display = 'none'; | ||||||
|  |     document.getElementById('description').style.display = 'none'; | ||||||
|  | 
 | ||||||
|  |     isGameRunning = true; | ||||||
|  |     snake = [{ x: 5, y: 5 }]; | ||||||
|  |     apple = spawnApple(); | ||||||
|  |     direction = { x: 0, y: 0 }; | ||||||
|  | 
 | ||||||
|  |     clearInterval(gameInterval); | ||||||
|  |     gameInterval = setInterval(gameLoop, 200); | ||||||
|  |     render(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function spawnApple() { | ||||||
|  |     let newApple; | ||||||
|  |     do { | ||||||
|  |         newApple = { | ||||||
|  |             x: Math.floor(Math.random() * gridSize), | ||||||
|  |             y: Math.floor(Math.random() * gridSize) | ||||||
|  |         }; | ||||||
|  |     } while (snake.some(segment => segment.x === newApple.x && segment.y === newApple.y)); | ||||||
|  |     return newApple; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function updateSnake() { | ||||||
|  |     const newHead = { | ||||||
|  |         x: snake[0].x + direction.x, | ||||||
|  |         y: snake[0].y + direction.y | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     if (newHead.x < 0) newHead.x = gridSize - 1; | ||||||
|  |     if (newHead.y < 0) newHead.y = gridSize - 1; | ||||||
|  |     if (newHead.x >= gridSize) newHead.x = 0; | ||||||
|  |     if (newHead.y >= gridSize) newHead.y = 0; | ||||||
|  | 
 | ||||||
|  |     if (snake.some(segment => segment.x === newHead.x && segment.y === newHead.y)) { | ||||||
|  |         gameOver(); | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     snake.unshift(newHead); | ||||||
|  | 
 | ||||||
|  |     if (newHead.x === apple.x && newHead.y === apple.y) { | ||||||
|  |         apple = spawnApple(); | ||||||
|  |     } else { | ||||||
|  |         snake.pop(); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function render() { | ||||||
|  |     grid.innerHTML = ""; | ||||||
|  | 
 | ||||||
|  |     for (let y = 0; y < gridSize; y++) { | ||||||
|  |         for (let x = 0; x < gridSize; x++) { | ||||||
|  |             const cell = document.createElement("div"); | ||||||
|  |             cell.classList.add("cell"); | ||||||
|  | 
 | ||||||
|  |             if ((x + y) % 2 === 0) { | ||||||
|  |                 cell.classList.add("light-green"); | ||||||
|  |             } else { | ||||||
|  |                 cell.classList.add("dark-green"); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             if (snake.some(segment => segment.x === x && segment.y === y)) { | ||||||
|  |                 cell.classList.add("snake"); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             if (apple.x === x && apple.y === y) { | ||||||
|  |                 cell.classList.add("apple"); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             grid.appendChild(cell); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function gameLoop() { | ||||||
|  |     if (!isGameRunning) return; | ||||||
|  |     updateSnake(); | ||||||
|  |     render(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function gameOver() { | ||||||
|  |     alert('Game Over!'); | ||||||
|  |     clearInterval(gameInterval); | ||||||
|  |     isGameRunning = false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function handleDirectionInput(key) { | ||||||
|  |     switch (key) { | ||||||
|  |         case 'ArrowUp': | ||||||
|  |         case 'w': | ||||||
|  |             if (direction.y === 0) direction = { x: 0, y: -1 }; | ||||||
|  |             break; | ||||||
|  |         case 'ArrowDown': | ||||||
|  |         case 's': | ||||||
|  |             if (direction.y === 0) direction = { x: 0, y: 1 }; | ||||||
|  |             break; | ||||||
|  |         case 'ArrowLeft': | ||||||
|  |         case 'a': | ||||||
|  |             if (direction.x === 0) direction = { x: -1, y: 0 }; | ||||||
|  |             break; | ||||||
|  |         case 'ArrowRight': | ||||||
|  |         case 'd': | ||||||
|  |             if (direction.x === 0) direction = { x: 1, y: 0 }; | ||||||
|  |             break; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | upButton.addEventListener('click', () => handleDirectionInput('ArrowUp')); | ||||||
|  | downButton.addEventListener('click', () => handleDirectionInput('ArrowDown')); | ||||||
|  | leftButton.addEventListener('click', () => handleDirectionInput('ArrowLeft')); | ||||||
|  | rightButton.addEventListener('click', () => handleDirectionInput('ArrowRight')); | ||||||
|  | startButton.addEventListener('click', () => { | ||||||
|  |     if (!isGameRunning) initGame(); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | document.addEventListener('keydown', (event) => { | ||||||
|  |     handleDirectionInput(event.key); | ||||||
|  | }); | ||||||
							
								
								
									
										49
									
								
								secret/snake/index.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								secret/snake/index.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,49 @@ | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <html lang="en"> | ||||||
|  |   <head> | ||||||
|  |     <meta charset="UTF-8" /> | ||||||
|  |     <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||||||
|  |     <title>Snake - Game</title> | ||||||
|  |     <link rel="stylesheet" href="styles.css" /> | ||||||
|  |   </head> | ||||||
|  |   <body> | ||||||
|  |     <div class="gameboy"> | ||||||
|  |       <!-- Game Boy Screen --> | ||||||
|  |       <div class="screen"> | ||||||
|  |         <article class="game"> | ||||||
|  |           <h1 class="title" id="title">Snake - Game</h1> | ||||||
|  |           <div class="description" id="description"> | ||||||
|  |             <h2>Description</h2> | ||||||
|  |             <p>Eat as many apples and grow as much as possible</p> | ||||||
|  |             <p>◀ or A or arrow left = move left</p> | ||||||
|  |             <p>▶ or D or arrow right = move right</p> | ||||||
|  |             <p>▲ or W or arrow up = move up</p> | ||||||
|  |             <p>▼ or S or arrow down = move down</p> | ||||||
|  |           </div> | ||||||
|  |           <canvas id="game"></canvas> | ||||||
|  |         </article> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |       <!-- Controls --> | ||||||
|  |       <div class="controls"> | ||||||
|  |         <!-- D-Pad on the left --> | ||||||
|  |         <div class="dpad"> | ||||||
|  |           <button class="dpad-btn up" id="up">▲</button> | ||||||
|  |           <button class="dpad-btn left" id="left">◀</button> | ||||||
|  |           <div class="dpad-center"></div> | ||||||
|  |           <button class="dpad-btn right" id="right">▶</button> | ||||||
|  |           <button class="dpad-btn down" id="down">▼</button> | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <!-- A, B and start button on the right --> | ||||||
|  |         <div class="action-buttons"> | ||||||
|  |           <button class="start-btn btn" id="start">Start</button> | ||||||
|  |           <button class="btn" id="a">A</button> | ||||||
|  |           <button class="btn" id="b">B</button> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <script src="game.js"></script> | ||||||
|  |     <script src="styles.js"></script> | ||||||
|  |   </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										238
									
								
								secret/snake/styles.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										238
									
								
								secret/snake/styles.css
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,238 @@ | ||||||
|  | /* Base Reset */ | ||||||
|  | body, | ||||||
|  | html { | ||||||
|  |     margin: 0; | ||||||
|  |     padding: 0; | ||||||
|  |     font-family: monospace; | ||||||
|  |     background-color: #3a2d56; | ||||||
|  |     display: flex; | ||||||
|  |     justify-content: center; | ||||||
|  |     align-items: center; | ||||||
|  |     height: 100vh; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* GameBoy Layout */ | ||||||
|  | .gameboy { | ||||||
|  |     background-color: #5f4c82; /* Game Boy Color purple shell */ | ||||||
|  |     width: 441px; | ||||||
|  |     height: 735px; | ||||||
|  |     border-radius: 20px; | ||||||
|  |     box-shadow: 0 8px 16px rgba(0, 0, 0, 0.6); | ||||||
|  |     display: flex; | ||||||
|  |     flex-direction: column; | ||||||
|  |     align-items: center; | ||||||
|  |     padding: 10px; | ||||||
|  |     position: relative; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @media(max-width: 768px) { | ||||||
|  |     .gameboy { | ||||||
|  |         width: 100vw; | ||||||
|  |         height: 100vh; | ||||||
|  |         border-radius: 0; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Screen */ | ||||||
|  | .screen { | ||||||
|  |     background-color: black; | ||||||
|  |     border: 4px solid #0f380f; | ||||||
|  |     width: 90%; | ||||||
|  |     height: 55%; | ||||||
|  |     margin-top: 20px; | ||||||
|  |     border-radius: 10px; | ||||||
|  |     display: flex; | ||||||
|  |     justify-content: center; | ||||||
|  |     align-items: center; | ||||||
|  |     box-shadow: inset 0 4px 8px rgba(0, 0, 0, 0.5); | ||||||
|  |     overflow: hidden; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .game { | ||||||
|  |     text-align: center; | ||||||
|  |     width: 90%; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Titles */ | ||||||
|  | h1 { | ||||||
|  |     font-size: 2rem; | ||||||
|  |     margin-bottom: 10px; | ||||||
|  |     text-transform: uppercase; | ||||||
|  |     color: #9bbc0f; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .description, | ||||||
|  | .description p { | ||||||
|  |     font-size: 1.2rem; | ||||||
|  |     margin: 0 auto; | ||||||
|  |     padding: 0 auto; | ||||||
|  |     color: white; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Grid container */ | ||||||
|  | #grid { | ||||||
|  |     display: grid; | ||||||
|  |     grid-template-columns: repeat(10, 1fr); /* Adjust to match gridSize */ | ||||||
|  |     grid-template-rows: repeat(10, 1fr); /* Adjust to match gridSize */ | ||||||
|  |     width: 400px; /* Adjust as needed */ | ||||||
|  |     height: 400px; /* Adjust as needed */ | ||||||
|  |     border: 2px solid #0f380f; | ||||||
|  |     margin: 20px auto; | ||||||
|  |     /* initially hide */ | ||||||
|  |     display: none; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Individual cells */ | ||||||
|  | .cell { | ||||||
|  |     width: 100%; | ||||||
|  |     height: 100%; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .cell.light-green { | ||||||
|  |     background-color: #9bbc0f; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .cell.dark-green { | ||||||
|  |     background-color: #0f380f; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Snake styling */ | ||||||
|  | .snake { | ||||||
|  |     background-color: #e600ff; /* Snake color */ | ||||||
|  |     z-index: 1000; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Apple styling */ | ||||||
|  | .apple { | ||||||
|  |     background-color: red; /* Apple color */ | ||||||
|  |     z-index: 999; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Controls Section */ | ||||||
|  | .controls { | ||||||
|  |     margin-top: 20px; | ||||||
|  |     display: flex; | ||||||
|  |     justify-content: space-between; | ||||||
|  |     width: 80%; | ||||||
|  |     align-items: center; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* D-Pad */ | ||||||
|  | .dpad { | ||||||
|  |     position: relative; | ||||||
|  |     width: 120px; | ||||||
|  |     height: 120px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Base Styling for D-Pad Buttons */ | ||||||
|  | .dpad-btn { | ||||||
|  |     background-color: #0f380f; | ||||||
|  |     color: #9bbc0f; | ||||||
|  |     border: none; | ||||||
|  |     border-radius: 5px; | ||||||
|  |     position: absolute; | ||||||
|  |     width: 42px; | ||||||
|  |     height: 42px; | ||||||
|  |     font-size: 1.5rem; | ||||||
|  |     display: flex; | ||||||
|  |     justify-content: center; | ||||||
|  |     align-items: center; | ||||||
|  |     cursor: pointer; | ||||||
|  |     z-index: 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .dpad-btn.up { | ||||||
|  |     top: 0; | ||||||
|  |     left: 50%; | ||||||
|  |     transform: translateX(-50%); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .dpad-btn.down { | ||||||
|  |     bottom: 0; | ||||||
|  |     left: 50%; | ||||||
|  |     transform: translateX(-50%); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .dpad-btn.left { | ||||||
|  |     top: 50%; | ||||||
|  |     left: 0; | ||||||
|  |     transform: translateY(-50%); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .dpad-btn.right { | ||||||
|  |     top: 50%; | ||||||
|  |     right: 0; | ||||||
|  |     transform: translateY(-50%); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* D-Pad Center to Connect Buttons */ | ||||||
|  | .dpad-center { | ||||||
|  |     background-color: #0f380f; | ||||||
|  |     position: absolute; | ||||||
|  |     top: 50%; | ||||||
|  |     left: 50%; | ||||||
|  |     transform: translate(-50%, -50%); | ||||||
|  |     width: 40px; | ||||||
|  |     height: 40px; | ||||||
|  |     border: 2px solid transparent; | ||||||
|  |     z-index: 0; | ||||||
|  |     border-radius: 5px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* A and B Buttons */ | ||||||
|  | .action-buttons { | ||||||
|  |     display: flex; | ||||||
|  |     flex-direction: column; | ||||||
|  |     justify-content: space-between; | ||||||
|  |     height: 200px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .btn { | ||||||
|  |     background-color: #0f380f; | ||||||
|  |     color: #9bbc0f; | ||||||
|  |     border: 2px solid #9bbc0f; | ||||||
|  |     border-radius: 50%; | ||||||
|  |     width: 60px; | ||||||
|  |     height: 60px; | ||||||
|  |     font-size: 1.8rem; | ||||||
|  |     cursor: pointer; | ||||||
|  |     transition: transform 0.1s, background-color 0.2s; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .btn:hover { | ||||||
|  |     background-color: #9bbc0f; | ||||||
|  |     color: #0f380f; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .btn:active { | ||||||
|  |     transform: scale(0.9); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Start Button */ | ||||||
|  | .start-btn { | ||||||
|  |     background-color: #0f380f; | ||||||
|  |     color: #9bbc0f; | ||||||
|  |     border: 2px solid #9bbc0f; | ||||||
|  |     border-radius: 5px; | ||||||
|  |     width: 100px; | ||||||
|  |     height: 40px; | ||||||
|  |     font-size: 1.2rem; | ||||||
|  |     cursor: pointer; | ||||||
|  |     transition: transform 0.1s, background-color 0.2s; | ||||||
|  |     margin-bottom: 20px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .start-btn:hover { | ||||||
|  |     background-color: #9bbc0f; | ||||||
|  |     color: #0f380f; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .start-btn:active { | ||||||
|  |     transform: scale(0.9); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Hidden Canvas for Debugging or Fallback */ | ||||||
|  | canvas { | ||||||
|  |     display: none; | ||||||
|  |     z-index: 1000; | ||||||
|  | } | ||||||
							
								
								
									
										60
									
								
								secret/snake/styles.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								secret/snake/styles.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,60 @@ | ||||||
|  | 'use strict'; | ||||||
|  | const aBtn = document.querySelector('#a'); | ||||||
|  | const bBtn = document.querySelector('#b'); | ||||||
|  | const gameboy = document.querySelector('.gameboy'); | ||||||
|  | const html = document.documentElement; | ||||||
|  | const body = document.body; | ||||||
|  | const dpadButtons = document.querySelectorAll('.dpad-btn'); | ||||||
|  | const dpadCenter = document.querySelector('.dpad-center'); // Darker variant
 | ||||||
|  | const actionButtons = document.querySelectorAll('.btn'); | ||||||
|  | 
 | ||||||
|  | const colors = [ | ||||||
|  |     { gameboyColor: '#B39DDB', htmlColor: '#D1C4E9', buttonColor: '#673AB7', buttonTextColor: '#FFFFFF', dpadCenterColor: '#5E35B1' }, | ||||||
|  |     { gameboyColor: '#FFC107', htmlColor: '#FFF9C4', buttonColor: '#FF9800', buttonTextColor: '#000000', dpadCenterColor: '#EF6C00' }, | ||||||
|  |     { gameboyColor: '#8BC34A', htmlColor: '#C5E1A5', buttonColor: '#FF5722', buttonTextColor: '#FFFFFF', dpadCenterColor: '#E64A19' }, | ||||||
|  |     { gameboyColor: '#F44336', htmlColor: '#FFCDD2', buttonColor: '#E91E63', buttonTextColor: '#FFFFFF', dpadCenterColor: '#C2185B' }, | ||||||
|  |     { gameboyColor: '#03A9F4', htmlColor: '#BBDEFB', buttonColor: '#FFEB3B', buttonTextColor: '#000000', dpadCenterColor: '#0277BD' }, | ||||||
|  |     { gameboyColor: '#FF7043', htmlColor: '#FFCCBC', buttonColor: '#FF5722', buttonTextColor: '#FFFFFF', dpadCenterColor: '#D84315' }, | ||||||
|  |     { gameboyColor: '#9C27B0', htmlColor: '#E1BEE7', buttonColor: '#7B1FA2', buttonTextColor: '#FFFFFF', dpadCenterColor: '#6A1B9A' }, | ||||||
|  |     { gameboyColor: '#FFD700', htmlColor: '#FFF9C4', buttonColor: '#FF9800', buttonTextColor: '#FFFFFF', dpadCenterColor: '#F57F17' }, | ||||||
|  |     { gameboyColor: '#009688', htmlColor: '#B2DFDB', buttonColor: '#4CAF50', buttonTextColor: '#FFFFFF', dpadCenterColor: '#00796B' }, | ||||||
|  |     { gameboyColor: '#795548', htmlColor: '#D7CCC8', buttonColor: '#9E9E9E', buttonTextColor: '#000000', dpadCenterColor: '#5D4037' }, | ||||||
|  |     { gameboyColor: '#FF5733', htmlColor: '#FFCCCB', buttonColor: '#C70039', buttonTextColor: '#FFFFFF', dpadCenterColor: '#B71C1C' }, | ||||||
|  |     { gameboyColor: '#00BCD4', htmlColor: '#B2EBF2', buttonColor: '#00ACC1', buttonTextColor: '#FFFFFF', dpadCenterColor: '#00838F' } | ||||||
|  | ]; | ||||||
|  | 
 | ||||||
|  | let currentColorIndex = localStorage.getItem('gameboyColorIndex') ? parseInt(localStorage.getItem('gameboyColorIndex')) : 0; | ||||||
|  | 
 | ||||||
|  | function updateGameBoyColor() { | ||||||
|  |     gameboy.style.backgroundColor = colors[currentColorIndex].gameboyColor; | ||||||
|  |     html.style.backgroundColor = colors[currentColorIndex].htmlColor; | ||||||
|  |     body.style.backgroundColor = colors[currentColorIndex].htmlColor; | ||||||
|  | 
 | ||||||
|  |     dpadButtons.forEach(button => { | ||||||
|  |         button.style.backgroundColor = colors[currentColorIndex].buttonColor; | ||||||
|  |         button.style.color = colors[currentColorIndex].buttonTextColor; | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     // Using darker dpad center color
 | ||||||
|  |     dpadCenter.style.backgroundColor = colors[currentColorIndex].dpadCenterColor; | ||||||
|  |     dpadCenter.style.color = colors[currentColorIndex].buttonTextColor; | ||||||
|  | 
 | ||||||
|  |     actionButtons.forEach(button => { | ||||||
|  |         button.style.backgroundColor = colors[currentColorIndex].buttonColor; | ||||||
|  |         button.style.color = colors[currentColorIndex].buttonTextColor; | ||||||
|  |     }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | aBtn.addEventListener('click', () => { | ||||||
|  |     currentColorIndex = (currentColorIndex - 1 + colors.length) % colors.length; | ||||||
|  |     localStorage.setItem('gameboyColorIndex', currentColorIndex); | ||||||
|  |     updateGameBoyColor(); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | bBtn.addEventListener('click', () => { | ||||||
|  |     currentColorIndex = (currentColorIndex + 1) % colors.length; | ||||||
|  |     localStorage.setItem('gameboyColorIndex', currentColorIndex); | ||||||
|  |     updateGameBoyColor(); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | updateGameBoyColor(); | ||||||
|  | @ -15,7 +15,7 @@ | ||||||
|       <div class="grid-container"> |       <div class="grid-container"> | ||||||
|         <a href="" target="_blank" class="item"> |         <a href="" target="_blank" class="item"> | ||||||
|           <img |           <img | ||||||
|             src="../secret/../secret/images/snake.png" |             src="../secret/../secret/images/default.jpeg" | ||||||
|             alt="Image can't be displayed" |             alt="Image can't be displayed" | ||||||
|           /> |           /> | ||||||
|           <h2>Snake</h2> |           <h2>Snake</h2> | ||||||
|  | @ -28,7 +28,7 @@ | ||||||
|         </a> |         </a> | ||||||
|         <a href="" target="_blank" class="item"> |         <a href="" target="_blank" class="item"> | ||||||
|           <img |           <img | ||||||
|             src="../secret/images/solitaire.png" |             src="../secret/images/default.jpeg" | ||||||
|             alt="Image can't be displayed" |             alt="Image can't be displayed" | ||||||
|           /> |           /> | ||||||
|           <h2>Solitaire</h2> |           <h2>Solitaire</h2> | ||||||
|  | @ -71,7 +71,7 @@ | ||||||
|         </a> |         </a> | ||||||
|         <a href="" target="_blank" class="item"> |         <a href="" target="_blank" class="item"> | ||||||
|           <img |           <img | ||||||
|             src="../secret/images/endless_runner.png" |             src="../secret/images/default.jpeg" | ||||||
|             alt="Image can't be displayed" |             alt="Image can't be displayed" | ||||||
|           /> |           /> | ||||||
|           <h2>Endless Runner</h2> |           <h2>Endless Runner</h2> | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue