diff --git a/index.html b/index.html
index 0c589ec..aefb71e 100644
--- a/index.html
+++ b/index.html
@@ -1,8 +1,12 @@
-
+
+
Vite + React
diff --git a/src/App.css b/src/App.css
deleted file mode 100644
index b9d355d..0000000
--- a/src/App.css
+++ /dev/null
@@ -1,42 +0,0 @@
-#root {
- max-width: 1280px;
- margin: 0 auto;
- padding: 2rem;
- text-align: center;
-}
-
-.logo {
- height: 6em;
- padding: 1.5em;
- will-change: filter;
- transition: filter 300ms;
-}
-.logo:hover {
- filter: drop-shadow(0 0 2em #646cffaa);
-}
-.logo.react:hover {
- filter: drop-shadow(0 0 2em #61dafbaa);
-}
-
-@keyframes logo-spin {
- from {
- transform: rotate(0deg);
- }
- to {
- transform: rotate(360deg);
- }
-}
-
-@media (prefers-reduced-motion: no-preference) {
- a:nth-of-type(2) .logo {
- animation: logo-spin infinite 20s linear;
- }
-}
-
-.card {
- padding: 2em;
-}
-
-.read-the-docs {
- color: #888;
-}
diff --git a/src/App.jsx b/src/App.jsx
index b8b8473..328dd6b 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -1,35 +1,69 @@
-import { useState } from 'react'
-import reactLogo from './assets/react.svg'
-import viteLogo from '/vite.svg'
-import './App.css'
+import { useState, useEffect } from "react";
+import WordInput from "./components/WordInput";
+import WordArea from "./components/WordArea";
-function App() {
- const [count, setCount] = useState(0)
+const fruits = [
+ "apple",
+ "banana",
+ "cherry",
+ "avocado",
+ "blueberry",
+ "coconut",
+ "grape",
+ "lime",
+ "kiwi",
+ "lemon",
+ "mango",
+ "peach",
+ "pear",
+ "strawberry",
+ "watermelon",
+ "tomato",
+ "melon",
+];
+
+const App = () => {
+ const [words, setWords] = useState([]);
+ const [isGameOver, setIsGameOver] = useState(false);
+
+ useEffect(() => {
+ if (isGameOver) return;
+
+ const wordAdder = setInterval(() => {
+ if (words.length < 10) {
+ const newWord = fruits[Math.floor(Math.random() * fruits.length)];
+ setWords((prevWords) => [...prevWords, newWord]);
+ } else {
+ setIsGameOver(true);
+ alert("게임 종료!");
+ clearInterval(wordAdder);
+ }
+ }, 2000);
+
+ return () => clearInterval(wordAdder);
+ }, [words, isGameOver]);
+
+ const handleWordSubmit = (inputWord) => {
+ setWords(words.filter((word) => word !== inputWord));
+ };
+
+ const resetGame = () => {
+ setWords([]);
+ setIsGameOver(false);
+ };
+
+ useEffect(() => {
+ if (isGameOver) {
+ resetGame();
+ }
+ }, [isGameOver]);
return (
- <>
-
- Vite + React
-
-
-
- Edit src/App.jsx
and save to test HMR
-
-
-
- Click on the Vite and React logos to learn more
-
- >
- )
-}
-
-export default App
+
+
+
+
+ );
+};
+
+export default App;
diff --git a/src/components/WordArea.jsx b/src/components/WordArea.jsx
new file mode 100644
index 0000000..a25f8a8
--- /dev/null
+++ b/src/components/WordArea.jsx
@@ -0,0 +1,12 @@
+// components/WordArea.js
+const WordArea = ({ words }) => {
+ return (
+
+ {words.map((word, index) => (
+
{word}
+ ))}
+
+ );
+};
+
+export default WordArea;
diff --git a/src/components/WordInput.jsx b/src/components/WordInput.jsx
new file mode 100644
index 0000000..554b1e4
--- /dev/null
+++ b/src/components/WordInput.jsx
@@ -0,0 +1,15 @@
+const WordInput = ({ onWordSubmit }) => {
+ const handleSubmit = (e) => {
+ e.preventDefault();
+ onWordSubmit(e.target.elements.wordInput.value);
+ e.target.elements.wordInput.value = "";
+ };
+
+ return (
+
+ );
+};
+
+export default WordInput;
diff --git a/src/index.css b/src/index.css
index 6119ad9..a333af9 100644
--- a/src/index.css
+++ b/src/index.css
@@ -1,68 +1,26 @@
-:root {
- font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
- line-height: 1.5;
- font-weight: 400;
-
- color-scheme: light dark;
- color: rgba(255, 255, 255, 0.87);
- background-color: #242424;
-
- font-synthesis: none;
- text-rendering: optimizeLegibility;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-a {
- font-weight: 500;
- color: #646cff;
- text-decoration: inherit;
-}
-a:hover {
- color: #535bf2;
+.word-input {
+ padding: 0.7rem 30rem 0.7rem 1rem;
+ margin-top: 3rem;
+ text-align: left;
}
-body {
- margin: 0;
+.center-container {
display: flex;
- place-items: center;
- min-width: 320px;
- min-height: 100vh;
+ flex-direction: column;
+ align-items: center;
}
-h1 {
- font-size: 3.2em;
- line-height: 1.1;
-}
-
-button {
- border-radius: 8px;
- border: 1px solid transparent;
- padding: 0.6em 1.2em;
- font-size: 1em;
- font-weight: 500;
- font-family: inherit;
- background-color: #1a1a1a;
- cursor: pointer;
- transition: border-color 0.25s;
-}
-button:hover {
- border-color: #646cff;
-}
-button:focus,
-button:focus-visible {
- outline: 4px auto -webkit-focus-ring-color;
+.word-area {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ width: 100%;
+ background-color: rgb(178, 199, 237);
+ height: 24rem;
+ width: 100%;
}
-@media (prefers-color-scheme: light) {
- :root {
- color: #213547;
- background-color: #ffffff;
- }
- a:hover {
- color: #747bff;
- }
- button {
- background-color: #f9f9f9;
- }
+.word-area div {
+ margin: 0 1rem;
}