ผมสร้างเกม NFT
ทดลองสร้างเกมที่อยู่บนพื้นฐานเครือข่าย Blockchain (Ethereum) ด้วยการนำ NFT มาใช้งานในเกม

ด้วยความที่กระแสของเกมที่สร้างอยู่บนรากฐาน Blockchain หรือเกมที่มีการ NFT (Non-fungible token) เข้ามาใช้ในเกม กำลังมาแรงอย่างมากเนื่องจากมันเปิดโอกาสให้ผู้เล่นสามารถทำกำไรจากการเล่นเกมได้
แต่สิ่งที่ผมสนใจมากสุดไม่ใช่การที่มันสามารถทำกำไรได้ แต่มันคือการเปิดโอกาสให้ผู้เล่นได้ครอบครองสินทรัพย์บางอย่างในเกมอย่างแท้จริง
ด้วยเหตุนี้ผมจึงอยากลองที่จะสร้างเกม NFT เพื่อศึกษาว่ามันถูกสร้างยังไง หลักการเป็นยังไง มาเริ่มกันเลย ! ☕
NFT or Smart Contract
NFT หรือ Non-fungible token ก็คือ Smart Contract ที่ implement ตามมาตรฐาน ERC แต่ที่นิยมสุดรวมถึงที่เกมผมใช้ก็คือ ERC-721
รายละเอียดเชิงลึกเช่นหลักการทำงาน Blockchain network, Smart Contract, ERC และอื่น ๆ จะขอแยกเป็นบทความแยก เพราะในบทความนี้จะเราจะโฟกัสกับการสร้างเกมแทน 🕹️
Brainstorm 🧠
เกมที่ผมจะสร้างก็คือเกมรถถังนั่นเอง ! เป็นเกมที่เรียบง่าย ไม่มีอะไรซับซ้อน เพียงควบคุมรถถังให้ทำลายรถถังของศัตรูให้ได้
เกมนี้ได้แรงบรรดาลใจมากจากเกมสมัยเด็กชื่อว่า Tank 1990 ของเครื่องเล่น NES
ไอเดียหลัก ๆ ก็คือ ผู้เล่นสามารถครอบครองตัวรถถังได้ (token) สามารถนำมาใช้เล่นในเกมได้ หรือจะนำไปเทรดหรือขายกับผู้เล่นคนอื่นก็ได้
เกมนี้จะเป็นเกม Real-time multiplayer หมายความว่าสามารถเล่นได้หลายคนพร้อมกัน !
เอาล่ะ ได้เวลาตั้งชื่อ
ชื่อของเกมผมตั้งว่า Non-fungible tank ซึ่งมันเจ๋งดี เพราะมันเป็นการสื่อถึงความเป็น NFT ได้อย่างดี
Drift the canvas
มาเริ่มทำ Prototype กัน ส่วนตัวผมใช้ Figma ทำทุกอย่างที่เป็นเรื่องดีไซน์
และนี่ก็คือ Prototype ตัวแรก (และตัวสุดท้าย) มีหน้าตาแบบนี้ 📸

ถือว่าเป็นที่น่าพึงพอใจสำหรับ Web developer ที่ไม่ค่อยสันทัดเรื่องงานอาร์ตอย่างผม 🍭
Coding time 💻
ได้เวลาเลือก Stack ของเรา ในโปรเจคนี้จะมีสามส่วนหลักที่เราต้องพัฒนา ประกอบไปด้วย
- ตัวเกม
- เซิร์ฟเวอร์
- Smart Contract (NFT)
ตัวเกมกับเซิร์ฟเวอร์ไม่ใช่เรื่องใหม่สำหรับผม แต่ Smart Contract ถือว่าเป็นเรื่องใหม่ และจะเป็นส่วนที่ผมโฟกัสสุดในโปรเจคนี้
สำหรับตัวเกม ผมเขียนขึ้นมาเองจากฐาน ด้วยภาษา JavaScript ใช้ canvas ซึ่งผมไม่รู้ว่าตัดสินใจถูกหรือผิดที่ไม่ยอมใช้ engine ที่มีอยู่แล้ว เพราะดูเหมือนจะเปลืองเวลาพัฒนาใช่เหตุ 555
ตัวเซิร์ฟเวอร์ จะเป็นตัว WebSocket server ซึ่งผมจะใช้ไลบารี่ ws ซึ่งน่าจะเป็น implementation ที่เป็นที่นิยมสุดแล้วสำหรับ Nodejs
ในส่วน Smart Contract ซึ่งเราจะเขียน NFT ของเราขึ้นมา ผมเลือกใช้ Hardhat เป็นอาวุธคู่ใจ (Truffle, Ganache มันช้าไปสำหรับผม)
Game Dev 🕹️
พัฒนาเกมไม่มีอะไรเป็นพิเศษ จะขอข้ามการอธิบายขั้นตอนการพัฒนาเกมไปเลย นี่คือภาพทดลองปรับแต่ง Metadata ของตัวรถถัง ในที่นี้คือการปรับความเร็วลดถัง


Smart Contract
เราจะเขียน โดยใช้มาตรฐาน ERC-721 ซึ่งเราจะใช้ไลบารี่ของ OpenZeppelin ซึ่งเป็นไลบารี่ได้รับการยอมรับอย่างกว้างขวาง

เมื่อเราใช้ OpenZeppelin เราแทบจะไม่ต้องเขียนอะไรเพิ่มมากมาย เพราะ OpenZeppelin จัดการให้แล้ว เว้นแต่เราต้องการเพิ่ม logic เพิ่มเติม

จากนั้นผมจึง deploy ขึ้น testnet เพื่อทดสอบ ซึ่งผมเลือก Rinkeby ในที่นี่ ซึ่ง Contract อยู่ที่ address นี้
ตอนนี้เราพร้อมที่จะ mint รถถังซึ่งสามารถนำมาใช้ในเกมได้แล้ว ซึ่งจะทำได้เราต้องสร้าง metadata ของ token ขึ้นมาก่อน !
Metadata
Metadata คือข้อมูลจำเพาะของ token ซึ่งใช้ในการบอกข้อมูลคุณสมบัติของตัว token (รถถัง) อย่างเช่น ชื่อ คำอธิบาย รูปภาพแนะนำ รวมไปถึงข้อมูลพิเศษเฉพาะแพลตฟอร์ม เช่น OpenSea
Metadata ของเกมเราจะมีลักษณะประมาณนี้

จะเห็นได้ว่านอกเหนือจากชื่อและคำอธิบายยังมีส่วนข้อมูลเสริมเช่น ค่าสถานะ พลังโจมตี ความเร็ว อัตราการยิง ซึ่งทุกคนสามารถเห็นได้อย่างเปิดเผย
นอกจากนั้น ยังมีในส่วนของการ scripting ด้วย หมายความว่าเราสามารถเขียนความสามารถเพิ่มให้กับรถถังได้ด้วย

ลองจินตนาการอย่าง รถถังที่สามารถวาร์ปได้ รถถังที่สามารถพุ่งได้ ทุกอย่างเป็นไปได้หมด รถถังมีความสามารถต่างกัน มีจุดแข็งจุดอ่อน ก็ทำให้มีมูลค่าต่างกัน

IPFS (InterPlanetary File System)

Asset ทุกอย่างจะไม่ได้ host อยู่บนเซิร์ฟเวอร์ของเกม แต่เราจะใช้ IPFS ซึ่งเป็นการเก็บไฟล์อยู่บน network แบบ peer-to-peer ทำให้ทุกอย่างมีความ decentralize มากขึ้นหรือข้อมูลสามารถตรวจสอบและไม่มีใครดัดแปลงได้
ถึงจุดนี้เราก็สามารถ mint รถถังออกมาได้แล้ว ทุกอย่างสามารถตรวจสอบได้บน chain หมดเลย ! Hooray 🎉
Ethers
ย้อนกลับมายังส่วนของเกม ตอนนี้ได้เวลาที่เกมเราจะต้องไปดึงรถถังทั้งหมดที่เราครอบครองมาแสดงในเกมเพื่อที่จะสามารถนำมาเล่น
ผมเลือก Ethers ในที่นี่ โดยจะใช้เชื่อมต่อเข้ากับ Metamask แล้ว query ข้อมูลจาก chain

นำเข้าไลบารี่ Connect เข้ากับ Metamask เสร็จ !

Reviewing 📚
ตอนนี้เกมพร้อมเล่นแล้ว มาดูภาพ Gameplay กันสักหน่อย
โดยก่อนเล่น เราจำเป็นต้องครอบครองตัวรถถังอย่างน้อยหนึ่งคันก่อน สามารถแวะเข้าไปชมได้ที่ OpenSea
เมื่อเราได้รถถังมาแล้วก็เริ่มเล่นได้เลย !

อย่างที่เห็น เราสามารถสู้กับผู้เล่นคนอื่นได้แบบ Real-time โดยใช้รถถังที่เราครอบครอง

บางรถถังก็มีความสามารถที่เวอร์เกินไปนะ
Conclusion
เราได้เรียนรู้อะไรมากมายจากโปรเจคนี้ เช่นหลักการทำงาน Blockchain, Smart Contract และหลาย ๆ อย่างมันเชื่อมโยงเข้ากันได้อย่างไร
Smart Contract ได้เปิดความเป็นไปได้ใหม่ ๆ ในการพัฒนาเทคโนโลยีใหม่ ๆ ผมตื่นเต้นอย่างมากที่จะได้เห็นการก้าวหน้า การพัฒนาของ Smart Contract ว่ามันจะไปต่อในทิศทางใด
จนกว่าจะได้พบกันใหม่ครั้งหน้า สวัสดีครับ 💻⌨️☕🎉