เพื่อการแสดงผลเว็บไซต์ที่ดีที่สุด
กรุณาเข้าด้วยคอมพิวเตอร์หรือแท็บเล็ต

* ข้อมูลบางส่วนอาจไม่แสดงผล *

ไข่ตัวร้ายกับนายเนื้อย่าง

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

เกม "ไข่ตัวร้ายกับนายเนื้อย่าง" เป็นเกมที่สร้างขึ้นมาเลียนแบบเกม Beef Grill () และเกม The Amazing Dare-Dozen โดยทั้งสองเกมต้นฉบับสร้างขึ้นมาด้วย Flash และต้องเล่นผ่านเว็บไซต์ผ่านโปรแกรม Flash Player ซึ่งกำลังจะหมดการสนับสนุนในบราวเซอร์ใหม่ ๆ ในเร็ววันนี้ ทางผู้จัดทำจึงตัดสินใจทำเกมเลียนแบบขึ้นมาโดยเขียนด้วยภาษา C ที่สามารถเล่นได้บนระบบปฏิบัติการ Windows ได้อยู่ตลอด และยังสามารถแปลง Source code ของเรา ไปบนแพลตฟอร์มอื่นได้ด้วยเช่น Mac OS และ Android เนื่องจากทางผู้จัดทำได้พัฒนาเกมโดยใช้ Library "Raylib"

วิธีการเล่น

ภายในเกม "ไข่ตัวร้ายกับนายเนื้อย่าง" จะมีเกมย่อย 2 เกมได้แก่ "ไข่ตัวร้าย" และ "นายเนื้อย่าง" โดยสามารถเลือกที่จะเล่นได้ทันทีที่เปิดเกม

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

นายเนื้อย่าง เมื่อเริ่มเกมผู้เล่นจะมีเวลา 120 วินาทีและแต้มชีวิต 100% ในการเล่น ผู้เล่นจะต้องนำเนื้อภายในจานไปย่าง และเมื่อเนื้อสุกจะต้องนำเนื้อใส่ถ้วยน้ำจิ้มเพื่อรับประทาน โดยในแต่ละวินาที เวลาจะนับถอยลังลง และในทุก ๆ 2 วินาที แต้มเลือดของผู้เล่นจะลดลง 2 หน่วย และเมื่อเวลา หรือแต้มเลือดหมดจะถือว่าเกมจบทันทีแล้วสรุปคะแนนที่ได้รับ โดยผู้เล่นจะได้รับแต้มเลือดเพิ่มเมื่อทานเนื้อที่ย่างอย่างพอดี แต่จะถูกหักแต้มหากเนื้อไม่สามารถทานได้ เช่น ดิบ หรือไหม้เกินไปและเมื่อเนื้อภายในจานหมดเกมจะนำเนื้อมาเสิร์ฟเพิ่มให้, เพิ่มเวลาในการเล่น 40 วินาที และ เพิ่มคะแนนโบนัส 200 คะแนนในทุก ๆ ครั้งที่นำเนื้อมาเสิร์ฟใหม่! "อยากรู้จังว่ากินเท่าไหร่จึงจะอิ่ม"

วิดิโอนำเสนอ

โปสเตอร์

โปสเตอร์เกม "ไข่ตัวร้ายกับนายเนื้อย่าง" ทำด้วยโปรแกรม Adobe illustrator ขนาด A1 (150 DPI)

ดาวน์โหลดเกม

ดาวน์โหลดเกมไข่ตัวร้ายกับนายเนื้อย่างเวอร์ชั่นล่าสุด

ไฟล์ในรหัสต้นฉบับ

โดยผู้จัดทำเปิดโค้ดต้นฉบับ (Source Code) เป็นสาธารณะ และอนุญาตให้สามารถนำไปพัฒนาต่อได้ แต่ต้องไม่นำไปใช้งานเชิงพาณิชย์ Github

* แนะนำให้ใช้ Compiler จากทางผู้พัฒนา Raylib โดยตรง เพื่อไม่ให้เกิดปัญหาในการแปลงรหัสต้นฉบับ

> Bin /* โฟลเดอร์เกม */
  • resource /* ข้อมูลต่าง ๆ ของตัวเกม เช่น เสียง ภาพต่าง ๆ */
  • demonEgg.exe /* ไฟล์ตัวเกม */
