๐Ÿค“ Study/Lua

[01] ๋กœ๋ธ”๋ก์Šค ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ๋ฐ LUA ๊ธฐ์ดˆ ๋ชจ์Œ

GAMEMING 2024. 9. 30. 08:45
728x90

 

 

๊ฒœ๊ณต์„ ์‚ด์•„์˜จ ๋‚˜์—๊ฒ ๋กœ๋ธ”๋ก์Šค ์ •๋„๋Š” ๊ปŒ์ด์ง€.. ๊ปŒ์ด์ง€.. ๊ปŒ์ด์•ผ.. ๊ปŒ์ผ๊ฑธ..?

ํ•ด๋ณด์ž๊ณ ..... ๊ฐ€๋ณด์ž๊ณ ......

 

๋กœ๋ธ”๋ก์Šค ์ŠคํŠœ๋””์˜ค๋ฅผ ์‹คํ–‰ํ•œ ํ›„ '์ƒˆ ํŒŒ์ผ'์„ ์„ ํƒํ•˜์—ฌ ์‹ ๊ทœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

 

๋กœ๋ธ”๋ก์Šค ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ›„ ์ฒซ ํ™”๋ฉด

 

 

๋กœ๋ธ”๋ก์Šค UI ์„ค๋ช…์€ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๋งŽ์ด ๋‚˜์˜ค๋‹ˆ ๊ถ๊ธˆํ•˜๋ฉด ์ฐพ์•„๋ณด๋„๋ก ํ•˜์ž.

์ผ๋‹จ ํ•ต์‹ฌ์œผ๋กœ ์•Œ์•„์•ผ ํ•  ๊ฒƒ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

WSAD : ์นด๋ฉ”๋ผ ์ด๋™

QE : ์นด๋ฉ”๋ผ๋ฅผ ์œ„ ์•„๋ž˜๋กœ ์ด๋™

F : ํŒŒ์ธ  ์„ ํƒ ํ›„ Fํ‚ค ๋ˆ„๋ฅด๋ฉด ์ž์„ธํžˆ ๋ณด๊ธฐ
์˜ค๋ฅธ์ชฝ ํด๋ฆญ ํ›„ ๋“œ๋ž˜๊ทธ : ์‚ดํŽด๋ณด๊ธฐ

ํœ  : ์คŒ ์ธ/์•„์›ƒ

 


 

 

 

 

ํŒŒํŠธ๋ผ๋Š”๊ฒŒ ์กด์žฌํ•˜๋Š”๋ฐ ์ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งต์— ์‚ฌ์ง„๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฌผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. 

์ด ํŒŒํŠธ๋ฅผ ๋ฐฐ์น˜ํ•˜๊ฒŒ ๋˜๋ฉด ์šฐ์ธก ํƒ์ƒ‰๊ธฐ์— Part๋ผ๊ณ  ๋œจ๊ฒŒ ๋˜๋Š”๋ฐ

์ด ํŒŒํŠธ์— ๋งˆ์šฐ์Šค๋ฅผ ๊ฐ–๋‹ค๋Œ€์–ด ์˜†์— ๋œจ๋Š” + ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

๋กœ๋ธ”๋ก์Šค์—์„œ์˜ ์Šคํฌ๋ฆฝํŠธ๋Š” LUA๋‹ค.

LUA์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ์‚ดํŽด๋ณด์ž.

 

 

 


 

 

 

 

LUA๋ฅผ ์ฒ˜์Œ ํ•ด๋ณธ ๋‚˜์˜ ๋А๋‚Œ์€ ์Œ. ์ด๊ฒƒ์ด ์ฝ”๋”ฉ?.

C++์ฒ˜๋Ÿผ ์•ˆ๊นŒ๋‹ค๋กญ๋‹ค๋‹ˆ.

๋ญ์ง€, ์ด ์ง„๋ผ๋ฉด ์ˆœํ•œ๋ง›์˜ ๋А๋‚Œ..

 

 

