Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Hexagon Evolution Game</title> | |
| <style> | |
| body { text-align: center; background-color: #282c34; color: white; } | |
| canvas { background-color: #1e1e1e; cursor: pointer; } | |
| #timer, #resources, #seedSelection { font-size: 20px; margin-top: 10px; } | |
| button { margin: 5px; padding: 10px; font-size: 16px; cursor: pointer; } | |
| </style> | |
| </head> | |
| <body> | |
| <h1>π± Hexagon Evolution Game πΏ</h1> | |
| <div id="timer">Time Left: 5:00</div> | |
| <div id="resources">Seeds: πΏ5 π5 πΊ5 πΎ5 π5</div> | |
| <div id="seedSelection"> | |
| <button onclick="selectPlant('πΏ')">πΏ</button> | |
| <button onclick="selectPlant('π')">π</button> | |
| <button onclick="selectPlant('πΊ')">πΊ</button> | |
| <button onclick="selectPlant('πΎ')">πΎ</button> | |
| <button onclick="selectPlant('π')">π</button> | |
| </div> | |
| <canvas id="gameCanvas" width="800" height="600"></canvas> | |
| <script> | |
| const canvas = document.getElementById("gameCanvas"); | |
| const ctx = canvas.getContext("2d"); | |
| const hexSize = 40; | |
| const hexWidth = Math.sqrt(3) * hexSize; | |
| const hexHeight = 2 * hexSize; | |
| const offsetX = hexWidth * 0.75; | |
| const offsetY = hexHeight * 0.5; | |
| const rows = 10; | |
| const cols = 10; | |
| let hexGrid = []; | |
| let timer = 300; // 5 minutes | |
| let selectedPlant = null; | |
| let resources = { "πΏ": 5, "π": 5, "πΊ": 5, "πΎ": 5, "π": 5 }; | |
| let score = 0; | |
| function generateHexGrid() { | |
| for (let row = 0; row < rows; row++) { | |
| for (let col = 0; col < cols; col++) { | |
| let x = col * offsetX; | |
| let y = row * hexHeight + (col % 2 ? offsetY : 0); | |
| hexGrid.push({ x, y, type: "empty", lifeStage: 0, score: 0 }); | |
| } | |
| } | |
| } | |
| function selectPlant(plant) { | |
| selectedPlant = plant; | |
| } | |
| function drawHex(x, y, type) { | |
| ctx.beginPath(); | |
| for (let i = 0; i < 6; i++) { | |
| let angle = (Math.PI / 3) * i; | |
| let px = x + hexSize * Math.cos(angle); | |
| let py = y + hexSize * Math.sin(angle); | |
| ctx.lineTo(px, py); | |
| } | |
| ctx.closePath(); | |
| ctx.fillStyle = getTerrainColor(type); | |
| ctx.fill(); | |
| ctx.stroke(); | |
| } | |
| function getTerrainColor(type) { | |
| switch (type) { | |
| case "empty": return "#C2B280"; | |
| case "seed": return "#FFD700"; | |
| case "stem": return "#8B4513"; | |
| case "leaf": return "#228B22"; | |
| case "bud": return "#FF69B4"; | |
| case "flower": return "#FFA500"; | |
| default: return "#FFFFFF"; | |
| } | |
| } | |
| function evolveGrid() { | |
| hexGrid.forEach(hex => { | |
| if (hex.type !== "empty" && Math.random() < 0.1 && hex.lifeStage < 5) { | |
| hex.lifeStage++; | |
| hex.type = ["empty", "seed", "stem", "leaf", "bud", "flower"][hex.lifeStage]; | |
| hex.score += hex.lifeStage * 2; | |
| } | |
| }); | |
| } | |
| function renderMap() { | |
| ctx.clearRect(0, 0, canvas.width, canvas.height); | |
| hexGrid.forEach(hex => drawHex(hex.x, hex.y, hex.type)); | |
| } | |
| function updateTimer() { | |
| timer--; | |
| document.getElementById("timer").innerText = `Time Left: ${Math.floor(timer / 60)}:${(timer % 60).toString().padStart(2, '0')}`; | |
| if (timer % 15 === 0) { | |
| evolveGrid(); | |
| } | |
| renderMap(); | |
| if (timer <= 0) { | |
| clearInterval(gameLoop); | |
| alert("Game Over! Final Score: " + score); | |
| } | |
| } | |
| canvas.addEventListener("click", (event) => { | |
| const rect = canvas.getBoundingClientRect(); | |
| const mouseX = event.clientX - rect.left; | |
| const mouseY = event.clientY - rect.top; | |
| hexGrid.forEach(hex => { | |
| if (Math.hypot(hex.x - mouseX, hex.y - mouseY) < hexSize) { | |
| if (selectedPlant && resources[selectedPlant] > 0 && hex.type === "empty") { | |
| hex.type = "seed"; | |
| hex.lifeStage = 1; | |
| resources[selectedPlant]--; | |
| updateResources(); | |
| } | |
| } | |
| }); | |
| renderMap(); | |
| }); | |
| function updateResources() { | |
| document.getElementById("resources").innerText = `Seeds: πΏ${resources["πΏ"]} π${resources["π"]} πΊ${resources["πΊ"]} πΎ${resources["πΎ"]} π${resources["π"]}`; | |
| } | |
| generateHexGrid(); | |
| renderMap(); | |
| let gameLoop = setInterval(updateTimer, 1000); | |
| </script> | |
| </body> | |
| </html> | |