프롬프트 라이브러리
우주의 키스트로크
프롬프트 라이브러리
- 라이브러리
- 우주의 키스트로크
- 기업 통찰력
- 웹사이트 마법사
- 엑셀 수식 전문가
- Google 앱스 스크립터
- Python 버그 버스터
- 시간 여행 컨설턴트
- 스토리텔링 파트너
- 출처 인용하기
- SQL 마법사
- 꿈 해석가
- 말장난꾼
- 요리 크리에이터
- 포트만토 시인
- 유머러스한 도우미 Hal
- LaTeX 범례
- 감정 색상화
- Git 잘하기
- 직유법의 달인
- 윤리적 딜레마 내비게이터
- 회의록 작성
- 관용구 해설가
- 코드 컨설턴트
- 함수 제작기
- 신조어 생성기
- CSV 변환기
- 이모지 인코더
- 문장 개선기
- 관점 분석기
- 퀴즈 생성기
- 마음챙김 멘토
- 초등학교 2학년 수준 단순화기
- VR 피트니스 혁신가
- PII 제거기
- 메모 마에스트로
- 커리어 코치
- 채점 전문가
- 발음 연습 문장
- 면접 질문 생성기
- 문법의 요정
- 수수께끼를 풀어보세요
- 코드 명확화 도구
- 외계인 인류학자
- 데이터 정리기
- 브랜드 빌더
- 효율성 추정기
- 리뷰 분류기
- 방향 디코더
- 동기부여 뮤즈
- 이메일 추출기
- 마스터 모더레이터
- 수업 계획 작성기
- 소크라테스식 현자
- 두운법 연금술사
- 미래지향적 패션 어드바이저
- 다국어 초능력
- 제품 이름 전문가
- 철학적 사색
- 스프레드시트 마법사
- 공상과학 시나리오 시뮬레이터
- 적응형 에디터
- 바벨의 방송
- 트윗 톤 감지기
- 공항 코드 분석기
프롬프트 라이브러리
우주의 키스트로크
사이드 스크롤링 게임플레이와 Tailwind CSS 스타일링을 특징으로 하는 대화형 속도 타이핑 게임을 단일 HTML 파일로 생성합니다.
직접 시도해보려면 이 프롬프트를 개발자 Console에 복사하세요!
Content | |
---|---|
User | 단일 HTML 파일로 완전한 웹 앱을 작성해주세요. 앱은 WASD를 사용하여 이동하는 간단한 사이드 스크롤링 게임이어야 합니다. 세상을 돌아다니다 보면 캐릭터/스프라이트가 가끔 단어들을 만나게 됩니다. 단어를 만났을 때, 플레이어는 가능한 한 빨리 그 단어를 정확하게 입력해야 합니다. 단어를 성공적으로 더 빨리 입력할수록 더 많은 점수를 얻게 됩니다. 오른쪽 상단에 점수를 기록하는 카운터가 있어야 합니다. 게임을 흥미롭게 유지하기 위해 단어는 무작위이고 매우 다양해야 합니다. 웹사이트를 매우 미적으로 만들고 Tailwind를 사용해야 합니다. |
예제 출력
<!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 Typing Game</title>
</head>
<body class="bg-gray-900 text-white">
<div class="fixed top-4 right-4 text-2xl">
Score: <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">
Submit
</button>
</div>
<script>
const words = [
'ability',
'able',
'about',
'above',
'accept',
'according',
'account',
'across',
'action',
'activity',
'actually',
'address',
'administration',
'admit',
'adult',
'affect',
'after',
'again',
'against',
'agency',
'agent',
'ago',
'agree',
'agreement',
'ahead',
'air',
'all',
'allow',
'almost',
'alone',
'along',
'already',
'also',
'although',
'always',
'American',
'among',
'amount',
'analysis',
'and',
'animal',
'another',
'answer',
'any',
'anyone',
'anything',
'appear',
'apply',
'approach',
'area',
'argue',
'arm',
'around',
'arrive',
'art',
'article',
'artist',
'as',
'ask',
'assume',
'at',
'attack',
'attention',
'attorney',
'audience',
'author',
'authority',
'available',
'avoid',
'away',
'baby',
'back',
'bad',
'bag',
'ball',
'bank',
'bar',
'base',
'be',
'beat',
'beautiful',
'because',
'become',
'bed',
'before',
'begin',
'behavior',
'behind',
'believe',
'benefit',
'best',
'better',
'between',
'beyond',
'big',
'bill',
'billion',
'bit',
'black',
'blood',
'blue',
'board',
'body',
'book',
'born',
'both',
'box',
'boy',
'break',
'bring',
'brother',
'budget',
'build',
'building',
'business',
'but',
'buy',
'by',
'call',
'camera',
'campaign',
];
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>