1. ์ฃผ์„

 

 ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์•„๋Š” ์ฃผ์„์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ ๋‚ด๋ถ€์—์„œ ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์•„์„œ ๋ฉ”๋ชจ์žฅ์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

-- ์ด๊ฑธ๋กœ ์ฃผ์„์ฒ˜๋ฆฌ๊ฐ€ ๋œ๋‹ค?
print("์ถœ๋ ฅ๋ฌธ์ž…๋‹ˆ๋‹ค.")

--[[ 
์ด
๊ฒƒ
์ด

์—ฌ
๋Ÿฌ
์ค„
์ฃผ
์„
?
]]

 

 

 

2. LUA ๊ธฐ๋ณธ ๊ทœ์น™

 

- ํƒญ, ์ค„๋ฐ”๊ฟˆ, ๋„์–ด์“ฐ๊ธฐ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

-- ์˜ˆ์ œ 1: ์ผ๋ฐ˜์ ์ธ ์ž‘์„ฑ
print("Hello, World!")

-- ์˜ˆ์ œ 2: ๊ณต๋ฐฑ, ์ค„๋ฐ”๊ฟˆ์ด ๋งŽ์€ ๊ฒฝ์šฐ
    print
        (
        "Hello, World!"
        )

 

 

- ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ  Yang, yang, YANG๋Š” ๋‹ค ์„œ๋กœ ๋‹ค๋ฅธ ์• ๋กœ ์ธ์‹ํ•œ๋‹ค.

-- ์˜ˆ์ œ: ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„
local Yang = "Yang with uppercase Y"
local yang = "yang with lowercase y"
local YANG = "YANG with all uppercase"

print(Yang)  -- ์ถœ๋ ฅ: Yang with uppercase Y
print(yang)  -- ์ถœ๋ ฅ: yang with lowercase y
print(YANG)  -- ์ถœ๋ ฅ: YANG with all uppercase

 


- ๋„์–ด์“ฐ๊ธฐ๋กœ๋„ ์š”์†Œ๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

-- ์˜ˆ์ œ: ๋„์–ด์“ฐ๊ธฐ๋ฅผ ํ†ตํ•œ ์ธ์ž ๊ตฌ๋ถ„
function add(a, b)
    return a + b
end

print(add(10, 20))  -- ์ถœ๋ ฅ: 30

 


 - ๋ฌธ๋ฒ•์ด ์—„๊ฒฉํ•˜์ง€ ์•Š์€ ์–ธ์–ด๋Š” ๊ณต๋™ ์ž‘์—…์„ ํ•  ๋•Œ ๋‚จ์ด ์“ด ์ฝ”๋“œ๋ฅผ ์•Œ์•„๋ณด๊ธฐ๊ฐ€ ์—„์ฒญ ํž˜๋“ค์–ด ์งˆ ์ˆ˜ ์žˆ๋‹ค.
 - ๊ทธ๋ž˜์„œ ์˜คํžˆ๋ ค ๋ฃจ์•„์ฒ˜๋Ÿผ ๋ฌธ๋ฒ•์˜ ์ž์œ ๋„๊ฐ€ ๋†’์€ ์–ธ์–ด๋Š” ๊ณต๋™ ์ž‘์—…์‹œ ์ฝ”๋“œ ์ž‘์„ฑ ๊ทœ์•ฝ์„ ๋ช…ํ™•ํžˆ ์งœ๋Š” ๊ฒŒ ์ข‹๋‹ค.

-- ์˜ˆ์ œ 1: ํ•จ์ˆ˜ ์„ ์–ธ ๋ฐ ๋์— ์„ธ๋ฏธ์ฝœ๋ก  ์ถ”๊ฐ€ (์„ ํƒ์ )
function greet() print("Hello!") end;

-- ์˜ˆ์ œ 2: ๊ฐ™์€ ํ•จ์ˆ˜์ง€๋งŒ ๋‹ค๋ฅธ ์Šคํƒ€์ผ
function greet()
    print("Hello!")
