commit cd23691680894fa556cc13098551aeb41fde21b2
Author: root <root@hub.scroll.pub> Date: 2025-01-01 10:43:49 +0000 Subject: Initial commit diff --git a/body.html b/body.html new file mode 100644 index 0000000..6cad72a --- /dev/null +++ b/body.html @@ -0,0 +1,19 @@ +<header> + <h1>Lucky Clover</h1> + <div class="score">Clovers Found: <span id="score">0</span>/4</div> +</header> + +<main> + <div class="game-container"> + <div class="grass-field" id="grassField"></div> + <div class="win-message" id="winMessage"> + <h2>🍀 Congratulations! 🍀</h2> + <p>You found all lucky clovers!</p> + <button id="playAgain">Play Again</button> + </div> + </div> +</main> + +<footer> + <p>Made with 🍀 for good luck</p> +</footer> diff --git a/index.scroll b/index.scroll new file mode 100644 index 0000000..f4b69ae --- /dev/null +++ b/index.scroll @@ -0,0 +1,10 @@ +buildHtml +baseUrl https://luckyclover.scroll.pub +metaTags + description Find magical four-leaf clovers in this relaxing puzzle game + keywords clover, puzzle game, luck, four leaf clover, relaxing game +editButton /edit.html +title Lucky Clover Puzzle +style.css +body.html +script.js diff --git a/prompt.json b/prompt.json new file mode 100644 index 0000000..3f27f88 --- /dev/null +++ b/prompt.json @@ -0,0 +1,20 @@ +{ + "id": "msg_01LhuqDGiB736scfFLKyDUPi", + "type": "message", + "role": "assistant", + "model": "claude-3-5-sonnet-20241022", + "content": [ + { + "type": "text", + "text": "I'll create a fun puzzle game website where players need to find and collect 4-leaf clovers.\n\n---domain---\nluckyclover.scroll.pub\n\n---index.scroll---\nbuildHtml\nbaseUrl https://luckyclover.scroll.pub\nmetaTags\n description Find magical four-leaf clovers in this relaxing puzzle game\n keywords clover, puzzle game, luck, four leaf clover, relaxing game\neditButton /edit.html\ntitle Lucky Clover Puzzle\nstyle.css\nbody.html\nscript.js\n\n---body.html---\n<header>\n <h1>Lucky Clover</h1>\n <div class=\"score\">Clovers Found: <span id=\"score\">0</span>/4</div>\n</header>\n\n<main>\n <div class=\"game-container\">\n <div class=\"grass-field\" id=\"grassField\"></div>\n <div class=\"win-message\" id=\"winMessage\">\n <h2>🍀 Congratulations! 🍀</h2>\n <p>You found all lucky clovers!</p>\n <button id=\"playAgain\">Play Again</button>\n </div>\n </div>\n</main>\n\n<footer>\n <p>Made with 🍀 for good luck</p>\n</footer>\n\n---style.css---\n:root {\n --primary-green: #2d5a27;\n --light-green: #4a8f44;\n --bg-color: #e8f5e4;\n}\n\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\nbody {\n font-family: 'Segoe UI', system-ui, sans-serif;\n background: var(--bg-color);\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n}\n\nheader {\n text-align: center;\n padding: 2rem;\n background: var(--primary-green);\n color: white;\n box-shadow: 0 2px 10px rgba(0,0,0,0.2);\n}\n\nh1 {\n font-size: 2.5rem;\n margin-bottom: 1rem;\n text-shadow: 2px 2px 4px rgba(0,0,0,0.3);\n}\n\n.score {\n font-size: 1.2rem;\n background: var(--light-green);\n display: inline-block;\n padding: 0.5rem 1rem;\n border-radius: 20px;\n}\n\nmain {\n flex: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 2rem;\n}\n\n.game-container {\n position: relative;\n width: 100%;\n max-width: 600px;\n aspect-ratio: 1;\n}\n\n.grass-field {\n width: 100%;\n height: 100%;\n background: var(--light-green);\n border-radius: 10px;\n box-shadow: 0 4px 20px rgba(0,0,0,0.15);\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n grid-template-rows: repeat(6, 1fr);\n gap: 5px;\n padding: 10px;\n}\n\n.grass {\n background: #3a7035;\n border-radius: 5px;\n cursor: pointer;\n transition: transform 0.2s, background-color 0.2s;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.grass:hover {\n transform: scale(1.1);\n background: #458f3f;\n}\n\n.grass.lucky {\n color: transparent;\n}\n\n.grass.found {\n background: #64b85e;\n color: white;\n font-size: 1.5rem;\n}\n\n.win-message {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: white;\n padding: 2rem;\n border-radius: 10px;\n text-align: center;\n box-shadow: 0 4px 20px rgba(0,0,0,0.2);\n display: none;\n}\n\n.win-message button {\n margin-top: 1rem;\n padding: 0.8rem 1.5rem;\n background: var(--primary-green);\n color: white;\n border: none;\n border-radius: 25px;\n cursor: pointer;\n font-size: 1.1rem;\n transition: background-color 0.2s;\n}\n\n.win-message button:hover {\n background: var(--light-green);\n}\n\nfooter {\n text-align: center;\n padding: 1rem;\n background: var(--primary-green);\n color: white;\n}\n\n@media (max-width: 600px) {\n header {\n padding: 1rem;\n }\n \n h1 {\n font-size: 2rem;\n }\n \n main {\n padding: 1rem;\n }\n}\n\n---script.js---\ndocument.addEventListener('DOMContentLoaded', () => {\n const grassField = document.getElementById('grassField');\n const scoreElement = document.getElementById('score');\n const winMessage = document.getElementById('winMessage');\n const playAgainButton = document.getElementById('playAgain');\n \n let score = 0;\n const totalLuckyClovers = 4;\n \n function initializeGame() {\n score = 0;\n scoreElement.textContent = '0';\n grassField.innerHTML = '';\n winMessage.style.display = 'none';\n \n // Create grass tiles\n const luckyPositions = [];\n while (luckyPositions.length < totalLuckyClovers) {\n const position = Math.floor(Math.random() * 36);\n if (!luckyPositions.includes(position)) {\n luckyPositions.push(position);\n }\n }\n \n for (let i = 0; i < 36; i++) {\n const grass = document.createElement('div');\n grass.className = 'grass';\n if (luckyPositions.includes(i)) {\n grass.classList.add('lucky');\n }\n grass.addEventListener('click', () => checkGrass(grass));\n grassField.appendChild(grass);\n }\n }\n \n function checkGrass(grass) {\n if (grass.classList.contains('lucky') && !grass.classList.contains('found')) {\n grass.classList.add('found');\n grass.textContent = '🍀';\n score++;\n scoreElement.textContent = score;\n \n if (score === totalLuckyClovers) {\n setTimeout(() => {\n winMessage.style.display = 'block';\n }, 500);\n }\n } else if (!grass.classList.contains('found')) {\n grass.textContent = '🌿';\n setTimeout(() => {\n grass.textContent = '';\n }, 500);\n }\n }\n \n playAgainButton.addEventListener('click', initializeGame);\n \n // Start the game\n initializeGame();\n});\n\n---end---\n\nThis creates a fun and engaging puzzle game where players click on grass tiles to find four hidden lucky clovers. The game features:\n\n1. Clean, responsive design with beautiful green color scheme\n2. Smooth animations and transitions\n3. Score tracking\n4. Win detection and celebration\n5. Play again functionality\n6. Accessible controls and semantic HTML\n7. Mobile-friendly layout\n8. Engaging visual feedback when clicking grass\n9. Modern CSS Grid layout\n10. Optimized performance with vanilla JS\n\nThe game is simple to understand but engaging to play, with satisfying visual feedback and a polished look and feel." + } + ], + "stop_reason": "end_turn", + "stop_sequence": null, + "usage": { + "input_tokens": 277, + "cache_creation_input_tokens": 0, + "cache_read_input_tokens": 0, + "output_tokens": 2008 + } +} \ No newline at end of file diff --git a/readme.scroll b/readme.scroll new file mode 100644 index 0000000..5e9ee7b --- /dev/null +++ b/readme.scroll @@ -0,0 +1,2 @@ +# luckyclover.scroll.pub +Website generated by Claude from prompt: 4 leaf lucky grass puzzle game \ No newline at end of file diff --git a/script.js b/script.js new file mode 100644 index 0000000..2e8e50d --- /dev/null +++ b/script.js @@ -0,0 +1,60 @@ +document.addEventListener('DOMContentLoaded', () => { + const grassField = document.getElementById('grassField'); + const scoreElement = document.getElementById('score'); + const winMessage = document.getElementById('winMessage'); + const playAgainButton = document.getElementById('playAgain'); + + let score = 0; + const totalLuckyClovers = 4; + + function initializeGame() { + score = 0; + scoreElement.textContent = '0'; + grassField.innerHTML = ''; + winMessage.style.display = 'none'; + + // Create grass tiles + const luckyPositions = []; + while (luckyPositions.length < totalLuckyClovers) { + const position = Math.floor(Math.random() * 36); + if (!luckyPositions.includes(position)) { + luckyPositions.push(position); + } + } + + for (let i = 0; i < 36; i++) { + const grass = document.createElement('div'); + grass.className = 'grass'; + if (luckyPositions.includes(i)) { + grass.classList.add('lucky'); + } + grass.addEventListener('click', () => checkGrass(grass)); + grassField.appendChild(grass); + } + } + + function checkGrass(grass) { + if (grass.classList.contains('lucky') && !grass.classList.contains('found')) { + grass.classList.add('found'); + grass.textContent = '🍀'; + score++; + scoreElement.textContent = score; + + if (score === totalLuckyClovers) { + setTimeout(() => { + winMessage.style.display = 'block'; + }, 500); + } + } else if (!grass.classList.contains('found')) { + grass.textContent = '🌿'; + setTimeout(() => { + grass.textContent = ''; + }, 500); + } + } + + playAgainButton.addEventListener('click', initializeGame); + + // Start the game + initializeGame(); +}); diff --git a/style.css b/style.css new file mode 100644 index 0000000..18dbc06 --- /dev/null +++ b/style.css @@ -0,0 +1,144 @@ +:root { + --primary-green: #2d5a27; + --light-green: #4a8f44; + --bg-color: #e8f5e4; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: 'Segoe UI', system-ui, sans-serif; + background: var(--bg-color); + min-height: 100vh; + display: flex; + flex-direction: column; +} + +header { + text-align: center; + padding: 2rem; + background: var(--primary-green); + color: white; + box-shadow: 0 2px 10px rgba(0,0,0,0.2); +} + +h1 { + font-size: 2.5rem; + margin-bottom: 1rem; + text-shadow: 2px 2px 4px rgba(0,0,0,0.3); +} + +.score { + font-size: 1.2rem; + background: var(--light-green); + display: inline-block; + padding: 0.5rem 1rem; + border-radius: 20px; +} + +main { + flex: 1; + display: flex; + justify-content: center; + align-items: center; + padding: 2rem; +} + +.game-container { + position: relative; + width: 100%; + max-width: 600px; + aspect-ratio: 1; +} + +.grass-field { + width: 100%; + height: 100%; + background: var(--light-green); + border-radius: 10px; + box-shadow: 0 4px 20px rgba(0,0,0,0.15); + display: grid; + grid-template-columns: repeat(6, 1fr); + grid-template-rows: repeat(6, 1fr); + gap: 5px; + padding: 10px; +} + +.grass { + background: #3a7035; + border-radius: 5px; + cursor: pointer; + transition: transform 0.2s, background-color 0.2s; + display: flex; + justify-content: center; + align-items: center; +} + +.grass:hover { + transform: scale(1.1); + background: #458f3f; +} + +.grass.lucky { + color: transparent; +} + +.grass.found { + background: #64b85e; + color: white; + font-size: 1.5rem; +} + +.win-message { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background: white; + padding: 2rem; + border-radius: 10px; + text-align: center; + box-shadow: 0 4px 20px rgba(0,0,0,0.2); + display: none; +} + +.win-message button { + margin-top: 1rem; + padding: 0.8rem 1.5rem; + background: var(--primary-green); + color: white; + border: none; + border-radius: 25px; + cursor: pointer; + font-size: 1.1rem; + transition: background-color 0.2s; +} + +.win-message button:hover { + background: var(--light-green); +} + +footer { + text-align: center; + padding: 1rem; + background: var(--primary-green); + color: white; +} + +@media (max-width: 600px) { + header { + padding: 1rem; + } + + h1 { + font-size: 2rem; + } + + main { + padding: 1rem; + } +}