[Book] ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ต๊ณผ์„œ - 9์žฅ ๋ถ„์‚ฐ ์„œ๋ฒ„ ๊ตฌ์กฐ (2)

2022. 3. 26. 14:37ยท๐Ÿ“ Book/โœ Game Server

9์žฅ ๋ถ„์‚ฐ ์„œ๋ฒ„ ๊ตฌ์กฐ

 

5. ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ (์ˆ˜ํ‰ ๋ถ„์‚ฐ) vs ๊ธฐ๋Šฅ์  ๋ถ„์‚ฐ (์ˆ˜์ง ๋ถ„์‚ฐ)

๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ์ด๋ž€ ํ•œ ๋จธ์‹ ์ด ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ์—ฌ๋Ÿฌ ๋จธ์‹ ์ด ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ฆ‰, ๊ฐ ์„œ๋ฒ„๋Š” ๋ชจ๋‘ ๋˜‘๊ฐ™์€ ์ข…๋ฅ˜์˜ ์ผ์„ ํ•œ๋‹ค.

 

๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ

 

๊ธฐ๋Šฅ์  ๋ถ„์‚ฐ์€ ํ•œ ๋จธ์‹ ์ด ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„๋ฅผ ์„ธ๋ถ„ํ™”ํ•ด์„œ ์—ฌ๋Ÿฌ ๋จธ์‹ ์ด ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ธฐ๋Šฅ์  ๋ถ„์‚ฐ

 

์ด๋Ÿฌํ•œ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ์›๋ฆฌ๋Š” ๊ฒŒ์ž„ ์„œ๋ฒ„๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋„ ๋น„์Šทํ•˜๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ ๋‹จ์œ„ ๋ถ„์‚ฐ(์ˆ˜ํ‰ ํŒŒํ‹ฐ์…”๋‹)์ด๋ž€ ํ…Œ์ด๋ธ” 1๊ฐœ๋ฅผ ํ…Œ์ด๋ธ” ์•ˆ์˜ ํ‚ค ํ•„๋“œ ๋‹จ์œ„๋กœ ๋ถ„๋ฐฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ธฐ๋Šฅ ๋‹จ์œ„ ๋ถ„์‚ฐ(์ˆ˜์ง ํŒŒํ‹ฐ์…”๋‹)์ด๋ž€ ์„œ๋กœ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์„ ์„œ๋กœ ๋‹ค๋ฅธ ์„œ๋ฒ„์— ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ฒŒ์ž„ ์„œ๋ฒ„๊ฐ€ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฒฐ๊ตญ ์„œ๋น„์Šค ๊ฐ€์šฉ์„ฑ์€ ๋–จ์–ด์ง„๋‹ค.

 

6. ๋กœ์ง ์ฒ˜๋ฆฌ์˜ ๋ถ„์‚ฐ ๋ฐฉ์‹๋“ค

์–ด๋–ค ๋กœ์ง์ด ์žˆ์œผ๋ฉด ๋˜๋„๋ก ์„œ๋กœ ๋‹ค๋ฅธ ๋จธ์‹  ๊ฐ„์— ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ผ์ด ์—†๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด์ฉ” ์ˆ˜ ์—†์ด ๋กœ์ง ์ฒ˜๋ฆฌ๋ฅผ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์„ธ ๊ฐ€์ง€ ๋ฐฉ์‹ ์ค‘ ์ƒํ™ฉ์— ๋”ฐ๋ผ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.

  • ๋™๊ธฐ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ
  • ๋น„๋™๊ธฐ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ
  • ๋ฐ์ดํ„ฐ ๋ณต์ œ ๋ฐ ๋กœ์ปฌ ์ฒ˜๋ฆฌ

 

๋ถ„์‚ฐ ์ฒ˜๋ฆฌํ•  ์ƒํ˜ธ ์ž‘์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋ชฌ์Šคํ„ฐ ์‚ฌ๋ƒฅ์ด๋‹ค.

  • ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ€์ง„ ์ด์•Œ 1๊ฐœ๋ฅผ ์†Œ๋ชจํ•œ๋‹ค.
  • ๋ชฌ์Šคํ„ฐ์˜ ์ฒด๋ ฅ์„ ๊นŽ๋Š”๋‹ค.
  • ๋ชฌ์Šคํ„ฐ์˜ ์ฒด๋ ฅ์ด ๋ฐ”๋‹ฅ๋‚œ๋‹ค.
  • ๋ชฌ์Šคํ„ฐ๊ฐ€ ์‚ฌ๋งํ•œ๋‹ค. (10์ดˆ ํ›„ ์†Œ๋ฉธ)
  • ํ”Œ๋ ˆ์ด์–ด๋Š” ์•„์ดํ…œ์„ ํš๋“ํ•œ๋‹ค.
