Como já dito acima, a linguagem não permite que se crie um método dentro de outro. Mas ainda sim não vai resolver. Por exemplo, se vc só mover o método para fora do main
:
public static void main(String[] args) {
int vida = 100;
dano();
System.out.println(vida);
}
void dano() {
vida -= 20;
}
Ainda sim não vai funcionar. Primeiro porque main
é um método estático e dano
não (então dano
precisaria de uma instância da classe para ser chamado).
Outro ponto é que vida
é uma variável local ao método main
(pois foi criada dentro dele), então o método dano
não consegue vê-la (e muito menos modificá-la).
Se a ideia é ter uma classe que tem um valor que pode ser alterado, uma forma de fazer é criar outra classe para gerenciar isso. Por exemplo, primeiro você cria um arquivo Personagem.java
com esta classe:
public class Personagem {
private int vida;
// cria um personagem, com um valor inicial de vida
public Personagem(int vida) {
this.vida = vida;
}
public void dano(int valorDano) {
// a vida pode ser negativa? Eu entendo que não, então se o dano for maior, a vida é zerada
if (valorDano > this.vida) {
this.vida = 0;
} else {
this.vida -= valorDano;
}
}
public int getVida() {
return vida;
}
}
Ou seja, um personagem começa com um determinado valor de vida, e pode tomar dano (se o dano for maior que a vida atual, a vida é zerada).
E aí no main
você cria este personagem:
public static void main(String[] args) {
Personagem p = new Personagem(100); // personagem começa com 100 de vida
p.dano(20); // toma 20 de dano
System.out.println(p.getVida()); // 80
}
Claro que tem várias formas diferentes de fazer, tudo depende do que você precisa (em um projeto real, teria requisitos definindo bem cada coisa, etc). Mas a ideia geral é essa.
Mas se é iniciante, eu sugiro começar pelo básico. Dê uma olhada nestes tutoriais.