Щоб зробити гру такою, як мережа RTS, я бачив ряд відповідей, які дозволяють зробити гру повністю детермінованою; тоді вам потрібно лише перенести дії користувачів один на одного і трохи затримати те, що відображається, щоб "зафіксувати" всі дані до того, як буде зроблено наступний кадр. Тоді такі речі, як позиції підрозділу, стан здоров'я тощо, не потрібно постійно оновлювати в мережі, тому що імітація кожного гравця буде точно однаковою. Я також чув те саме, що пропонувалося робити повтори.
Однак, оскільки обчислення з плаваючою комою не детерміновані між машинами або навіть між різними компіляціями однієї і тієї ж програми на одній машині, чи справді це можливо зробити? Як ми можемо не допустити, щоб цей факт спричинив невеликі розбіжності між гравцями (або повторами), які пульсували протягом гри ?
Я чув, як деякі люди пропонують взагалі уникати чисел з плаваючою комою і використовувати int
для представлення частки дробу, але це не здається мені практичним - що робити, якщо мені потрібно, наприклад, взяти косинус кута? Чи потрібно серйозно переписати цілу математичну бібліотеку?
Зауважте, що мене в основному цікавить C #, який, наскільки я можу сказати, має в цьому плані абсолютно ті самі проблеми, що і C ++.