2016-09-19 1 views
0

J'essaie d'écrire du code pour un jeu qui a un joueur et un dé de jeu d'ordinateur jusqu'à ce que l'un ou les deux atteignent 250 (son possible pour les attacher). Le joueur et l'ordinateur peuvent choisir parmi 1 choix de matrice sur 3. Une cravate à 24 faces, deux à 10 faces ou trois à 6 faces. Il y a un bonus pour le dé 10 et 6 faces si les dé sont tous les mêmes. Il y a 2 "lacs" où si le joueur atterrit dedans le joueur doit retourner au nombre inférieur juste avant le début du lac, il y a aussi un marécage boueux où chaque mouvement que le joueur fait dans le marais est coupé moitié. Pour 10 points (10, 20, 30, 40 ETC), le joueur pioche une carte au hasard. Il y a 11 cartes différentes, le joueur peut obtenir au hasard:Jeu de dés avec deux joueurs, 3 choix de matrices et cartes

1-4: Le joueur se déplace en avance une quantité aléatoire à partir de 1-6

5: joueur se déplace en avance une quantité aléatoire 4-11 (aléatoire 8 + 4)

6: joueur se déplace à l'endroit où l'autre joueur (voir ci-dessous)

7: le joueur se déplace en arrière vers le début (se déplace vers l'emplacement 0)

8-9: joueur se déplace en arrière un aléatoire montant de 1-6

10-11: le joueur recule d'un montant aléatoire de 4-11

J'ai quelques problèmes. Mon premier problème est que les jets de dé ne changent pas après chaque tour, ils resteront les mêmes. Donc, si je choisis 3 meurent, je pourrais avoir 3 numéros aléatoires, si je choisis ceux qui meurent à nouveau, je vais obtenir ces mêmes 3 numéros.

Je n'arrive pas non plus à faire en sorte que les joueurs meurent compte pour mettre à jour correctement. Si le joueur obtient 18 points au total et le prochain 14, le compte passera de 18 à 14.

Mon troisième problème est qu'il semble que peu importe ce que je fais la déclaration d'impression pour les lacs, le patch boueux et le l'annonce du gagnant s'imprime toujours. J'ai essayé quelques choses différentes et rien ne semble fonctionner.

Je suis nouveau à l'écriture de code (ceci est mon 4ème programme écrit) et n'ai pas de connaissances approfondies pour savoir ce qui ne va pas. Le code ne doit pas être fait de manière experte, je voudrais juste qu'il fonctionne correctement. Toute aide est grandement appréciée.

/*This program will create a "Board" game. Each player can choose 
    from several different types of die. The computer and user will take 
    turns "rolling" a dice. There are several obstacles that can send one 
    of the players back. The goal is to get above 250*/ 

    import java.util.*; 

    public class Project4 { 

public static void main(String[] args) { 
    Scanner in=new Scanner(System.in); 
    //assigning variables 
    int p1, p2; 
    p1=p2=0; 
    int spacesmoved = 0; 

    //Setting up the randomization of the 24 sided die 
    int minimum1 = 1; 
    int maximum1 = 24; 
    Random rn1 = new Random(); 
    int range1 = maximum1 - minimum1 + 1; 
    int die1 = rn1.nextInt(range1) + minimum1; 

    //Setting up the randomization of the 10 sided die 
    int minimum2 = 1; 
    int maximum2 = 10; 
    Random rn2 = new Random(); 
    int range2 = maximum2 - minimum2+ 1; 
    int die2 = rn2.nextInt(range2) + minimum2; 
    int die22 = rn2.nextInt(range2) + minimum2; 
    int die222 = rn2.nextInt(range2) + minimum2; 

    //Setting up the randomization of the 6 sided die 
    int minimum3 = 1; 
    int maximum3 = 10; 
    Random rn3 = new Random(); 
    int range3 = maximum3 - minimum3+ 1; 
    int die3 = rn3.nextInt(range3) + minimum3; 
    int die33 = rn3.nextInt(range3) + minimum3; 
    int die333 = rn3.nextInt(range3) + minimum3; 

    //Setting a loop for the players to take turns until one, or both, reach > 250 
    while (p1 <= 250 && p2 <= 250) { 
     {System.out.println(" Current positions. Player: " + p1 + " Computer: " + p2); 
      System.out.println("Which die would you like to roll? die1(1) = one 24-sided die, die2(2) = two 10-sided dice, die3(3) = three 6-sided dice: "); 
     String diechoice = in.nextLine().toLowerCase(); 

     //Getting the die roll if the player chooses the 24 sided die 
     if (diechoice.equals ("1")) { 
      spacesmoved = (die1); 
     System.out.println("Player rolled a " + die1); 
     System.out.println("Player moves forward " + die1 +" spaces"); 
     p1+=spacesmoved; 

     } 

     //Getting the die roll if the player chooses the two 10 sided die 
     if (diechoice.equals ("2")) { spacesmoved = (die2 + die22); 
     System.out.println("First die is " + die2);//TESTTTT 
     System.out.println("Second die is a " + die22);//TEST 
     System.out.println(die2 + die22);//TESTTTTtttt 
      if (die2 == die22); { 
      spacesmoved = (die2 + die22 + die222); 
      System.out.println("Player rolled doubles, player gets to roll a 3rd 10 sided die"); 
      System.out.println("Players 3rd dice roll is " + die222); 
      System.out.println("Player moves forward a total of " + spacesmoved + " spots"); 
      p1 += spacesmoved; 
     } 
    // player1spot = (currentspot + spacesmoved); 
     } 

     //Getting the die roll if the player chooses three 6 sided die 
     if (diechoice.equals("3")) { spacesmoved = (die3 + die33 + die333); 
     System.out.println("die 1 is " + die3); 
     System.out.println("die 2 is " + die33); 
     System.out.println("die 3 is " + die333); 
     System.out.println("Player 1 moves forward a total of " + spacesmoved + " spots"); 
     { if (die3 == die33) 
      if (die33 == die333) 
      spacesmoved = (spacesmoved * 2); 

     p1 += spacesmoved; 
     }} 
     /*Setting up the lakes and muddy patch. If the player lands in a lake he goes back 
     to the lower edge of the lake. If in the mud his moves are cut in half ONLY while in the mud */ 

     {if (spacesmoved >= (83) || spacesmoved <= (89)); spacesmoved = (82); 
     System.out.println("Player landed in a lake, player goes back to space " + spacesmoved); 
     if (spacesmoved >= (152) || spacesmoved <= (155)); spacesmoved = (151); 
     System.out.println("Player landed in a lake, player goes back to space " + spacesmoved); 
     if (spacesmoved >= (201) || spacesmoved <= (233)); spacesmoved = (spacesmoved/2); 
     System.out.println("Player landed in mud, players turns are cut in half until player gets out"); 
     } 
     //Setting up the random cards if the player lands on a 10 
     if (p1 % 10==0); 
     { int minimum4 = 0; 
     int maximum4 = 11; 
     Random rn4 = new Random(); 
     int range4 = maximum4 - minimum4 + 1; 
     int card = rn4.nextInt(range4) + minimum4; 

     //if player gets a card that moves them ahead a random number between 1-6 
     if (card >=4); 
      int minimum = 0; 
      int maximum = 6; 
      Random rn = new Random(); 
      int range = maximum - minimum + 1; 
      int cardmove = rn.nextInt(range) + minimum; 
      p1 = cardmove; 

     //if player gets a card that moves them ahead a random number between 4-11 
     if (card == 5); 
      int minimum5 = 4; 
      int maximum5 = 11; 
      Random rn5 = new Random(); 
      int range5 = maximum5 - minimum5 + 1; 
      int cardmove5 = rn5.nextInt(range5) + minimum5; 
      p1 = cardmove5; 
     //if player gets a card that moves them to the spot of the other player 
     if (card == 6); 
      p2 = p1; 


     //if player gets a card that moves them back to 0 (moves location to 0) 
     if (card ==7); 
      p1 = 0; 

     //if player gets a card that moves them back between 1-6 spaces 
     if (card == (8) || card == 9); 
      int minimum6 = 1; 
      int maximum6 = 6; 
      Random rn6 = new Random(); 
      int range6 = maximum6 - minimum6 + 1; 
      int cardmove6 = rn6.nextInt(range6) + minimum6; 


     //if player gets a card that moves them back between 4-11 spaces 
     if (card == (10) || card == 11); 
      int minimum7 = 4; 
      int maximum7 = 11; 
      Random rn7 = new Random(); 
      int range7 = maximum7 - minimum7 + 1; 
      int cardmove7 = rn7.nextInt(range7) + minimum7; 
     } 
      //Setting up the computers turn 

     System.out.println("Computers turn"); 
     { 
     int minimum = 0; 
     int maximum = 2; 
     Random rn = new Random(); 
     int range = maximum - minimum + 1; 
     int computersturn = rn.nextInt(range) + minimum; 

     //If computer randomly chooses a 24 sided die 
     spacesmoved = (die1); 
     System.out.println("Computer rolled a " + die1); 
     System.out.println("Computer moved " + die1 +" spaces"); 
     p2+=spacesmoved; 

     } 

     //If the computer randomly chooses the two 10 sided die 
     if (diechoice.equals ("die2")) { spacesmoved = (die2 + die22); 
     System.out.println("First die is " + die2);//TESTTTT 
     System.out.println("Second die is a " + die22);//TEST 
     System.out.println(die2 + die22);//TESTTTTtttt 
      if (die2 == die22); { 
      spacesmoved = (die2 + die22 + die222); 
      System.out.println("Computer rolled doubles, player gets to roll a 3rd 10 sided die"); 
      System.out.println("Computer 3rd dice roll is " + die222); 
      System.out.println("Computer moves a total of " + spacesmoved + " spots"); 
      p2 += spacesmoved; 
     } 

     } 

     //If the computer randomly chooses three 6 sided die 
     if (diechoice.equals("die3")) { spacesmoved = (die3 + die33 + die333); 
     System.out.println("die 1 is " + die3); 
     System.out.println("die 2 is " + die33); 
     System.out.println("die 3 is " + die333); 
     System.out.println("Computer 1 moves a total of " + spacesmoved + " spots"); 
     { if (die3 == die33) 
      if (die33 == die333) 
      spacesmoved = (spacesmoved * 2); 

     p2 += spacesmoved; 


     } 




     //Setting the lakes and mud for the computer 

     if (spacesmoved >= (83) || spacesmoved <= (89)); spacesmoved = (82); 
     System.out.println("Computer landed in a lake, player goes back to space " + spacesmoved); 
     if (spacesmoved >= (152) || spacesmoved <= (155)); spacesmoved = (151); 
     System.out.println("Computer landed in a lake, player goes back to space " + spacesmoved); 
     if (spacesmoved >= (201) || spacesmoved <= (233)); spacesmoved = (spacesmoved/2); 
     System.out.println("Computer landed in mud, players turns are cut in half until player gets out"); 

     //Setting up the cards for the computer 
     if (p1 % 10==0); 
     { int minimum4 = 0; 
     int maximum4 = 11; 
     Random rn4 = new Random(); 
     int range4 = maximum4 - minimum4 + 1; 
     int card = rn4.nextInt(range4) + minimum4; 

     //if computer gets a card that moves them ahead a random number between 1-6 
     if (card >=4); 
      int minimum = 0; 
      int maximum = 6; 
      Random rn = new Random(); 
      int range = maximum - minimum + 1; 
      int cardmove = rn.nextInt(range) + minimum; 

     //if computer gets a card that moves them ahead a random number between 4-11 
     if (card == 5); 
      int minimum5 = 4; 
      int maximum5 = 11; 
      Random rn5 = new Random(); 
      int range5 = maximum5 - minimum5 + 1; 
      int cardmove5 = rn5.nextInt(range5) + minimum5; 

     //if computer gets a card that moves them to the spot of the other player 
     if (card == 6); 
      p1 = p2; 


     //if computer gets a card that moves them back to 0 (moves location to 0) 
     if (card ==7); 
      p1 = 0; 

     //if computer gets a card that moves them back between 1-6 spaces 
     if (card == (8) || card == 9); 
      int minimum6 = 1; 
      int maximum6 = 6; 
      Random rn6 = new Random(); 
      int range6 = maximum6 - minimum6 + 1; 
      int cardmove6 = rn6.nextInt(range6) + minimum6; 


     //if computer gets a card that moves them back between 4-11 spaces 
     if (card == (10) || card == 11); 
      int minimum7 = 4; 
      int maximum7 = 11; 
      Random rn7 = new Random(); 
      int range7 = maximum7 - minimum7 + 1; 
      int cardmove7 = rn7.nextInt(range7) + minimum7; 
     } 
     }  
     //Writing a final statment showing the winner, or if both tied. 
     {  if (p1 > p2); 
     System.out.println("Player 1 wins! Good job!"); 

     if (p2 >p1); 
      System.out.println("Computer wins! Better luck next time!"); 

     if (p2 == p1); 
      System.out.println("The game ends in a tie!");  
     } 
    } 

    } 




} 

}

+1

Posez une question à la fois –

Répondre

2

Voici les choses que je remarquai par rapport aux trois problèmes que vous avez mentionnés:

Problème numéro 1:

Vous définissez les valeurs des dés à le tout début de l'exécution du code. À partir de ce moment-là, vous ne les changez pas du tout. C'est la cause du problème de toujours rouler les mêmes numéros à chaque tour. Vous pensez peut-être que chaque fois que vous utilisez die1 ou l'une des autres variables de die, il ré-exécute le code en haut de votre fichier, mais ce n'est pas le cas.

Le code en haut de votre fichier est exécuté une seule fois, puis la valeur stockée dans cette variable est utilisée pour le reste de l'exécution du programme. Jusqu'à ce que vous le changiez.Donc, vous voulez faire quelque chose comme:

//Getting the die roll if the player chooses the 24 sided die 
if (diechoice.equals ("1")) { 
    die1 = rn1.nextInt(range1) + minimum1; 
    System.out.println("Player rolled a " + die1); 
    System.out.println("Player moves forward " + die1 +" spaces"); 
    p1+=die1; 
} 

Vous devrez aussi changer que dans les autres cas où le dé est lancé. Un autre avantage de cette manière est que vous n'avez besoin que d'un seul générateur de nombres aléatoires. Vous n'en avez pas vraiment besoin pour chaque dé. Vous pouvez utiliser le même pour tous les jets de dés.

Numéro Problème 2:

Je ne sais pas exactement ce qui se passe mal avec jets de dés, s'il y a vraiment quelque chose qui ne va pas là-bas, mais je l'ai fait remarquer quelques endroits où vous voulez changer ce qui se fait à p1 et p2:

  • Lorsque le joueur reçoit une carte qui les déplace en avance, vous aurez envie d'utiliser += au lieu de =. Par exemple, p1 += cardmove5 au lieu de p1 = cardmove5
  • Lorsque le joueur reçoit une carte qui le recule, il semble que vous ayez oublié d'ajouter les instructions p1 -= cardmove.
  • Aussi, assurez-vous que vous avez p1 et p2 dans les bons endroits. Par exemple, je pense que sur le tour de l'ordinateur, s'ils obtiennent la carte pour les déplacer à la place de l'autre joueur, vous vouliez faire p2 = p1, mais à la place vous avez p1 = p2. Même avec l'ordinateur qui remonte à 0. Vous avez p1 = 0, mais il semble que vous voulez p2 = 0. Alors fais juste attention à ça. (. Il faut aussi attention à copier coller Je devine qui est pourquoi cela est arrivé)

Problème numéro 3:

Ce problème ressemble à elle est causée par le fait que vous utilisez l'opérateur || où vous devriez utiliser &&. Lorsque vous utilisez ||, vous dites effectivement "ou". Donc, cette première déclaration

if (spacesmoved >= (83) || spacesmoved <= (89)) 

se lit comme « si spacesmoved est supérieur ou égal à 83 OU inférieur ou égal à 89 » ... Pensez que pour une seconde. Y a-t-il un nombre qui n'est PAS supérieur à 83 OU inférieur à 89? La réponse est non. Chaque nombre satisfera cette condition. Vous voulez utiliser &&, ce qui signifie « et » comme ceci:

if (spacesmoved >= (83) && spacesmoved <= (89)) 

« si spacesmoved est supérieur ou égal à 83 ET inférieur ou égal à 89 », qui ne fonctionne que pour les nombres entre 83 à 89 inclusivement.

Vous devrez également supprimer les points-virgules après vos instructions "if" dans ce bloc et les autres blocs similaires. Si vous ne le faites pas, le code dans ces conditions ne sera pas exécuté. C'est en fait un bug très difficile à trouver quand ça arrive. Une autre chose à savoir est que lorsque vous voulez que plusieurs choses soient exécutées dans une condition «si», vous devez l'entourer d'accolades {}, sinon, seule la première ligne sera incluse dans la condition, et toutes les suivantes les lignes seront exécutées sans condition. C'est un autre fait qui cause ce troisième problème.Une dernière chose est que vous devriez essayer d'utiliser les instructions "else if" et "else". Cela aidera votre flux de code à avoir plus de sens. Je ne vais pas faire tout le travail pour vous, mais ce bloc de code doit probablement plus comme ceci:

if (p1 >= (83) && p1 <= (89)) 
{ 
    p1 = (82); 
    System.out.println("Player landed in a lake, player goes back to space " + p1); 
} 
else if (p1 >= (152) && p1 <= (155)) 
{ 
    p1 = (151); 
    System.out.println("Player landed in a lake, player goes back to space " + p1); 
} 
else if (p1 >= (201) && p1 <= (233)) 
{ 
    spacesmoved = (spacesmoved/2); 
    p1 -= spacesmoved; 
    System.out.println("Player landed in mud, players turns are cut in half until player gets out"); 
} 

Bonus Astuce

Vous apprenez bien, et il semble que vous êtes penser au flux de code plutôt bien. Continuez à travailler et à apprendre et vous l'aurez.

Regardez dans votre utilisation des parenthèses. Les utiliser ne fait pas de mal, mais vous les utilisez plus que nécessaire.

Bonne chance! Et continuez d'apprendre!