end

greet()  -- ์ถœ๋ ฅ: Hello!

 

 

 - ๋ฃจ์•„ ํ•จ์ˆ˜: ํ…์ŠคํŠธ๋ฅผ ํ™”๋ฉด(์ถœ๋ ฅ ๋ฉ”๋‰ด)์— ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜
 - ์ถœ๋ ฅํ•  ๋ฌธ์ž๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•˜๊ณ  ์‹ถ์œผ๋ฉด " "์•ˆ์— ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋จ
 - ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์‹ถ์œผ๋ฉด ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค. 

-- ์˜ˆ์ œ: ๋ฌธ์ž์—ด ์ถœ๋ ฅ
print("Hello, Lua!")  -- ์ถœ๋ ฅ: Hello, Lua!

-- ์˜ˆ์ œ: ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๋ฌธ์ž์—ด ์ถœ๋ ฅ
local message = "This is a variable"
print(message)  -- ์ถœ๋ ฅ: This is a variable

 

 

 

3. ๋ณ€์ˆ˜(Variable)

 

 ๋ณ€์ˆ˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์„ ์˜๋ฏธํ•˜๋Š”๋ฐ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ด๋‹ค.

 ์˜ˆ๋ฅผ ๋“ค์–ด, ์บ๋ฆญํ„ฐ์˜ HP(์ฒด๋ ฅ)๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ, ๋งž์œผ๋ฉด HP๊ฐ€ ๊ฐ์†Œํ•˜๊ณ , ํšŒ๋ณต ์•„์ดํ…œ์„ ์‚ฌ์šฉํ•˜๋ฉด HP๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉฐ, HP๊ฐ€ 0์ด ๋˜๋ฉด ์บ๋ฆญํ„ฐ๊ฐ€ ์‚ฌ๋งํ•˜๋Š” ๊ฒฝ์šฐ ๋ณ€์ˆ˜๋กœ ์บ๋ฆญํ„ฐ์˜ HP๋ฅผ ์ €์žฅํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ์Šคํฌ๋ฆฝํŠธ๋กœ ์งœ๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

local HP = 100 -- ์ฒด๋ ฅ ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”
HP = HP - 10 -- ๋ฐ๋ฏธ์ง€๋ฅผ ์ž…์—ˆ์„ ๋•Œ ์ฒด๋ ฅ ๊ฐ์†Œ
HP = HP + 30 -- ํšŒ๋ณต ์•„์ดํ…œ ์‚ฌ์šฉ ์‹œ ์ฒด๋ ฅ ํšŒ๋ณต

 

 

 

[ ๋ณ€์ˆ˜๋ช… ๊ทœ์น™ ]

  • ๋ณ€์ˆ˜๋ช…์€ ์˜๋ฌธ๊ณผ ์ˆซ์ž๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ˆซ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ณ€์ˆ˜๋ช…์€ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค.
  • ์˜ˆ์•ฝ์–ด(and, or, not ๋“ฑ)๋Š” ๋ณ€์ˆ˜๋ช…์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์—ฌ๊ธฐ์„œ ์˜ˆ์•ฝ์–ด๋Š” ๋ฏธ๋ฆฌ ํ•จ์ˆ˜๋‚˜ ๊ธฐ๋Šฅ์œผ๋กœ ์ •์˜๋œ ์ด๋ฆ„๋“ค.
  • ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ธ ๋ณ€์ˆ˜๋ช…์ด๋‚˜ ํ•จ์ˆ˜๋ช…๊ณผ ์ค‘๋ณตํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

 

