<p align="center">
  <img src="./docs/images/dsh-game-studio-logo.png" alt="DSH Game Studio" width="120" />
</p>

<h1 align="center">DSH Game Studio</h1>

<p align="center">
  <strong>อธิบายเกมขนาดเล็กในประโยคเดียว — เล่นได้ทันทีในแถบด้านข้างของบทสนทนา <a href="https://github.com/deepseek-ai/deepseek-harness">DeepSeek Harness</a> สลับใส่ภาพอาร์ตจาก AI และส่งออกเป็นไฟล์ HTML ไฟล์เดียว</strong><br />
  <sub>เครื่องมือเอเจนต์ 10 รายการ &bull; พรีวิวสดในแถบด้านข้าง &bull; เทมเพลต 2D และ 3D voxel &bull; ภาพอาร์ตจาก OpenAI หรือ Codex พร้อมตรวจสอบค่าใช้จ่ายก่อนเสมอ &bull; การทดสอบเล่นอัตโนมัติ &bull; ประวัติเวอร์ชัน &bull; ส่งออกเป็นไฟล์เดียว</sub>
</p>

<p align="center">
  <a href="./README.md">English</a> &middot; <a href="./README.zh.md">简体中文</a> &middot; <a href="./README.zh-TW.md">繁體中文</a> &middot; <a href="./README.ja.md">日本語</a> &middot; <a href="./README.ko.md">한국어</a> &middot; <a href="./README.fr.md">Français</a> &middot; <a href="./README.es.md">Español</a> &middot; <a href="./README.de.md">Deutsch</a> &middot; <a href="./README.pt.md">Português</a> &middot; <a href="./README.ru.md">Русский</a> &middot; <a href="./README.hi.md">हिन्दी</a> &middot; <a href="./README.tr.md">Türkçe</a> &middot; <b>ไทย</b> &middot; <a href="./README.vi.md">Tiếng Việt</a> &middot; <a href="./README.id.md">Bahasa Indonesia</a>
</p>

<p align="center">
  <sub>แพ็กเกจ: <code>@zseven-w/dsh-game-studio</code> &middot; เวอร์ชันปลั๊กอินปัจจุบัน: <code>0.1.0-rc.5</code> &middot; ทดสอบกับ DSH <code>0.2.1-rc.5</code></sub>
</p>

<br />

<p align="center">
  <img src="./docs/images/dsh-game-studio-banner.png" alt="DSH Game Studio — ประโยคเดียว ได้เกมที่เล่นได้จริง" width="100%" />
</p>

<p align="center">
  <img src="./docs/images/dsh-game-studio-overview.png" alt="เกม 3D ที่กำลังรันอยู่ในแถบด้านข้างของ Game Studio พร้อมตัวเลือกภาพอาร์ตจาก AI ที่พร้อมนำไปใช้" width="100%" />
</p>
<p align="center"><sub>ตัวเกมเล่นได้ในแถบด้านข้างฝั่งขวาขณะที่เอเจนต์ทำงาน โดยมีตัวเลือกภาพอาร์ตจาก AI ที่มีหมายเลขกำกับรออยู่ด้านล่างให้คุณเลือก</sub></p>

## ทำไมต้อง DSH Game Studio

เพียงสั่งให้เอเจนต์สร้างเกมด้วยคำพูดธรรมดา — "เกม 3D: แพนด้าแดงเก็บหน่อไม้ในป่าและคอยหลบหมูป่า" — เอเจนต์ก็จะสร้างเกมขึ้นจากเทมเพลต ทดลองเล่นเพื่อตรวจสอบว่าใช้งานได้จริง และแสดงผลในแถบด้านข้างให้คุณเข้าเล่นได้ทันที ตัวละครจะเริ่มต้นจากโมเดลที่วาดด้วยโค้ด และเมื่อคุณต้องการภาพอาร์ตจริง เอเจนต์จะสร้างภาพตัวเลือกด้วย OpenAI หรือบัญชี Codex ที่คุณลงชื่อเข้าใช้ไว้ ให้คุณเลือกจากหมายเลข แล้วตัวเกมจะสลับภาพเข้าไปแทนที่ทันที ทุกการเปลี่ยนแปลงจะถูกบันทึกเป็นเวอร์ชันที่คุณย้อนกลับไปได้ และเมื่อเสร็จสมบูรณ์ก็สามารถส่งออกตัวเกมเป็นไฟล์ HTML แบบออฟไลน์เพียงไฟล์เดียวได้

