猪骰子游戏人类与计算机Java程序

时间:2014-01-31 22:27:40

标签: java

我已经在这个项目上工作了大约一个星期了,我想我已经把它打包了。每当我运行程序时,当我在游戏开始时询问用户(人与计算机)时,我遇到的问题是它再次询问我的名字。以下是我到目前为止的情况:

 import java.util.Scanner;  

 public class Assignment  
 {  
 Scanner usersName;  
 Boolean humanTurn = true;  
 Boolean computerTurn = true;  
 int dice;  
 int humanTurnPoints, computerTurnPoints;  
 int humanTotalPoints = 0;
 int computerTotalPoints = 0;
 private Scanner keyboard;
 private Scanner key;   

 //System.out.print("Please enter your name: ");
 //usersName = new Scanner(System.in);  
 //setStart(usersName.nextLine());

 public void roll()  
     {  
     dice = (int)(Math.random()*6) + 1;                   
     }      

 public int humanTurnScore()  
     {  
         {  
             humanTurnPoints = dice + humanTurnPoints;  
             System.out.println("You threw: " + dice);
             System.out.println("You have scored: " + humanTurnPoints + " in your turn.");  
         } return humanTurnPoints;  
     } 
 public void humanTurnZero()
 {
    humanTurnPoints = 0;
 } 

 public int computerTurnScore()  
     {  
         {  
             computerTurnPoints = dice + computerTurnPoints;  
             System.out.println("Computer has scored: " + computerTurnPoints + " in its turn.");  
         } return computerTurnPoints;  
     }     
  public void computerTurnZero()
     {
        computerTurnPoints = 0;
     } 

 public Assignment()  
 {  
     humanGame();  
     if(!humanTurn)  
     {  
         computerTurn();  
     }  
 }  
 public int humanGame()
    { 

     System.out.println("To start the game please press 'r'.");  
     key = new Scanner(System.in);  
     String start = key.nextLine();  
     if(!start.equalsIgnoreCase("R")) 
     {
            System.out.println("Make sure you are pressing 'r'.");
            humanGame();
     }

     if(start.equalsIgnoreCase("R"))
        {                          
                     System.out.println("You pressed 'r'.");  
                     System.out.println("Lets start.");           


         do{  
             roll();    


             if(dice == 1)  
             {  
                 System.out.println("You got 1 and you lost your turn.");
                 System.out.println("Computer's GRAND TOTAL score is: " + computerTotalPoints);
                 humanTurnZero();            
                 computerTurn();  

             }  
             else if(dice != 1) 
             {

                 humanTotalPoints += dice;  
                    if(humanTotalPoints >= 100)    
                    {  
                        System.out.println("You threw: " + dice);
                        System.out.println("Your GRAND TOTAL score is: " + humanTotalPoints);
                        System.out.println("Congratulations, you win!");  
                        System.exit(0);  
                    } 
                 humanTurnScore();  
                 System.out.println("Your GRAND TOTAL score is: " + humanTotalPoints);  
                 System.out.println("Computer's GRAND TOTAL score is: " + computerTotalPoints);
                 System.out.println("You can hold or roll again.");  
                 System.out.println("To roll again press 'r' or 'h' to hold.");  
                 keyboard = new Scanner(System.in);  
                 String choice = keyboard.nextLine();  

                 if(choice.equalsIgnoreCase("R"))                                  
                     {  
                       System.out.println("You pressed 'r'.");  
                       System.out.println("Lets roll again.");   
                       roll();           

                             if(!choice.equalsIgnoreCase("R"))
                                {
    System.out.println("You didn't press 'r'. To make sure the program is running correctly please press 'r' to roll or 'h' to hold.");
                                    humanGame();
                                }
                    }

                 if(choice.equalsIgnoreCase("h"))  
                     {                         
                     System.out.println("You pressed 'h' and loose your turn.");
                     System.out.println("Your Grand total is: " + humanTotalPoints);
                     humanTurnZero();  
                     computerTurn();  
                     }     

                }  

        }while(humanTurn);     

     }return dice;  
 }  
  public int computerTurn()  
  {  
 System.out.println("Now it's computer turn.");  

 do {  
     roll();  

     if(dice != 1)  
     {  
         computerTotalPoints += dice; 
            if(computerTotalPoints >=100)  
                {  
                    System.out.println("Computer threw: " + dice);
                    System.out.println("Computer's GRAND TOTAL score is: " +  computerTotalPoints);
                    System.out.println("Game Over! the computer wins");  
                    System.exit(0);  
                }   
         System.out.println("Computer threw: " + dice);
         System.out.println("Computer's GRAND TOTAL score is: " + computerTotalPoints);
         System.out.println("Your Grand total is: " + humanTotalPoints);
         computerTurnScore();  
         roll();  
     }  

     if(dice == 1)   
     {  
         System.out.println("Computer thrown 1 therefore it's your turn now.");  
         computerTurnZero();  
         humanGame();  
     }  

     if(computerTurnPoints >= 20)  
     {  
         System.out.println("Computer scored already " + computerTurnPoints + " you'd  better start to focus.");  
         System.out.println("Please play again");  
         humanGame();  
     }   

 }while (computerTurn);  
 return dice;  

 }     


 public static void main(String[] args)  
 {  
 new Assignment();  
 }  
 }  

我注释掉了(靠近程序的顶部)我在程序开头询问用户他们的名字是什么。我实际上需要在所有System.out.println中,它说'你'我需要它来说出usersName。

请有人帮我解决这个问题。我知道有人在这里帮助我。

提前谢谢。

2 个答案:

答案 0 :(得分:2)

当然每次都会问你! 您需要将其保存在文件中,然后从中读取!

    //Write
    PrintWriter writer = new PrintWriter("the-file-name.txt", "UTF-8");
    writer.println(usersName.nextLine());
    writer.close();

    //Read
    BufferedReader br = new BufferedReader(new FileReader("the-file-name.txt"));
    try {
        while (line != null) {
            usersName = line;
            line = br.readLine();
        }
    } finally {
    br.close();
    }

添加你的逻辑,以确定你自己是否有文件。

答案 1 :(得分:1)

好的,我想你可能会对变量的生命周期感到困惑。在java中,像String username;这样的变量只存在于它们自己的范围内。

如果在方法中定义变量,则会忘记程序何时存在该方法。

如果将其定义为类中的字段(您正在执行的操作),则只有在该类的实例存在时才会存在。一旦程序忘记了类的实例,它也会忘记附加到该实例的任何内容,包括其变量。

一旦程序关闭,计算机自然会忘记程序所持有的所有对象,因此username不再存在。

如果您希望程序在关闭时记住某些值,则必须将该值存储在文件或数据库中或其他任何值。我建议使用一个文件,为此建立一个数据库将是矫枉过正。我将在一小时前向您推荐罗伯托的答案,以获取有关如何实现这一目标的更多信息。