[ ๋ณ€์ˆ˜์˜ ์ข…๋ฅ˜ ]

  1. ์ง€์—ญ ๋ณ€์ˆ˜ (Local Variable)
    • ํŠน์ • ์ฝ”๋“œ ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•˜๋ฉฐ, ํ•ด๋‹น ๋ธ”๋ก์„ ๋ฒ—์–ด๋‚˜๋ฉด ์‚ฌ๋ผ์ง„๋‹ค.
    • ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ local ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • local์„ ์ƒ๋žตํ•˜๋ฉด ์ „์—ญ ๋ณ€์ˆ˜๋กœ ๊ฐ„์ฃผ๋œ๋‹ค.
  2. ์ „์—ญ ๋ณ€์ˆ˜ (Global Variable)
    • ์Šคํฌ๋ฆฝํŠธ ์ „์—ญ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋กœ.๋กœ๋ธ”๋ก์Šค ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

[ ๋ณ€์ˆ˜์˜ ๊ตฌ์„ฑ ์š”์†Œ ]

  • ์ด๋ฆ„: ๋ณ€์ˆ˜๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์ด๋ฆ„(์‹๋ณ„์ž).
  • ๊ฐ’: ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ.
  • ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ: ๊ฐ’์ด ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ์œ„์น˜.
  • ๋ฐ์ดํ„ฐํ˜•: ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’์˜ ์ข…๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์ž๋ฃŒํ˜•์ด๋ผ๊ณ  ํ•จ.

 

 

 

4. ์ž๋ฃŒํ˜•(Data Types)

 

๋‹ค๋ฅธ ์–ธ์–ด์— ๋น„ํ•ด ์ž๋ฃŒํ˜•์ด ๊ฐ„๋‹จํ•˜๋‹ค. ์•„์ฃผ ใ„นใ…‡.

 

  1. ์ˆซ์ž (Number)

  • ์ •์ˆ˜, ์‹ค์ˆ˜ ๋ชจ๋‘ ์ˆซ์ž ์ž๋ฃŒํ˜•์œผ๋กœ ์ฒ˜๋ฆฌ.
  • ์ •์ˆ˜๋‚˜ ์‹ค์ˆ˜๋ฅผ ๋ณ„๋„๋กœ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ.
local numA = 10 -- ์ •์ˆ˜
local numB = -1.5 -- ์‹ค์ˆ˜
local numC = 1.05e4 -- ๊ณผํ•™์  ํ‘œ๊ธฐ๋ฒ•

 

 

  2. ๋ฌธ์ž (String)

  • ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋Š” ํฐ๋”ฐ์˜ดํ‘œ(" ") ๋˜๋Š” ์ž‘์€๋”ฐ์˜ดํ‘œ(' ')๋กœ ๋ฌถ์–ด ํ‘œํ˜„ํ•œ๋‹ค.
local heroName = "ํ™๊ธธ๋™" -- ๋ฌธ์ž ์ž๋ฃŒํ˜•

 

 

  3. nil

  • ๊ฐ’์ด ์—†๋Š” ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค(C++์˜ null). ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ nil๋กœ ๋œ๋‹ค.
local emptyVar = nil -- ๊ฐ’์ด ์—†์Œ
local weapon = nil -- ๋ฌด๊ธฐ๊ฐ€ ์•„์ง ์—†์Œ
print(weapon) -- ์ถœ๋ ฅ: nil
weapon = "๊ฒ€" -- ๋ฌด๊ธฐ ์žฅ์ฐฉ
print(weapon) -- ์ถœ๋ ฅ: ๊ฒ€

 

 

  4. boolean

  • ์ฐธ(true) ๋˜๋Š” ๊ฑฐ์ง“(false) ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ ๋ชจ๋“  ๋…ผ๋ฆฌ์ ์ธ ํ‘œํ˜„์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.
local isAlive = true -- ์ฐธ
local hasJob = false -- ๊ฑฐ์ง“

 

 

  5. ํ…Œ์ด๋ธ” (Table)

  • ๋ฃจ์•„์˜ ๋ณตํ•ฉ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ฐฐ์—ด, ๊ฐ์ฒด ๋“ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” ๋’ค์—์„œ ์ž์„ธํžˆ...

 

 

 


5. ์—ฐ์‚ฐ์ž(Operators)

 

 1) ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž (Arithmetic Operators)

  • ๋ง์…ˆ: +
  • ๋บ„์…ˆ: -
  • ๊ณฑ์…ˆ: *
  • ๋‚˜๋ˆ—์…ˆ: /
  • ๊ฑฐ๋“ญ์ œ๊ณฑ: ^
  • ๋‚˜๋จธ์ง€: %
print(1 + 2) -- 3
print(9 % 4) -- 1

 

 

 2) ๊ด€๊ณ„ ์—ฐ์‚ฐ์ž (Relational Operators)

  • ํฌ๋‹ค: >
  • ์ž‘๋‹ค: <
  • ๊ฐ™๋‹ค: ==
  • ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค: >=
  • ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค: <=
  • ๊ฐ™์ง€ ์•Š๋‹ค: ~=
print(5 == 6) -- false
print(7 >= 8) -- false

 

 

 3) ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž (Logical Operators)

 

  • and: ๋‘ ์กฐ๊ฑด์ด ๋ชจ๋‘ ์ฐธ์ด๋ฉด ์ฐธ์„ ๋ฐ˜ํ™˜
  • or: ํ•˜๋‚˜๋ผ๋„ ์ฐธ์ด๋ฉด ์ฐธ์„ ๋ฐ˜ํ™˜
  • not: ์กฐ๊ฑด์˜ ๋ฐ˜๋Œ€ ๊ฐ’์„ ๋ฐ˜ํ™˜
print(true and false) -- false
print(not true) -- false

 

 

 

 

6. ์ œ์–ด๋ฌธ (Control Statements)

: ์ฝ”๋“œ์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ๋ฌธ

 

 1)  ์กฐ๊ฑด๋ฌธ (Conditional Statements)

 : ์กฐ๊ฑด์— ๋”ฐ๋ผ ์‹คํ–‰ํ•  ์ฝ”๋“œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ตฌ๋ฌธ

 

  - if ๋ฌธ

if ์กฐ๊ฑด then
    -- ์กฐ๊ฑด์ด ์ฐธ์ผ ๋•Œ ์‹คํ–‰
end

 

 

  - if-else๋ฌธ

if ์กฐ๊ฑด then
    -- ์กฐ๊ฑด์ด ์ฐธ์ผ ๋•Œ ์‹คํ–‰
else
    -- ์กฐ๊ฑด์ด ๊ฑฐ์ง“์ผ ๋•Œ ์‹คํ–‰
end

 

 - if-elseif-else ๋ฌธ

if ์กฐ๊ฑด1 then
    -- ์กฐ๊ฑด1์ด ์ฐธ์ผ ๋•Œ ์‹คํ–‰
elseif ์กฐ๊ฑด2 then
    -- ์กฐ๊ฑด2๊ฐ€ ์ฐธ์ผ ๋•Œ ์‹คํ–‰
else
    -- ๋ชจ๋“  ์กฐ๊ฑด์ด ๊ฑฐ์ง“์ผ ๋•Œ ์‹คํ–‰
end

 

 

 2)  ๋ฐ˜๋ณต๋ฌธ (Loops)

 : ๋ฃจ์•„์—์„œ๋Š” ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ while, for ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

local i = 1
while i <= 5 do
    print(i)
    i = i + 1
end

 

 

 

  1) while๋ฌธ

  • ์กฐ๊ฑด์ด ์ฐธ์ธ ๋™์•ˆ ๋ฐ˜๋ณตํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  • ์กฐ๊ฑด์ด ๊ฑฐ์ง“์ด๋ฉด ๋ฐ˜๋ณต์„ ๋ฉˆ์ถ˜๋‹ค.
while ์‹คํ–‰ ์กฐ๊ฑด do
  -- ์‹คํ–‰๋ฌธ
end

 

 

local num = 0
while num < 10 do
  num = num + 1
  print(num)