| | |
| --- | --- |
| 🎮 **เล่นได้ตั้งแต่คำตอบแรก** | มีสองเทมเพลต — เกม 2D มุมมองจากด้านบน และเกมรูปแบบเดียวกันในโลก 3D voxel (three.js) — ซึ่งเอเจนต์จะปรับแต่งให้กลายเป็นเกมตามที่คุณอธิบาย ทั้งตัวละคร กฎกติกา ด่าน และหน้าจอต่าง ๆ |
| 🖥️ **พรีวิวสดในแถบด้านข้าง** | เกมจะรันอยู่ในพาเนลแบบแซนด์บ็อกซ์ถัดจากบทสนทนา บิลด์ใหม่ทุกครั้งที่มีการแก้ไข และแสดงรายการช่องใส่ภาพอาร์ต (slot) ภาพตัวเลือก และเวอร์ชันต่าง ๆ ไว้ด้านล่าง ส่วนเกมแนวนอนจะได้พื้นที่แสดงผลแบบกว้าง |
| 🎨 **ภาพอาร์ตของคุณเอง พร้อมตรวจสอบค่าใช้จ่ายก่อนเสมอ** | `game_studio_generate_asset` จะสร้างภาพตัวเลือกที่มีหมายเลขกำกับสำหรับแต่ละช่องด้วย OpenAI image API หรือ Codex CLI ในเครื่อง ก่อนที่จะมีค่าใช้จ่ายใด ๆ คุณจะได้รับการ์ดขออนุมัติที่ระบุบริการ จำนวนภาพ และค่าใช้จ่ายที่คาดการณ์ไว้ และคุณยังสามารถแนบรูปภาพในแชทเพื่อใช้เป็นภาพอ้างอิงได้ด้วย |
| 🤖 **การทดสอบเล่นอัตโนมัติ** | `game_studio_playtest` จะเล่นโค้ดล่าสุดใน Chrome หรือ Edge แบบ headless และรายงานเฟสของเกม คะแนน เฟรมเรต ข้อผิดพลาดของสคริปต์ และภาพหน้าจอ ส่วนเกมที่ไม่ได้บังคับด้วยปุ่มลูกศร (เช่น เกมตาราง การ์ด เล็งเป้า จังหวะดนตรี…) จะกำหนด `window.__autoplay` ไว้ เพื่อให้การทดสอบเล่นสามารถเล่นตามลูปจริงของเกมได้ |
| 🕰️ **ประวัติเวอร์ชัน** | ทุกบิลด์ที่มีการเปลี่ยนแปลงตัวเกมจะถูกบันทึกไว้ โดย `game_studio_restore_version` จะกู้คืนทั้งโค้ด กฎกติกา และภาพอาร์ตกลับมาพร้อมกัน |
| 📦 **ส่งออกเป็นไฟล์เดียว** | `game_studio_export` จะเขียนไฟล์ HTML ที่ครบจบในตัวเองโดยไม่ต้องเชื่อมต่อเครือข่าย — เปิดเล่นในเบราว์เซอร์ใดก็ได้ หรือนำไปวางบนโฮสต์สำหรับไฟล์สแตติกได้ทุกที่ |
| 📱 **ลองเล่นบนโทรศัพท์ของคุณ** | `game_studio_share` จะเปิดลิงก์แบบอ่านอย่างเดียวชั่วคราวบนเครือข่ายในบ้านหรือวงแลนของคุณ — หรือลิงก์สาธารณะชั่วคราวผ่าน Cloudflare Quick Tunnel (`cloudflared`) เพื่อให้เพื่อนจากเครือข่ายใดก็เข้าเล่นได้ — พร้อมแสดงคิวอาร์โค้ดในแถบด้านข้าง |
| 🌐 **เผยแพร่ไปยัง GitHub Pages** | `game_studio_publish` จะส่งไฟล์ HTML ที่บิลด์แล้ว (หรือกำแพงเกมทั้งหมด) ไปยังรีพอซิทอรีสาธารณะภายใต้บัญชี `gh` ที่คุณลงชื่อเข้าใช้ไว้ และเปิดใช้งาน GitHub Pages เพื่อสร้างลิงก์ถาวรที่ยังคงเข้าเล่นได้แม้คุณจะปิดคอมพิวเตอร์ไปแล้ว |
| 🗂️ **เกมของฉัน** | กด **+** ที่แถบด้านขวาแล้วเลือก **Game Studio · My games** ทุกเกมในเวิร์กสเปซจะแสดงเป็นไทล์พร้อมภาพจากการทดสอบเล่นครั้งล่าสุด กรองตาม 2D/3D และเรียงตามเวลา จำนวนเวอร์ชัน หรือชื่อได้ คลิกเดียวก็เล่นได้ ไม่ต้องผ่าน agent และไม่ใช้โทเคน นอกจากนี้คุณยังสามารถติดตามแหล่งเกมออนไลน์ (`owner/repo`, URL รีพอซิทอรี GitHub หรือ URL ของ GitHub Pages) เพื่อเลือกดูและเล่นเกมที่เผยแพร่แล้วควบคู่ไปกับเกมของคุณเองได้ด้วย **Export wall** รวมเกมในเครื่องของคุณเป็นหน้าเว็บออฟไลน์หน้าเดียวส่งให้เพื่อนได้ |

