기억력 테스트 미니게임을 만들어보았다.
게임의 규칙은 간단하다. 눌러야 할 카드들이 잠깐 표시될 때 위치를 외웠다가 누르면 된다.
시작 버튼을 눌러서 게임 시작
표시되는 카드 외우기
카운트가 종료되면 외웠던 카드들을 클릭
3-1. 정답이 아닐 경우 게임 오버 (기회 2번)
3-2. 정답일 경우 다음 라운드 진행 (총 50라운드)
매 라운드마다 정답은 랜덤으로 생성된다.
// 전체 카드 배열 생성
const newAnswer = [...전체카드id];
// (전체 카드 수 - 정답 카드 수) 만큼 반복해서 정답 카드만 남기고 나머지는 삭제한다.
for (
let i = (전체카드수 - 정답카드수), j = (전체카드수 - 1);
i !== 0;
i--, j--
) {
// index를 랜덤으로 결정 후 삭제.
const pick = Math.round(Math.random() * j);
newAnswer.splice(pick, 1);
}
// 정답 카드만 남는다.
setAnswer(newAnswer);
처음엔 3x3 카드로 시작하지만 게임이 진행되며 그 개수가 늘어난다.
25라운드부터는 무려 36장의 카드가 필요하기 때문에 숫자에 맞게 카드를 생성하는 함수를 만들어 사용하였다.
// n개의 카드를 n줄 반환하는 함수
const rows = () => {
const rowsReturn: Array<any> = [];
// 카드 생성 함수
const cards = (i: number) => {
const cardsReturn: Array<any> = [];
for (let j = 1; j <= √전체카드수; j++) {
const id = (-√전체카드수 + j) + (√전체카드수 * i);
cardsReturn.push(
<div
id={`${id}`}
key={`${id}`}
></div>
);
}
return cardsReturn;
};
// 카드 줄 생성 함수
for (let i = 1; i <= √전체카드수; i++) {
rowsReturn.push(
<div key={i} className={styles.row}>
// 카드 줄에서 카드 생성 함수 호출
{cards(i)}
</div>
);
}
return rowsReturn;
}
라운드가 증가할 수록 정답 카드의 개수도 함께 증가한다.
전체 카드 수가 증가할 때 마다 정답 카드 수는 1로 초기화 된다.
타이머 함수에 따라 게임이 진행된다.
여태 진행한 프로젝트 중 가장 많은 타이머가 들어갔다.
라운드 준비 시간 3초
첫 2초 동안 정답 카드 공개
마지막 1초는 정답 카드 숨김
라운드 클리어 시 대기시간 1초
이후 반복
난이도 증가 문구가 출력될 때는 타이머를 1초씩 뒤로 밀었다.
일러스트레이터로 제작했다.
At first, the gameplay was standard—he won a few hands, lost a few, and felt like he was in for an average night. But then, something extraordinary happened. As James continued playing, he found himself hitting a streak of 21s https://pokiespinscasino1.com/ that seemed almost too good to be true. Each hand was better than the last, and his balance started to soar. The thrill of each winning hand was exhilarating, and as the hours passed, James realized he had turned his modest initial deposit into a significant win. The experience was so surreal that he couldn’t help but feel like he had just stumbled upon the perfect storm of luck, a night where everything seemed to fall into place.