end
print("num์˜ ๊ฐ’์€ " .. num) -- 10

 

 

 2) repeat๋ฌธ

 

  • ์กฐ๊ฑด์„ ํ™•์ธํ•˜๊ธฐ ์ „์— ์‹คํ–‰๋ฌธ์„ ๋จผ์ € ์‹คํ–‰ํ•œ๋‹ค.
  • ์กฐ๊ฑด์ด ์ฐธ์ด ๋˜๋ฉด ๋ฐ˜๋ณต์„ ๋ฉˆ์ถ˜๋‹ค.
repeat
  -- ์‹คํ–‰๋ฌธ
until ์‹คํ–‰ ์กฐ๊ฑด

 

local num = 10

repeat
  num = num - 1
  print(num)
  
until num == 0

 

 

 3) for๋ฌธ

  • ์ฃผ์–ด์ง„ ๋ฒ”์œ„ ๋‚ด์—์„œ ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉฐ ๋ฐ˜๋ณตํ•œ๋‹ค.
for ๋ณ€์ˆ˜ = ์ดˆ๊ธฐ๊ฐ’, ์ตœ์ข…๊ฐ’, ์ฆ๊ฐ๊ฐ’ do
  -- ์‹คํ–‰๋ฌธ
end
for i = 1, 5 do
  print("๋ฐ˜๋ณต " .. i)
end
for a = 1, 10 do
  if a % 3 ~= 0 then  -- ์ œ์™ธํ•˜๊ณ 
    print(a)
  end
end

 

 

+ Random ๋ชจ๋“ˆ ์‚ฌ์šฉ๋ฒ• 

-- 1. math.random() ์‚ฌ์šฉ๋ฒ•

-- 1.1 0~1 ์‚ฌ์ด์˜ ์‹ค์ˆ˜ (๊ธฐ๋ณธ)
print(math.random()) -- ์˜ˆ: 0.124578

-- 1.2 1~N ์‚ฌ์ด์˜ ์ •์ˆ˜
print(math.random(10)) -- ์˜ˆ: 1์—์„œ 10 ์‚ฌ์ด์˜ ์ •์ˆ˜

-- 1.3 N~M ์‚ฌ์ด์˜ ์ •์ˆ˜
print(math.random(10, 20)) -- ์˜ˆ: 10์—์„œ 20 ์‚ฌ์ด์˜ ์ •์ˆ˜


-- 2. seed
--[[ 
 ๋žœ๋ค ํ•จ์ˆ˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปดํ“จํ„ฐ์˜ ์‹œ๊ฐ„ ๋“ฑ์„ ํ™œ์šฉํ•ด ๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
 math.random()์€ ์ผ์ • ํŒจํ„ด์ด ์žˆ์–ด ํ•ญ์ƒ ๋™์ผํ•œ ํŒจํ„ด์œผ๋กœ ๋‚˜์˜ค๊ธฐ์— ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด seed๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
]]

math.randomseed(os.time()) -- ํ˜„์žฌ ์‹œ๊ฐ„์„ ์‹œ๋“œ๋กœ ์„ค์ •
print(math.random(1, 100)) -- 1์—์„œ 100 ์‚ฌ์ด์˜ ๋‚œ์ˆ˜

 

 

 

7. ์ฝ”๋“œ์˜ ๊ตฌ์—ญ (Code Block)

 

  • ์ฝ”๋“œ์˜ ๊ตฌ์—ญ์„ ๋‚˜๋ˆ„๋Š” ๊ฒฝ์šฐ:
    1. if, while, repeat, for ๊ฐ™์€ ์ œ์–ด ๊ตฌ์กฐ์˜ ์‹œ์ž‘๊ณผ ๋
    2. ํ•จ์ˆ˜ ์ •์˜ ๋ถ€๋ถ„
    3. do - end ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ธ”๋ก์„ ๋‚˜๋ˆ”
  • ๋ชจ๋“  ๊ฒฝ์šฐ์—์„œ end๋กœ ๋ธ”๋ก์˜ ๋์„ ํ‘œ์‹œํ•œ๋‹ค.

  1) do - end

  • ์ฝ”๋“œ ๊ตฌ์—ญ์„ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•œ ํ‚ค์›Œ๋“œ.
  • ์ง€์—ญ ๋ณ€์ˆ˜๋Š” ๋ธ”๋ก ๋‚ด๋ถ€์—์„œ๋งŒ ์œ ํšจํ•˜๋ฉฐ, ๋ธ”๋ก์„ ๋ฒ—์–ด๋‚˜๋ฉด ์†Œ๋ฉธ๋œ๋‹ค.
