แนะนำเกม ชักเย่อเรือ จากโปรเจควิชา Concurrent Programming พร้อม Source Code
สวัสดีครับ บทความนี้เป็นบทความสั้นๆ ที่จะมาแนะนำเกี่ยวกับเกมที่ผมได้ทำกับเพื่อนๆ เป็นโปรเจคในวิชา Concurrent Programming ครับ ผมได้ตกลงกับเพื่อนๆแล้วว่าจะนำเกมนี้แจกเป็น open source ไปเลย เผื่อมีคนสนใจ และสามารถเอาไปเป็นแนวทางได้ ในวิชา Concurrent Programming เป็นวิชาที่น่าสนใจอยู่นะ เกี่ยวกับการทำงาน โปรเซสพร้อมๆกันที่มีทรัพยากรจำกัด มีทฤษฏีอยู่พอสมควรเลยละ ใครที่สนใจ และมีโอกาสสามารถเรียนได้ ก็แนะนำให้ลงเรียนวิชานี้เลยจ้า
ดาวน์โหลด
เริ่มต้น
เกม JAW MA JAW JUM JUK เป็นเกมแข่งชักเย่อเรือ คล้ายๆ ที่คนแข่ง แต่เอาเรือมาให้คนพายๆๆๆ ต้านกันแทน น่าสนุกใช่มัยละ โดยเกมนี้จะจำลองการแย่งชิงทรัพยากรในเซิฟเวอร์ โดยให้ผู้เล่นแย่งกันกดปุ่มบนคีบอร์ด ในช่วงเวลาหนึ่งใครกดได้มากที่สุด เรือจะขยับไปทางผู้เล่นฝ่ายนั้นนิดนึง กดค้างไม่ได้นะ โดยเล่นได้ 6 คน แบ่งเป็นฝ่ายละ 3 คน (6 คนเท่านั้นนะ)
แย่งกันใช้ server ในช่วงเวลาหนึ่ง
การพัฒนา
การทำเกมลักษณะนี้ ที่ต้องใช้ network ด้วยจะต้องเข้าใจเรื่อง Thread และก็เรื่องที่เกี่ยวกับ Socket โดยโปรเจคนี้พัฒนาด้วย C# เป็น Visual studio project ในโปรเจค แบ่งเป็น 3 ส่วนคือ
- Client ที่ทำงานเบื้องหลัง โดยใช้ 1 Thread ต่อ 1 ผู้เล่น
- Client ที่เป็น Windows Form (GUI ส่วนตัวประสาน)
- Server โดยมี 6 threads สำหรับผู้เล่น 6 คน และมีอีก 1 Thread คอยจัดการการคำนวณ
หลักๆคร่าวมีเท่านี้ครับ เดี๋ยวเราจะมาลองเล่นกันครับ
รันเซิฟเวอร์
ก่อนอื่นต้องรัน server ขึ้นมาก่อน พอเปิดขึ้นมาจะเป็นจอดำๆ แบบนี้
เข้าที่ server/bin/debug/consoleApplication2.exe
รันตัวเกม
เปิดตัวเกมขึ้นมา ที่ Client_WF\bin\Debug\Client_WF.exe
จะพบกับหน้าจอที่มีคนเชียร์แบบนี้ ฮ่าๆ
เชื่อมต่อกับเซิฟเวอร์
พอเปิดเกมขึ้นมาแล้ว ก็ใส่ ip ของ server ลงไปในช่อง IP Address server ในกรณีที่เล่นเครื่องตัวเอง (เครื่องเดียวกับ server) ให้ใส่ localhost แทน แต่ถ้าเพื่อนเปิด server เครื่องอื่น ก็ให้ใส่ ip เพื่อนลงไปครับ (เอา ip จาก ipconfig) พอใส่ไปแล้วกด connect ถ้าถูกต้อง มันก็จะขึ้นว่า connected (ต้องอยู่ในเครือข่ายเดียวกัน) และที่ server ก็จะขึ้นด้วยเช่นกันว่ามีคนมาเชื่อมต่อแล้ว 1 คนนะ
ทีนี้ก็ทำให้ครบ 6 คน (ข้อเสียคือต้องมีให้ครบ 6 ผู้เล่นนี่แหละ) ถ้าลองเล่นคนเดียวก็เปิดเกมซ้อนๆได้เลย
พอดีผมมีอยู่คนเดียว ผมจะเปิดทีเดียว 6 คนเลยนะ และพอเข้าเกมครบแล้ว ก็จะสามารถเลือกฝ่ายได้ มีฝ่ายแดงกับฝ่ายน้ำเงิน
แต่ถ้ามีคนเลือกสีนึงครบ 3 คนแล้วคนที่ 4 จะเลือกอีกไม่ได้ ต้องไปเลือกอีกสีนึง
ลองเล่นกัน
พอเลือกครบหมดแล้ว เกมก็จะนับถอยหลัง 5 วินาที 5..4..3..2..1..Go!! ก็จะแย่งกันกดปุ่มครับ
ปุ่มที่กดได้คือ Z และ X ต้องกดแบบสลับไปมาเท่านั้นนะ zx zx zx zx zx zx zx zx
เกมเริ่มแล้ว ฝีพาย พายได้ ก็จะจั้มๆๆๆ จะเห็นว่าที่ฝั่ง server จะรอรับผลที่กด แล้วจะคำนวณฝั่งไหนกดได้มากกว่าก็จะไปฝั่งนั้น ถ้าเท่ากันก็จะไม่ขยับ
เล่นไปเล่นมา กดๆๆ จนสามารถพายข้ามไปได้ ก็จะได้ผู้ชนะแล้ว เหนื่อยเลยน่ะสิ
พอเกมจบก็จะขึ้น WIN และ LOSE ในแต่ละหน้าจอ
จบแล้ว
หวังว่าโปรเจคนี้จะเป็นประโยชน์และแนวทางสำหรับผู้ที่สนใจการทำ เกี่ยวกับ concurrent ลักษณะนี้ หรือเกี่ยวกับ socket ครับ สามารถดาวน์โหลด source code ไปศึกษาได้เลยครับ
ดาวน์โหลด source code
https://github.com/benznest/jawmajawjumjuk
ขอขอบคุณอาจารย์ รัศมีทิพย์ วิตา อาจารย์ผู้สอนวิชา Concurrent Programming ที่ปรึกษาและให้คำแนะนำ