ข้ามไปยังเนื้อหา
NUGANUGA
เข้าสู่ระบบ

NUGANUGA Web SDK

เกมของคุณทำงานในไอเฟรมแบบแซนด์บ็อกซ์ที่ https://play.nuganuga.com SDK คือช่องทางเดียวที่เชื่อมกับแพลตฟอร์ม คุณไม่ต้องเขียนระบบยืนยันตัวตน อันดับ การแชร์ โฆษณา หรือการวิเคราะห์เอง

1. โหลด SDK

ใช้พาธสัมบูรณ์นี้เสมอ แพลตฟอร์มเป็นผู้ให้บริการและจัดการเวอร์ชัน

<script src="/sdk/nuga-sdk.js"></script>
<script src="./game.js"></script>

2. สี่คำสั่ง

const ctx = await Nuga.ready();       // รอแพลตฟอร์ม
await Nuga.game.start();              // เมื่อผู้เล่นเริ่มเล่นจริง
await Nuga.score.submit({ score });    // หนึ่งรอบต่อหนึ่งคะแนนที่เป็นตัวเลข
await Nuga.game.finish();             // แพลตฟอร์มวาดหน้าผลลัพธ์

อย่าวาดหน้าผล ปุ่มเล่นซ้ำ ปุ่มแชร์ หรือกระดานอันดับเอง แพลตฟอร์มจะวาดให้หลัง finish() เหมือนกันทุกเกม

3. ส่วนที่เหลือ

Nuga.game.getContext();
Nuga.player.get();
Nuga.challenge.get();
Nuga.storage.get(key);
Nuga.storage.set(key, value);
Nuga.audio.setMuted(true);
Nuga.locale.get();               // 'en' | 'ko' | ...
Nuga.event.track('level_up', { level: 3 });
Nuga.on('pause', () => pauseLoop());

4. ไฟล์ประกาศ

nuga.json ที่รากของแพ็กเกจ:

{
  "schemaVersion": 1,
  "name": "Reaction Hunter",
  "slug": "reaction-hunter",
  "description": "Click 10 targets as fast as possible.",
  "rule": "Tap every target as fast as you can.",
  "category": "REACTION",
  "orientation": "PORTRAIT",
  "duration": { "min": 5, "max": 30 },
  "input": ["POINTER", "TOUCH"],
  "ranking": { "type": "LOW_TIME", "unit": "ms" },
  "entry": "index.html",
  "locales": {
    "ko": { "name": "리액션 헌터", "description": "10개의 타겟을 빠르게 클릭하세요." }
  }
}

ประเภทอันดับ: HIGH_SCORE, LOW_SCORE, LOW_TIME, HIGH_TIME, CUSTOM หมวดหมู่: REACTION, TIMING, ACCURACY, MEMORY, PUZZLE, LUCK, ARCADE

5. กฎของแซนด์บ็อกซ์

การตรวจสอบแบบสถิตจะปฏิเสธแพ็กเกจที่ละเมิดข้อใดข้อหนึ่ง ก่อนถึงมือผู้เล่น:

ดาวน์โหลดชุดเริ่มต้น

6. คะแนนถูกตรวจสอบ

ทุกรอบการเล่นจะได้เซสชันฝั่งเซิร์ฟเวอร์ เกมของคุณไม่เคยเห็นโทเค็นเซสชัน เปลือกของแพลตฟอร์มเก็บไว้และส่งแทนคุณ เซิร์ฟเวอร์จะเทียบคะแนนกับเวลาจริงและขอบเขตที่ประกาศไว้ก่อนขึ้นกระดานอันดับ

คุณทำได้ดีกว่านั้น ใช้ค่าสุ่มจากซีดที่เซิร์ฟเวอร์ให้ และบันทึกสิ่งที่เกิดขึ้นจริง เซิร์ฟเวอร์จะคำนวณคะแนนใหม่จากเหตุการณ์ของคุณแทนที่จะเชื่อตัวเลข คะแนนที่บันทึกไม่รองรับจะถูกปฏิเสธทันที

const rng = Nuga.random();          // ซีดจากเซิร์ฟเวอร์ ทำซ้ำได้ ต่างจาก Math.random()
const target = rng.int(0, 8);

Nuga.replay.record('hit', 172);     // หนึ่งเหตุการณ์ที่เกี่ยวกับคะแนน สูงสุด 400 ต่อรอบ

ประกาศกลไกใน nuga.json เพื่อเปิดใช้งาน ถ้าไม่ประกาศ เกมก็ยังขึ้นอันดับได้ แต่ตรวจแค่ระยะเวลาและขอบเขตเท่านั้น

"verification": { "kind": "REPLAY_V1", "mechanic": "REACTION",
                   "params": { "rounds": 5 } }

7. ปล่อยเกม

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