🔬 โครงงาน / โครงการ / งานวิจัยระดับชาติ

Development of Swiss Pairing Module for BBBChess Application

ผลงานจากการฝึกงานที่ Bitsoft — โมดูลจับคู่ผู้เล่นหมากรุกระบบสวิสที่ใช้งานจริงในการแข่งขันระดับประเทศ

ข้อมูลผลงาน

วันที่
1 กุมภาพันธ์ – 31 มีนาคม 2569
จัดโดย / หน่วยงาน
บริษัท บุนนาค อินดัสเตรียล เทคโนโลยี แอนด์ ซอฟต์แวร์ จำกัด (Bitsoft)
ผลที่ได้รับ
เผยแพร่และใช้งานจริงในการจัดการแข่งขันหมากรุกสากลระดับประเทศ
บทบาท
รับผิดชอบโมดูลตั้งแต่ออกแบบตรรกะ เขียนโปรแกรม พัฒนา UI เชื่อมฐานข้อมูล จนส่งมอบ

เทคโนโลยี / เครื่องมือ

  • TypeScript
  • React
  • Express.js
  • MySQL

ภาพรวมงาน

ระหว่างการฝึกงานด้านการพัฒนาระบบคอมพิวเตอร์กับบริษัท Bitsoft ผมได้รับมอบหมายให้รับผิดชอบงานหนึ่งชิ้นตั้งแต่เริ่มต้นจนส่งมอบเสร็จสมบูรณ์ คือการพัฒนาโมดูลสำหรับสร้างและจัดการการจับคู่ผู้เล่นหมากรุกสากลด้วยระบบ Swiss Pairing ภายในโครงการ BBBChess Application

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

เปลี่ยนกติกาให้เป็นเงื่อนไขที่โปรแกรมตรวจสอบได้

ประสบการณ์จากการเป็นนักกีฬาหมากรุกช่วยให้ผมเข้าใจว่า การจับคู่แบบ Swiss Pairing ไม่ใช่การสุ่มผู้เล่นหรือสร้างสายแพ้คัดออก แต่เป็นการจับคู่ใหม่ในแต่ละรอบจากคะแนนสะสมและประวัติการแข่งขันที่ผ่านมา

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

ขั้นตอนการพัฒนาระบบ

ผมเริ่มจากออกแบบโครงสร้างข้อมูล Tournament, Player, Round, Pairing และ Result บน MySQL เพื่อจัดเก็บคะแนนสะสม ประวัติคู่แข่งขัน สีหมาก และผลการแข่งขันอย่างเป็นระบบ

จากนั้นพัฒนาตรรกะ Swiss Pairing ด้วย TypeScript โดยโปรแกรมจะเรียงผู้เล่นตามคะแนนและลำดับตั้งต้น แบ่งเป็นกลุ่มคะแนน แล้วสร้างคู่ที่เป็นไปได้พร้อมตรวจสอบเงื่อนไขสำคัญ ได้แก่ การไม่พบคู่เดิมซ้ำ ความใกล้เคียงของคะแนน และสมดุลการเล่นหมากสีขาว–ดำ หากคู่ใดไม่ผ่านเงื่อนไข ระบบจะปรับลำดับหรือย้ายผู้เล่นไปยังกลุ่มคะแนนใกล้เคียงเพื่อประมวลผลใหม่ ส่วนกรณีมีผู้เล่นเป็นเลขคี่ ระบบจะเลือกผู้ได้รับ Bye จากประวัติเดิมเพื่อลดการได้รับสิทธิ์ซ้ำ

ผมเชื่อมตรรกะดังกล่าวกับ Backend ที่พัฒนาด้วย Express.js เพื่อดึงข้อมูลจากฐานข้อมูล สร้างรอบ และบันทึกหมายเลขกระดานกับคู่แข่งขัน ก่อนส่งผลไปยัง Frontend ที่พัฒนาด้วย React ให้ผู้จัดตรวจสอบและบันทึกผลแพ้–ชนะหรือเสมอ เมื่อจบรอบ ระบบจะอัปเดตคะแนนและประวัติของผู้เล่นเพื่อใช้คำนวณรอบถัดไปโดยอัตโนมัติ

การใช้งานจริง

หลังส่งมอบงาน โมดูลดังกล่าวถูกผนวกเข้าสู่ระบบ BBBChess ที่บริษัทนำไปใช้งานจริง โดยหน้าเว็บไซต์สาธารณะแสดงรายการแข่งขันทั้งแบบออนไซต์และออนไลน์ เช่น Check Go & Mate – Mindsport Festival 2026 #1 @ Zeer Rangsit ซึ่งมีข้อมูลผู้เล่น 41 คน และ Pawn to Glory Blitz Cup 2026 [Online] ซึ่งมีข้อมูลผู้เล่น 25 คน รวมถึงรองรับการแข่งขันหลายรุ่นอายุ หลายระบบเวลา และจำนวนรอบที่แตกต่างกัน

ผลงานนี้จึงไม่ใช่เพียงโปรเจกต์ที่สร้างเพื่อทดลองเขียนโปรแกรม แต่เป็นส่วนหนึ่งของผลิตภัณฑ์ที่ต้องรองรับข้อมูลและกระบวนการใช้งานจริงของบริษัท

โครงงาน / โครงการ / งานวิจัยอื่น ๆ