๐Ÿ’ฃ ์žฅ์• ๋ฌผ์ด ์—ฐ์†ํ•ด์„œ ๊ฐ™์€ ์œ„์น˜์— ์ƒ์„ฑ - FRONTENDBOOTCAMP-13th/JS-07-7zzang-Arcade GitHub Wiki

๊ตฌ๋ถ„

  • ๋‚ ์งœ : 2025.05.20
  • ์ข…๋ฅ˜ : ๋ฒ„๊ทธ
  • ์ค‘์š”๋„ : ๐Ÿ”ด

1. ๋ฌธ์ œ ์ƒํ™ฉ

  • ์ธ๊ฒŒ์ž„์—์„œ ์žฅ์• ๋ฌผ์ด ์—ฐ์†ํ•ด์„œ ๊ฐ™์€ ์œ„์น˜์— ์ƒ์„ฑ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•จ.

    • cellIndex = 2์˜€๋‹ค๋ฉด, ๋‹ค์Œ์—๋„ ๋˜ 2๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ โ†’ ํŒจํ„ด์ด ๋А๊ปด์ ธ ๊ฒŒ์ž„์ด ๋‹จ์กฐ๋กœ์›Œ์ง
    function spawnObstacle(): void {
    const cellIndex = getRandomCell();
    console.log("์ƒ์„ฑ๋œ cellIndex:", cellIndex);
    
    const cell = cells[cellIndex];
    const obstacle = document.createElement('div');
    obstacle.classList.add('obstacle');
    cell.appendChild(obstacle);
    }
    
    • console.log()๋กœ ํ™•์ธํ•œ ๊ฒฐ๊ณผ, ๊ฐ™์€ ์—ด index๊ฐ€ ์—ฐ์†ํ•ด์„œ ์ƒ์„ฑ๋จ. cellIndex๊ฐ€ ๊ณ„์† ๋ฐ˜๋ณต๋จ โ†’ ์ค‘๋ณต ๋ฐฉ์ง€๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จ

2. ์›์ธ

  • ์žฅ์• ๋ฌผ ์œ„์น˜๋Š” Math.floor(Math.random() * 6)์œผ๋กœ ์™„์ „ ๋žœ๋ค์ด๋ผ ์ค‘๋ณต์„ ๋ง‰์ง€ ์•Š์Œ. ๊ฒฐ๊ตญ ์ค‘๋ณต๋˜์ง€ ์•Š๋„๋ก ์ง์ ‘ ๋ง‰๋Š” ๋กœ์ง์ด ํ•„์š”ํ•จ

3. ํ•ด๊ฒฐ ๊ณผ์ •

function spawnObstacle(): void {
const cellIndex = getRandomCell();
console.log("์ด์ „:" lastCellIndex, "ํ˜„์žฌ:"cellIndex);

const cell = cells[cellIndex];
const obstacle = document.createElement('div');
obstacle.classList.add('obstacle');
cell.appendChild(obstacle);
}
  • console.log("์ด์ „:" lastCellIndex, "ํ˜„์žฌ:"cellIndex); ๋กœ ์žฅ์• ๋ฌผ ์ƒ์„ฑ ์œ„์น˜์˜ index๊ฐ€ ์—ฐ์†ํ•ด์„œ ๋ฐ˜๋ณต๋˜๋Š”์ง€ ํ™•์ธ

    • lastCellIndex === cellIndex ๊ฐ™์Œ์„ ํ™•์ธํ•จ. ๊ทธ๋Ÿผ ์œ„์น˜ ๊ธฐ์–ตํ•ด์„œ ๊ฐ™์€ ์œ„์น˜๋ฉด ๋‹ค์‹œ ๋ฝ‘์•„์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•จ
    let lastCellIndex = -1;
    
    function getRandomCell(): number {
      let index: number;
      do {
        index = Math.floor(Math.random() * 6);
      } while (index === lastCellIndex); // ์ง์ „๊ณผ ๊ฐ™์œผ๋ฉด ๋‹ค์‹œ ๋ฝ‘๊ธฐ
    
      lastCellIndex = index;
      return index;
    }
    
    • ์ „์—ญ ๋ณ€์ˆ˜ ์ƒ์„ฑ : ์ง์ „ ์žฅ์• ๋ฌผ์˜ ์—ด ์œ„์น˜ ๊ธฐ์–ต์šฉ
    • ์ค‘๋ณต ๋ฐฉ์ง€ ํ•จ์ˆ˜ : ๊ฐ™์€ index์ผ ๊ฒฝ์šฐ ๋‹ค์‹œ ๋ฝ‘๋„๋ก do-while ์‚ฌ์šฉ
    • const prevIndex = lastCellIndex; // ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ „ ์ƒํƒœ ๊ธฐ๋ก
    function spawnObstacle(): void {
    const prevIndex = lastCellIndex; // ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ „ ์ƒํƒœ ์ €์žฅ
    const cellIndex = getRandomCell();
    console.log("์ด์ „:", prevIndex, "ํ˜„์žฌ:", cellIndex);
    const cell = cells[cellIndex];
    const obstacle = document.createElement('div');
    obstacle.classList.add('obstacle');
    cell.appendChild(obstacle);
    }
    
    • ์ด์ „ index์™€ ํ˜„์žฌ index๊ฐ€ ๋‹ค๋ฅธ์ง€ ํ™•์ธํ•˜๋Š” ๋กœ๊ทธ ์ถœ๋ ฅํ•จ. ๋””๋ฒ„๊น… ๊ฒฐ๊ณผ "์ด์ „: 2 ํ˜„์žฌ: 4" โ†’ ์ค‘๋ณต ๋ฐฉ์ง€ ๋กœ์ง ์ •์ƒ ์ž‘๋™ ํ™•์ธ.

4. ๋ณด์™„ํ•  ์ 

  • ์˜๋„ํ•œ ๋ฐ”๊ฐ€ ๋งž๋Š”์ง€ ๋Š์ž„์—†์ด ์˜์‹ฌํ•˜๊ธฐ
  • ์Šต๊ด€์ ์œผ๋กœ ์‹คํ–‰ ์ „/ํ›„ ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๊ตฌ์กฐ์  ๋กœ๊ทธ ์ฐ๊ธฐ
    • ์ด ๋ถ€๋ถ„ ๋•Œ๋ฌธ์— ๊ฐ™์€ ์ž‘์—…์„ ์—ฌ๋Ÿฌ ๋ฒˆ ํ•˜๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•จ
  • ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด์„œ ํ•จ์ˆ˜ํ™”ํ•˜๋Š” ์Šต๊ด€
    • ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๊ฐ€ ํ•œ ๊ฐ€์ง€ ์—ญํ• ๋งŒ ํ•˜๋„๋ก ๊ตฌ์„ฑ
    • ํ•œ ๋ฒˆ์— ๋งŽ์€ ๋‚ด์šฉ์„ ์ž‘์—…ํ•˜๋ ค๊ณ  ํ•˜๋‹ค ๋ณด๋‹ˆ, ๋””๋ฒ„๊น…๊นŒ์ง€๋„ ์–ด๋ ค์šด ์ƒํ™ฉ์ด ์ƒ๊น€
  • ์ƒํƒœ ๊ธฐ์–ต๊ณผ ์กฐ๊ฑด ์ œ์–ด ๊ตฌ์กฐ ์ตํžˆ๊ธฐ โญโญโญโญโญ
    • ์ „์—ญ ์ƒํƒœ, ์กฐ๊ฑด ์žฌ์‹œ๋„ (do-while) ํŒจํ„ด ๋“ฑ ์ž์ฃผ ์จ๋ณด๊ธฐ