บทนำ — ทำไมต้องใช้ AI สร้างเนื้อเรื่องเกม?
ผมเคยพัฒนาเกมเล็กๆ หลายตัว และปัญหาที่ใหญ่ที่สุดคือการเขียนบทสนทนา ยิ่งเกมมีตัวละครหลายตัว มีทางเลือกเยอะ ยิ่งต้องเขียนสคริปต์มากขึ้นแบบทวีคูณ สมมติมี 5 ทางเลือก แต่ละทางเลือกแตกออกไปอีก 3 ทาง คุณจะต้องเขียนบทสนทนาถึง 5×3 = 15 เวอร์ชัน ยังไม่รวมถ้าผู้เล่นกลับมาทางเดิมอีก
วันนี้ผมจะสอนคุณสร้างระบบที่ใช้ AI สร้างเนื้อเรื่องและบทสนทนาแบบแยกทางโดยอัตโนมัติ ตั้งแต่เริ่มต้นเลย ไม่ต้องมีความรู้เรื่อง API มาก่อนก็ทำได้
สิ่งที่คุณต้องมีคือบัญชี
สมัครที่นี่ ซึ่งมีราคาถูกมากเมื่อเทียบกับ OpenAI โดยคิดเป็นอัตรา ¥1=$1 ประหยัดได้ถึง 85% พร้อมรองรับ WeChat และ Alipay สำหรับคนไทย
หลักการทำงานของระบบ
ระบบที่เราจะสร้างมี 3 ส่วนหลัก:
- เอนจินสร้างเนื้อเรื่อง (Plot Generator) — ใช้ AI สร้างเหตุการณ์ต่างๆ ในเกมแบบไม่ซ้ำกัน
- ต้นไม้บทสนทนา (Dialogue Tree) — ระบบเส้นทางบทสนทนาที่แตกออกตามทางเลือกของผู้เล่น
- ระบบจำความ (Memory System) — ทำให้ AI จำได้ว่าเกิดอะไรมาก่อน เพื่อต่อเนื่องกัน
ลองนึกภาพว่าระบบทำงานแบบนี้: ผู้เล่นเดินเข้าป่า → AI สร้างเหตุการณ์ "พบชาวป่าหลงทาง" → มีทางเลือก 3 ทาง (ช่วย / เดินผ่าน / ขโมยของ) → แต่ละทางแตกออกเป็นเนื้อเรื่องใหม่
ขั้นตอนที่ 1 — เตรียมเครื่องมือและสร้างโปรเจกต์
ก่อนอื่นให้คุณสร้างโฟลเดอร์สำหรับโปรเจกต์ และสร้างไฟล์ Python ไว้ในนั้น ผมจะใช้ชื่อว่า
game_story_system.py
สำหรับคนที่ยังไม่รู้ว่า Python คืออะไร ให้เข้าไปดาวน์โหลดได้ที่ python.org เลือกเวอร์ชัน 3.10 ขึ้นไป ติดตั้งแบบเดิมๆ ไม่ต้องเปลี่ยนอะไร
หลังติดตั้งเสร็จ เปิด Command Prompt (กด Windows+R พิมพ์ cmd) แล้วพิมพ์คำสั่งติดตั้งไลบรารี:
pip install requests
ไลบรารี requests จะช่วยให้โค้ดของเราสามารถคุยกับ API ได้
ขั้นตอนที่ 2 — เขียนโค้ดเชื่อมต่อ HolySheep AI
มาถึงส่วนสำคัญแล้ว นี่คือโค้ดพื้นฐานที่สุดในการเชื่อมต่อกับ AI
import requests
import json
ตั้งค่าการเชื่อมต่อกับ HolySheep AI
API_KEY = "YOUR_HOLYSHEEP_API_KEY" # ใส่ API Key ที่ได้จากการสมัคร
BASE_URL = "https://api.holysheep.ai/v1"
def call_ai(prompt, system_instruction=""):
"""ส่งข้อความไปถาม AI และรับคำตอบกลับมา"""
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
messages = []
# ถ้ามีคำสั่งระบบ (เช่น บอกว่า AI คือใคร) ก็ใส่ก่อน
if system_instruction:
messages.append({"role": "system", "content": system_instruction})
# ใส่คำถามของผู้ใช้
messages.append({"role": "user", "content": prompt})
data = {
"model": "gpt-4.1", # ใช้โมเดล GPT-4.1 ซึ่งราคาถูกมาก
"messages": messages,
"temperature": 0.8 # ยิ่งสูงยิ่งสร้างสรรค์ แต่อาจเพี้ยน
}
response = requests.post(
f"{BASE_URL}/chat/completions",
headers=headers,
json=data
)
if response.status_code == 200:
result = response.json()
return result["choices"][0]["message"]["content"]
else:
return f"เกิดข้อผิดพลาด: {response.status_code}"
ทดสอบการเชื่อมต่อ
print("กำลังทดสอบการเชื่อมต่อ...")
result = call_ai("ทักทายสั้นๆ ว่า AI พร้อมทำงานหรือยัง")
print(result)
หลังจากใส่ API Key ที่ได้จากการสมัคร
สมัครที่นี่ แล้ว รันโค้ดนี้ ถ้าขึ้นข้อความตอบกลับจาก AI แสดงว่าเชื่อมต่อสำเร็จ
ขั้นตอนที่ 3 — สร้างระบบสร้างเนื้อเรื่อง (Plot Generator)
ต่อไปเราจะสร้างฟังก์ชันที่ให้ AI สร้างเนื้อเรื่องใหม่ให้เกมของเรา
def generate_plot(scene_context, player_choice=""):
"""สร้างเนื้อเรื่องใหม่ตามสถานการณ์ปัจจุบัน"""
prompt = f"""คุณคือนักเขียนบทเกมมืออาชีพ สร้างเนื้อเรื่องใหม่สำหรับเกมแฟนตาซี
สถานการณ์ปัจจุบัน: {scene_context}
ทางเลือกของผู้เล่น: {player_choice if player_choice else "ยังไม่มีทางเลือก"}
สร้างเนื้อเรื่องใหม่ในรูปแบบ JSON ดังนี้:
{{
"event_name": "ชื่อเหตุการณ์",
"description": "คำอธิบายฉาก (2-3 ประโยค)",
"choices": [
{{"id": 1, "text": "ทางเลือกที่ 1"}},
{{"id": 2, "text": "ทางเลือกที่ 2"}},
{{"id": 3, "text": "ทางเลือกที่ 3"}}
],
"mood": "บรรยากาศ เช่น ตึงเครียด/สนุก/ลึกลับ"
}}
ให้แต่ละทางเลือกมีผลลัพธ์ที่แตกต่างกันอย่างชัดเจน"""
system = "คุณเป็น AI ที่ช่วยสร้างเนื้อเรื่องเกม ตอบกลับเฉพาะ JSON เท่านั้น ห้ามอธิบายเพิ่ม"
response = call_ai(prompt, system)
try:
# แปลงข้อความที่ AI ตอบกลับมาเป็นข้อมูลที่ใช้งานได้
plot_data = json.loads(response)
return plot_data
except:
# ถ้า AI ตอบมาไม่เป็น JSON ตรงๆ ลองหาในข้อความ
import re
match = re.search(r'\{.*\}', response, re.DOTALL)
if match:
return json.loads(match.group())
return {"error": "ไม่สามารถอ่านข้อมูลได้"}
ทดสอบ
scene = "ผู้เล่นเดินเข้าป่ามืดมนพบกระท่อมประหลาด"
result = generate_plot(scene, "เข้าไปในกระท่อม")
print(f"เนื้อเรื่องใหม่: {result['event_name']}")
print(f"บรรยากาศ: {result['mood']}")
ผลลัพธ์ที่ได้จะเป็นข้อมูลเนื้อเรื่องในรูปแบบ JSON ที่มีชื่อเหตุการณ์ คำอธิบายฉาก และทางเลือก 3 ทางพร้อมใช้งาน
ขั้นตอนที่ 4 — สร้างระบบบทสนทนาแยกทาง (Branching Dialogue)
ต่อไปคือหัวใจของระบบ — ทำให้บทสนทนาแตกออกเป็นเส้นทางต่างๆ ตามทางเลือกของผู้เล่น
class DialogueNode:
"""โหนดบทสนทนาหนึ่งจุด"""
def __init__(self, character, text, choices=None):
self.character = character
self.text = text
self.choices = choices or [] # รายการทางเลือก
self.next_nodes = {} # ทางเลือก -> โหนดถัดไป
class DialogueTree:
"""ระบบต้นไม้บทสนทนาทั้งหมด"""
def __init__(self):
self.nodes = {} # id -> DialogueNode
self.current_node_id = None
self.history = [] # เก็บประวัติบทสนทนา
def generate_dialogue(self, character, context, player_input=""):
"""ใช้ AI สร้างบทสนทนาใหม่"""
prompt = f"""ตัวละคร: {character}
บริบทปัจจุบัน: {context}
ข้อความผู้เล่น: {player_input if player_input else "เริ่มสนทนา"}
สร้างบทสนทนาที่ตัวละครจะพูด พร้อมทางเลือก 2-3 ทางให้ผู้เล่น รูปแบบ JSON:
{{
"character": "ชื่อตัวละคร",
"dialogue": "บทสนทนาที่ตัวละครพูด (2-3 ประโยค)",
"choices": [
{{"id": 1, "text": "ทางเลือก 1"}},
{{"id": 2, "text": "ทางเลือก 2"}},
{{"id": 3, "text": "ทางเลือก 3"}}
],
"emotion": "อารมณ์ตัวละคร เช่น ยิ้ม/เศร้า/โกรธ"
}}"""
system = "คุณคือตัวละครในเกม ตอบเฉพาะ JSON เท่านั้น"
response = call_ai(prompt, system)
try:
dialogue_data = json.loads(response)
node = DialogueNode(
dialogue_data["character"],
dialogue_data["dialogue"],
dialogue_data["choices"]
)
# สร้าง id สำหรับโหนดนี้
node_id = f"node_{len(self.nodes)}"
self.nodes[node_id] = node
if self.current_node_id is None:
self.current_node_id = node_id
self.history.append({
"node_id": node_id,
"character": dialogue_data["character"],
"dialogue": dialogue_data["dialogue"],
"emotion": dialogue_data.get("emotion", "ปกติ")
})
return dialogue_data
except:
return {"error": "สร้างบทสนทนาล้มเหลว"}
def get_player_choices(self):
"""ดึงทางเลือกปัจจุบัน"""
if self.current_node_id:
current = self.nodes[self.current_node_id]
return current.choices
return []
ทดสอบระบบบทสนทนา
dialogue_system = DialogueTree()
บทสนทนาแรก
result1 = dialogue_system.generate_dialogue(
"พ่อมดชรา",
"ผู้เล่นเดินเข้ามาในร้านเด็ดดอกไม้และเห็นพ่อมดชรานั่งอยู่",
""
)
print(f"{result1['character']}: {result1['dialogue']}")
print(f"อารมณ์: {result1['emotion']}")
print("ทางเลือก:", result1['choices'])
จากโค้ดนี้ ทุกครั้งที่ผู้เล่นเลือกทาง ระบบจะสร้างบทสนทนาใหม่โดยให้ AI ต่อเนื่องจากสิ่งที่เกิดขึ้นก่อนหน้า
ขั้นตอนที่ 5 — ระบบจำความ (Memory System)
สิ่งสำคัญที่ทำให้เนื้อเรื่องต่อเนื่องกันคือการให้ AI จำได้ว่าเกิดอะไรมาแล้ว ไม่งั้น AI จะลืมและสร้างเนื้อเ
แหล่งข้อมูลที่เกี่ยวข้อง
บทความที่เกี่ยวข้อง