Mô Phỏng Lưu Thông Không Khí Trong Không Gian Kín - nói dối e blog

Mô Phỏng Lưu Thông Không Khí Trong Không Gian Kín

Trong quá trình thiết kế trò chơi xây dựng tàu vũ trụ, mình muốn phát triển một hệ thống mô phỏng lưu thông không khí. Dưới đây là ý tưởng sơ bộ, chưa rõ hiệu quả thế nào nhưng xin ghi lại để

  1. Cấu trúc không gian dạng lưới ô vuông 2D:

    • Không gian được chia thành các ô vuông nhỏ, mỗi ô có thể chứa tường hoặc vật cản ngăn cản lưu thông.
    • Mỗi ô lưu trữ thông số nhiệt độ và khối lượng các loại khí (ví dụ: oxy, CO₂, khí độc…). Các loại khí có thể tồn tại đồng thời trong cùng một ô, nhưng khối lượng từng loại được tính riêng biệt.
    • Hệ thống truyền nhiệt giữa các ô sẽ được thiết kế độc lập.
  2. Cơ chế tính toán theo từng lần cập nhật trò chơi (tick):

    • Mỗi tick, mọi ô trên bản đồ sẽ được xử lý riêng lẻ. Dựa trên nhiệt độ, hệ thống xác định xác suất khuếch tán khí sang các ô lân cận.
    • Nhiệt độ càng cao, xác suất khuếch tán càng lớn, lượng khí sẽ được phân bổ đều sang tối đa 8 ô xung quanh (kể cả đường chéo).
  3. Xử lý khi thay đổi cấu trúc không gian:

    • Khi người chơi xây tường hoặc phá bỏ vật cản, toàn bộ khí trong ô đó sẽ lập tức lan tỏa sang các ô kề.
    • Nếu không gian bị bít kín hoàn toàn, khí sẽ tạm thời “bị khóa” trong ô đó, không biến mất mà chờ đến khi có lối thoát mới tiếp tục khuếch tán.

Tại sao chọn mô phỏng theo ô thay vì theo phòng?

Các trò chơi như FTL sử dụng mô hình áp suất khí theo phòng, nhưng mình chọn cách tiếp cận chi tiết hơn vì:

  • Trò chơi hướng đến lối xây dựng căn cứ linh hoạt, cấu trúc phòng có thể thay đổi liên tục. Việc tính toán theo phòng sẽ thiếu chính xác khi có cửa thông gió, ống dẫn khí, hoặc các khu vực chân không.
  • Tương lai sẽ có các yếu tố như buồng khóa khí (airlock), phòng chân không, hoặc hệ thống ống dẫn phức tạp – những thứ đòi hỏi mô phỏng ở cấp độ vi mô.

So sánh với hệ thống khí trong Oxygen Not Included (ONI):

ONI có hệ thống khí nổi tiếng chi tiết, nhưng mình không áp dụng trực tiếp vì:

  • Cơ chế vật lý khác biệt: ONI phân biệt rõ ràng ba trạng thái rắn-lỏng-khí, khí có trọng lực và phân tầng theo độ cao. Trong khi đó, trò chơi của mình là bản đồ phẳng 2D, không có khái niệm “trên-dưới”, nên không cần tính đến trọng lực.
  • Mục tiêu gameplay khác: ONI tập trung vào việc kiểm soát môi trường tự nhiên hỗn loạn, trong khi mình muốn khí ảnh hưởng trực tiếp đến trạng thái nhân vật (ví dụ: ngạt thở, nhiễm độc) chứ không liên quan đến sinh thái hoặc sinh vật.

Tiêu chí thiết kế hệ thống mô phỏng:

  1. Đơn giản:

    • Tính toán từng ô độc lập, không dùng công thức phức tạp.
    • Dễ mở rộng cho các yếu tố mới (ví dụ: khí độc, phản ứng hóa học).
  2. Trực quan:

    • Khí di chuyển từ nơi áp suất cao sang thấp, từ nóng sang lạnh cho đến khi cân bằng.
    • Khí độc lan tỏa chậm, pha loãng dần theo thời gian.
  3. Chính xác:

    • Tổng khối lượng khí trong hệ thống luôn được bảo toàn, không bị mất mát do lỗi tính toán.

Ý tưởng gameplay liên quan đến khí:

  1. Máy tạo oxy (Oxygen Generator):

    • Chỉ kết nối với hệ thống ống dẫn, không phát thải khí trực tiếp ra môi trường.
  2. Hệ thống thông gió:

    • Khí oxy phải đi qua ống dẫn và chỉ thoát ra ngoài qua các đầu phun khí (vent).
  3. Mặt nạ dưỡng khí:

    • Nhân vật mang theo mặt nạ tích trữ 1 đơn vị oxy.
    • Khi áp suất môi trường giảm dưới ngưỡng an toàn, mặt nạ tự động kích hoạt.
    • Khi oxy cạn, nhân vật sẽ tìm mặt nạ gần nhất để thay thế (qua hệ thống ống dẫn).

Thách thức cần giải quyết:

  • Hiệu năng: Tính toán cho hàng nghìn ô có thể gây lag, cần tối ưu hóa thuật toán.
  • Cân bằng gameplay: Đảm bảo việc quản lý không khí không trở thành gánh nặng mà là yếu tố chiến lược thú vị.
  • Giao diện người dùng: Hiển thị trực quan áp suất, nhiệt độ, và thành phần khí trong từng khu vực.

Mình hy vọng hệ thống này sẽ tạo ra trải nghiệm xây dựng tàu vũ trụ vừa thực tế vừa hấp dẫn!

0%