Embora eu tenha feito o primeiro comentário questionando o ponto de degradar a experiência de uma parte do seu público sem nenhum ganho aparente, ainda acho uma questão interessante do ponto de vista técnico.
Acabei de ter uma ideia: o que os trapaceiros fazem é encontrar valores que os mudam e os congelam. A busca aconteceria apenas entre mortes ou eventos que mudassem a saúde do jogador. Além disso, o trapaceiro poderia refinar a pesquisa filtrando o que mudou quando ele "não estava morrendo".
E se o contador de "saúde" estiver mudando o tempo todo? Torne-o um ponteiro e realoque-o a cada quadro ou a cada N quadro, se o desempenho for muito grande. Ou faça um XOR com um valor aleatório que altere todos os quadros (XOR novamente contra o mesmo valor para descriptografar antes de criptografar com um novo valor aleatório).
Se você tiver outros dados no jogo também alterando o tempo todo (incluindo as posições xey do personagem do jogador ou o contador de tempo), isso poderá dificultar a descoberta de qual dos dados alterados é a saúde. E congelar todo o estado do jogo é proibido para o trapaceiro.
Para enganar ainda mais, você pode realmente armazenar a saúde em uma variável simples de gravação, criada como um pote de mel.
Editar :
Ainda assim, o trapaceiro pode tentar descobrir qual das variáveis que estão mudando o tempo todo é a que deve congelar por tentativa e erro. Uma solução possível seria acoplar as variáveis.
Um exemplo:
Em vez de armazenar a saúde (h) e a posição (x), você as armazena em duas variáveis aeb, das quais é possível recuperar os valores posteriormente:
a = x+h; b = x-h
x = (a+b)/2; h = (a-b)/2
Dessa forma, se o trapaceiro congela apenas um deles e depois move o personagem, a posição é afetada e, dependendo de qual deles foi congelado, h fica negativo (morte instantânea). Você pode alternar entre as fórmulas acima e:
a = x-h; b = x+h
x = (a+b)/2; h = (b-a)/2
Em quadros consecutivos, e você garante que, no máximo, 2 quadros depois que uma das variáveis tenha sido congelada, a saúde tornará 0 no momento em que x mudar. Lembre-se de que você está armazenando apenas aeb. Combine isso com o XOR contínuo, como mencionado acima. O resultado é uma coleção de variáveis que estão mudando cada quadro para valores aparentemente aleatórios, e congelar qualquer um ou um subconjunto deles produz apenas efeitos colaterais indesejados no jogo, sendo a morte instantânea um deles.
Por que você impediria que os jogadores se enganassem (que trapaça em um jogo para um jogador equivale a)? Em um ambiente multiplayer, a tarefa do servidor é detectar alterações não naturais e combatê-las (geralmente ignorando a entrada ou bloqueando o culpado do servidor completamente), mas em um ambiente para um único jogador não há nada acontecendo, exceto que o trapaceiro desserviço.
A menos que você esteja criando um jogo multiplayer, é um desperdício de dinheiro e, se você estiver, está pensando em fortalecer o lugar errado.
fonte
Pesquise as ferramentas de trapaça conhecidas - e verifique frequentemente se alguma das mais comuns foi detectada em execução (verifique os nomes dos processos?)
Se alguma for detectada, deixe o jogador trapacear (se estiver offline, é inofensivo), mas verifique se nenhuma pontuação / conquista será publicada em qualquer sistema de classificação / conquista online - apenas faça com que falhe silenciosamente?
Não impedirá hackers mais determinados, mas reduzirá a chance de truques mais casuais atrapalharem suas tabelas de classificação.
(Pode irritar codificadores que possuem ferramentas de desenvolvimento abertas e minimizadas para fins legítimos e que estão dando um tempo nos jogos ...)
fonte
Eu acho que a solução mais simples para isso é implementar uma opção de trapaça. Desative a pontuação enquanto estiver na opção de fraude.
Outra boa idéia, que eu não tenho idéia de como você implementaria. É desligar o jogo quando há uma variável de memória congelada ou algo parecido :)
Boa sorte)
fonte