ola pessoal, tudo certo?
Estou com um problema em JOptionPane, não consigo fazer aparecer, em um jogo, o nome do jogador falando se o mesmo ganhou ou perdeu o jogo
import javax.swing.JOptionPane;
public class CrapsTest {
public static void main (String args[])
{
JOptionPane.showMessageDialog(null, "Pressione OK para começar o jogo");
final String name = JOptionPane.showInputDialog("Qual é o seu nome?");
Craps game = new Craps();
game.play();
}
}
public class Craps {
private Random randomNumbers = new Random();
private enum Status { CONTINUE, WON, LOST};
private final static int SNAKE_EYES = 2;
private final static int TREY = 3;
private final static int SEVEN = 7;
private final static int YO_LEVEN = 11;
private final static int BOX_CARS = 12;
String name = null;
public void play()
{
int myPoint = 0;
Status gameStatus;
int sumOfDice = rollDice();
switch (sumOfDice)
{
case SEVEN:
case YO_LEVEN:
gameStatus = Status.WON;
break;
case SNAKE_EYES:
case TREY:
case BOX_CARS:
gameStatus = Status.LOST;
break;
default:
gameStatus = Status.CONTINUE;
myPoint = sumOfDice;
System.out.printf("sua pontuação é %d\n", myPoint);
break;
}
while(gameStatus == Status.CONTINUE)
{
sumOfDice = rollDice();
if (sumOfDice == myPoint)
gameStatus = Status.WON;
else
if (sumOfDice == SEVEN)
gameStatus = Status.LOST;
}
if (gameStatus == Status.WON)
JOptionPane.showMessageDialog(null, "Jogador %s Wins ",name);
else
JOptionPane.showMessageDialog("Jogador %s loses",name);
}
public int rollDice()
{
int die1 = 1 + randomNumbers.nextInt(6);
int die2 = 1 + randomNumbers.nextInt(6);
int sum = die1 + die2;
System.out.printf ("Player rolled %d + %d = %d\n",die1, die2, sum);
return sum;
}
}[/code]
Acredito que o problema maior seja entre a linha 57 e 61, mas se não for me avisem. Pois não sei o que devo usar para conseguir ler a variavel name, como podem ver, entre wins e loses, usei mais de uma maneira já, e mesmo assim não consegui.
se a variavel ‘name’ estiver null, presta atenção na sua Classe Principal vc está fazendo:
final String name = JOptionPane.showInputDialog("Qual é o seu nome?");
Craps game = new Craps();
game.play();
Agora olhe na sua Classe Craps nessa linha:
String name = null;
Quando vai imprimir vai ficar null, para resolver isso faz assim, na sua Classe CrapsTest:
final String name = JOptionPane.showInputDialog("Qual é o seu nome?");
Craps game = new Craps(name); //passei o nome digitado do jogador para o construtor da classe Craps
game.play();
Lá na sua Classe Craps cria o construtor recebendo o valor do atributo passado e atribui a variável interna ‘name’ da classe:
String name = null;
public Craps(String name) {
this.name = name;
}
Pronto resolvido
Desculpe, se não compreendi a pergunta, mais foi o q deu a entender.
o problema era o que você entendeu mesmo, não consigo exibir o nome digitado pelo jogador, na frase “Jogador Felipe Wins”.
então cara, testei o que você falou, porém não rolou…segue abaixo o jeito que fiz com o código, se puder me falar se era realmente isso ou o que eu devo mudar:
public class Craps {
private Random randomNumbers = new Random();
String name = null;
public Craps(String name) {
this.name = name;
}
private enum Status { CONTINUE, WON, LOST};
private final static int SNAKE_EYES = 2;
private final static int TREY = 3;
private final static int SEVEN = 7;
private final static int YO_LEVEN = 11;
private final static int BOX_CARS = 12;
public void play()
{
int myPoint = 0;
Status gameStatus;
int sumOfDice = rollDice();
switch (sumOfDice)
{
case SEVEN:
case YO_LEVEN:
gameStatus = Status.WON;
break;
case SNAKE_EYES:
case TREY:
case BOX_CARS:
gameStatus = Status.LOST;
break;
default:
gameStatus = Status.CONTINUE;
myPoint = sumOfDice;
System.out.printf("sua pontuação é %d\n", myPoint);
break;
}
while(gameStatus == Status.CONTINUE)
{
sumOfDice = rollDice();
if (sumOfDice == myPoint)
gameStatus = Status.WON;
else
if (sumOfDice == SEVEN)
gameStatus = Status.LOST;
}
if (gameStatus == Status.WON)
JOptionPane.showMessageDialog(null, "Jogador %s Wins " +name);
else
JOptionPane.showMessageDialog(null, "Jogador %s Loses " +name);
}
public int rollDice()
{
int die1 = 1 + randomNumbers.nextInt(6);
int die2 = 1 + randomNumbers.nextInt(6);
int sum = die1 + die2;
System.out.printf ("Player rolled %d + %d = %d\n",die1, die2, sum);
return sum;
}
}[/code]
PS: agora o meu problema pelo menos pelo que aparece no programa, ficou no CrapsTest, pois o game não é reconhecido em lugar nenhum:
[code]
import javax.swing.JOptionPane;
public class CrapsTest {
public static void main (String args[])
{
JOptionPane.showMessageDialog(null, “Pressione OK para começar o jogo”);
final String name = JOptionPane.showInputDialog(“Qual é o seu nome?”);
Craps game = new Craps(name);
import javax.swing.JOptionPane;
public class CrapsTest {
public static void main(String args[]) {
JOptionPane.showMessageDialog(null, "Pressione OK para começar o jogo");
final String name = JOptionPane.showInputDialog("Qual é o seu nome?");
Craps game = new Craps(name);
}
}
/**
* @author _________
*/
import java.util.Random;
import javax.swing.JOptionPane;
public class Craps {
private Random randomNumbers;
String name = null;
private final static int SNAKE_EYES = 2;
private final static int TREY = 3;
private final static int SEVEN = 7;
private final static int YO_LEVEN = 11;
private final static int BOX_CARS = 12;
public Craps(String name) {
this.name = name;
randomNumbers = new Random();
play();
}
private enum Status {
CONTINUE, WON, LOST
};
public void play() {
int myPoint = 0;
Status gameStatus;
int sumOfDice = rollDice();
switch (sumOfDice) {
case SEVEN:
case YO_LEVEN:
gameStatus = Status.WON;
break;
case SNAKE_EYES:
case TREY:
case BOX_CARS:
gameStatus = Status.LOST;
break;
default:
gameStatus = Status.CONTINUE;
myPoint = sumOfDice;
System.out.printf("sua pontuação é %d\n", myPoint);
break;
}
while (gameStatus == Status.CONTINUE) {
sumOfDice = rollDice();
if (sumOfDice == myPoint) {
gameStatus = Status.WON;
} else if (sumOfDice == SEVEN) {
gameStatus = Status.LOST;
}
}
if (gameStatus == Status.WON) {
JOptionPane.showMessageDialog(null, "Jogador %s Wins " + name);
} else {
JOptionPane.showMessageDialog(null, "Jogador %s Loses " + name);
}
}
public int rollDice() {
int die1 = 1 + randomNumbers.nextInt(6);
int die2 = 1 + randomNumbers.nextInt(6);
int sum = die1 + die2;
System.out.printf("Player rolled %d + %d = %d\n", die1, die2, sum);
return sum;
}
}