ผมสร้างเกม NFT

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

Tanawat Yodnil
3 min readMar 14, 2022
Gameplay

ด้วยความที่กระแสของเกมที่สร้างอยู่บนรากฐาน Blockchain หรือเกมที่มีการ NFT (Non-fungible token) เข้ามาใช้ในเกม กำลังมาแรงอย่างมากเนื่องจากมันเปิดโอกาสให้ผู้เล่นสามารถทำกำไรจากการเล่นเกมได้

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

ด้วยเหตุนี้ผมจึงอยากลองที่จะสร้างเกม NFT เพื่อศึกษาว่ามันถูกสร้างยังไง หลักการเป็นยังไง มาเริ่มกันเลย ! ☕

หรือข้ามไปดูเกมเพลย์

NFT or Smart Contract

Photo by Christopher Gower on Unsplash

NFT หรือ Non-fungible token ก็คือ Smart Contract ที่ implement ตามมาตรฐาน ERC แต่ที่นิยมสุดรวมถึงที่เกมผมใช้ก็คือ ERC-721

รายละเอียดเชิงลึกเช่นหลักการทำงาน Blockchain network, Smart Contract, ERC และอื่น ๆ จะขอแยกเป็นบทความแยก เพราะในบทความนี้จะเราจะโฟกัสกับการสร้างเกมแทน 🕹️

Brainstorm 🧠

Tank 1990 (NES: Battle City)

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

เกมนี้ได้แรงบรรดาลใจมากจากเกมสมัยเด็กชื่อว่า Tank 1990 ของเครื่องเล่น NES

ไอเดียหลัก ๆ ก็คือ ผู้เล่นสามารถครอบครองตัวรถถังได้ (token) สามารถนำมาใช้เล่นในเกมได้ หรือจะนำไปเทรดหรือขายกับผู้เล่นคนอื่นก็ได้

เกมนี้จะเป็นเกม Real-time multiplayer หมายความว่าสามารถเล่นได้หลายคนพร้อมกัน !

เอาล่ะ ได้เวลาตั้งชื่อ

Photo by Aaron Burden on Unsplash

ชื่อของเกมผมตั้งว่า Non-fungible tank ซึ่งมันเจ๋งดี เพราะมันเป็นการสื่อถึงความเป็น NFT ได้อย่างดี

Drift the canvas

มาเริ่มทำ Prototype กัน ส่วนตัวผมใช้ Figma ทำทุกอย่างที่เป็นเรื่องดีไซน์

และนี่ก็คือ Prototype ตัวแรก (และตัวสุดท้าย) มีหน้าตาแบบนี้ 📸

Figma prototyping

ถือว่าเป็นที่น่าพึงพอใจสำหรับ 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 ของตัวรถถัง ในที่นี้คือการปรับความเร็วลดถัง

Editing metadata
I’m speed

Smart Contract

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

OpenZeppelin

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

Developing smart contract

จากนั้นผมจึง deploy ขึ้น testnet เพื่อทดสอบ ซึ่งผมเลือก Rinkeby ในที่นี่ ซึ่ง Contract อยู่ที่ address นี้

ตอนนี้เราพร้อมที่จะ mint รถถังซึ่งสามารถนำมาใช้ในเกมได้แล้ว ซึ่งจะทำได้เราต้องสร้าง metadata ของ token ขึ้นมาก่อน !

Metadata

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

Metadata ของเกมเราจะมีลักษณะประมาณนี้

Metadata

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

นอกจากนั้น ยังมีในส่วนของการ scripting ด้วย หมายความว่าเราสามารถเขียนความสามารถเพิ่มให้กับรถถังได้ด้วย

Metadata (ต่อ)

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

รถถังยิงไฟ

IPFS (InterPlanetary File System)

Storing file on IPFS

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

ถึงจุดนี้เราก็สามารถ mint รถถังออกมาได้แล้ว ทุกอย่างสามารถตรวจสอบได้บน chain หมดเลย ! Hooray 🎉

Ethers

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

ผมเลือก Ethers ในที่นี่ โดยจะใช้เชื่อมต่อเข้ากับ Metamask แล้ว query ข้อมูลจาก chain

Ethers

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

Connect with Metamask

Reviewing 📚

ตอนนี้เกมพร้อมเล่นแล้ว มาดูภาพ Gameplay กันสักหน่อย

โดยก่อนเล่น เราจำเป็นต้องครอบครองตัวรถถังอย่างน้อยหนึ่งคันก่อน สามารถแวะเข้าไปชมได้ที่ OpenSea

เมื่อเราได้รถถังมาแล้วก็เริ่มเล่นได้เลย !

Classic tank fight

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

Gigantic clashing tank

บางรถถังก็มีความสามารถที่เวอร์เกินไปนะ

Conclusion

เราได้เรียนรู้อะไรมากมายจากโปรเจคนี้ เช่นหลักการทำงาน Blockchain, Smart Contract และหลาย ๆ อย่างมันเชื่อมโยงเข้ากันได้อย่างไร

Smart Contract ได้เปิดความเป็นไปได้ใหม่ ๆ ในการพัฒนาเทคโนโลยีใหม่ ๆ ผมตื่นเต้นอย่างมากที่จะได้เห็นการก้าวหน้า การพัฒนาของ Smart Contract ว่ามันจะไปต่อในทิศทางใด

จนกว่าจะได้พบกันใหม่ครั้งหน้า สวัสดีครับ 💻⌨️☕🎉

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

No responses yet

Write a response