## เกมที่สร้างด้วยปลั๊กอินนี้

เกมสี่เกมจากการทดสอบของเรา แต่ละเกมเริ่มจากประโยคเดียวใต้ภาพในเซสชันใหม่ (พรอมต์แปลจากภาษาจีน) บางเกมมีการขอแก้ไขเพิ่มเติมในเซสชันเดียวกันภายหลัง ตามที่ระบุไว้ ภาพการเล่นบันทึกด้วยระบบเล่นอัตโนมัติของแต่ละเกม

<p align="center">
  <img src="./docs/images/dsh-game-studio-play-fox-3d.gif" alt="จิ้งจอกแสงจันทร์: เกาะโคมไฟ — เทมเพลตวอกเซล 3D ภาพการเล่นจริง" width="640" />
</p>
<p align="center"><sub>จิ้งจอกแสงจันทร์: เกาะโคมไฟ — เทมเพลตวอกเซล 3D ภาพการเล่นจริง</sub></p>

<table>
<tr>
<td width="50%"><img src="./docs/images/dsh-game-studio-play-moonlit-2d.jpg" alt="สร้างเกมเล็ก ๆ: ลูกจิ้งจอกเก็บโคมไฟในป่าใต้แสงจันทร์และหลบสัตว์ประหลาดหนาม" width="100%" /><br /><sub>“สร้างเกมเล็ก ๆ: ลูกจิ้งจอกเก็บโคมไฟในป่าใต้แสงจันทร์และหลบสัตว์ประหลาดหนาม”<br />เทมเพลต 2D ตัวละครเปลี่ยนเป็นภาพ AI ที่เลือกในภายหลัง</sub></td>
<td width="50%"><img src="./docs/images/dsh-game-studio-play-fox-3d.jpg" alt="สร้างเกม 3D: ลูกจิ้งจอกเก็บโคมไฟบนเกาะวอกเซลและหลบสัตว์ประหลาดหนาม" width="100%" /><br /><sub>“สร้างเกม 3D: ลูกจิ้งจอกเก็บโคมไฟบนเกาะวอกเซลและหลบสัตว์ประหลาดหนาม”<br />เทมเพลตวอกเซล 3D โมเดลโคมไฟทำใหม่ตามคำขอภายหลัง</sub></td>
</tr>
<tr>
<td width="50%"><img src="./docs/images/dsh-game-studio-play-penguin-3d.jpg" alt="สร้างเกม 3D: ลูกเพนกวินเก็บปลาบนภูเขาน้ำแข็งและหลบแมวน้ำ" width="100%" /><br /><sub>“สร้างเกม 3D: ลูกเพนกวินเก็บปลาบนภูเขาน้ำแข็งและหลบแมวน้ำ”<br />3D หมวกแดงเพิ่มตามคำขอภายหลัง</sub></td>
<td width="50%"><img src="./docs/images/dsh-game-studio-play-panda-3d.jpg" alt="สร้างเกม 3D: แพนด้าแดงเก็บหน่อไม้ในป่าไผ่และหลบหมูป่า" width="100%" /><br /><sub>“สร้างเกม 3D: แพนด้าแดงเก็บหน่อไม้ในป่าไผ่และหลบหมูป่า”<br />3D ตัวละครเปลี่ยนเป็นภาพ AI ภายหลัง ป่ายังเป็น 3D</sub></td>
</tr>
</table>

## ประสิทธิภาพการใช้งานจริง

วัดผลใน DSH จริงร่วมกับ DeepSeek-V4.1-Flash โดยสร้างแต่ละเกมจากประโยคเดียวในเซสชันใหม่ และประเมินผลด้วยการทดสอบเล่นที่เป็นอิสระ (2026-11-04/05):

- **เกมแนวเก็บของและหลบหลีก** (แนวถนัดของเทมเพลต): คำขอที่แตกต่างกัน 10 จาก 10 รายการสามารถเล่นได้ตั้งแต่ครั้งแรก โดยมีค่ามัธยฐานอยู่ที่ประมาณ 14 นาทีต่อเกม
- **เกมแนวอื่น ๆ** — เรียงเพชร (match-3), ดันกล่อง, ป้องกันฐาน (tower defense), บาสเกตบอล, แพลตฟอร์มเมอร์, จังหวะดนตรี, แข่งรถ, การ์ดแบตเทิล, ทำฟาร์ม, บริหารคาเฟ่: ทั้ง 10 เกมออกมาเล่นได้จริง แต่ใช้เวลาโดยมีค่ามัธยฐานอยู่ที่ประมาณ 26 นาที หลังจากเพิ่ม `__autoplay`, ช่องใส่ภาพอาร์ตแบบกำหนดเอง และการรองรับหน้าจอแนวนอน ได้นำเกม 4 รายการมารันใหม่และใช้เวลา 8–18 นาที ทั้งนี้กลุ่มตัวอย่างยังมีขนาดเล็ก

## เครื่องมือ

| เครื่องมือ | หน้าที่การทำงาน |
| --- | --- |
| `game_studio_create` | สร้างเกมที่เล่นได้จากเทมเพลต `collector` (2D) หรือ `voxel` (3D) พร้อมบิลด์และแสดงผลในแถบด้านข้าง รับค่าชื่อเกม สไตล์ภาพอาร์ต `orientation` (แนวตั้งหรือแนวนอน) และ `slots` — ช่องใส่ภาพอาร์ตเฉพาะของเกมนั้น ๆ ซึ่งตั้งชื่อตามภาษาของผู้ใช้ |
| `game_studio_build` | บิลด์ใหม่หลังจากแก้ไข `game.json` หรือ `game.js` รีเฟรชหน้าพรีวิว และบันทึกเป็นเวอร์ชันพร้อมข้อความบันทึกสั้น ๆ |
| `game_studio_playtest` | เล่นโค้ดล่าสุดแบบ headless (แนวตั้งทรงหน้าจอโทรศัพท์ หรือแนวนอนขนาด 960×540) และรายงานเฟส คะแนนสูงสุด หัวใจ fps ข้อผิดพลาด และภาพหน้าจอ หากกำหนด `characters: true` จะส่งกลับเฉพาะภาพระยะใกล้ของตัวละครเท่านั้น |
| `game_studio_generate_asset` | สร้างภาพตัวเลือก 1–4 ภาพสำหรับหนึ่งช่องด้วย `openai` หรือ `codex` โดยเลือกอ้างอิงตามภาพต้นแบบได้ จะขออนุมัติก่อนมีค่าใช้จ่ายเสมอ ทั้งนี้ Codex จะทำงานในพื้นหลัง |
| `game_studio_apply_asset` | นำภาพตัวเลือกใส่เข้าไปในเกมตามหมายเลข บิลด์ใหม่ และรีเฟรช |
| `game_studio_revert_asset` | ย้อนกลับไปใช้ภาพอาร์ตก่อนหน้าของช่องนั้น |
| `game_studio_versions` | แสดงรายการเวอร์ชันที่บันทึกไว้ โดยเรียงจากใหม่ล่าสุดก่อน |
| `game_studio_restore_version` | กู้คืนตัวเกมทั้งหมดกลับไปยังเวอร์ชันก่อนหน้า |
| `game_studio_export` | ส่งออกเป็นไฟล์ HTML แบบออฟไลน์ที่ครบจบในตัวเองเพียงไฟล์เดียว |
| `game_studio_share` | เปิด (หรือปิด) ลิงก์แบบอ่านอย่างเดียวชั่วคราวบนเครือข่ายในพื้นที่ หรือส่งค่า `public: true` เพื่อสร้างลิงก์สาธารณะชั่วคราวผ่าน `cloudflared` ให้ทุกคนที่มีลิงก์สามารถเข้าเล่นได้ |
| `game_studio_list` | แสดงรายการเกมในเวิร์กสเปซพร้อมชื่อ 2D/3D สถานะบิลด์ และจำนวนเวอร์ชัน ให้ agent หา "เกมเพนกวินนั้น" จากชื่อได้ |
| `game_studio_export_wall` | ส่งออกกำแพงเกม: หน้า HTML ออฟไลน์ที่มีไทล์ละเกมสำหรับทุกเกมที่บิลด์แล้ว คลิกไทล์เพื่อเล่น |
| `game_studio_publish` | เผยแพร่เกมที่บิลด์แล้ว (หรือส่งค่า `wall: true` สำหรับกำแพงเกม) ไปยัง GitHub Pages ผ่าน `gh` CLI ในเครื่องที่ลงชื่อเข้าใช้ไว้ หรือส่งค่า `remove: true` เพื่อลบออก โดยจะขออนุมัติก่อนเสมอ และจะเขียนข้อมูลลงในรีพอซิทอรีที่มีเครื่องหมาย `.dsh-game-studio.json` ของปลั๊กอินเท่านั้น |

ปุ่มต่าง ๆ ในแถบด้านข้าง (นำไปใช้, ย้อนกลับ, บิลด์, ส่งออก, กู้คืน, แชร์, เผยแพร่) จะเรียกใช้งานการทำงานเดียวกันนี้ผ่านคำสั่ง `/game-studio`

## บริการสร้างภาพและค่าใช้จ่าย

| บริการ | สิ่งที่ต้องใช้ | ค่าใช้จ่าย | หมายเหตุ |
| --- | --- | --- | --- |
| **OpenAI** (GPT Image) | คีย์ API ในข้อมูลรับรองของ DSH หรือตัวแปรสภาพแวดล้อม (ค่าเริ่มต้นคือ `OPENAI_API_KEY`) | เรียกเก็บเงินตามจำนวนภาพผ่านคีย์ของคุณ โดยการ์ดขออนุมัติจะแสดงราคาประเมินให้เห็น | ใช้เวลาประมาณหนึ่งนาทีต่อชุด โดย `openaiBaseUrl` รองรับเกตเวย์ที่เข้ากันได้กับ OpenAI |
| **Codex CLI** | ติดตั้ง Codex และลงชื่อเข้าใช้แล้ว (`codex login`) | หักตามโควตาแพ็กเกจ Codex ของคุณ ไม่ต้องใช้คีย์ API | ใช้เวลาหลายนาทีต่อภาพ ทำงานในพื้นหลังและจะรายงานผลเมื่อเสร็จสิ้น |

