main #3
					 4 changed files with 53 additions and 75 deletions
				
			
		|  | @ -1,14 +0,0 @@ | ||||||
| 'use strict' |  | ||||||
| 
 |  | ||||||
| document.addEventListener('DOMContentLoaded', () => { |  | ||||||
|     const bombsSlider = document.getElementById('bombs'); |  | ||||||
|     const bombsValue = document.getElementById('bombsValue'); |  | ||||||
| 
 |  | ||||||
|     // Update the displayed number of bombs when the slider value changes
 |  | ||||||
|     bombsSlider.addEventListener('input', () => { |  | ||||||
|         bombsValue.textContent = bombsSlider.value; |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     // Initialize the displayed value on page load
 |  | ||||||
|     bombsValue.textContent = bombsSlider.value; |  | ||||||
| }); |  | ||||||
|  | @ -1,35 +1,21 @@ | ||||||
| <!DOCTYPE html> | <!DOCTYPE html> | ||||||
| <html lang="en"> | <html lang="en"> | ||||||
|   <head> | 
 | ||||||
|  | <head> | ||||||
|   <meta charset="UTF-8" /> |   <meta charset="UTF-8" /> | ||||||
|   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||||||
|   <title>Minesweeper</title> |   <title>Minesweeper</title> | ||||||
|   <link rel="stylesheet" href="styles.css" /> |   <link rel="stylesheet" href="styles.css" /> | ||||||
|   </head> | </head> | ||||||
| 
 | 
 | ||||||
|   <body> | <body> | ||||||
|   <div id="settings"> |   <div id="settings"> | ||||||
|     <h1>Minesweeper</h1> |     <h1>Minesweeper</h1> | ||||||
|     <label for="gridSize">Grid Size:</label> |     <label for="gridSize">Grid Size:</label> | ||||||
|       <input |     <input type="number" id="gridSize" min="6" max="25" value="9" aria-label="Grid Size" /> | ||||||
|         type="number" |  | ||||||
|         id="gridSize" |  | ||||||
|         min="1" |  | ||||||
|         max="25" |  | ||||||
|         value="9" |  | ||||||
|         aria-label="Grid Size" |  | ||||||
|       /> |  | ||||||
| 
 | 
 | ||||||
|     <label for="bombs">Number of Bombs:</label> |     <label for="bombs">Number of Bombs:</label> | ||||||
|       <input |     <input type="number" id="bombs" min="1" max="300" value="9" aria-label="Number of Bombs" /> | ||||||
|         type="range" |  | ||||||
|         id="bombs" |  | ||||||
|         min="1" |  | ||||||
|         max="80" |  | ||||||
|         value="20" |  | ||||||
|         aria-label="Number of Bombs" |  | ||||||
|       /> |  | ||||||
|       <span id="bombsValue">20</span> |  | ||||||
| 
 | 
 | ||||||
|     <button id="startGame">Start Game</button> |     <button id="startGame">Start Game</button> | ||||||
|   </div> |   </div> | ||||||
|  | @ -39,6 +25,6 @@ | ||||||
|   </div> |   </div> | ||||||
| 
 | 
 | ||||||
|   <script src="script.js"></script> |   <script src="script.js"></script> | ||||||
|     <script src="counter.js"></script> | </body> | ||||||
|   </body> | 
 | ||||||
| </html> | </html> | ||||||
|  | @ -12,26 +12,33 @@ const canvas = document.getElementById('game'); | ||||||
| const ctx = canvas.getContext('2d'); | const ctx = canvas.getContext('2d'); | ||||||
| 
 | 
 | ||||||
| class Minesweeper { | class Minesweeper { | ||||||
|     constructor(w, h, bombs) { |     constructor(width, height, bombs) { | ||||||
|         this.size = 25; |         this.size = 25; | ||||||
|         this.field = new Array(w); |         this.field = new Array(width); | ||||||
|         this.bombs = new Array(w); |         this.bombs = new Array(width); | ||||||
|         for (let x = 0; x < this.field.length; x++) { |         for (let x = 0; x < this.field.length; x++) { | ||||||
|             this.field[x] = new Array(h); |             this.field[x] = new Array(height); | ||||||
|             this.bombs[x] = new Array(h); |             this.bombs[x] = new Array(height); | ||||||
|             for (let y = 0; y < this.field.length; y++) { |             for (let y = 0; y < this.field[x].length; y++) { | ||||||
|                 this.field[x][y] = 1; |                 this.field[x][y] = 1; | ||||||
|                 this.bombs[x][y] = false; |                 this.bombs[x][y] = false; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         for (let i = 0; i < bombs; i++) { |         this.bombAmount = bombs > width * height / 2 ? width * height / 2 : bombs; | ||||||
|             let x = Math.floor(Math.random() * w); |         this.width = width; | ||||||
|             let y = Math.floor(Math.random() * h); |         this.height = height; | ||||||
|             this.bombs[x][y] ? i-- : this.bombs[x][y] = true; |         this.firstClick = false; | ||||||
|  |         this.drawField(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|         this.drawField(); |     generateBombs() { | ||||||
|  |         for (let i = 0; i < this.bombAmount; i++) { | ||||||
|  |             let x = Math.floor(Math.random() * this.width); | ||||||
|  |             let y = Math.floor(Math.random() * this.height); | ||||||
|  |             this.bombs[x][y] && this.field[x][y] != 0 ? i-- : this.bombs[x][y] = true; | ||||||
|  |         } | ||||||
|  |         this.firstClick = true; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     getNearbyBombs(x, y) { |     getNearbyBombs(x, y) { | ||||||
|  | @ -85,6 +92,7 @@ class Minesweeper { | ||||||
|                 window.location.reload(); |                 window.location.reload(); | ||||||
|             } else if (this.field[x][y] == 1) { |             } else if (this.field[x][y] == 1) { | ||||||
|                 this.field[x][y] = 0; |                 this.field[x][y] = 0; | ||||||
|  |                 !this.firstClick ? this.generateBombs() : {}; | ||||||
|                 if (this.getNearbyBombs(x, y) == 0) { |                 if (this.getNearbyBombs(x, y) == 0) { | ||||||
|                     for (let newX = x - 1; newX <= x + 1; newX++) { |                     for (let newX = x - 1; newX <= x + 1; newX++) { | ||||||
|                         for (let newY = y - 1; newY <= y + 1; newY++) { |                         for (let newY = y - 1; newY <= y + 1; newY++) { | ||||||
|  | @ -102,9 +110,9 @@ class Minesweeper { | ||||||
| 
 | 
 | ||||||
|     drawSquare(x, y, type) { |     drawSquare(x, y, type) { | ||||||
|         ctx.lineWidth = 3; |         ctx.lineWidth = 3; | ||||||
|         let color1 = (x + y) % 2 === 0 ? '#D3D3D3' : '#A9A9A9'; |         let uncovered = (x + y) % 2 === 0 ? '#D3D3D3' : '#A9A9A9'; | ||||||
|         let activeColor = (x + y) % 2 === 0 ? '#4CAF50' : '#81C784'; |         let covered = (x + y) % 2 === 0 ? '#4CAF50' : '#81C784'; | ||||||
|         ctx.fillStyle = type !== 0 ? activeColor : color1; |         ctx.fillStyle = type != 0 ? covered : uncovered; | ||||||
|         ctx.fillRect(x * this.size, y * this.size, this.size, this.size); |         ctx.fillRect(x * this.size, y * this.size, this.size, this.size); | ||||||
|         ctx.strokeStyle = '#000'; |         ctx.strokeStyle = '#000'; | ||||||
|         ctx.strokeRect(x * this.size, y * this.size, this.size, this.size); |         ctx.strokeRect(x * this.size, y * this.size, this.size, this.size); | ||||||
|  | @ -123,9 +131,12 @@ class Minesweeper { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     drawField() { |     drawField() { | ||||||
|         const squareWidth = window.innerWidth / (this.field.length + 4); |         if (window.innerWidth > window.innerHeight) { | ||||||
|         const squareHeight = window.innerHeight / (this.field[0].length + 4); |             this.size = window.innerHeight / (this.field[0].length + 4); | ||||||
|         squareHeight > this.size ? this.size = squareWidth : this.size = squareHeight; |         } else { | ||||||
|  |             this.size = window.innerWidth / (this.field.length + 4); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         canvas.width = this.size * this.field.length; |         canvas.width = this.size * this.field.length; | ||||||
|         canvas.height = this.size * this.field[0].length; |         canvas.height = this.size * this.field[0].length; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -88,7 +88,6 @@ button:active { | ||||||
| 
 | 
 | ||||||
| canvas { | canvas { | ||||||
|     display: none; |     display: none; | ||||||
|     height: 69vh; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @media(max-width: 600px) { | @media(max-width: 600px) { | ||||||
|  | @ -102,8 +101,4 @@ canvas { | ||||||
|         width: 90%; |         width: 90%; | ||||||
|         max-width: none; |         max-width: none; | ||||||
|     } |     } | ||||||
| 
 |  | ||||||
|     canvas { |  | ||||||
|         height: 50vh; |  | ||||||
|     } |  | ||||||
| } | } | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue