간단한 게임 만들기 - 틱택토
2024. 7. 10. 17:53ㆍReact
import React, { useState } from "react";
import { Link } from 'react-router-dom';
import './TipTacToeStepOne.css';
const shuffleArray = (array) =>{
//랜덤으로 나온 값 정렬
return array.sort(() => Math.random() - 0.5);
}
const TicTapToe = () => {
// 생성된 수를 shuffleArray를 통해 셔플
const [numbers, setNumber] = useState(shuffleArray([...Array(9).keys()].map(n => n + 1)));
//사용자가 클릭해야하는 다음 숫자
//사용자가 클릭해야하는 첫 숫자가 1이어야 함
const [nextNumber, setNextNumber] = useState(1);
const [message, setMessage] = useState('');
const [isCorrect, setIsCorrect] = useState(false);
const clickNumber = (number) => {
if(number === nextNumber){
if(nextNumber === 9){
setMessage('모든 숫자를 올바르게 클릭했어요');
setNextNumber(nextNumber +1);
}
else{
setNextNumber(nextNumber + 1);
}
}
else{
setMessage('순서가 틀렸어요');
}
}
const restartBtn = () => {
setNumber(shuffleArray([...Array(9).keys()].map(n => n + 1)));
setNextNumber(1);
setMessage('');
setIsCorrect(false);
}
return(
<div className="tictaptoe-container">
<h1>틱탭토</h1>
<div className="tictaptoe-grid">
{numbers.map((number) =>(
<button className="tictaptoe-button"
key={number} onClick={() => clickNumber(number)}>
{number}
</button>
))}
</div>
<p>{message}</p>
{/*
숫자를 모두 맞출 경우에만 다음 단계로 이동버튼 보여주기
-> nextNumber가 10 이상일 떄 다음 단계 버튼이 나오게 설정
*/}
{nextNumber > 9 && (<Link to="/TicTapToe2"><button className="restart-button">다음단계로 이동</button></Link>)}
<button className="restart-button" onClick={restartBtn}>재시작</button>
</div>
)
}
export default TicTapToe;
** return array.sort(() => Math.random() - 0.5);
- Math.random() - 0.5 : 랜덤 배열 만들 때 자주 사용 -0.5 ~ 0.5 사이 생성
- -0.5를 붙이지 않으면 0.0~ 0.99999.. 사이 값 반환
** const [numbers, setNumber] = useState(shuffleArray([...Array(9).keys()].map(n => n + 1)));
numbers : 1~9 숫자가 섞인 배열
Array(9) : 9칸 배열 생성
key() : 인덱스 숫자를 가지고 옴
map(n => n + 1) : 0 => 0 + 1 식으로 인덱스에 1을 더해 1~9 생성
생성된 수를 shuffleArray를 통해 셔플
'React' 카테고리의 다른 글
useRef로 회원가입 폼 만들기 (0) | 2024.07.11 |
---|---|
useRefInput (0) | 2024.07.11 |
useEffect , useRef (0) | 2024.07.10 |
해야 할 일 목록 만들기 (0) | 2024.07.08 |
Router (0) | 2024.07.08 |