local a = 10
print(a) -- 10

do
  print(a) -- 10
  local a = 5 -- ์ƒˆ๋กœ์šด 'a'๋Š” ์ด ๋ธ”๋ก์—์„œ๋งŒ ์œ ํšจ
  print(a) -- 5
end

print(a) -- 10 (๋ฐ”๊นฅ์˜ 'a'๋Š” ์—ฌ์ „ํžˆ 10)

 

 

 

 

8. ํ•จ์ˆ˜(Function)

 : ํŠน์ •ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋“ค์˜ ์ง‘ํ•ฉ

 

 * ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ

function ํ•จ์ˆ˜์ด๋ฆ„(๋งค๊ฐœ๋ณ€์ˆ˜)
    -- ์‹คํ–‰ํ•  ์ฝ”๋“œ
    return ๋ฐ˜ํ™˜๊ฐ’
end

 

   1) ํ•จ์ˆ˜ ์ •์˜ : function ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ ๊ฐ€๋Šฅ

     ํ•จ์ˆ˜ ์ด๋ฆ„ : ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์‚ฌ์šฉํ•  ์ด๋ฆ„, ๋งค๊ฐœ๋ณ€์ˆ˜ : ํ•จ์ˆ˜ ์ฒ˜๋ฆฌ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ณ€์ˆ˜, return : ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ ๋•Œ ์‚ฌ์šฉ

   2) ํ•จ์ˆ˜ ํ˜ธ์ถœ : ์ •์˜๋œ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„์„ ํ†ตํ•ด ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

   3) ํ•จ์ˆ˜ ์ด๋ฆ„ ์„ค์ • : ๊ทธ ํ•จ์ˆ˜๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์ž‘์„ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ์˜๋ฏธ ์žˆ๋Š” ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.

   

   ํ•จ์ˆ˜ ์ด๋ฆ„ ๊ทœ์น™:

  • ํ•จ์ˆ˜ ์ด๋ฆ„์€ ์•ŒํŒŒ๋ฒณ, ์ˆซ์ž, ์–ธ๋”์Šค์ฝ”์–ด(_)๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ˆซ์ž๋กœ ์‹œ์ž‘ํ•  ์ˆ˜๋Š” ์—†๋‹ค.
  • ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ณ„ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, AddNumbers์™€ addnumbers๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜๋กœ ์ทจ๊ธ‰๋œ๋‹ค.

 

 

 * ํ•จ์ˆ˜์˜ ์ข…๋ฅ˜

-- 1. ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ฐ˜ํ™˜๊ฐ’์ด ์—†๋Š” ํ•จ์ˆ˜

function Shout()
    print("์†Œ๋ฆฌ์งˆ๋Ÿฌ!")
end

Shout()


-- 2. ๋งค๊ฐœ๋ณ€์ˆ˜๋งŒ ์žˆ๋Š” ํ•จ์ˆ˜

function Greet(name)
    print("์•ˆ๋…•ํ•˜์„ธ์š”, " .. name .. "!")
end

Greet("ํ™๊ธธ๋™")


-- 3. ๋ฐ˜ํ™˜๊ฐ’๋งŒ ์žˆ๋Š” ํ•จ์ˆ˜

function GetMyName()
    return "์œ ๋น„"
end

print(GetMyName())


-- 4. ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ฐ˜ํ™˜๊ฐ’์ด ๋ชจ๋‘ ์žˆ๋Š” ํ•จ์ˆ˜

