ช่วงนี้กำลังเห่อเขียน Python อยู่ก็เลยว่าจะทำคู่มือการเขียนโปรแกรมภาษา Lua เบื้องต้นหน่อย (แบบว่า Python คนใช้กันเยอะแล้ว) พอดีผมเป็นคนเล่นเกมไม่เก่ง แต่ก่อนเล่นเกมคอมฯ ก็มักจะแก้เซฟไฟล์ โกงค่าสถานะตัวละครบ้าง เพิ่มเงิน และอื่นๆ สมัยนั้นอินเทอร์เน็ตยังไม่เจริญหาโปรแกรมโกงยากต้องพึ่ง Hex editor เอาบางเกมก็แก้ง่ายแปลงค่าตัวเลขฐานสิบกับฐานสิบหกแล้วสุ่มหาค่าเอาเทียบตำแหน่งกับชุดตัวเลขอื่นลองแก้ค่าดูแล้วทดลองโหลดเกมใหม่ บางเกมก็แก้ไม่ได้เพราะเข้ารหัสไว้ ส่วนมากเกมไหนไม่โกงมักเล่นไม่จบ นอกเรื่องมาซะยาวแล้วมันเกี่ยวกับที่อยากทำคู่มือ Lua ยังไง แล้วหัวเรื่องคืออะไร
อย่างแรกเลยหัวเรื่องเป็นการเล่นคำ Lua ตามต้นฉบับเขาให้ออกเสียงว่า “ลู-อา” ผมออกเสียงเร็วๆ ก็เป็น “ลัว” แล้วก็แปลงเป็น “รั่ว” หมายถึงหลุดออก ภาษาแสลงประมาณว่า บ้าๆบอๆ คือเราจะหัด Lua กันแบบไม่ต้องจริงจังมาก
อย่างที่สอง Lua เป็นภาษาสคริปต์ที่มีขนาดเล็กเร็วง่ายและยืดหยุ่น ได้รับความนิยมในเกมหลายตัว และมักถูกใช้เป็นภาษาที่ใช้อธิบายข้อมูล ดังนั้นบางเกมทำเซฟไฟล์ในแบบของภาษา Lua รวมถึงสคริปต์การทำงานบางอย่างด้วยทำให้การโกงเกมมีความสนุกสนานมากขึ้นและไม่ต้องปวดหัวกับไบนารี่ไฟล์อีกต่อไป
เริ่มต้นกับ Lua
เนื่องจาก Lua เป็นภาษาสคริปต์ดังนั้นจึงสามารถเรียกให้ทำงานได้ทันทีทั้งจากพิมพ์คำสั่งตรงๆ หรือเรียกไฟล์ชุดคำสั่งภาษา Lua ได้เลยโดยไม่ต้องแปลงเป็นไบนารี่ไฟล์ก่อนโดยเรียกใช้ผ่านคำสั่ง lua มีรูปแบบดังนี้
- ใช้เป็น Lua interpreter โดยเรียก lua เฉยๆ โดยไม่มีอากิวเมนต์ตามจะขึ้นพรอมต์ “>” รอรับจากนั้นก็พิมพ์คำสั่งไปได้เลยเช่น
print(“Hello world”)
ประโยคยอดฮิตเมื่อกด enter คำสั่งจะประมวลผลทันที ถ้าคำสั่งยังไม่สามารถประมวลผลได้เช่นยังไม่จบคำสั่ง หรือพิมพ์เป็นบล๊อกคำสั่งเช่น function, loop, condition ดังตัวอย่าง
print(“Hello
เมื่อกด enter จะขึ้นพรอมต์ “>>” ไปในแต่ละบรรทัดจนกว่าคำสั่งจะสมบูรณ์จึงจะประมวลผลแล้วกลับเป็น “>” อีกครั้ง
สามารถเรียกใช้ไลบรารีจากไฟล์ที่มีอยู่ได้โดยใช้คำสั่ง dofile(“ชื่อไฟล์”) ก็จะสามารถเรียกใช้ฟังก์ชันที่อยู่ในไฟล์นั้นได้
เมื่อต้องการออกจาก Lua interpreter ให้พิมพ์คำสั่ง os.exit() ก็จะกลับสู่พรอมต์ปกติของคอนโซลหรือเทอร์มินอลนั้นๆ - สั่งให้ไฟล์ภาษา Lua ทำงาน โดยเรียก
lua [ออฟชั่น] [ไฟล์ Lua]
เช่น
lua hello.lua
หรือ
lua -i hello.lua
ในกรณีที่ต้องการเรียก Lua interpreter ต่อหลังจากให้ไฟล์ hello.lua ทำงานแล้วเป็นต้น
Lua ภาษาแสนง่าย
ไม่ค่อยมีกฎเกณฑ์มากนักจะเขียนเป็นบล๊อกหรือเป็นบรรทัดเดียวกันก็ได้เช่น
for i = 1,10 do
x = 2
y = x * i
print(i,y)
end
x = 2
y = x * i
print(i,y)
end
หรือ
for i=1,10 do x =2 y= x * i print(i, y) end
และยังเขียนคำสั่งติดๆ กันไปก็ได้เช่น
a = 1 b = a * 2
แต่จะทำให้อ่านยากสามารถใส่ ";" เพื่อช่วยให้อ่านได้ง่ายขึ้นดังนี้
for i=1,10 do x=2; y= x * i; print(i, y) end
a = 1; b = a * 2
a = 1; b = a * 2
ตัวแปรใน Lua เป็น Dynamic type ไม่จำเป็นต้องกำหนดประเภทของตัวแปรหรือประกาศตัวแปรก่อนเรียกใช้เช่น
a=10
print(type(a),a) ---------> number 10
a="asdf"
print(type(a),a) ---------> string asdf
print(z) ---------> nil
b=print
b(type(b),"Hello") ---------> function Hello
จากตัวอย่างประเภทของตัวแปร a จะเปลี่ยนตามค่าที่ใส่ ส่วนตัวแปร z ยังไม่เคยประกาศหรือกำหนดค่ามาก่อนจึงมีค่าเป็น nil หรือก็คือไม่มีค่าไม่มีตัวแปรนี้มาก่อนนั่นเอง (ฟังก์ชัน type() จะคืนค่าประเภทของตัวแปรนั้น)
ส่วนบรรทัดล่างสุดเป็นการให้ตัวแปร b อ้างอิงไปยังฟังก์ชัน print() ดังนั้น b("สวัสดี") ได้ผลเท่ากับ print("สวัสดี")
การกำหนดค่าตัวแปรสามารถกำหนดค่าทีละตัวเช่น
a=10
b="asdf"
c={'abc',"แมว",12.5,true}
b="asdf"
c={'abc',"แมว",12.5,true}
หรือจะกำหนดค่าพร้อมกันก็ได้เช่น
a,c,b = 10,{'abc',"แมว",12.5,true},'asdf'
หรือ
a,c,b = 10,{'abc',"แมว",12.5,true},'asdf','addaadsdsd',2000,false,{1,4,3},"qqq"
ก็ได้ผลเหมือนกันระบบจะกำหนดค่าเท่ากับจำนวนตัวแปรเท่านั้นส่วนที่เกินมาจะไม่สนใจ ถ้าจำนวนค่าที่กำหนดน้อยกว่าจำนวนตัวแปรก็เช่นกันระบบจะไม่สนใจตัวแปรที่เกินมาเช่น
a,b,c,d =2,0.345,"ok"
print(a,b,c,d) ---------> 2 0.345 ok nil
print(a,b,c,d) ---------> 2 0.345 ok nil
สามารถสลับค่าตัวแปรก็ได้
a,b = 5,10
print(a,b) ---------> 5 10
a,b = b,a
print(a,b) ---------> 10 5
print(a,b) ---------> 5 10
a,b = b,a
print(a,b) ---------> 10 5
ฟังก์ชันสามารถคืนค่าได้มากกว่า 1
function fn(n)
return n+1, n-1
end
a,b = fn(10)
print(a,b) ---------> 11 9
return n+1, n-1
end
a,b = fn(10)
print(a,b) ---------> 11 9
แต่ถ้ากำหนดค่าตัวแปรเป็นชื่อฟังก์ชันจะเป็นการอ้างอิงไปยังฟังก์ชันนั้น
c = fn
d,e = c(5)
print(d,e) ---------> 6 4
x = print
x(a,b,d,e) ---------> 11 9 6 4
d,e = c(5)
print(d,e) ---------> 6 4
x = print
x(a,b,d,e) ---------> 11 9 6 4
ประเภทตัวแปร
มีแค่ 8 ประเภทได้แก่ {nil, boolean, number, string, table, function, userdata, thread} โดยเบื้องต้นเราจะสนใจประเภทหลักๆ 5 ประเภทแรกดังนี้- nil คือไม่มีค่าตัวแปรใดๆ ที่ไม่ได้กำหนดค่าหรือไม่มีตัวแปรนั้นอยู่ก็คือ nil การกำหนดให้ตัวแปรใดๆ มีค่าเท่ากับ nil จะเป็นการลบตัวแปรนั้นไป
- boolean มีอยู่สองค่าคือ true กับ false ตัวแปรประเภทอื่นๆ ที่ไม่ได้มีค่าเป็น nil จะเทียบเท่ากับ true
- number ต่างกับภาษาอื่นที่มีแบ่งย่อยเป็นจำนวนเต็ม จำนวนจริง ฯลฯ แต่ Lua จะมีแต่จำนวนจริง (double-precision floating-point) เท่านั้น
- string คือข้อความโดยจะอยู่ในเครื่องหมาย " หรือเครื่องหมาย ' หรือกรณีที่มีข้อความยาวหลายบรรทัดให้ใช้ [[ กับ ]] ปิดหัวท้ายข้อความ
- table คล้ายกับ array ในภาษาอื่นแต่เป็น array ที่สามารถกำหนด index หรือ key ด้วยค่าอื่นๆ ที่นอกจากลำดับเลขได้และมีขนาดไม่ตายตัวสามมารถเพิ่มขนาดได้มีลักษณะคล้ายกับ array ใน PHP หรือ dictionary ใน Python
ตอนที่ 2 มารั่วกันต่อ#2
ตอนที่ 3 มารั่วกันต่อ#3
ตอนที่ 4 มารั่วกันต่อ#4
หัดเขียนโปรแกรมแบบบ้านๆ ตอนที่ 3 พื้นฐานภาษา Lua
ความคิดเห็น
แสดงความคิดเห็น