Để làm cho một trò chơi giống như một RTS được nối mạng, tôi đã thấy một số câu trả lời ở đây gợi ý để làm cho trò chơi hoàn toàn xác định; sau đó, bạn chỉ phải chuyển các hành động của người dùng sang nhau và làm chậm những gì hiển thị một chút để "khóa" đầu vào của mọi người trước khi khung tiếp theo được hiển thị. Sau đó, những thứ như vị trí, sức khỏe, v.v. không cần phải được cập nhật liên tục qua mạng, bởi vì mô phỏng của mọi người chơi sẽ giống hệt nhau. Tôi cũng đã nghe điều tương tự được đề xuất để thực hiện replay.
Tuy nhiên, vì các phép tính dấu phẩy động là không xác định giữa các máy hoặc thậm chí giữa các phần tổng hợp khác nhau của cùng một chương trình trên cùng một máy, điều này có thực sự khả thi không? Làm thế nào để chúng tôi ngăn chặn thực tế đó gây ra sự khác biệt nhỏ giữa những người chơi (hoặc phát lại) mà gợn trong suốt trò chơi ?
Tôi đã nghe một số người đề nghị tránh hoàn toàn các số có dấu phẩy động và sử dụng int
để biểu thị thương số của một phân số, nhưng điều đó nghe có vẻ không thực tế đối với tôi - ví dụ, nếu tôi cần lấy cosin của một góc thì sao? Tôi có thực sự cần phải viết lại toàn bộ thư viện toán học không?
Lưu ý rằng tôi chủ yếu quan tâm đến C #, theo như tôi có thể nói, có chính xác các vấn đề tương tự như C ++ về vấn đề này.