Player_Attack(player, monster)
{
    player.bullet--;
    monster.hitPoint -= 10;
    if (monster.hitPoint < 0)
    {
        player.item.Add(gold, 30);
        DeleteEntity(monster, 10sec);
    }
}

 

๋ชฌ์Šคํ„ฐ ์‚ฌ๋ƒฅ ๋กœ์ง์€ ์•„์ง ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์„œ๋ฒ„ 1๊ฐœ์—์„œ๋งŒ ์ด ๋กœ์ง์ด ์‹คํ–‰๋  ๊ฒƒ์ด๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์„œ๋ฒ„ 1์—์„œ๋งŒ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ”Œ๋ ˆ์ด์–ด ์บ๋ฆญํ„ฐ ์ •๋ณด์™€ ๋ชฌ์Šคํ„ฐ ์บ๋ฆญํ„ฐ ์ •๋ณด๋„ ์„œ๋ฒ„ 1์—์„œ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ด์ œ ์ด ์ฒ˜๋ฆฌ๋ฅผ ๋ถ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ๊ฐ ์ˆœ์„œ๋Œ€๋กœ ์‚ดํŽด๋ณด์ž.

 

์„œ๋ฒ„ 1์—์„œ๋งŒ ๋กœ์ง ์ฒ˜๋ฆฌ

 

1) ๋™๊ธฐ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ

๋™๊ธฐ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ์—์„œ๋Š” ์–ด๋–ค ์—ฐ์‚ฐ์„ ๋‹ค๋ฅธ ์„œ๋ฒ„์— ๋˜์ ธ ๋†“๊ณ  ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ์˜ฌ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•œ๋‹ค. ๋Œ€๊ธฐํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ทธ ์—ฐ์‚ฐ๊ณผ ๊ด€๊ณ„๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋„์ค‘์— ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ฒŒ ์ž ๊ธˆ์„ ํ•ด์•ผ ํ•œ๋‹ค.

 

๋™๊ธฐ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ

 

๋™๊ธฐ์‹ ๋ช…๋ น ์ฒ˜๋ฆฌ๋ฒ•

  • ์„œ๋ฒ„ 1์—์„œ๋Š” ํ”Œ๋ ˆ์ด์–ด ์บ๋ฆญํ„ฐ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์„œ๋ฒ„ 2์—์„œ๋Š” ๋ชฌ์Šคํ„ฐ ์บ๋ฆญํ„ฐ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ํ”Œ๋ ˆ์ด์–ด ์บ๋ฆญํ„ฐ๊ฐ€ ๋ชฌ์Šคํ„ฐ๋ฅผ ๋•Œ๋ฆฌ๋ฉด ๋ชฌ์Šคํ„ฐ ์‚ฌ๋ƒฅ ๋กœ์ง์€ ํ”Œ๋ ˆ์ด์–ด ์บ๋ฆญํ„ฐ ์ •๋ณด๋ฅผ ์ž ๊ทธ๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œํ–‰ํ•œ๋‹ค.
  • ํ”Œ๋ ˆ์ด์–ด ์บ๋ฆญํ„ฐ ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
  • ๋ชฌ์Šคํ„ฐ ์บ๋ฆญํ„ฐ ์„œ๋ฒ„์— ๋ชฌ์Šคํ„ฐ์—๊ฒŒ ๋Œ€๋ฏธ์ง€๋ฅผ ์ฃผ๋ผ๋Š” ๋ช…๋ น์„ ์ „์†กํ•œ๋‹ค.
  • ๋ช…๋ น์„ ์ „์†กํ•œ ํ›„ ์„œ๋ฒ„ 1์€ ์„œ๋ฒ„ 2์˜ ์‘๋‹ต์ด ์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
  • ํ•œํŽธ ๋ชฌ์Šคํ„ฐ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ์„œ๋ฒ„ 2์—์„œ๋Š” ์ด ๋ช…๋ น์„ ๋ฐ›์•„ ๋ชฌ์Šคํ„ฐ ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
  • ์—…๋ฐ์ดํŠธ ๊ฒฐ๊ณผ๋ฅผ ์„œ๋ฒ„ 1์— ์•Œ๋ ค์ค€๋‹ค.
  • ์„œ๋ฒ„ 1์€ ์ด ์‘๋‹ต์„ ๋ฐ›์œผ๋ฉด ๊ธฐ๋‹ค๋ฆผ์„ ๋ฉˆ์ถ”๊ณ  ๋‚˜๋จธ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