`imageProvider: auto` (ค่าเริ่มต้น) จะใช้ OpenAI เมื่อมีการตั้งค่าคีย์ไว้ และจะใช้ Codex ในกรณีอื่น ๆ เมื่อเปิดใช้งาน `confirmSpending` (ค่าเริ่มต้น) ระบบจะไม่สร้างภาพใด ๆ จนกว่าคุณจะกดอนุมัติในการ์ด ภาพสไปรต์จะถูกตรวจสอบความโปร่งใสของพื้นหลังและระยะขอบภาพ รวมถึงปรับขนาดให้พอดีกับช่องก่อนนำมาเสนอให้คุณเลือก

## ความปลอดภัยและความเป็นส่วนตัว

- เกมจะรันอยู่ใน iframe แบบแซนด์บ็อกซ์พร้อมนโยบายความปลอดภัยของเนื้อหา (CSP) ที่บล็อกการเข้าถึงเครือข่าย และไฟล์ที่ส่งออกจะไม่มีการส่งคำขอเครือข่ายใด ๆ
- สิ่งเดียวที่จะถูกส่งออกจากเครื่องของคุณคือคำสั่งพรอมต์ — และภาพอ้างอิง หากคุณแนบมา — เพื่อส่งไปยังบริการสร้างภาพที่คุณเลือกเท่านั้น
- ลิงก์สำหรับแชร์เป็นแบบอ่านอย่างเดียว ให้บริการเฉพาะบิลด์ของเกมนั้น และจะปิดลงหลังจากครบเวลาที่คุณตั้งไว้ (ค่าเริ่มต้นคือ 30 นาที) โดยลิงก์ในพื้นที่จะเปิดรับการเชื่อมต่อภายในเครือข่ายในพื้นที่ของคุณเท่านั้น ส่วนลิงก์สาธารณะจะเปิดรับการเชื่อมต่อบน `127.0.0.1` เท่านั้น และส่งผ่านอุโมงค์ของ Cloudflare (`trycloudflare.com`) หลังจากที่คุณอนุมัติ
- การเผยแพร่ไปยัง GitHub Pages (`game_studio_publish`) จะใช้ `gh` CLI ในเครื่องที่คุณลงชื่อเข้าใช้ไว้ (ตัวปลั๊กอินจะไม่แตะต้องโทเคน GitHub ของคุณเลย) อัปโหลดเฉพาะไฟล์ HTML ที่บิลด์แล้วไปยังรีพอซิทอรี**สาธารณะ**หลังจากที่คุณอนุมัติ และจะปฏิเสธการเขียนข้อมูลลงในรีพอซิทอรีที่มีอยู่เดิมหากไม่มีเครื่องหมาย `.dsh-game-studio.json` ของปลั๊กอิน
- แหล่งเกมออนไลน์จะทำงานบนเว็บไซต์ของผู้ให้บริการเองภายใน iframe แบบแซนด์บ็อกซ์ (`sandbox="allow-scripts"`) โดยไม่สามารถเข้าถึง DSH หรือเวิร์กสเปซของคุณได้ และจะไม่ถูกคัดลอกหรือส่งต่อเมื่อส่งออกหรือเผยแพร่กำแพงเกมในเครื่องของคุณ
- คีย์ API จะถูกอ่านจากข้อมูลรับรองของ DSH หรือตัวแปรสภาพแวดล้อม และจะไม่ถูกเขียนลงในโปรเจกต์ ล็อก หรือผลลัพธ์ของเครื่องมือเด็ดขาด

## ความต้องการของระบบ

- DeepSeek Harness `0.2.1` ขึ้นไป (เว็บหรือเดสก์ท็อป), Node.js `24.11` ขึ้นไป
- Google Chrome หรือ Microsoft Edge บนคอมพิวเตอร์เครื่องเดียวกันสำหรับการทดสอบเล่น
- สำหรับภาพอาร์ตจาก AI ต้องมีคีย์ API ของ OpenAI หรือลงชื่อเข้าใช้ Codex CLI อย่างใดอย่างหนึ่ง หากไม่มีทั้งสองอย่าง เกมจะยังคงทำงานได้โดยใช้ตัวละครที่วาดขึ้นด้วยโค้ด
- ตัวเลือกเสริม: `cloudflared` (`brew install cloudflared` บน macOS) สำหรับลิงก์แชร์สาธารณะชั่วคราว และ `gh` (`brew install gh` และ `gh auth login`) สำหรับการเผยแพร่ไปยัง GitHub Pages

