Número negativos sem explicação

Olá! Sou iniciante ainda no mundo da programação, mas esse final de semana, tem um jogo que jogo chamado ARK, descobri uma forma de aumentar o limite de níveis nele para aumentar do char e dos dinos, porém é trabalhoso de mais ficar gerando eles manualmente. O que fiz, abri o Eclipse e fiz uma rotina dentro de um while para ele gerar n níveis com quantidades de xp necessária para aumentar o nível, quando a quantia de xp era pequena, ok, mas quando chegou na casa de quase bilhões, alguns números simplesmente ficavam negativos em alguns níveis e depois voltavam a ser positivos nos de mais níveis e logo acontecia de novo, por assim ia, mas sem explicação alguma. Em nenhum momento coloquei números negativos no script e nos cálculos, não tem como aparecer números negativos, é algo alógico. Coloquei uma pequena rotina para verificar se o numero é negativo ou não e se for, corrigir, porém queria entender o porque isso ocorre.

Caso necessário a noite posso disponibilizar o código.

Você acabou de encontrar um overflow. Basicamente quando um número excede o maior valor em bytes que ele pode possuir, ele vai ignorar os bits extras, fazendo com que o restante seja “resetado” para o menor valor possível.

Isso acontece tbm no jogo “Locomotion”, onde vc gerencia uma empresa de transportes, sei que meu lucro anual ficava tão grande que acontecia dele inverter o valor de positivo pra negativo inúmeras vezes, mas por sorte, não influenciava no caixa…

Mas e como evitar que isso ocorra? Eu fiz uma rotina antes de fazer o print da frase para ver se o numero é negativo e se for, ele trocaria ele por um backup do valor e multiplicaria ele de forma diferente, mas não sei se seria a forma correta.

A forma mais simples é limitar os valores, estabelecendo valores máximos (e/ou mínimos) para variáveis de acordo com a regra do negócio. Muito raramente você quer permitir que valores cresçam indefinidamente, então você estabelece um máximo e antes de aumentar o valor, você verifica se já alcançou o valor máximo e se sim, você não aumenta o valor.

ps.: que jogos bugados são esses q vc tá jogando, cara kkkkkk