Player_Attack(player, monster)
{
    lock(player)
    {
        player.bullet--;
        e = otherServer.DamageCharacter(
            player.id, monster.id, 10);
        waitForResult(e);
        if (e.hitPoint < 0)
        {
            player.item.Add(gold, 30);
        }
    }
 
    DamageCharacter(attacker, character, damage)
    {
        character.hitPoint -= damage;
        result.hitPoint = character.hitPoint;
        Reply(result);
    }
}

 

๋‹ค๋ฅธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค. ์ผ๊ด€์„ฑ์„ ์ง€ํ‚ค๋ฉด์„œ ๋‹ค๋ฅธ ์„œ๋ฒ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šค ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด ๊ณผ์ •์—์„œ๋Š” ๋ถ„์‚ฐ ๋ฝ ๊ธฐ๋ฒ•์ด ๋™๋ฐ˜๋œ๋‹ค.

 

๋™๊ธฐ์‹ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ๋ฒ•

  • ๋ชฌ์Šคํ„ฐ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ์„œ๋ฒ„ 2์— ๋ชฌ์Šคํ„ฐ ์ •๋ณด๋ฅผ ์•ก์„ธ์Šค ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ„์‚ฐ ๋ฝ์„ ๊ฑธ๊ฒ ๋‹ค๋Š” ์š”์ฒญ์„ ํ•˜๊ณ  ์‘๋‹ต์„ ๋ฐ›๋Š”๋‹ค.
  • ์„œ๋ฒ„ 2์—์„œ ๋ชฌ์Šคํ„ฐ ์ •๋ณด๋ฅผ ์–ป์–ด ์˜ค๊ณ  ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
  • ์„œ๋ฒ„ 2์— ๋ถ„์‚ฐ ๋ฝ ํ•ด์ œ๋ฅผ ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต์„ ๋ฐ›๋Š”๋‹ค.
Player_Attack(player, monster)
{
    lock(player)
    {
        player.bullet--;
        otherServer.RemoteLock(monster);
        m = otherServer.RemoteGet(monster.id);
        m.hitPoint -= damage;
        if (m.hitPoint < 0)
        {
            player.item.Add(gold, 30);
            otherServer.RemoteDelete(monster.id);
        }
        else
        {
            otherServer.RemoteSet(m);
        }
        otherServer.RemoteUnlock(m);
    }
}

 

๋™๊ธฐ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์—๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ์„œ๋ฒ„ 1์—์„œ๋Š” ์„œ๋ฒ„ 2์— ๋ช…๋ น์„ ๋ณด๋‚ธ ํ›„ ์ด์— ๋Œ€ํ•œ ์‘๋‹ต์ด ์˜ฌ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•ด์•ผ ํ•œ๋‹ค. ์„œ๋ฒ„ 1๊ณผ ์„œ๋ฒ„ 2 ์‚ฌ์ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ 20 ๋งˆ์ดํฌ๋กœ์ดˆ๋ผ๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๋™๊ธฐ์‹ ๋ช…๋ น ์ฒ˜๋ฆฌ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋ฒ„ 1์—์„œ ์ตœ์†Œ 40 ๋งˆ์ดํฌ๋กœ์ดˆ๊ฐ€ ๊ฑธ๋ฆด ๊ฒƒ์ด๋‹ค. ๋™๊ธฐ์‹ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ๋ฒ•์—์„œ๋Š” ๋ฉ”์‹œ์ง€ ์™•๋ณต์ด ์ด 3๋ฒˆ์ด๋ฏ€๋กœ ์ตœ์†Œ 120 ๋งˆ์ดํฌ๋กœ์ดˆ๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค.

 