> src /* โฟลเดอร์รวมโค้ดต้นฉบับของเกม */
  • external /* โค้ดต้นฉบับของ Library ต่าง ๆ ที่นำมาใช้ */
  • resource /* ข้อมูลต่าง ๆ ของตัวเกมที่ต้องบีบรวมกับต้วเกม เช่น ไอคอน */
  • beef.c /* โค้ดต้นฉบับของเกมเนื้อย่าง */
  • beef.h /* โค้ดต้นฉบับ header ของเกมเนื้อย่าง */
  • compile.cmd /* โค้ด cmd สำหรับแปลงโค้ดต้นฉบับเป็นเกมที่สามารถเปิดได้บน Windows */
  • egg.c /* โค้ดต้นฉบับของเกมไข่กระโดด */
  • egg.h /* โค้ดต้นฉบับ header ของไข่กระโดด */
  • game.c /* โค้ดต้นฉบับของตัวโปรแกรมหลัก */
  • main.c /* โค้ดต้นฉบับของตัวโปรแกรมหลัก */
  • main.h /* โค้ดต้นฉบับ header ของตัวโปรแกรมหลัก */

คำอธิบายรหัสต้นฉบับเบื้องต้น

คำอธิบายเบื้อต้นสำหรับรหัสต้นฉบับเกม ไข่ตัวร้ายกับนายเนื้อย่าง

