2 điểm bởi GN⁺ 2024-06-15 | 1 bình luận | Chia sẻ qua WhatsApp

Phát hiện lỗi trong trò chơi Lunar Lander đầu tiên tồn tại suốt 55 năm

Lịch sử của trò chơi

  • Năm 1969, một học sinh trung học tên Jim Storer đã phát triển trò chơi Lunar Landing đầu tiên.
  • Đến năm 1973, trò chơi này đã trở thành trò chơi máy tính phổ biến nhất.
  • Đây là một trò chơi dạng văn bản đơn giản, trong đó người chơi điều khiển tàu đổ bộ Mặt Trăng, tiêu thụ nhiên liệu để cố gắng hạ cánh.

Chiến lược tiêu hao nhiên liệu tối ưu

  • Để hạ cánh với lượng nhiên liệu tối thiểu, cần phải hạ cánh trong thời gian ngắn nhất có thể.
  • Ban đầu, tắt động cơ và lao xuống ở tốc độ tối đa, rồi vào khoảnh khắc cuối cùng đốt hết công suất để giảm tốc độ về 0.
  • Chiến lược này được gọi là "suicide burn", và rất khó canh thời điểm chính xác.

Mô phỏng vật lý

  • Dù mới là học sinh trung học, Jim Storer đã sử dụng một mô phỏng vật lý rất tinh vi.
  • Ông sử dụng phương trình tên lửa Tsiolkovsky và tận dụng chuỗi Taylor của hàm log để tăng độ chính xác.
  • Cha của ông là một nhà vật lý học và đã giúp suy ra phương trình.

Vấn đề khi hạ cánh

  • Phương trình tên lửa hoạt động tốt cho đến ngay trước khi chạm đất.
  • Việc tính chính xác va chạm tại khoảnh khắc tàu đổ bộ chạm mặt đất là điều khó khăn.
  • Trong mã của Jim có một phương trình sai với căn bậc hai nằm ở mẫu số.

Phát hiện lỗi

  • Trong mã của Jim, số 2 đáng lẽ phải có ở mẫu số đã bị thiếu.
  • Vì vậy, thời điểm hạ cánh bị tính sai, khiến hệ thống nhận định rằng tàu đổ bộ chưa chạm đất.
  • Khi sửa lỗi này, tốc độ hạ cánh được cải thiện đáng kể.

Kết luận

  • Với một trò chơi do học sinh trung học tạo ra vào năm 1969, đây là một thành tựu rất ấn tượng.
  • Lỗi này gần như không bị phát hiện trong suốt 55 năm.
  • Trò chơi vẫn rất thú vị và đã được nhiều người yêu thích.

Ý kiến của GN⁺

  • Giá trị lịch sử: Trò chơi này mang giá trị lịch sử của các trò chơi máy tính thời kỳ đầu và cho thấy những giới hạn kỹ thuật của thời đó.
  • Giá trị giáo dục: Dù là trò chơi do học sinh trung học tạo ra, nó chứa các khái niệm vật lý và toán học phức tạp nên có giá trị giáo dục cao.
  • Tầm quan trọng của lỗi: Nó nhấn mạnh tầm quan trọng của phát triển phần mềm khi một lỗi mã nhỏ cũng có thể tạo ra tác động lớn.
  • So sánh với trò chơi hiện đại: So với các trò chơi hiện đại, câu chuyện này giúp hiểu rõ hơn về giới hạn kỹ thuật và tính sáng tạo của thời kỳ đó.
  • Tiến bộ công nghệ: Thông qua trò chơi này, có thể so sánh sự phát triển công nghệ giữa quá khứ và hiện tại, đồng thời khám phá những khả năng trong tương lai.

1 bình luận

 
GN⁺ 2024-06-15
Ý kiến Hacker News
  • Đã phát hiện Jim Storer là tác giả của trò chơi Lunar Lander đầu tiên và thực hiện một cuộc phỏng vấn. Sau đó đã được cung cấp mã nguồn và thấy nó rất thú vị.
  • Storer đã quên mất trò chơi sau khi tốt nghiệp trung học. Chỉ đến khi nhận được email vài tháng trước, ông mới biết rằng ngoài trò chơi mình làm ra còn có những trò Lunar Lander khác.
  • Thật ấn tượng khi đây là trò chơi do một học sinh trung học tạo ra vào năm 1969. Có vẻ nó hẳn đã tạo ảnh hưởng lớn với những người lớn lên trong kỷ nguyên vũ trụ và có nhiều quan tâm về công nghệ.
  • Trong cuộc phỏng vấn có nhắc rằng Storer rất giỏi giải tích. Nếu quan tâm đến vũ trụ và tên lửa thì việc lập trình một trò chơi Lunar Lander hẳn là điều tự nhiên.
  • Vào giữa thập niên 1970 đã viết một trò Moon Lander dựa trên đồ họa vector 2D. Nếu hết nhiên liệu hoặc rơi quá nhanh thì sẽ va chạm, nếu không thì sẽ hiện lá cờ Mỹ.
  • Cảm thấy tiếc vì đã vứt bỏ mã nguồn. Xét về mặt lịch sử, đó là một trò chơi đồ họa thời kỳ đầu và có thể được hồi sinh bằng một trình giả lập đơn giản.
  • Đến năm 1973, Lunar Lander đã trở thành trò chơi máy tính phổ biến nhất. Đã thử làm trò này từ cuốn sách lập trình đầu tiên nhưng thất bại vì quá nhiều bug và logic phức tạp.
  • Đề xuất chiến lược hạ cánh tối ưu nhiên liệu. Giải thích cách dùng lực đẩy thấp tại một thời điểm nhất định để hạ cánh êm.
  • Lần đầu chơi trò này vào năm 1976 trên máy tính bỏ túi HP-25. Nó dùng cùng một công thức.
  • Đã chơi Spacewar trên PDP-1 vào thập niên 1960 nhưng khi đó chưa có Lunar Lander. Storer là người đầu tiên.
  • Đề xuất cách không dùng công thức đặc biệt mà tính lại khối lượng và gia tốc ở mỗi frame. Tốc độ khung hình càng thấp thì độ chính xác có thể càng kém.
  • Đã chơi bản game được port sang Wang 2200 BASIC vào giữa thập niên 1970. Khi đó đã học được kỹ thuật áp dụng lực đẩy tối đa.
  • Vẫn còn giữ băng đục lỗ cho PDP11. Không biết nên đưa cho ai.