์ด๋•Œ ์„œ๋ฒ„ 1์—์„œ ํ”Œ๋ ˆ์ด์–ด ์ •๋ณด๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ์ž„๊ณ„ ์˜์—ญ์ด๋‚˜ ๋ฎคํ…์Šค๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๊ด‘๋ฒ”์œ„ํ•˜๋ฉด, ์„œ๋ฒ„ 1์—์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋‹ค๋ฅธ ์ผ์ด 40~120 ๋งˆ์ดํฌ๋กœ์ดˆ๋งŒํผ ์‹œ๊ฐ„์ด ์ง€์—ฐ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ๊ฐœ์„ ํ•˜๋ ค๋ฉด ์„œ๋ฒ„ 1์€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ˜น์€ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋กœ ์ž‘๋™ํ•˜๊ฑฐ๋‚˜ ๋ฎคํ…์Šค ์ž ๊ธˆ ๋ฒ”์œ„๋ฅผ ์ขํ˜€์•ผ ํ•œ๋‹ค.

 

์•”๋‹ฌ์˜ ๋ฒ•์น™

 

์ด์ฒ˜๋Ÿผ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์น˜์—์„œ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ์‹œ๊ฐ„์— ๋น„๋ก€ํ•˜์—ฌ ๋ณ‘๋ ฌ ํšจ๊ณผ๊ฐ€ ๊ธ‰๊ฐํ•˜๋Š” ํ˜„์ƒ์„ ์•”๋‹ฌ์˜ ๋ฒ•์น™์ด๋ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋™๊ธฐ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ์˜ ์ž˜๋ชป๋œ ์‚ฌ์šฉ์€ ๋ถ„์‚ฐ ์„œ๋ฒ„์˜ ํšจ๊ณผ๋ฅผ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

 

2) ๋น„๋™๊ธฐ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ

๋น„๋™๊ธฐ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ์—์„œ๋Š” ์„œ๋ฒ„ 1์€ ์–ด๋–ค ์—ฐ์‚ฐ ๋ช…๋ น์„ ๋‹ค๋ฅธ ์„œ๋ฒ„ 2์— ์†ก์‹ ํ•˜๊ณ  ์„œ๋ฒ„ 1์€ ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐฉ์ ์œผ๋กœ ์ž๊ธฐ๊ฐ€ ํ•ด์•ผ ํ•˜๋Š” ๋‹ค์Œ ์ผ์„ ์‹œ์ž‘ํ•œ๋‹ค.

 

๋น„๋™๊ธฐ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ

 

  • ์„œ๋ฒ„ 1์—์„œ๋Š” ํ”Œ๋ ˆ์ด์–ด ์บ๋ฆญํ„ฐ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์„œ๋ฒ„ 2์—์„œ๋Š” ๋ชฌ์Šคํ„ฐ ์บ๋ฆญํ„ฐ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค
  • ์„œ๋ฒ„ 1์€ ์„œ๋ฒ„ 2์— ๋ชฌ์Šคํ„ฐ์— ๋Œ€๋ฏธ์ง€๋ฅผ ์ฃผ์—ˆ๋‹ค๊ณ  ํ†ต๋ณดํ•œ๋‹ค.
  • ์„œ๋ฒ„ 2๋Š” ์„œ๋ฒ„ 1์— ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์•„์ดํ…œ์„ ์ฃผ์—ˆ๋‹ค๊ณ  ํ†ต๋ณดํ•œ๋‹ค.
Player_Attack(player, monster)
{
    player.bullet--;
    otherServer.DamageCharacter(player.id, monster.id, 10);
}
 
DamageCharacter(callerServer, attacker, character, damage)
{
    character.hitPoint -= damage;
    if (character.hitPoint < 0)
    {
        callerServer.GiveItem(attacker.id, gold, 30);
        DeleteEntity(character, 10sec);
    }
}
 
GiveItem(character, item, amount)
{
    character.item.Add(item, amount);
}

 

 

๋น„๋™๊ธฐ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ์ž ๊ธˆ์œผ๋กœ ์ธํ•œ ๋ณ‘๋ชฉ์ด ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ ์„œ๋ฒ„๊ฐ€ ๊ฐ€์ง„ ์„ฑ๋Šฅ์„ ์ตœ๋Œ€ํ•œ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹จ์ ์€ ๋ชจ๋“  ๋กœ์ง์„ ์ด ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์–ด๋ ต๊ฑฐ๋‚˜ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ณผ์ •์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜ํ™˜ ๊ฐ’์„ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ ๋Œ€์‹  ์„œ๋กœ ์ผ๋ฐฉ์ ์ธ ํ†ต๋ณด๋ฅผ ๋˜ ์ฃผ๊ณ ๋ฐ›์•„์•ผ ํ•œ๋‹ค.

 

3) ๋ฐ์ดํ„ฐ ๋ณต์ œ์— ๊ธฐ๋ฐ˜์„ ๋‘” ๋กœ์ปฌ ์ฒ˜๋ฆฌ

๋ฐ์ดํ„ฐ ๋ณต์ œ์— ๊ธฐ๋ฐ˜์„ ๋‘” ๋กœ์ปฌ ์ฒ˜๋ฆฌ๋Š” ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ์— ๊ด€์—ฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์ด ์›๋ณธ ์„œ๋ฒ„์—๋งŒ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์„œ๋ฒ„์— ๋ณต์ œ๋œ ์ƒํƒœ๋กœ๋„ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด๋ฅผ ์œ„ํ•œ ๋กœ์ง ์ฒ˜๋ฆฌ๋Š” ๋‘ ์„œ๋ฒ„์— ๋ถ„์‚ฐ๋˜์ง€๋งŒ, ์–ด๋–ค ์ฒ˜๋ฆฌ๊ฐ€ ๋‹ค๋ฅธ ์„œ๋ฒ„์™€ ๋งž๋ฌผ๋ ค ๋Œ์•„๊ฐ€์ง€ ์•Š๊ณ  ๊ฐ ์„œ๋ฒ„๊ฐ€ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

๋ฐ์ดํ„ฐ ๋ณต์ œ์— ๊ธฐ๋ฐ˜์„ ๋‘” ๋กœ์ปฌ ์ฒ˜๋ฆฌ

 

  • ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์„œ๋ฒ„ 1์€ ๋ชฌ์Šคํ„ฐ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์„œ๋ฒ„ 2์˜ ๋ชฌ์Šคํ„ฐ ์ •๋ณด๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.
  • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„œ๋ฒ„ 2๋Š” ๋ชฌ์Šคํ„ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ”Œ๋ ˆ์ด์–ด ์ •๋ณด๋„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ์„œ๋ฒ„ 1๊ณผ ์„œ๋ฒ„ 2๋Š” ์ž๊ธฐ๊ฐ€ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋ฉด, ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ์•Œ๋ ค์ค€๋‹ค.
Player_Attack(player, monster)
{
    player.bullet--;
    monster.hitPoint -= 10;
    if (monster.hitPoint < 0)
    {
        player.item.Add(gold, 30);
        DeleteEntity(monster, 10sec);
    }
}

 

์•ž์„œ ์‚ดํŽด๋ณธ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ์˜ ๊ณตํ†ต๋œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

 

๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ๋•Œ

 

๋ฐ”๋กœ ์šฐ๋ฆฌ๋Š” ๊ทธ์ € ์†Œ์ผ“์˜ ์†ก์‹  ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ง€๋งŒ ์šด์˜์ฒด์ œ๋Š” ๋งŽ์€ ์ผ์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋ชฌ์Šคํ„ฐ ์‚ฌ๋ƒฅ ๋กœ์ง์€ ๋น„๊ต ์—ฐ์‚ฐ, ์‚ฐ์ˆ  ์—ฐ์‚ฐ, ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ, ์“ฐ๊ธฐ ์—ฐ์‚ฐ ๋ช‡ ๊ฐœ๋กœ ๊ตฌ์„ฑ๋œ ๊ฐ„๋‹จํ•œ ๋กœ์ง์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ถ„์‚ฐ๋œ ์„œ๋ฒ„ ๊ฐ„ ๋Œ€ํ™”์— ์‚ฌ์šฉ๋˜๋Š” ์—ฐ์‚ฐ์€ ์ด ๋กœ์ง์˜ ๋ช‡ ๋ฐฐ, ๋ช‡ ์‹ญ๋ฐฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ๊ณผ๋„ํ•˜๊ฒŒ ์„œ๋ฒ„ ๊ฐ„ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ฉด ์“ธ๋ฐ์—†์ด ๋น„ํšจ์œจ์ ์ธ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

7. ๋ฐ์ดํ„ฐ ์‘์ง‘๋„

์„ธ ๊ฐ€์ง€ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ๋ชจ๋‘ ์žฅ์ ๊ณผ ๋‹จ์ ์ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์ ๊ฒŒ ์ผ์–ด๋‚˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์œผ๋ฉด ์ข‹๋‹ค.

 

ํ•œ ๋ฐฉ๋ฒ•์€ ์‘์ง‘๋„๊ฐ€ ๋†’์€ ๋ฐ์ดํ„ฐ๋ผ๋ฆฌ๋Š” ๊ฐ€๊ธ‰์  ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ์‘์ง‘๋„๊ฐ€ ๋‚ฎ์€ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๋ถ„์‚ฐ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์‘์ง‘๋„๋Š” ํŠน์ • ์˜์—ญ ์•ˆ์— ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ด€๋ จ๋˜๊ณ  ๋ญ‰์ณ ์žˆ๋Š”์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด์„œ ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๋•Œ ๊ทธ ๋ฐ์ดํ„ฐ์™€ ์ž์ฃผ ์ƒ๊ด€๋˜๋Š” ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋งŽ์€์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ํ‰๋ฉด์œผ๋กœ ๊ตฌ์„ฑ๋œ ์›”๋“œ๊ฐ€ ์žˆ์„ ๋•Œ, ์ง€๋ฆฌ์  ์œ„์น˜๋ฅผ ์‘์ง‘๋„ ๊ธฐ์ค€์œผ๋กœ ํ•˜์—ฌ ๊ฐ€๊นŒ์šด ๊ฑฐ๋ฆฌ์— ์žˆ๋Š” ์บ๋ฆญํ„ฐ๋ผ๋ฆฌ๋Š” ๊ฐ™์€ ์„œ๋ฒ„์— ๋‘๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ง€๋ฆฌ์  ์œ„์น˜

 

๋˜ ๋‹ค๋ฅธ ์˜ˆ๋กœ ๋งค์น˜๋ฉ”์ดํ‚น ๊ฒŒ์ž„ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค ๋•Œ, ํ”Œ๋ ˆ์ด์–ด ์‹ค๋ ฅ์„ ์‘์ง‘๋„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋ฉด ์‹ค๋ ฅ์ด ๋น„์Šทํ•œ ํ”Œ๋ ˆ์ด์–ด๋ผ๋ฆฌ ์„œ๋ฒ„๋ฅผ ๋ถ„์‚ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

8. ๊ธฐ๋Šฅ์  ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ

์ง€๊ธˆ๊นŒ์ง€ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ์—์„œ ์„œ๋ฒ„๊ฐ€ ๋‘˜ ์ด์ƒ ๊ด€์—ฌํ•˜๋Š” ๊ฒƒ์„ ์•Œ์•„๋ณด์•˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ฐ€๋”์€ ์ด๋Ÿฌํ•œ ์ˆ˜ํ‰ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋•Œ ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๊ธฐ๋Šฅ์  ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ์ด๋‹ค. ๋ฐ์ดํ„ฐ ๋‹จ์œ„ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ, ์ฆ‰ ์ˆ˜ํ‰ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์—†์„ ๋•Œ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์•ˆ์ด๋‹ค.

 

๊ธฐ๋Šฅ์  ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ - ๊ฒŒ์ž„ ์„œ๋ฒ„(๊ฒฝ๋งค์žฅ ์„œ๋ฒ„), ์ฑ„ํŒ… ์„œ๋ฒ„

 

๊ธฐ๋Šฅ์  ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋Š” ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ๋ฌด์ œํ•œ์œผ๋กœ ์ชผ๊ฐค ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ๋Šฅ์  ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋Š” ์ตœํ›„ ์ˆ˜๋‹จ์ด๋‹ค. ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ, ์ฆ‰ ์ˆ˜ํ‰ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ตœ๋Œ€ํ•œ ์ฐพ์•„๋ณธ ํ›„ ๋„์ €ํžˆ ์•ˆ๋˜๋ฉด ๊ธฐ๋Šฅ์  ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค.

 

9. ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ์ •๋ฆฌ

์ด์ œ ์ „์ฒด์ ์ธ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณด์ž.

  • ์„ฑ๋Šฅ ๋ถ„์„์„ ํ•˜์—ฌ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์ง€์ ์„ ์ •ํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์‘์ง‘๋ ฅ์„ ํ™•์ธํ•œ๋‹ค.
  • ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ์„ ํƒํ•œ๋‹ค. (๋กœ์ง ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹)

 

๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋Š” ํ™•์žฅ์„ฑ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์•ˆ์ •์„ฑ์—๋„ ํšจ๊ณผ๋ฅผ ์ค€๋‹ค. ์„œ๋น„์Šค ์žฅ์•  ์˜์—ญ์ด ์ „์ฒด์—์„œ ๊ตญ์†Œ๋กœ ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ง€๋‚˜์นœ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋Š” ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๋„คํŠธ์›Œํฌ ์žฅ๋น„์— ๋ถ€ํ•˜ ๋ชฐ๋ฆผ, ๋„คํŠธ์›Œํฌ ์žฅ๋น„ ๊ณผ๋ถ€ํ•˜๋กœ ์„œ๋น„์Šค ์žฅ์• ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋Š” ๋””๋ฒ„๊น…์ด ๊นŒ๋‹ค๋กญ๋‹ค.

 

10. ๊ณ ๊ฐ€์šฉ์„ฑ

๊ณ ๊ฐ€์šฉ์„ฑ์ด๋ž€ ์‚ฌ์šฉ์ž๊ฐ€ ํ•ญ์ƒ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์„œ๋ฒ„๊ฐ€ ๊ณ ์žฅ ๋‚˜๊ฑฐ๋‚˜ ๊ป๋‹ค ์ผœ๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•จ์—๋„ ์„œ๋ฒ„ ์—ญํ• ์„ ์ง€์†ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๊ฐ€์šฉ์„ฑ์ด๋ผ ํ•œ๋‹ค.

 

๊ณ ๊ฐ€์šฉ์„ฑ ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ ์„œ๋ฒ„ ํ•œ ๋Œ€์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์‚ฌ์‹ค ์ปดํ“จํ„ฐ ์—ฌ๋Ÿฌ ๋Œ€๋กœ ๊ตฌ์„ฑ๋œ ์„œ๋ฒ„ ํด๋Ÿฌ์Šคํ„ฐ์ด๋‹ค. ์ด ์„œ๋ฒ„ ์ค‘์—์„œ ๋ช‡๋ช‡ ์„œ๋ฒ„๊ฐ€ ๊ณผ๋ถ€ํ•˜์— ๊ฑธ๋ฆฌ๊ฑฐ๋‚˜ ์˜ค์ž‘๋™์œผ๋กœ ์ •์ง€ํ•˜๋”๋ผ๋„ ๋‚˜๋จธ์ง€ ์„œ๋ฒ„๊ฐ€ ๊ณ„์†ํ•ด์„œ ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ“ Book/โœ Game Server' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Book] ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ต๊ณผ์„œ - 10์žฅ ๋ถ„์‚ฐ ์„œ๋ฒ„ ๊ตฌ์กฐ ์‚ฌ๋ก€ (2)
  • [Book] ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ต๊ณผ์„œ - 10์žฅ ๋ถ„์‚ฐ ์„œ๋ฒ„ ๊ตฌ์กฐ ์‚ฌ๋ก€ (1)
  • [Book] ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ต๊ณผ์„œ - 9์žฅ ๋ถ„์‚ฐ ์„œ๋ฒ„ ๊ตฌ์กฐ (1)
  • [Book] ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ต๊ณผ์„œ - 8์žฅ NoSQL ๊ธฐ์ดˆ
Blxxming
Blxxming
CS ์ง€์‹๊ณผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ฐฐ์šด ๊ฒƒ, ๊ฒฝํ—˜ํ•œ ๊ฒƒ ๋“ฑ์„ ๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
  • Blxxming
    ๐Ÿ’ก๋ฒˆ๋œฉ๐Ÿ’ก
    Blxxming
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • Tech Interview
    • ๐Ÿ“š Tech (246)
      • ๐Ÿ“ Computer Science (96)
        • โœ OS (12)
        • โœ Network & Web (10)
        • โœ Database (11)
        • โœ Data Structure (6)
        • โœ Algorithm (40)
        • โœ Design Pattern (9)
        • โœ Cloud Computing (3)
        • โœ (5)
      • ๐Ÿ“ Language (73)
        • โœ Language (6)
        • โœ C & C++ (11)
        • โœ C# (19)
        • โœ JAVA (37)
      • ๐Ÿ“ Game (43)
        • โœ Computer Graphics (2)
        • โœ Unity (14)
        • โœ Unreal (26)
        • โœ (1)
      • ๐Ÿ“ Book (34)
        • โœ Effective (3)
        • โœ Game Server (16)
        • โœ Clean Code (14)
        • โœ (1)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Blxxming
[Book] ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ต๊ณผ์„œ - 9์žฅ ๋ถ„์‚ฐ ์„œ๋ฒ„ ๊ตฌ์กฐ (2)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”