## การติดตั้งลงใน DSH

ติดตั้งจาก npm ลงในโปรไฟล์ DSH:

```sh
dsh plugin --profile web add @zseven-w/dsh-game-studio@latest
dsh web
```

## เริ่มต้นใช้งานอย่างรวดเร็ว

เปิดเซสชันในโฟลเดอร์เวิร์กสเปซ แล้วลองสั่งตัวอย่างเช่น:

- `สร้างเกมเล็ก ๆ: ลูกแมวขโมยปลาแห้งในห้องครัวโดยไม่ให้ชนเข้ากับหุ่นยนต์ดูดฝุ่น`
- `สร้างเกม 3D: อัศวินตัวน้อยเก็บเหรียญในปราสาทและคอยหลบโครงกระดูก เก็บครบ 20 เหรียญภายใน 60 วินาทีจะชนะ`
- `สร้างเกมเรียงเพชร (match-3) บนตารางขนาด 6×6 ทำคะแนนให้ถึง 1000 แต้มภายใน 60 วินาทีเพื่อชนะ`

จากนั้นลองสั่ง:

- `สร้างภาพอาร์ตใหม่ 2 ภาพสำหรับตัวละครเอกด้วย AI เดี๋ยวฉันจะเลือกในแถบด้านข้างเอง`
- `อ้างอิงตามรูปภาพที่ฉันแนบไปสำหรับรูปลักษณ์ของตัวละครเอก`
- `ส่งออกเป็นไฟล์ HTML ไฟล์เดียว`

## การตั้งค่า

กำหนดค่าเหล่านี้ภายใต้ `config` ในไฟล์ `cordis.patch.yml` ของโปรไฟล์คุณ:

| ตัวเลือก | ค่าเริ่มต้น | ความหมาย |
| --- | --- | --- |
| `imageProvider` | `auto` | `auto`, `openai` หรือ `codex` |
| `openaiModel` | `gpt-image-2.5-flare` | โมเดลสร้างภาพของ OpenAI กำหนดไว้เพื่อให้ผลลัพธ์ยังคงเปรียบเทียบกันได้ |
| `openaiBaseUrl` | OpenAI | Base URL ที่เข้ากันได้กับ OpenAI เช่น เกตเวย์ของบริษัท |
| `openaiCredential` | `OPENAI_API_KEY` | ชื่อของข้อมูลรับรองหรือตัวแปรสภาพแวดล้อมที่เก็บคีย์ไว้ |
| `codexPath` | ค้นหาจาก `PATH` หรือผ่านเชลล์ล็อกอิน | ไฟล์สั่งทำงานของ Codex CLI |
| `codexModel` | ค่าเริ่มต้นของ Codex | โมเดลสำหรับการรันสร้างภาพด้วย Codex |
| `codexReasoningEffort` | `low` | ระดับการใช้เหตุผล (reasoning effort) สำหรับการรันสร้างภาพด้วย Codex |
| `codexTimeoutMinutes` | `15` | ยกเลิกการสร้างภาพหนึ่งภาพด้วย Codex หากใช้เวลานานเกินค่านี้ (นาที) |
| `confirmSpending` | `true` | ขออนุมัติก่อนการสร้างภาพทุกครั้ง |
| `cloudflaredPath` | ค้นหาจาก `PATH` หรือ Homebrew | ไฟล์สั่งทำงานของ `cloudflared` สำหรับสร้างลิงก์แชร์สาธารณะชั่วคราว |
| `ghPath` | ค้นหาจาก `PATH` หรือ Homebrew | ไฟล์สั่งทำงานของ GitHub CLI (`gh`) สำหรับการเผยแพร่ไปยัง GitHub Pages |
| `githubRepo` | `dsh-games` | ชื่อรีพอซิทอรี GitHub สาธารณะ (ภายใต้บัญชีที่คุณลงชื่อเข้าใช้ไว้) สำหรับ GitHub Pages |

