เขียนวิดีโอเกมตั้งแต่ต้นเหมือนในปี 1987
สิ่งที่เรากำลังสร้าง
- X protocol เวอร์ชันที่ 11 ถือกำเนิดขึ้นในปี 1987
- X11 เป็นโมเดลจากยุคก่อนมี GPU จึงไม่ค่อยเข้ากับฮาร์ดแวร์สมัยใหม่
- ทุกระบบ Unix มี X server และยังสามารถรันแอปพลิเคชัน Linux แบบ GUI บน macOS และ Windows ได้ด้วย
- โปรโตคอล X11 ค่อนข้างเรียบง่าย และเริ่มต้นได้เพียงแค่สร้าง socket
- สำหรับแอปพลิเคชัน 2D ก็สามารถทำงานได้โดยไม่จำเป็นต้องโต้ตอบกับ GPU
การยืนยันตัวตน
- ในบทความก่อนหน้านี้ได้เชื่อมต่อกับ X server โดยไม่มีการยืนยันตัวตน
- ตอนนี้รองรับโปรโตคอลการยืนยันตัวตนของ X แล้ว
- เพราะสภาพแวดล้อมเดสก์ท็อปบางส่วนที่ใช้ XWayland จำเป็นต้องมีการยืนยันตัวตน
- ใช้กลไก MIT-MAGIC-COOKIE-1 ในการจัดการการยืนยันตัวตน
การเปิดหน้าต่าง
- เปิด UNIX domain socket เพื่อสื่อสารกับ X server
- สร้างการเชื่อมต่อกับเซิร์ฟเวอร์ผ่าน X11 handshake
- สร้าง graphics context และสร้างหน้าต่าง
- ใช้การเรียก
map_window เพื่อแสดงหน้าต่าง
การโหลดแอสเซ็ต
- โหลดภาพที่จำเป็นสำหรับเกม และแปลงให้ตรงกับรูปแบบภาพของ X11
- สร้าง Pixmap อัปโหลดภาพ แล้วคัดลอกส่วนที่ต้องการไปยังหน้าต่าง
ความเห็นจาก GN⁺
- ความเรียบง่ายของ X11: โปรโตคอล X11 ค่อนข้างเรียบง่ายจนสามารถสื่อสารผ่าน socket ได้โดยตรง ซึ่งช่วยให้วิศวกรมือใหม่เข้าใจแนวคิดพื้นฐานของ network programming และ GUI ได้ดีขึ้น
- ความเป็นไปได้ในการปรับแต่งประสิทธิภาพ: การใช้บัฟเฟอร์นอกหน้าจออย่าง Pixmap ช่วยให้อัปโหลดภาพเพียงครั้งเดียว และหลังจากนั้นคัดลอกได้อย่างรวดเร็ว นี่เป็นตัวอย่างที่ดีของการเพิ่มประสิทธิภาพ
- ข้อดีของภาษา Odin: ภาษา Odin มีความสามารถที่ช่วยจัดการงานซับซ้อนอย่างการจัดการหน่วยความจำได้อย่างเรียบง่าย ทำให้เขียนโปรแกรมได้อย่างมีประสิทธิภาพ
- การรองรับระบบรุ่นเก่า: วิธีนี้สามารถทำงานได้แม้บนระบบเก่า ซึ่งมีประโยชน์เมื่อจำเป็นต้องรันซอฟต์แวร์ในสภาพแวดล้อมที่หลากหลาย
- แหล่งเรียนรู้: การจัดการโปรโตคอลระดับต่ำอย่าง X11 โดยตรงช่วยให้เข้าใจการทำงานภายในของ GUI ได้อย่างมาก และอาจช่วยยกระดับทักษะของวิศวกรได้
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ความคิดเห็นแรก: พีซีในปี 1987 มี RAM 1–2MB ส่วน Super NES มี RAM 128KB และสามารถสร้างไฟล์ปฏิบัติการที่มีขนาดเล็กกว่าโปรแกรมของ Microsoft ได้มาก ลิงก์
ความคิดเห็นที่สอง: X11 แม้จะเก่าแล้ว แต่ถ้าทำแค่ฟังก์ชันพื้นฐานที่จำเป็นต่อการพัฒนาเกม ก็ไม่ต้องกังวลเรื่องที่เหลือ และถ้าใช้ Xlib ก็ทำงานได้ง่ายขึ้น
ความคิดเห็นที่สาม: เคยพัฒนาเกมเลียนแบบ Minesweeper สำหรับ DOS PC ด้วย Turbo Pascal และเจอปัญหาอัลกอริทึมแบบเรียกซ้ำในด่านขนาดใหญ่ จึงเพิ่มฟังก์ชันให้เลือกจุดเริ่มต้นที่ปลอดภัยได้
ความคิดเห็นที่สี่: การพัฒนาเกมในปี 1987 ยากกว่าวันนี้มาก เพราะ DOS ไม่รองรับมัลติทาสก์ ทำให้ขั้นตอนการทำงานไม่มีประสิทธิภาพอย่างมาก ลิงก์
ความคิดเห็นที่ห้า: รู้สึกผิดหวังที่ไฟล์ wasm ของเอนจิน Godot มีขนาดอย่างน้อย 50MB โดยเฉพาะสำหรับเกม 2D แบบง่าย ๆ ที่ควรต้องการการปรับแต่งให้เหมาะสมกว่านี้ แต่โดยรวมก็ยังน่าประทับใจ
ความคิดเห็นที่หก: เริ่มสนใจภาษา Odin โดย Odin คล้ายกับ Zig ตรงที่ส่งตัวจัดสรรหน่วยความจำเข้าไปในฟังก์ชัน แต่มีกลไกที่จัดการได้สะดวกกว่า
ความคิดเห็นที่เจ็ด: Minesweeper ใน Windows 3.1 มีโค้ดโกง โดยเมื่อกดคีย์ผสมบางอย่างจะสามารถแยกได้ว่าช่องไหนปลอดภัยและช่องไหนมีระเบิด
ความคิดเห็นที่แปด: ถ้าใช้ไลบรารีอย่าง SDL ก็แทบไม่มีโอเวอร์เฮด และยังรองรับระบบปฏิบัติการได้หลากหลาย ถ้าใช้ SDL 1.x รุ่น legacy ก็ยังรองรับ Linux เวอร์ชันเก่าได้ด้วย
ความคิดเห็นที่เก้า: ไฟล์ปฏิบัติการ Mines Windows ของ Simon Tatham มีขนาดประมาณ 180KiB ลิงก์