Prompt-Bibliothek
Cosmic Keystrokes
Generiere ein interaktives Schnellschreibspiel in einer einzigen HTML-Datei mit Side-Scrolling-Gameplay und Tailwind CSS-Styling.
Kopiere diese Aufforderung in unsere Entwickler-Konsole, um es selbst auszuprobieren!
Inhalt | |
---|---|
Benutzer | Schreibe mir eine vollständige Web-App als eine einzige HTML-Datei. Die App sollte ein einfaches Side-Scrolling-Spiel enthalten, bei dem ich mich mit WASD bewegen kann. Beim Bewegen in der Welt trifft der Charakter/Sprite gelegentlich auf Wörter. Wenn ein Wort gefunden wird, muss der Spieler das Wort so schnell wie möglich korrekt eingeben. Je schneller das Wort erfolgreich eingegeben wird, desto mehr Punkte erhält der Spieler. Wir sollten einen Zähler oben rechts haben, um die Punkte zu verfolgen. Die Wörter sollten zufällig und sehr unterschiedlich sein, um das Spiel interessant zu halten. Du solltest die Website sehr ästhetisch gestalten und Tailwind verwenden. |
Beispielausgabe
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script src="https://cdn.tailwindcss.com"></script>
<title>Side-Scrolling-Tippspiel</title>
</head>
<body class="bg-gray-900 text-white">
<div class="fixed top-4 right-4 text-2xl">
Punkte: <span id="score">0</span>
</div>
<div id="game" class="h-screen w-screen overflow-hidden relative">
<div
id="player"
class="absolute bottom-10 left-10 w-8 h-8 bg-blue-500"
></div>
</div>
<div
id="word-input"
class="fixed top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 bg-white text-black p-4 rounded hidden"
>
<input
type="text"
id="typed-word"
class="border border-gray-300 rounded px-2 py-1 mb-2 w-full"
/>
<button id="submit-word" class="bg-blue-500 text-white px-4 py-2 rounded">
Absenden
</button>
</div>
<script>
const words = [
'Fähigkeit',
'fähig',
'über',
'oben',
'akzeptieren',
'gemäß',
'Konto',
'über',
'Aktion',
'Aktivität',
'tatsächlich',
'Adresse',
'Verwaltung',
'zugeben',
'Erwachsener',
'beeinflussen',
'nach',
'wieder',
'gegen',
'Agentur',
'Agent',
'vor',
'zustimmen',
'Vereinbarung',
'voraus',
'Luft',
'alle',
'erlauben',
'fast',
'allein',
'entlang',
'bereits',
'auch',
'obwohl',
'immer',
'Amerikaner',
'unter',
'Betrag',
'Analyse',
'und',
'Tier',
'ein anderer',
'Antwort',
'irgendein',
'irgendjemand',
'irgendetwas',
'erscheinen',
'anwenden',
'Ansatz',
'Bereich',
'argumentieren',
'Arm',
'um',
'ankommen',
'Kunst',
'Artikel',
'Künstler',
'als',
'fragen',
'annehmen',
'bei',
'angreifen',
'Aufmerksamkeit',
'Anwalt',
'Publikum',
'Autor',
'Autorität',
'verfügbar',
'vermeiden',
'weg',
'Baby',
'zurück',
'schlecht',
'Tasche',
'Ball',
'Bank',
'Bar',
'Basis',
'sein',
'schlagen',
'schön',
'weil',
'werden',
'Bett',
'vor',
'beginnen',
'Verhalten',
'hinter',
'glauben',
'Vorteil',
'beste',
'besser',
'zwischen',
'jenseits',
'groß',
'Rechnung',
'Milliarde',
'Bit',
'schwarz',
'Blut',
'blau',
'Brett',
'Körper',
'Buch',
'geboren',
'beide',
'Kiste',
'Junge',
'brechen',
'bringen',
'Bruder',
'Budget',
'bauen',
'Gebäude',
'Geschäft',
'aber',
'kaufen',
'durch',
'anrufen',
'Kamera',
'Kampagne',
];
let score = 0;
let currentWord;
let startTime;
const game = document.getElementById('game');
const player = document.getElementById('player');
const wordInput = document.getElementById('word-input');
const typedWord = document.getElementById('typed-word');
const submitWord = document.getElementById('submit-word');
const scoreDisplay = document.getElementById('score');
let playerX = 10;
let playerY = game.offsetHeight - 50;
const speed = 5;
function placeWord() {
const word = document.createElement('div');
word.textContent = words[Math.floor(Math.random() * words.length)];
word.className = 'absolute text-2xl';
word.style.left = `${game.offsetWidth + 10}px`;
word.style.top = `${Math.random() * (game.offsetHeight - 50)}px`;
game.appendChild(word);
return word;
}
function checkCollision(word) {
const playerRect = player.getBoundingClientRect();
const wordRect = word.getBoundingClientRect();
return !(
playerRect.right < wordRect.left ||
playerRect.left > wordRect.right ||
playerRect.bottom < wordRect.top ||
playerRect.top > wordRect.bottom
);
}
function startInput(word) {
currentWord = word.textContent;
wordInput.style.display = 'block';
typedWord.value = '';
typedWord.focus();
startTime = Date.now();
}
function endInput() {
wordInput.style.display = 'none';
const endTime = Date.now();
const elapsedTime = endTime - startTime;
const timeBonus = Math.max(2000 - elapsedTime, 0);
score += Math.round(1000 + timeBonus);
scoreDisplay.textContent = score;
}
function checkInput() {
if (typedWord.value === currentWord) {
endInput();
}
}
function gameLoop() {
playerY = Math.max(
0,
Math.min(playerY, game.offsetHeight - player.offsetHeight)
);
playerX = Math.max(
0,
Math.min(playerX, game.offsetWidth - player.offsetWidth)
);
player.style.top = `${playerY}px`;
player.style.left = `${playerX}px`;
const words = Array.from(
document.querySelectorAll('#game > div:not(#player)')
);
words.forEach((word) => {
const currentLeft = parseInt(word.style.left);
word.style.left = `${currentLeft - speed}px`;
if (checkCollision(word)) {
startInput(word);
}
if (currentLeft < -word.offsetWidth) {
word.remove();
}
});
if (Math.random() < 0.01) {
placeWord();
}
requestAnimationFrame(gameLoop);
}
document.addEventListener('keydown', (e) => {
if (e.key === 'w') playerY -= speed;
if (e.key === 'a') playerX -= speed;
if (e.key === 's') playerY += speed;
if (e.key === 'd') playerX += speed;
});
typedWord.addEventListener('input', checkInput);
submitWord.addEventListener('click', checkInput);
gameLoop();
</script>
</body>
</html>
API-Anfrage
Claude 3 Opus kommt bald zur Bedrock API