> src
  • external
  • resource
  • beef.c
    • void beefInit(); // ฟังก์ชั่นเริ่มต้นของเกมนายเนื้อย่าง โดยจะทำการโหลดภาพและเสียงต่าง ๆ และทำการตั้งค่าเริ่มต้นให้กับตัวแปรต่าง ๆ
    • void beefMain(); // ฟังก์ชั่นหลักของเกมนายเนื้อย่าง โดยจะมีการแสดง UI ต่าง ๆ ให้เห็นในเกม และการเช็คสถานะต่าง ๆ ของสภาพแวดล้มในเกม
    • void generateMeat(); // ฟังก์ชั่นเพื่อสุ่มค่าต่าง ๆ ของเนื้อเช่น รูปแบบเนื้อ และตั้งค่าเริ่มต้นของเนื้อแต่ละชิ้น
    • bool isMeatInGrill(struct BEEF beef); // ฟังก์ชั่นเพื่อตรวจสอบว่าตำแหน่งของเนื้ออยู่ในเตาย่างหรือไม่ จาก struct เนื้อที่รับเข้ามา
    • bool isMeatInSauceBowl(struct BEEF beef); // ฟังก์ชั่นเพื่อตรวจสอบว่าตำแหน่งของเนื้ออยู่ในถ้วยน้ำจิ้มหรือไม่ จาก struct เนื้อที่รับเข้ามา
    • void eatThisMeat(int meatIndex); // ฟังก์ชั่นที่เรียกใช้เมื่อเนื้อถูกกินแล้ว โดยจะมีการเรียกใช้ฟังก์ชั่นคำนวณต่าง ๆ เพื่อนำไปแสดงผลต่อไป และเล่นเสียงต่าง ๆ โดยรับข้อมูล Index ของเนื้อที่อยู่ใน Array beefs
    • int scoreCalculateFromMeat(struct BEEF beef); // ฟังก์ชั่นคำนวณคะแนนที่จะได้จากการกินเนื้อ จาก struct เนื้อที่รับเข้ามา
    • int healthCalculateFromMeat(struct BEEF beef); // ฟังก์ชั่นคำนวณแต้มเลือดที่จะได้จากการกินเนื้อ จาก struct เนื้อที่รับเข้ามา
    • int meatLeftCount; // ฟังก์ชั่นคำนวณจำนวนเนื้อทั้งหมดที่ยังไม่ถูกกิน
  • beef.h
    • enum CURRENT_BEEF_GAME_STATE; // ตัวแปรประเภท enum เก็บสถานะปัจจุบันของเกมย่างเนื้อ เช่นกำลังเล่น หรือเกมจบแล้ว
    • enum BEEF_SIDE; // ตัวแปรประเภท enum เก็บสถานะด้านของเนื้อที่กำลังย่าง
    • enum BEEF_STATE; // ตัวแปรประเภท enum เก็บสถานะของเนื้อว่าถูกกินไปหรือยัง
    • enum BEEF_SIDE_STATE; // ตัวแปรประเภท enum เก็บสถานะของเนื้อแต่ละด้านว่ามีความสุกอยู่ในระดับไหน
    • enum BEEF_TYPE; // ตัวแปรประเภท enum เก็บรูปแบบของเนื้อ ซึ่งมีอยู่ทั้งหมด 4 แบบ
    • struct BEEF; // struct ใช้สำหรับเก็บข้อมูลของเนื้อแต่ละชิ้นซื้อใน struct นี้จะประกอบด้วยข้อมูลต่าง ๆ ที่ต้องใช้ในเนื้อแต่ละชิ้น เช่นตำแหน่งของเนื้อ ความสุกของแต่ละด้าน ด้านที่กำลังพลิก เวลาที่ใช้เพื่อที่จะสุก เสียงของเนื้อบนเตาย่าง เป็นต้น
    • struct BEEF beefs[MEAT_COUNT]; // ตัวแปรประเภท struct BEEF สำหรับเก็บข้อมูลเนื้อแต่ละชิ้นเป็น Array ขนาดตามที่กำหนดใน MEAT_COUNT
    • bool isDragging; // ตัวแปร boolean ใช้สำหรับตรวจสอบว่าเมาส์กำลังลากเนื้อชิ้นไหนอยู่หรือไม่
    • int draggingMeatIndex; // ตัวแปร int ใช้สำหรับเก็บ Index ของเนื้อชิ้นที่กำลังลาก
  • compile.cmd
  • egg.c
    • void eggInit(); // เป็นฟังก์ชั่นเริ่มต้นเกมไข่ตัวร้าย โดยจะทำการโหลดภาพโหลดเสียงของเกมและตั้งค่าเริ่มต้นของตัวแปรที่จะใช้ในฟังก็ชั่นต่อไป
    • void eggMain(); // เป็นฟังก็ชั่นหลักของเกมไข่ตัวร้าย โดยจะมีการแสดง UI ต่าง ๆ ให้เห็นในเกม และการตรวจสอบสถานะต่าง ๆ ของสภาพแวดล้อมในเกม เช่น ไข่, ตะกร้า เป็นต้นเพื่อให้เกมแสดงผลอย่างถูกต้อง
    • void UpdateCameraCustom(); // ฟังก์ชั่นเพื่อการอัพเดตมุมกล้องอย่างเหมาะสม และลื่นไหล
    • void resetGravity(); // เป็นฟังก์ชั่นที่ทำการรีเซ็ตความเร็วของไข่เป็นศูนย์
    • void updateGravity(); // เป็นฟังก์ชั่นที่ทำให้ไข่หล่นไปตามแรงโน้มถ่วงด้วยความเร็วที่เหมาะสม
    • void updateRotation(); // เป็นฟังก์ชั่นที่ใช้ทำให้เวลาไข่กระโดดแล้วไข่จะหมุน
  • egg.h
    • int eggPositionX; // ตัวแปรประเภท int ใช้สำหรับเก็บตำแหน่งแกน X ของไข่
    • int eggPositionY; // ตัวแปรประเภท int ใช้สำหรับเก็บตำแหน่งแกน Y ของไข่
    • float eggRotation; // ตัวแปรประเภท float ใช้สำหรับองศาของไข่ที่กำลังหมุน
    • float nextRotation; // ตัวแปรประเภท float ใช้สำหรับองศาเป้าหมายของที่ไข่ที่ต้องหมุนไป
    • int cameraTargetPositionY; // ตัวแปรเก็บเป้าหมายที่กล้องจะต้องตามบนแกน Y
    • int lifePoint; // ตัวแปรเก็บจำนวนชีวิตของไข่ที่ยังเหลืออยู่
    • int score; // ตัวแปรเก็บจำนวนคะแนนของผู้เล่น
    • float auraOpacity; // ตัวแปรสำหรับแสดงผลเอฟเฟคตอนไข่เกิดใหม่
    • float auraScale; // ตัวแปรสำหรับแสดงผลเอฟเฟคตอนไข่เกิดใหม่
    • Vector2 auraPosition; // ตัวแปรสำหรับแสดงผลเอฟเฟคตอนไข่เกิดใหม่
    • enum GAME_PLAY_STATE; // ตัวแปรประเภท enum เก็บสถานะเกมว่ากำลังเล่น หรือจบแล้ว
    • enum EGG_PLAY_STATE; // ตัวแปรประเภท enum เก็บสถานะของไข่ขณะเล่นว่าไข่อยู่ในสถานะใด เช่น กำลังกระโดด กำลังหล่น เป็นต้น
    • enum LEVEL_MOVEMENT_TYPE; // ตัวแปรประเภท enum เก็บรูปแบบของด่านแต่ละชั้นว่ามีรูปแบบการเคลื่อนที่แบบใด
    • Camera2D camera; // ตัวแปรเก็บข้อมูลของกล้อง 2 มิติที่ใช้ในเกม
    • int floorPositionY; // ตัวแปรเก็บพิกัดแกน Y ของพื้น (จุดเริ่มต้นเกม)
    • int levelHeight; // ตัวแปรเก็บความสูงของด่านแต่ละชั้น
    • int jumpHeight; // ตัวแปรเก็บความสูงของไข่ที่สามารถกระโดดได้
    • int baseLevelY; // ตัวแปรเก็บความสูงของไข่ปัจจุบันที่กำลังอยู่
    • flaot gravity; // ตัวแปรเก็บค่าแรงโน้มถ่วงของเกม
    • flaot velocityY; // ตัวแปรเก็บค่าความเร็วของไข่ในขณะปัจจุบัน
    • flaot lastLanding; // ตัวแปรเก็บเวลาของไข่ที่ตกลงตะกร้าครั้งล่าสุด
    • flaot lastFail; // ตัวแปรเก็บเวลาของไข่ที่ตกไม่ลงตะกร้าครั้งล่าสุด
    • struct Level; // struct เก็บข้อมูลของด่านในแต่ละชั้น เช่นตำแหน่งพิกัด รูปแบบการเคลื่อนที่ ความเร็ว เป็นต้น
    • struct Level gameLevels[160]; // struct เก็บข้อมูลของด่านในแต่ละชั้นใน Array
    • int currentEggLevel; // ตัวแปรเก็บชั้นที่อยู่ในปัจจุบัน
    • int positionYToGo; // ตัวแปรใช้สำหรับตอนคำนวนพิกัดของไข่ตอนกระโดด
    • int basketWidth; // ตัวแปรเก็บความกว้างของตะกร้า หน่วยเป็น Pixel
    • int basketHeight; // ตัวแปรเก็บความสูงของตะกร้า หน่วยเป็น Pixel
    • int circlePosX; // ตัวแปรใช้คำนวนตำแหน่งที่แสดง UI
    • int circlePosY; // ตัวแปรใช้คำนวนตำแหน่งที่แสดง UI
    • bool lied; // ตัวแปรแห่งการโกหก!?
  • game.c
  • main.c
  • main.h

อาจารย์ที่ปรึกษา

รศ.ดร. กิติ์สุชาต พสุภา

ตำแหน่ง
อาจารย์ที่ปรึกษา

รศ.ดร. ปานวิทย์ ธุวะนุติ

ตำแหน่ง
อาจารย์ที่ปรึกษา

ผู้พัฒนา

n0uur

นาย กฤตณัฏฐ์ ศิริพรนพคุณ
รหัสนักศึกษา 62070002

ตำแหน่ง
ผู้ให้กำเนิดโลกและจักรวาล

hikariz01

นาย กิตติภัค พนารินทร์
รหัสนักศึกษา 62070016

ตำแหน่ง
ผู้ให้กำเนิดไข่ตัวร้าย

boatlittlebear

นาย จักรกฤษณ์ สายแฉ่ง
รหัสนักศึกษา 62070026

ตำแหน่ง
ผู้ให้กำเนิดนายเนื้อย่าง

FuMiRiO

นาย ธัชวุฒิ วิจิตรบรรจง
รหัสนักศึกษา 62070091

ตำแหน่ง
ผู้ให้กำเนิดนายเนื้อย่าง