dev

[ ํ† ์ด ํ”„๋กœ์ ํŠธ ] ์ง€๋ขฐ์ฐพ๊ธฐ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ ( feat. typescript, react, mobx )

๋นŒ๋ผ๋„ฌ 2022. 5. 9. 00:08

ํ”„๋กœ์ ํŠธ ๋™๊ธฐ

๋ ˆํผ๋Ÿฐ์Šค์™€ ๋‚ด๊ฐ€ ๋งŒ๋“  ์ง€๋ขฐ์ฐพ๊ธฐ

์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ์ง€๋ขฐ์ฐพ๊ธฐ์—ฌ์•ผ ํ•˜๋Š” ํฐ ์ด์œ ๋Š” ์—†๋‹ค. mobx๋ฅผ ์จ๋ณด๋Š” ๊ฒƒ์— ํฐ ์˜๋ฏธ๋ฅผ ๋‘” ํ”„๋กœ์ ํŠธ์˜€๋‹ค.

๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์€ ๊ตฌํ˜„์ด ์™„๋ฃŒ๋˜์—ˆ๊ณ  ์•ž์œผ๋กœ๋Š” ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ, ๋ฒ„๊ทธ ์ˆ˜์ •์„ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ด๋‹ค. 

 

stack๐Ÿ”— 

  • CRA-typescript
  • eslint
  • prettier
  • styled-component
  • mobx

 

์ง€๋ขฐ์ฐพ๊ธฐ๋ฅผ ๋งŒ๋“ค๊ธฐ๋กœ ํ–ˆ๋‹ค๋ฉด, ์ด๋Ÿฐ ๊ฒŒ์ž„ ๊ตฌํ˜„์ด ์ต์ˆ™ํ•˜์ง€ ์•Š์„ ๋•Œ ๋ง‰๋ง‰ํ•  ์ˆ˜ ์žˆ๋‹ค. 

๋ฐ”๋กœ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ๋”ฐ๋ผ ํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์ง€๋งŒ

์ง์ ‘ ์ƒ๊ฐํ•ด๋ณด๋ฉฐ ๊ตฌํ˜„ํ•ด๋ณด๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ์€ ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์ƒ๊ฐํ•œ ์ˆœ์„œ๋ฅผ ์ž‘์„ฑํ–ˆ์œผ๋‹ˆ ๊ฐ€์ด๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ์ฐธ๊ณ ํ•˜์‹œ๊ธธ!๐Ÿ™๐Ÿผ

 