## รูปแบบโปรเจกต์เกม

แต่ละเกมจะเป็นโฟลเดอร์ธรรมดาในเวิร์กสเปซของคุณ:

- `game.json` — ชื่อเกม สไตล์ภาพอาร์ต แนวหน้าจอ ช่องใส่ภาพอาร์ต และกฎกติกา โดยกฎกติกามีรูปแบบอิสระ คีย์ใด ๆ จะถูกส่งต่อไปยังตัวเกมในรูปของ `window.GAME.rules`
- `game.js` — โค้ดของเกมที่เอเจนต์ใช้แก้ไข โดยจะเปิดฟังก์ชัน `window.__gameState()` สำหรับการทดสอบเล่น, `window.__autoplay(state)` (ตัวเลือกเสริม) สำหรับเกมที่ไม่ได้บังคับด้วยปุ่มลูกศร และ `window.__renderSlots(size)` เพื่อให้แถบด้านข้างแสดงตัวละครที่วาดด้วยโค้ดได้ (เทมเพลต 2D จะวาดไว้ใน `drawCharacter()`)
- `assets/` — รูปภาพสำหรับแต่ละช่องพร้อมทั้ง `ASSETS.json` ซึ่งใช้บันทึกที่มาของแต่ละภาพ คุณสามารถวาดทับไฟล์ของช่องนั้นได้โดยตรง และสตูดิโอจะบันทึกไว้ว่าเป็นการแก้ไขของคุณ
- `dist/index.html` — บิลด์ปัจจุบัน ส่วน `.studio/` จะเก็บเวอร์ชันต่าง ๆ ภาพตัวเลือก และประวัติการรันทดสอบเล่น

## การพัฒนา

```sh
npm ci
npm run build   # lib/index.js, lib/client.js and the bundled three.js runtime
npm test        # node --test; playtest tests are skipped when no Chrome or Edge is found
```

## ระบบนิเวศ

- [DSH Crew](https://github.com/ZSeven-W/dsh-crew) — กระจายงานไปยังเอเจนต์ DSH จาก Claude Code / Codex
- [DSH iOS](https://github.com/ZSeven-W/dsh-ios) — iOS Simulator หรือ iPhone ผ่านสาย USB แบบสด ๆ ภายในบทสนทนา
- [DSH Android](https://github.com/ZSeven-W/dsh-android) — โปรแกรมจำลอง Android หรืออุปกรณ์ผ่านสาย USB แบบสด ๆ ภายในบทสนทนา
- [DSH Noema](https://github.com/ZSeven-W/dsh-noema) — หน่วยความจำระยะยาวสำหรับ DSH
- [DSH OpenPencil](https://github.com/ZSeven-W/dsh-openpencil) — ตรวจสอบและแก้ไขเอกสารออกแบบ `.op` ภายในบทสนทนา

## เครดิตและสัญญาอนุญาต

- [three.js](https://github.com/mrdoob/three.js) — รันไทม์ 3D ที่บันเดิลรวมอยู่ในเกม voxel (MIT)
- [qrcode-generator](https://github.com/kazuhikoarase/qrcode-generator) — Kazuhiko Arase — คิวอาร์โค้ดในพาเนลแชร์ของแถบด้านข้าง (MIT)
- [Playwright](https://github.com/microsoft/playwright) (`playwright-core`) — ใช้ควบคุมเบราว์เซอร์สำหรับการทดสอบเล่น (Apache-2.0; เป็น runtime dependency)
- เทมเพลต สไปรต์ และโมเดล voxel เป็นผลงานต้นฉบับของโปรเจกต์นี้
- ดูประกาศฉบับเต็มได้ที่ [THIRD_PARTY_NOTICES.md](./THIRD_PARTY_NOTICES.md)

**สัญญาอนุญาต**: MIT
