เรียนรู้การสร้างตัวแปรแบบ Struct (Structure) Part 2

หลังจากได้เรียนรู้ขั้นตอนการสร้างและใช้งาน struct เบื้องต้นกันแล้ว -> เรียน รู้การสร้างตัวแปรแบบ Struct (Structure) Part 1

ตัวอย่างในส่วนที่ 2 นี้ เราจะได้เรียนรู้การใช้คำสั่งเพิ่มเติมจาก Part 1

เราจะลองจำลองการสร้างโครงสร้างตัวแปรสำหรับเก็บข้อมูลและรายละเอียดของตัวละครในเกมนะครับ

ตัวละครแต่ละตัวจะมีค่าหลักๆคือ

– พลังชีวิต (hpmax)
– พลังเวทย์มนต์ (mpmax)
– ความแข็งแกร่ง (str)
– ความฉลาด (int)
– ความอึด (vitality)
– ความเร็ว (dex)

ThaiSwiftClass Begin Struct RPG stat

ThaiSwiftClass Begin Struct RPG stat

จาก struct PlayerStat เราจะเรียนรู้คำสั่งใหม่ชื่อ mutating..

การประกาศตัวแปรใน struct จะไม่สามารถนำมาเปลี่ยนค่าเองใน struct แต่สามารถไปเปลี่ยนค่านอก struct ได้ หรือใช้  mutating ใว้หน้า func ใน struct เพื่อช่วยให้ตัวแปรที่กำหนดไว้ใน struct นั้นๆสามารถเปลี่ยนค่าของตัวเองได้

mutating func StatIncrement() จะทำหน้าที่เพิ่มค่าต่างๆของตัวละครในกรณีที่เราต่อสู้และได้คะแนนหรือค่าประสบการณ์เมื่อถึงกำหนด โดยเราใช้คำสั่ง rand() คือการสุ่มค่า (random) โดยนำค่าใหม่ที่ได้ไปเพิ่มจากค่าเดิม

ในส่วนของการเก็บค่าประสบการณ์เราใช้ struct playerExp

มีตัวแปรเก็บค่าประสบการณ์ ปัจุบัน (currentExp) และ ตัวแปรกำหนดการขึ้นเลเวลใหม่ (tonextLevel)

ThaiSwiftClass Begin Struct RPG Exp

ThaiSwiftClass Begin Struct RPG Exp

 

struct ตัวไปใช้สำหรับเก็บค่าเลเวลปัจุบัน (currentlevel) และ สร้าง func แบบ mutating ชื่อ levelup เพื่อเปลี่ยนค่า currentlevel ของเรา

ThaiSwiftClass Begin Struct RPG Level

ThaiSwiftClass Begin Struct RPG Level

 

ส่วนสุดท้ายจะเป็นส่วนที่เก็บรายละเอียดของผู้เล่น

ThaiSwiftClass Begin Struct RPG Player

ThaiSwiftClass Begin Struct RPG Player

อธิบายตัวแปร
– sName เก็บชื่อผู้เล่น
– sJob เก็บอาชีพ
– sRace เก็บสายพันธ์ุของผู้เล่น

– iLevel เก็บเลเวลของตัวละคร จะเป็น struct playerLevel
มีค่าเริ่มต้นคือ 1

– iStat เก็บรายละเอียดของตัวละคร เป็น struct playerStat
มีค่าเริ่มต้น hpmax = 20 ,mpmax = 10, str = 15, int = 6, vit = 8 และ dex = 9

– iExp เก็บค่าประสบการณ์ เป็น struct playerExp
มีค่าเริ่มต้น currentExp = 0 และ tonextLevel = 100

สร้าง function checkExp เพื่อตรวจสอบว่าค่าประสบการณ์ของตัวละครมีพอที่จะขึ้นเลเวลใหม่หรือยัง  (true,false)

 

ลองนำมาใช้งานจริงดู ให้ลองสร้างตัวแปร myPlayer มาเป็นตัวละครของเกมครับ

ThaiSwiftClass Begin Struct RPG Player Use

ThaiSwiftClass Begin Struct RPG Player Use

 

ลองแสดงค่าปัจุบันของตัวละครออกมา

ThaiSwiftClass Begin Struct RPG Player detail 1

ThaiSwiftClass Begin Struct RPG Player detail 1

ThaiSwiftClass Begin Struct RPG Player detail 3

ThaiSwiftClass Begin Struct RPG Player detail 3

 

ผลที่ได้

ThaiSwiftClass Begin Struct RPG Result 1

ThaiSwiftClass Begin Struct RPG Result 1

 

เราจะจำลองว่าได้มีการต่อสู้กับศัตรูและชนะโดยจะได้ค่าประสบการณ์เป็นรางวัลมา 100 point

แล้วลองเช็กดูว่าเราสามารถขึ้นเลเวลใหม่และเพิ่มค่าพลังของตัวละครได้หรือยัง

โดยเราจะนำ myPlayer.iExp.currentExp ซึ่งตอนนี้มีค่าเป็น 100 ไปเปรียบเทียบกับ tonextLevel ซึ่งมีค่า 100 เหมือนกัน เราจึงเพิ่ม level ให้ตัวละอีก 1 และใช้คำสั่ง StartIncrement เพื่อเพิ่มค่าพลังให้แก่ตัวละคร

ThaiSwiftClass Begin Struct RPG Player Level Up

ThaiSwiftClass Begin Struct RPG Player Level Up

 

ลองมาดูค่าพลังของตัวละครล่าสุดกันครับ

ThaiSwiftClass Begin Struct RPG Player Level Up 2

ThaiSwiftClass Begin Struct RPG Player Level Up 2

ThaiSwiftClass Begin Struct RPG Player detail 2

ThaiSwiftClass Begin Struct RPG Player detail 2

 

จะเห็นว่าค่าพลังได้เปลี่ยนไปแล้ว

ThaiSwiftClass Begin Struct RPG Player Level Up Result

ThaiSwiftClass Begin Struct RPG Player Level Up Result

 

สรุปการใช้ตัวแปรโครงสร้างแบบ struct นั้น เราได้เรียนรู้คำสั่งใหม่อย่าง mutating func เพื่อเปลี่ยนแปลงค่าตัวแปรใน struct
เราสามารถประกาศตัวแปร struct ใน struct อีกชั้นหนึ่งได้ อย่าง iStat,iLevel,iExp

 

อยากให้ลองฝึกใช้ดูให้คล่องๆนะครับ บทต่อๆไปจะเริ่มค่าสู่เรื่อง OOP (Object Oriented Programming) และจะนำไปสู่การสร้าง App บน iPhone และ iPad ต่อไปครับ

แนะนำติชมได้ตลอดนะครับ ที่ thaiswiftclass@gmail.com และทาง https://www.facebook.com/thaiswiftclass

Leave a Reply