์ง€๋ขฐ์ฐพ๊ธฐ ๊ตฌํ˜„ ๊ฐ€์ด๋“œ

 

  1. matrix ํ˜•ํƒœ์˜ ๊ฒŒ์ž„ ๋ณด๋“œ๋ฅผ ๋งŒ๋“ ๋‹ค. ( ๋‚˜๋Š” 8x8 ๋กœ ์„ธํŒ…ํ–ˆ๋‹ค. Array์˜ ๋‚ด์žฅ ๋ฉ”์„œ๋“œ์ธ from() ๊ณผ fill()์„ ์‚ฌ์šฉํ–ˆ๋‹ค. )
  2. ์ดˆ๊ธฐ ๊ฐ’์„ 0, ์ง€๋ขฐ๊ฐ€ ์žˆ๋Š” ๊ณณ์„ 1๋กœ ํ•˜๊ณ  ๋žœ๋คํ•œ ์œ„์น˜์— 1์„ ๋„ฃ๋„๋ก ํ•œ๋‹ค.
  3. (0,0) ๋ถ€ํ„ฐ ํ˜„์žฌ cell์„ ๊ฐ์‹ผ ๋ชจ๋“  cell์˜ ๊ฐ’์„ ํ™•์ธํ•˜๊ณ  1 (์ง€๋ขฐ)์˜ ์ˆ˜๋ฅผ ์„ธ์–ด ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.
  4. clickํ•œ cell ์ฃผ์œ„ ๋ชจ๋“  cell์„ ์—ด์–ด๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
  5. ๊ทธ๋Ÿผ ์ด์ œ click ํ•œ ์ฃผ์œ„ cell ์ค‘ ๊ฐ’์ด 0์ธ cell๋งŒ ์—ด๋ฆฌ๋„๋ก ํ•ด๋ณด์ž.
  6. ๊ฐ’์ด 0์ธ cell์˜ ์œ„์น˜๋งŒ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด push ํ•œ๋‹ค.
  7. clickํ•œ cell ์ฃผ๋ณ€์— 0์ด ์žˆ๋‹ค๋ฉด,๋˜  ๊ฐ’์ด 0์ธ cell ์ฃผ๋ณ€์— ๋˜ 0์ด ์žˆ๋Š”์ง€ ์ฐพ์•„ ๋ฐฐ์—ด์— pushํ•œ๋‹ค.
  8. ๊ฐ’์ด 0์ธ cell์˜ ์œ„์น˜๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด์ด ๋นˆ ๋ฐฐ์—ด์ด ๋  ๋•Œ๊นŒ์ง€ ๋ชจ๋“  ํ•ด๋‹น cell์„ ์ฐพ์•„ ํƒ์ƒ‰ํ•˜๊ณ  0์ผ๋•Œ cell์„ ์—ฌ๋Š” ์ž‘์—…์„ ํ•œ๋‹ค.( ๋‚˜๋Š” 6, 7, 8๋ฒˆ์„ ์œ„ํ•ด ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. )
  9. 0์„ ๋ณด์ด์ง€ ์•Š๊ฒŒ ํ•œ๋‹ค. 
  10. 1 (์ง€๋ขฐ) ๋Œ€์‹  ์ง€๋ขฐ ๋ชจ์–‘์˜ ์ด๋ชจ์ง€๋ฅผ ๋„ฃ์–ด์ค€๋‹ค
  11. cell ์šฐํด๋ฆญ์‹œ ๊นƒ๋ฐœ์„ ๊ฝ‚๋Š”๋‹ค. (๋™์‹œ์— ํด๋ฆญ์„ ๋ง‰๋Š”๋‹ค. ๋‹ค์‹œ ์šฐํด๋ฆญ์‹œ ๊นƒ๋ฐœ์ด ํ•ด์ œ๋œ๋‹ค.)
  12. ์ด ์ง€๋ขฐ ๊ฐฏ์ˆ˜๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” UI์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๊นƒ๋ฐœ์ด ๊ฝ‚ํž๋•Œ, ํ•ด์ œ๋  ๋•Œ๋งˆ๋‹ค ๊ฐฏ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด์ค€๋‹ค.
  13. ๊ฐ’์ด 1์ธ (์ง€๋ขฐ)๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋ชจ๋“  ์ง€๋ขฐ๊ฐ€ ๋‹ค ๋ณด์ด๋„๋ก ํ•˜๊ณ  ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋œ๋‹ค.
  14. reset๋ฒ„ํŠผ์„ ๋งŒ๋“ค์–ด ๋ˆ„๋ฅด๋ฉด ๊ฒŒ์ž„ ๋ณด๋“œ๊ฐ€ ์ดˆ๊ธฐํ™”๋œ๋‹ค. cell์˜ ๋ชจ๋“  ๊ฐ’, ์ง€๋ขฐ์˜ ์œ„์น˜๋„ ์žฌ์„ค์ •๋œ๋‹ค. 
  15. ํƒ€์ด๋จธ UI์š”์†Œ ์ถ”๊ฐ€ ํ›„ ๊ฒŒ์ž„์ด ์‹œ์ž‘๋˜๋ฉด( cell์„ ์ฒ˜์Œ ํด๋ฆญํ–ˆ์„ ๋•Œ ) ํƒ€์ด๋จธ๊ฐ€ ์‹œ์ž‘๋œ๋‹ค. ( useEffect์™€ setTimeout์„ ์‚ฌ์šฉํ–ˆ๋‹ค. )
  16. ๊ฒŒ์ž„์—์„œ ์ง€๊ฑฐ๋‚˜, ๊ฒŒ์ž„์—์„œ ์ด๊ธฐ๋ฉด ํƒ€์ด๋จธ๋ฅผ ๋ฉˆ์ถ˜๋‹ค. 

 

 

ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉฐ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์€ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ถ”ํ›„ ์—…๋กœ๋“œ ์˜ˆ์ •์ด๋‹ค.

 

git link

https://github.com/min9120/minesweeper-game

 

GitHub - min9120/minesweeper-game: ์ง€๋ขฐ์ฐพ๊ธฐ ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค ๐Ÿ’ฃ

์ง€๋ขฐ์ฐพ๊ธฐ ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค ๐Ÿ’ฃ. Contribute to min9120/minesweeper-game development by creating an account on GitHub.

github.com

์ฐธ๊ณ ํ•œ ๊ฒŒ์ž„ link

https://minesweeperonline.com/

 

Minesweeper Online - Play Free Online Minesweeper

Free Online Minesweeper in JavaScript. Play the classic game in Beginner, Intermediate, and Expert modes.

minesweeperonline.com