2 คะแนน โดย GN⁺ 2024-06-22 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

เขียนวิดีโอเกมตั้งแต่ต้นเหมือนในปี 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 ความคิดเห็น

 
GN⁺ 2024-06-22
ความคิดเห็นจาก 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 ลิงก์