Bien que j'aie fait le premier commentaire en questionnant le point de dégrader l'expérience d'une partie de votre auditoire sans aucun gain apparent, je la trouve quand même intéressante du point de vue technique.
Je viens juste d'avoir cette idée: ce que les tricheurs font, c'est trouver des valeurs qui changent et les figer. La recherche n'aurait alors lieu qu'entre des morts ou des événements qui ont changé la santé du joueur. De plus, le tricheur pourrait affiner la recherche en filtrant ce qui a changé quand il "ne mourait pas".
Que se passe-t-il si le compteur "santé" change tout le temps? Faites-en un pointeur et réaffectez-le toutes les images ou toutes les N images si les performances sont trop importantes. Ou bien XOR avec une valeur aléatoire qui change chaque image (XORing à nouveau avec la même valeur pour le déchiffrement avant le chiffrement avec une nouvelle valeur aléatoire).
Si vous avez d'autres données dans le jeu qui changent également tout le temps (y compris les positions x et y du personnage du joueur ou le compteur de temps), il pourrait être plus difficile de déterminer laquelle des données changeantes correspond à la santé. Et geler l’ensemble de l’état du jeu n’est pas une solution pour le tricheur.
Pour tromper davantage, vous pouvez réellement stocker la santé dans une variable en écriture seule appelée un pot à miel.
Modifier :
Néanmoins, le tricheur peut essayer de trouver laquelle des variables qui change tout le temps est celle qui doit être figée par essais et erreurs. Une solution possible serait de coupler les variables ensemble.
Un exemple:
Au lieu de stocker la santé (h) et la position (x), vous les stockez dans deux variables a et b, à partir desquelles vous pourrez récupérer les valeurs ultérieurement:
a = x+h; b = x-h
x = (a+b)/2; h = (a-b)/2
De cette façon, si le tricheur ne gèle qu'un seul d'entre eux et déplace le personnage, la position est affectée et, en fonction de celui qui a été gelé, h devient négatif (mort instantanée). Vous pouvez basculer entre les formules ci-dessus et:
a = x-h; b = x+h
x = (a+b)/2; h = (b-a)/2
Dans des images consécutives, et vous garantissez que dans au plus 2 images après que l’une ou l’autre des variables ait été gelée, l’intégrité passera à 0 au moment où x change. Rappelez-vous que vous ne stockez que a et b. Combinez cela avec le XOR continu comme mentionné ci-dessus. Le résultat est un ensemble de variables qui modifient chaque image en valeurs apparemment aléatoires, et geler une seule d'entre elles ou un sous-ensemble de celles-ci ne produit que des effets secondaires indésirables dans le jeu, dont la mort instantanée.
Pourquoi voudriez-vous empêcher les joueurs de se tromper (ce qui revient à tricher dans un jeu à joueur unique)? Dans un environnement multijoueur, il incombe au serveur de détecter les modifications non naturelles et de les contrer (généralement en ignorant l’entrée ou en bloquant complètement le coupable du serveur), mais dans un environnement à un seul joueur, rien ne se passe sauf que le tricheur se mauvais service.
IOW, à moins de créer un jeu multijoueur, c'est un gaspillage d'argent, et si vous envisagez de durcir le mauvais endroit.
la source
Recherchez les outils de triche connus - et vérifiez fréquemment si l'un des plus courants est détecté en cours d'exécution (vérifiez les noms de processus?)
Si vous en détectez, laissez le joueur tricher (s'il est hors ligne, c'est sans danger), mais assurez-vous qu'aucun score / résultat ne sera publié sur un système de classement / résultat en ligne - faites-le simplement échouer en silence?
N'arrêtera pas les pirates plus déterminés, mais réduira le risque que des tricheurs plus occasionnels gâchent vos classements.
(Peut gêner les développeurs qui ont des outils de développement ouverts et minimisés à des fins légitimes et qui prennent une pause de jeu, cependant ...)
la source
Je pense que la solution la plus simple consiste à implémenter une option de triche. Désactiver la notation en mode triche.
Une autre bonne idée, c'est que je ne sache pas comment vous allez mettre en œuvre. C’est d’arrêter le jeu quand il ya une variable de mémoire gelée ou quelque chose comme ça :)
Bonne chance)
la source