/minesweeper

Minesweeper Game With React

Primary LanguageTypeScript

๐Ÿ’ป ํ”„๋กœ์ ํŠธ ์‹คํ–‰ ๋ฐฉ๋ฒ•

  • Node ๋ฒ„์ „์€ lts๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
- ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ํด๋”๋กœ ์ด๋™
- npm i
- npm start

โš’๏ธ ๊ธฐ์ˆ  ์Šคํƒ

  • React
  • TypeScript
  • Redux-toolkit
  • SCSS
  • husky & lint-stage
  • prettier & eslint

๐ŸŒฟ ๊ธฐ๋Šฅ ์†Œ๊ฐœ

์ง€๋ขฐ์ฐพ๊ธฐ ๊ฒŒ์ž„ ๊ตฌํ˜„

  • ์ง€๋ขฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด ๊ฒŒ์ž„์˜ค๋ฒ„๊ฐ€ ๋˜๊ณ , ๋ชจ๋“  ์ง€๋ขฐ์— ๊นƒ๋ฐœ์„ ๊ฝ‚๊ณ  ์ง€๋ขฐ๊ฐ€ ์—†๋Š” ๋ชจ๋“  ์นธ์„ ์˜คํ”ˆํ•˜๋ฉด ์Šน๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋นˆ์นธ์—์„œ ์ง€๋ขฐ ํ„ฐ์ง€์ง€ ์•Š๋„๋ก

  • ์ฒซ ๋ฒˆ์งธ ๋นˆ์นธ์„ ์—ด ๋•Œ ์ง€๋ขฐ์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ฒซ ๋ฒˆ์งธ ํด๋ฆญ๋œ ์œ„์น˜๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ง€๋ขฐ๋ฅผ ๋ฐฐ์น˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ฒŒ์ž„ ํƒ€์ด๋จธ

  • setInterval์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅธ์ชฝ ํด๋ฆญ ๊นƒ๋ฐœ ๊ธฐ๋Šฅ

๋‚œ์ด๋„ ๋ณ€๊ฒฝ

  • Custom ๋‚œ์ด๋„์˜ ๊ฒฝ์šฐ ๋ชจ๋‹ฌ๋กœ ๊ฐ’์„ ๋ฐ›๋„๋ก ํ•˜๊ณ , ๋ชจ๋‹ฌ ๋ฐ”๊นฅ์„ ํด๋ฆญ ์‹œ ๋ชจ๋‹ฌ์ด ์‚ฌ๋ผ์ง€๋„๋ก Custom Hook์„ ๋งŒ๋“ค์–ด ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์–‘์ชฝ ํด๋ฆญ ๊ธฐ๋Šฅ

  • mouse event๊ฐ€ button์ด๋ผ๋Š” ๊ฐ’ ์•ˆ์— ํ˜„์žฌ ํด๋ฆญ๋œ ๋ฒ„ํŠผ์ด ์™ผ์ชฝ์ธ์ง€ ์˜ค๋ฅธ์ชฝ์ธ์ง€์— ๋”ฐ๋ผ 0๊ณผ 2๋ฅผ ๋‹ด๊ณ  ์žˆ์–ด ์ด๋ฅผ ์ด์šฉํ•ด ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ref์— string์œผ๋กœ 0๊ณผ 2๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ '20' ๋˜๋Š” '02'์ผ ๊ฒฝ์šฐ ์–‘์ชฝ ํด๋ฆญ์œผ๋กœ ๊ฐ„์ฃผํ–ˆ์Šต๋‹ˆ๋‹ค.
  • mouseUp์ด๋‚˜ mouseLeave๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ref๋Š” ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

๋‚œ์ด๋„ ๋ฐ์ดํ„ฐ ์ €์žฅ

  • localStorage๋ฅผ ์ด์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ UI/UX

  • ๋ชจ๋‹ฌ๊ณผ ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์˜ ๊ฒฝ์šฐ ๋‹ซ์„ ์ˆ˜ ์žˆ๋Š” ๋ฒ„ํŠผ์ด ๊ฐ๊ฐ ์กด์žฌํ•˜์ง€๋งŒ ์š”์†Œ์˜ ๋ฐ”๊นฅ์„ ํด๋ฆญํ•ด์„œ๋„ ๋‹ซ์„ ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.