function AddNum(a, b)
    return a + b
end

print(AddNum(5, 3))

 

function CalculateDamage(minAttack, maxAttack, critChance)
    local damage = math.random(minAttack, maxAttack)
    if math.random() < critChance then
        return damage * 2  -- ํฌ๋ฆฌํ‹ฐ์ปฌ
    else
        return damage
    end
end
print(CalculateDamage(3, 7, 0.5))

 

 

 

9. ํ…Œ์ด๋ธ” (Table)

 : ์œ ์ผํ•œ ์ž๋ฃŒํ˜•์œผ๋กœ, ๋ฐฐ์—ด๊ณผ ๋”•์…”๋„ˆ๋ฆฌ์˜ ์—ญํ• ์„ ๋™์‹œ์— ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 * ํ…Œ์ด๋ธ” ์ƒ์„ฑ๋ฒ•

local tableName = {}  -- ๋นˆ ํ…Œ์ด๋ธ” ์ƒ์„ฑ

 

 * ์ˆซ์ž๋ฅผ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ…Œ์ด๋ธ”

local studentNames = {"๊น€๋ฏผ์žฌ", "์ด์ข…ํ˜„", "์ด์žฌ์—ฐ"}
print(studentNames[1])  -- ๊น€๋ฏผ์žฌ ์ถœ๋ ฅ

 

 * ๋ฌธ์ž๋ฅผ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ…Œ์ด๋ธ”

local hero = {name = "๊ด€์šฐ", age = 40, attack = 99}
print(hero.name)  -- ๊ด€์šฐ ์ถœ๋ ฅ

 

 * ํ…Œ์ด๋ธ” ์•ˆ์— ํ…Œ์ด๋ธ”์„ ๋„ฃ๊ธฐ

local character = {
    name = "ํ™๊ธธ๋™",
    stats = {attack = 10, hp = 100},
    items = {"๊ฒ€", "๋ฐฉํŒจ", "ํฌ์…˜"}
}
print(character.stats.attack)  -- 10 ์ถœ๋ ฅ
print(character.items[1])  -- ๊ฒ€ ์ถœ๋ ฅ

 

 


10. ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

 1) ๋ฉ”ํƒ€ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•œ ํด๋ž˜์Šค์™€ ๊ฐ์ฒด ์ƒ์„ฑ

local charClass = {
    name = "",
    job = "",
    level = 1,
    stats = {attack = 0, defense = 0, HP = 0, MP = 0}
}

function charClass:Shout()
    print(self.name .. "๋‹˜์ด ์™ธ์นฉ๋‹ˆ๋‹ค!")
end

function charClass:Create()
    local newObj = {}
    setmetatable(newObj, self)
    self.__index = self
    return newObj
end

local hero = charClass:Create()
hero.name = "๊ธธ๋™"
hero:Shout()  -- ๊ธธ๋™๋‹˜์ด ์™ธ์นฉ๋‹ˆ๋‹ค!


function charClass:LevelUp()
    self.level = self.level + 1
    self.stats.attack = self.stats.attack + 5
    self.stats.HP = self.stats.HP + 10
    print(self.name .. "๋‹˜์ด ๋ ˆ๋ฒจ์—… ํ–ˆ์Šต๋‹ˆ๋‹ค! ์ƒˆ๋กœ์šด ๋ ˆ๋ฒจ: " .. self.level)
end

hero:LevelUp()  -- ํ™๊ธธ๋™๋‹˜์ด ๋ ˆ๋ฒจ์—… ํ–ˆ์Šต๋‹ˆ๋‹ค!


function charClass:EquipItem(item)
    self.items.weapon = item
    print(self.name .. "๋‹˜์ด " .. item .. "์„(๋ฅผ) ์žฅ์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค.")
end

hero:EquipItem("๋‹จ๊ฒ€")  -- ํ™๊ธธ๋™๋‹˜์ด ๋‹จ๊ฒ€์„ ์žฅ์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค.