์ด์ „ ๊ธ€ : https://gall.dcinside.com/game_dev/156962


์›๋ž˜๋Š” 5ํŽธ ์ •๋„๋กœ ์˜ˆ์ƒ๋˜์—ˆ์ง€๋งŒ ๋‹ค์Œ ๊ฐ•์˜์— ๋Œ€ํ•œ ์ข‹์€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์–ด์„œ ์กฐ๊ธˆ ์ผ์ฐ ๋๋‚ด๋ ค๊ณ  ํ•จ. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ํŽธ์ด ๋งˆ์ง€๋ง‰์ด์ง€๋งŒ ๊ณง ์ƒˆ๋กœ์šด Love2D ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ ์‹œ๋ฆฌ์ฆˆ๋กœ ์ฐพ์•„๋ต ๊ฒƒ์ž„.

์‚ฌ์‹ค ๊ฐ•์˜์šฉ ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ฐœํŒ๋‚˜์„œ(์›๋ž˜ ๊ฐ•์˜์šฉ์œผ๋กœ ๋งŒ๋“ค๋˜๊ฒŒ ์•„๋‹Œ๋ฐ ์–ต์ง€๋กœ ์ „ํ™˜ํ•˜๋‹ค๋ณด๋‹ˆ ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๊ผฌ์ž„) ๋”์ด์ƒ ์ง„ํ–‰ํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฉด๋„ ์žˆ๊ธด ํ•จ.


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

ํ•˜์ง€๋งŒ, ์‚ฌ๋žŒ์€ ์‹œ๊ฐ„์ด ์ง€๋‚  ์ˆ˜๋ก ์ด ๊ฒŒ์ž„์— ์ ์‘ํ•˜๊ฒŒ ๋œ๋‹ค. ์ฒ˜์Œ์—๋Š” ํญํƒ„์ด ๋นจ๋ผ๋ณด์ด๋Š” ์‚ฌ๋žŒ๋„ ์žˆ๊ณ , ๋А๋ ค๋ณด์ด๋Š” ์‚ฌ๋žŒ๋„ ์žˆ์ง€๋งŒ ๋‚˜์ค‘์—๋Š” ํญํƒ„์ด ๋А๋ ค๋ณด์ด๋Š” ์ชฝ์ด ๋งŽ์•„์ง€๊ฒŒ ๋œ๋‹ค. ์ด๋Š” ์ง‘์ค‘๋ ฅ์„ ๋†’๊ฒŒ ์œ ์ง€ํ•  ํ•„์š”๊ฐ€ ์ ์  ๋–จ์–ด์ง€๊ณ , ๊ฒŒ์ž„์˜ ์žฌ๋ฏธ๋„ ๋ฐ˜๊ฐ๋˜๋Š” ์›์ธ์ด ๋œ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์‰ฝ๋‹ค. ๊ทธ์ €, ๊ฒŒ์ž„์„ ์ ์  ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค. ํญํƒ„์ด ์ด ๊ฒŒ์ž„์˜ ๊ฑฐ์˜ ์œ ์ผํ•œ ์œ„ํ—˜ ์š”์†Œ์ด๋‹ค ์‹ถ์œผ๋‹ˆ ์‹œ๊ฐ„ ๊ฒฝ๊ณผ์— ๋”ฐ๋ผ ํญํƒ„์˜ ์†๋„๋ฅผ ์ ์  ์ฆ๊ฐ€์‹œ์ผœ ๋ณด๋Š” ๊ฒƒ์„ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ์ œ์‹œํ•œ๋‹ค.


๊ฐ€๋ณ๊ฒŒ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด main.lua ํŒŒ์ผ์— ์žˆ๋Š” update ์ฝœ๋ฐฑ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•˜์ž. (...์€ ์›๋ž˜ Lua์—์„œ ๊ฐ€๋ณ€ ์ธ์ž ๋ชฉ๋ก์„ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ ์—ฌ๊ธฐ์—์„œ๋Š” ์ฃผ๋ณ€์˜ ์ฝ”๋“œ๋ฅผ ์ƒ๋žตํ•จ์„ ์œ„ํ•ด ์‚ฌ์šฉํ–ˆ๋‹ค.)

function love.update (dt)
if not isGameovered then
...
for _, v in ipairs(bombs) do
if gameTimer-300 > 0
and v:isCollide(cursor) then
isGameovered = true
return
end
v.speed = gameSpeed
v:update(dt)
end

if gameTimer % 60 == 0 then
gameSpeed = gameSpeed * 1.1
end
...
end
end


๊ทธ๋Ÿฐ๋ฐ ์ด ๋ฐฉ์‹์€ ์•ฝ๊ฐ„์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

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

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ์–ด๋–จ๊นŒ?

function love.load ()
for i = 1, 10 do
bombs[i] = Bomb:new {
...
speed = gameSpeed,
...
}
end
end


๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค, ์™œ๋ƒํ•˜๋ฉด Lua์˜ number ํ˜•์‹์€ ์ฐธ์กฐ ํ˜•์‹์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ ํ…Œ์ด๋ธ”์˜ ๊ฐ’์ด ๊ฐฑ์‹ ๋˜์ง€ ์•Š๋Š”๋‹ค.

๊ทธ๋Ÿฌ๊ณ  ๋ณด๋‹ˆ ํŒŒ์ƒ ๊ฐ์ฒด์—์„œ ์—†๋Š” ๋ฉค๋ฒ„๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ๋ฒ ์ด์Šค ํด๋ž˜์Šค์—์„œ ๋ฉค๋ฒ„๋ฅผ ๋Œ€์‹  ์ฐพ๋Š”๋‹ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฒ ์ด์Šค ํด๋ž˜์Šค์˜ ๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๋ฉด ํŒŒ์ƒ ๊ฐ์ฒด๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ „ํŒŒ๋˜์ง€ ์•Š์„๊นŒ? ์ข‹์€ ์ƒ๊ฐ์ด๋‹ค.

์ผ๋‹จ ํญํƒ„์˜ ์ƒ์„ฑ์ž ๋ถ€๋ถ„์—์„œ speed๋ฅผ ์ œ๊ฑฐํ•˜์ž. ๊ทธ๋ฆฌ๊ณ  ์ ๋‹นํžˆ ๊ธฐ์กด์˜ 'Bomb' ๊ฐ์ฒด์™€๋Š” ๋น„์Šทํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ํŒŒ์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.

local _Bomb = require("Bomb"):new()


load ์ฝœ๋ฐฑ์˜ ํญํƒ„ ์ƒ์„ฑ์ž๋ฅผ ๋ฐฉ๊ธˆ ๋งŒ๋“  ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋กœ ์„ค์ •ํ•œ๋‹ค.

function love.load ()
for i = 1, 10 do
bombs[i] = _Bomb:new {
...
}
end
end


์ด์ œ ์†๋„์˜ ๋ณ€ํ™”์„ ์ฃผ์–ด์•ผ ํ• ๋•Œ๋งˆ๋‹ค, ์ง์ ‘ _Bomb์˜ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•˜๋ฉด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํŒŒ์ƒ ๊ฐ์ฒด์—๋„ ์ „ํŒŒ๋œ๋‹ค.

์ฃผ์˜ํ•  ์ ์€ ๋‹ค์Œ์˜ ๊ตฌ๋ฌธ๊ณผ๋Š” ๊ฐ™์ง€ ์•Š๋‹ค๋Š” ์ ์ด๋‹ค.

local Bomb = require("Bomb")
Bomb.speed = 42


์œ„์˜ ์ฝ”๋“œ๋Š” ์ƒ์† ๋ฐ›์€ ๊ฐ์ฒด์˜ ๊ฐ’์ด ์•„๋‹Œ ์‹ค์ œ Bomb ๊ฐ์ฒด์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜๊ณ , ๊ฒŒ์ž„ ์ „์ฒด์— ์˜ํ–ฅ์„ ๋ผ์น˜๊ฒŒ ๋œ๋‹ค. require ํ•จ์ˆ˜๋Š” ๋ชจ๋“ˆ์„ ๋น ๋ฅด๊ฒŒ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•ด์„œ ์ด๋ฏธ ๋ถˆ๋Ÿฌ์˜จ ๋ชจ๋“ˆ์„ ์บ์‹ฑํ•ด๋‘”๋‹ค.

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


16. ์•„์ดํ…œ์„ ๋„ฃ์–ด ๋‚œ์ด๋„๋ฅผ ์กฐ์ •ํ•˜์ž
์ด์ œ ํ™”๋ฉด์ดˆํ˜ธ๊ธฐ ์ˆ˜์ค€์—์„œ ๋ฐ”ํƒ•ํ™”๋ฉด ํ‘œ์‹œ๊ธฐ๊นŒ์ง€๋Š” ์ง„ํ™”ํ–ˆ๋‹ค.

๊ทธ๋ž˜๋„ ๋ญ”๊ฐ€, ๋จผ๊ฐ€, ์ข€ ๋ถ€์กฑ... ์•„๋‹ˆ ์ด์ƒํ•˜๋‹ค. ์™œ๋ƒํ•˜๋ฉด, ๊ฒŒ์ž„์ด ๋„ˆ๋ฌด ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ง€๊ธˆ์˜ ๊ฒŒ์ž„์€ ๋งˆ์น˜ ์ผ๋ณธ์˜ C๋ชจ ๊ฒŒ์ž„์‚ฌ์— ๋“ฑ์žฅํ•˜๋Š” ์ƒˆํ•ด ํ•œ์ • ์บ๋ฆญํ„ฐ๋ฅผ ๋ณด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํญํƒ„์˜ ์†๋„๊ฐ€ ๋„ˆ๋ฌด ๋ฏธ์นœ๋“ฏ์ด ์ฆ๊ฐ€ํ•˜๋Š”๊ฒŒ ์›์ธ์ด๋ผ๋Š” ๊ฑฐ๋‹ค.

16

(๋†€๋ž๊ฒŒ๋„ ์ด ๊ณ ์–‘์ด๊ฐ€ ๋ฒ”์ธ์ด ๋งž๋‹ค.)


์ด๋Ÿฌํ•œ ๋ฌธ์ œ์˜ ์›์ธ์€ ์†๋„๊ฐ€ ์ƒ์Šนํ•˜๋Š” ๋กœ์ง์ด ํ•ฉ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ณฑ๋ฐฐ์ˆ˜๋ผ๋Š” ์ ์— ์žˆ๋‹ค. ํ•ฉ๋ฐฐ์ˆ˜๋กœ๋Š” 10์ดˆ์— ์†๋„๊ฐ€ ๋‘๋ฐฐ๋กœ ์ฆ๊ฐ€ํ•  ๋•Œ, ๊ณฑ๋ฐฐ์ˆ˜๋กœ๋Š” 2.6๋ฐฐ๋กœ ์ฆ๊ฐ€ํ•œ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ฐจ์ด๋Š” ๋”์šฑ ๋” ์ปค์งˆ ๊ฑฐ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹น์žฅ์˜ ์ผ์€ ์ด๋™ ์†๋„๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์‹œ๊ฐ„์„ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ๋ฐฐ์œจ์„ ๋‚ฎ์ถ”๋Š”๊ฒŒ ์ฐจ์„ ์ฑ…์ด๋‹ค. ํ•˜์ง€๋งŒ ์‹œ๊ฐ„์„ ๋Š˜๋ฆฌ๋ฉด ์ด๋™ ์†๋„ ์ฆ๊ฐ€๊ฐ€ ๋„ˆ๋ฌด ๋ถ€์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ณด์ด๊ณ , ๋ฐฐ์œจ์„ ๋‚ฎ์ถ”๋ฉด ๋‚œ์ด๋„๊ฐ€ ๋„ˆ๋ฌด ๊ธ‰๋ฝํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋˜ ๋ฌธ์ œ๋‹ค.

๋‹ต์€, ์•„์ดํ…œ์„ ์Šต๋“ํ•ด์„œ ์†๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ , ์ด๋ฆ„์„ Ice.lua๋ผ๊ณ  ์ง“์ž. ๊ทธ๋ฆฌ๊ณ  ๊ธฐ๋ณธ์ ์ธ ์ •๋ณด๋ฅผ ๊ธฐ์ž…ํ•œ๋‹ค.

local Ice = require("GameObject"):new()

return Ice


์˜๋ฌธ์ด ํ•˜๋‚˜ ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์™œ ๊ท€์ฐฎ๊ฒŒ ์šฉ๋„๋งˆ๋‹ค ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜์”ฉ ๋” ๋งŒ๋“ค์–ด์•ผ ํ• ๊นŒ? ๊ทธ๊ฒƒ์€ ์œ ์—ฐํ•œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€์™€ ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋•Œ๋ฌธ์ด๋‹ค. ๋‚˜์ค‘์—๋Š” ์–ผ์Œ์— ์กฐ๊ธˆ ํŠน์ˆ˜ํ•œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์–ผ์Œ์˜ ๋ชฉ๋ก์„ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์ž.

local ices = {}


update ์ฝœ๋ฐฑ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•˜์—ฌ, ์ผ์ • ์‹œ๊ฐ„๋งˆ๋‹ค ์•„์ดํ…œ์ด ์ƒ์„ฑ๋˜๊ณ , ์Šต๋“ ์‹œ ์ „์ฒด ํญํƒ„์˜ ์†๋„๊ฐ€ ๊ฐ์†Œํ•˜๊ฒŒ ๋งŒ๋“ค์ž.

function love.update (dt)
if not isGameovered then
...
for i, v in ipairs(ices) do
v:update(dt)
if v:isCollide(cursor) then
table.remove(ices, i)
_Bomb.speed = _Bomb.speed * math.sin(math.pi/4)
end
end

if (gameTimer-300) % 180 == 0 then
ices[#ices + 1] = game.Ice {
x = math.random(100, 700),
y = math.random(100, 500),
direction = math.random(1, 4),
...
}
end
...
end
end


draw ์ฝœ๋ฐฑ๋„ ๋ณ€๊ฒฝํ•ด์ฃผ์ž.

function love.draw ()
if no isGameovered then
for _, v in ipairs(ices) do
v:draw()
end
else
...
end
end


์ด์ œ ๊ฒŒ์ž„์„ ์‹คํ–‰ํ•ด๋ณด๋ฉด 3์ดˆ ๋งˆ๋‹ค ์–ผ์Œ์ด ์ƒ์„ฑ๋˜๊ณ , ์Šต๋“ ์‹œ ์ „์ฒด ํญํƒ„์˜ ์†๋„๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ๋А๋ ค์งˆ ๊ฑฐ๋‹ค.

17. ์„ธ๋ถ€ ๋‚œ์ด๋„ ์กฐ์ •
์ด์ œ ๋ฐ”ํƒ•ํ™”๋ฉด ํ‘œ์‹œ๊ธฐ์—์„œ ๋ฐ”ํƒ•ํ™”๋ฉด ์—”์ง„ ์ •๋„๋กœ๋Š” ์ง„ํ™”ํ•˜๋Š”๋ฐ ์„ฑ๊ณตํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฒˆ์— ์ถ”๊ฐ€ํ•œ ์•„์ดํ…œ์˜ ์„ฑ๋Šฅ์ด ๋„ˆ๋ฌด ์‚ฌ๊ธฐ์ ์ด์—ฌ์„œ ํญํƒ„์˜ ์†๋„๊ฐ€ 0์— ๊ฐ€๊นŒ์›Œ์ง€๋Š” ์ผ๋„ ์ƒ๊ธด๋‹ค.

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

์•Œ๋‹ค์‹œํ”ผ, ํญํƒ„์˜ ์†๋„๋Š” 1์ดˆ ๋งˆ๋‹ค ์ฆ๊ฐ€ํ•˜๊ณ , ์–ผ์Œ์€ 3์ดˆ ๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋„๋ก ๋˜์–ด์žˆ๋‹ค. ๋˜ํ•œ ๊ฐ๊ฐ ์ฆ๊ฐ€ ๋ฐ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜์น˜๊ฐ€ ๋‹ค๋ฅด๋‹ˆ๊นŒ ๋ฐธ๋Ÿฐ์Šค๋ฅผ ๋งž์ถ”๋Š”๋ฐ ์–ด๋ ค์›€์ด ์žˆ์–ด ๋ณด์ธ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์‹ค์€ ์–ด๋ ค์šธ ํ•„์š”๊ฐ€ ์—†๋‹ค. ์ด ๋‘˜์„ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋กœ ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ํญํƒ„์€ 3์ดˆ์— 1.1^3๋ฐฐ ๋งŒํผ ์†๋„๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ๊ผด์ด๋‹ค.

1์„ 1.331๋กœ ๋‚˜๋ˆ„๋ฉด ๋Œ€๋žต 4๋ถ„์˜ 3์ด๋ผ๋Š” ์ ˆ๋ฌ˜ํ•œ ๊ฐ’์ด ๋‚˜์˜ค๋ฏ€๋กœ ์–ผ์Œ์˜ ๋ฐฐ์œจ์ด ์ด๋ณด๋‹ค ๋†’์œผ๋ฉด ๊ฒŒ์ž„์ด ์ ์  ์–ด๋ ค์›Œ์ง€๊ณ , ๋‚ฎ์œผ๋ฉด ๊ฒŒ์ž„์ด ์ ์  ์‰ฌ์›Œ์ง„๋‹ค. ์šฐ๋ฆฌ ๊ฒŒ์ž„์˜ ๊ฒฝ์šฐ, ๊ฒŒ์ž„์ด ์ ์  ์‰ฌ์›Œ์ง€๋”๋ผ๋„ 0.75๋ผ๋Š” ๊ฐ’์„ ์„ ํƒํ–ˆ๋‹ค.

ํ•œ๊ฐ€์ง€ ์กฐ์‹ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์œ„์˜ ์‚ฌ๋ก€๋Š” ๋ฐธ๋Ÿฐ์Šค๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ๋งž์ถœ ์ˆ˜ ์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์–ผ์Œ์ด ์ƒ์„ฑ๋˜๋Š” ์‹œ๊ฐ„์€ 3์ดˆ์ด๋ฏ€๋กœ ๊ฐ„๊ฒฉ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํญํƒ„์˜ ์ด๋™ ์†๋„ ๊ทธ๋ž˜ํ”„๋Š” ํ†ฑ๋‹ˆํŒŒ์™€ ๋น„์Šทํ•œ ํŒŒํ˜•์œผ๋กœ ๋ณ€ํ™”ํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๊ธด์žฅ๊ฐ์ด ์„œ์„œํžˆ ์˜ฌ๋ผ๊ฐ”๋‹ค ๊ฐ‘์ž๊ธฐ ๋‚ด๋ ค๊ฐ€๋Š” ๊ฒƒ์€ ์งœ๋ฆฟํ•œ ๋А๋‚Œ์„ ์ฃผ๊ฒŒ ํ•  ๊ฑฐ๋‹ค.


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

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

๊ฐ„๋‹จํžˆ resetGame์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ์—ฌ๊ธฐ์— ๋ชจ๋“  ์ดˆ๊ธฐํ™” ๋กœ์ง์„ ๋„ฃ์ž.

function resetGame ()
math.randomseed(os.time())
coins = {}
bombs = {}
slows = {}
_Bomb.speed = 300
gameScore = 0
gameTimer = 0
isGameovered = false

for i = 1, 10 do
bombs[i] = game.Bomb:new()
end
end


๊ทธ๋ฆฌ๊ณ  load ์ฝœ๋ฐฑ๊ณผ keypressed ์ฝœ๋ฐฑ์— ์ดˆ๊ธฐํ™” ๋กœ์ง์„ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค.

function love.load ()
resetGame()
end

function love.keypressed (key, _, _)
if isGameovered and key == 'r' then
resetGame()
end
end




์ฐ๋ง‰์œผ๋กœ 4ํŽธ์—์„œ๋Š” ๊ฒŒ์ž„์„ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ๋‹ค.