Güvenli oyun oynamak için bir P2P mimarisi üzerinde çalışıyorum ve sorunu beş alt soruna ayırdım:
- Gönderilen oyun durumunun yasa dışı bir şekilde değiştirilmesi
- Doğru dolandırıcı dolandırıcı
- Bir oyun durumunu kabul etme
- "Geleceğe bakış" hilesinden kaçınmak
- Hassas bilgileri rakiplerden gizleme
İlk dördü çözdüm ama sorun yaşadığım son soru.
Ayrıntılara girmeden önce, bir "hile kanıtı" p2p ağı oluşturma listemde kaçırdığım bir şey olup olmadığını sormak istiyorum. Ben aimbots kullanmak gibi hilelerle ilgilenmiyorum, sadece p2p ağını merkezi bir sunucu kadar güvenli hale getirmekle ilgileniyorum.
Bu nedenle, hassas bilgileri gizleme konusundaki çabalarımda, bir oyunda oyuncuların rakibinizin pozisyonunun her zaman bilinmemesi gerektiği konumuna odaklandım. Sorun daha sonra rakibinizin pozisyonunu bilmeden rakibinize pozisyonunuzu göndermeniz gerekip gerekmediğini nasıl belirleyeceğinize dönüşür.
Rakibin sizinkini karşılaştırmanız için birden fazla yanlış pozisyon gönderen gibi yöntemler çıkardım, çünkü rakibiniz böyle bir sistemi kolayca kötüye kullanabilir çünkü yanlış pozisyonlardan biri pozisyonunuzdan "görünür" olursa pozisyonunuzu alacaktır.
Yönettiğim yöntem, rakibinizden bir "görsel alan" aldığınız ve böylece konumunuzu göndermeniz gerekip gerekmediğini belirleyebilir. Ancak bu, rakibinizin görsel alanının da çok hassas bilgiler olduğu League of Legends gibi oyunlarda bir sorundur. Görsel alanı dönüştürülmüş versiyondan orijinal versiyona geri dönemeyeceğiniz anlamına gelen tekil bir matris kullanarak görsel alanı dönüştürerek bunu çözmeye çalıştım, ancak doğrusal bir dönüşüm olduğu için konumunuzun içinde olup olmadığını hala anlayabilirsiniz görme alanı ya da değil.
Bununla birlikte, bu mükemmel bir şekilde çalışmaz, dönüşümden sonra tam görsel alan geri yüklenemez, ancak görsel alandaki "eğimler" hakkında bilgi (görsel alan birkaç çizgi tarafından oluşturulur ve her çizginin eğimi belirlenebilir) orijinal görme alanını nispeten ucuz bir şekilde yeniden yapılandırmak için kullanılabilir.
Özünde, ihtiyacım olan şey, bir pozisyonun "görünür" olup olmadığını belirleyebilen bir işlevdir ve bu işlevi / görsel alanı yeniden yapılandırmak, görsel alanı yeniden yapılandırmayı tamamladıktan sonra artık bununla ilgili olmayacak kadar hesaplama gerektirir. oyun eylem. Dışarıda böyle bir yöntemi bilen süper zeki biri var mı?
Düzenle İnsanlar "vizyon alanı" hakkında bir tür karışıklık dikiş bu yüzden burada daha ayrıntılı bir açıklama vermeyi amaçlıyorum. Vizyon alanı bir dizi çizgiden oluşur, bildiğiniz gruptaki tüm çizgiler için aynı tarafta olup olmadığını, sadece çizginizin hangi tarafında olduğunu kontrol ederek bir pozisyonun bu gruplardan birinin içinde olup olmadığını kolayca kontrol edebilirsiniz. o grubun içinde ve dolayısıyla görme alanının içinde.
Ancak gönderilen bilgi bu satır değil, çizginin dönüşümü ve dönüşüm (2 x 2 tekil bir matris), yine de, aldığınız dönüşümü kullanarak ilk önce çizginizin hangi tarafında bulunduğunu kontrol edebilirsiniz. ve bu değerin dönüştürülmüş çizgiyle karşılaştırılması. Buradaki anahtar, dönüşümün tekil olmasıdır, yani orijinal hatta geri dönmek için bir ters bulmak imkansızdır. Bununla birlikte, çizginin kökenini, bilmediğinizden çok daha ucuza tespit edene kadar, dönüştürülmüş çizginin hangi tarafında çok fazla nokta olduğunu kontrol ederek çizginin yeniden yapılandırılmasını sağlayan çizginin eğimini belirlemek mümkündür. çizginin eğimi.
Aradığım şey, bir noktanın alanın yöntemden yeniden yapılandırılmasının imkansız (her zaman kaba kuvvet uygulayabileceğinizden şüphelendiğim) veya çok hesapsal olarak ağır olduğu bir alanın içinde olup olmadığını belirlemek için bir yöntemdir.