2016-04-07 11 views
1

Başlıkta da belirtildiği gibi, bir Yöntem olarak bir Menü ile bir RPS Oyunu oluşturmaya çalışıyorum, buradaki menüden girişleri nasıl arayacağımı bilmiyorum Herhangi bir nokta. Daha iyi bir fikir için , bu benim kodudur: oyuncu seçeneği 1 seçtiğindeRock Paper Scissors Oyun (Menü Yöntemi)

import java.util.Scanner; 
import java.util.Random; 

public class RockPaperScissors 
{ 
    public static void main (String [] args) 
    { 
     Scanner keyboard = new Scanner (System.in); 
     String player1choice, player1Name; 
     int mainMenu,subMenu; 
     String again; 
     player1Name = ""; 


    welcomeBanner(); 
    mainMenu = getMenu (keyboard); 


    if (mainMenu == 1) 
    { 
     keyboard.nextLine(); 
     player1Name = getAName (keyboard); 

     for (int i = 0; i < 50; ++i) System.out.println(); 
     main (null); 
    } 

    if (mainMenu == 2) 
    { 
     System.out.println("Welcome "+player1Name); //add name input 
     subMenu =getsubMenu (keyboard); 
     System.out.println("You have chosen: "); //add option chosen 

     System.out.println("Cpu has got, It's a Tie!");//cpuChoice add 


    } 

    if (mainMenu == 3) 
    { 
     keyboard.nextLine(); 
     String exitRequest; 
     System.out.print("Are you sure you want to exit? (Y/N): "); 
     exitRequest = keyboard.nextLine(); 
     if (exitRequest.equals("y") || exitRequest.equals("Y")) 
     { 
      System.out.println("Good Bye!"); 
      System.exit(0); 
     } 
     else if (exitRequest.equals("n") || exitRequest.equals("N")) 
     { 
      for (int i = 0; i < 50; ++i) System.out.println(); 
      main(null); 
     } 

    } 
} 
static void welcomeBanner() 
{ 
    for (int i = 0; i < 60; i++) 
    { 
     System.out.print('*'); 
    } 
    System.out.println(""); 
    System.out.println("*  Welcome To The Rock, Paper, Scissors Game   *"); 
    System.out.println("*----------------------------------------------------------*"); 
    System.out.println("*  Created by: Jonathan Gutierrez, and I am NoxBot!  *"); 
    for (int i = 0; i < 60; i++) 
    { 
     System.out.print('*'); 
    } 
    System.out.println(""); 
    System.out.println(""); 
} 
static int getMenu (Scanner aKeyboard) 
{ 
    int playermenuChoice; 
    System.out.println("1. Enter Player Name"); 
    System.out.println("2. Play a Game"); 
    System.out.println("3. Exit Application"); 
    System.out.println(""); 
    System.out.print("Enter your choice: "); 
    playermenuChoice = aKeyboard.nextInt(); 
    return playermenuChoice; 

} 
static int getsubMenu (Scanner aKeyboard) 
{ 
    int submenuChoice; 
    System.out.println("Enter 1 for Rock"); 
    System.out.println("Enter 2 for Paper"); 
    System.out.println("Enter 3 for Scissors"); 
    System.out.println(""); 
    System.out.print("Enter choice: "); 
    submenuChoice = aKeyboard.nextInt(); 
    return submenuChoice; 
} 
static String getAName (Scanner aKeyboard) 
{ 
    String player1Info; 
    System.out.print("Enter your name: "); 
    player1Info = aKeyboard.nextLine(); 
    return player1Info; 
} 
static String computerChoice() 
{ 
    String cpuChoice; 
    cpuChoice = ""; 
    Random randomNumbers = new Random(); 
    int cpu = randomNumbers.nextInt (2) + 1; 
    switch (cpu) 
    { 
     case 1: 
     cpuChoice = "Rock"; 
     break; 
     case 2: 
     cpuChoice = "Paper"; 
     break; 
     case 3: 
     cpuChoice = "Scissors"; 
     break; 
    } 
    return cpuChoice; 
} 

Yani, programın oyuncunun adını girmek ister ve ben en spesifik olarak ne zaman (herhangi bir noktada o girişini kullanmak istiyor mainMenu == 2). Bunu nasıl yapabilirim?

DÜZENLEME: Herhangi

import java.util.Scanner; 
import java.util.Random; 
public class RockPaperScissors 
{ 
    public static void main (String [] args) 
    { 
     Scanner keyboard = new Scanner (System.in); 
     String player1choice, player1Name, subMenu; 
     int mainMenu; 
     String again; 
     player1Name = ""; 

     welcomeBanner(); 
     mainMenu = getMenu (keyboard); 

    if (mainMenu == 1) 
    { 
     keyboard.nextLine(); 
     player1Name = getAName (keyboard); 

     for (int i = 0; i < 50; ++i) System.out.println(); 
     welcomeBanner(); 
     mainMenu = getMenu (keyboard); 
     System.out.println(""); 
     System.out.println("Welcome " + player1Name); 
     System.out.println(""); 

    } 

    if (mainMenu == 2) 
    { 

     subMenu =enterPlayersChoice (keyboard); 
     keyboard.nextLine(); 
     String cmpu = computerChoice(); 
     for(int i = 0; i < 3; i ++) 

     if (subMenu.equals(cmpu)) 
      System.out.println("It's a tie!"); 
     else if (subMenu.equals("rock")) 
     if (cmpu.equals("scissors")) 
     System.out.println("Rock crushes scissors. You win!!"); 
     else if (cmpu.equals("paper")) 
     System.out.println("Paper eats rock. You lose!!"); 
     else if (subMenu.equals("paper")) 
     if (cmpu.equals("scissors")) 
     System.out.println("Scissor cuts paper. You lose!!"); 
     else if (cmpu.equals("rock")) 
     System.out.println("Paper eats rock. You win!!"); 
     else if (subMenu.equals("scissors")) 
     if (cmpu.equals("paper")) 
     System.out.println("Scissor cuts paper. You win!!"); 
     else if (cmpu.equals("rock")) 
     System.out.println("Rock breaks scissors. You lose!!"); 
     else System.out.println("Invalid user input."); 
     System.out.println(""); 


    } 

    if (mainMenu == 3) 
    { 
     keyboard.nextLine(); 
     String exitRequest; 
     System.out.print("Are you sure you want to exit? (Y/N): "); 
     exitRequest = keyboard.nextLine(); 
     if (exitRequest.equals("y") || exitRequest.equals("Y")) 
     { 
      System.out.println("Good Bye!"); 
      System.exit(0); 
     } 
     else if (exitRequest.equals("n") || exitRequest.equals("N")) 
     { 
      for (int i = 0; i < 50; ++i) System.out.println(); 
      main(null); 
     } 

    } 
} 
static void welcomeBanner() 
{ 
    for (int i = 0; i < 60; i++) 
    { 
     System.out.print('*'); 
    } 
    System.out.println(""); 
    System.out.println("*  Welcome To The Rock, Paper, Scissors Game   *"); 
    System.out.println("*----------------------------------------------------------*"); 
    System.out.println("*  Created by: Jonathan Gutierrez, and I am NoxBot!  *"); 
    for (int i = 0; i < 60; i++) 
    { 
     System.out.print('*'); 
    } 
    System.out.println(""); 
    System.out.println(""); 
} 
static int getMenu (Scanner aKeyboard) 
{ 
    int playermenuChoice; 
    System.out.println("1. Enter Player Name"); 
    System.out.println("2. Play a Game"); 
    System.out.println("3. Exit Application"); 
    System.out.println(""); 
    System.out.print("Enter your choice: "); 
    playermenuChoice = aKeyboard.nextInt(); 
    return playermenuChoice; 

} 
public static String enterPlayersChoice(Scanner aKeyboard) 
{ 
    String input = ""; 
    System.out.print("You have a choice of picking rock, paper, or scissors: "); 
    input = aKeyboard.nextLine(); 
    String inputLower = input.toLowerCase(); 
    return inputLower; 
} 
static String getAName (Scanner aKeyboard) 
{ 
    String player1Info; 
    System.out.print("Enter your name: "); 
    player1Info = aKeyboard.nextLine(); 
    return player1Info; 
} 
public static String computerChoice() 
{ 
    String cpuChoice; 
    cpuChoice = "nothing"; 
    Random randomNumbers = new Random(); 
    int cpu = randomNumbers.nextInt (2) + 1; 
    switch (cpu) 
    { 
     case 1: 
     cpuChoice = "rock"; 
     break; 
     case 2: 
     cpuChoice = "paper"; 
     break; 
     case 3: 
     cpuChoice = "scissors"; 
     break; 
    } 
    return cpuChoice; 
} 

} i oyun olmadığını oyuncu kazanır bir mesaj görüntüleyebilir veya kaybetmek istemiyorum, ama (mainMenu == 2) atlanır ediliyor Bunu bitirmek için: Bu benim yeni kodu fikir?

+0

'Player1Name 'öğesini iki kez ayarlıyorsunuz. Yönteme girdikten sonra, ve yine dönüşte. Bundan sonra “ana (null)” diyorsunuz. “Ana (null)” diye çağırman gerektiğini düşünmüyorum. Ana yöntemin 5. ifadesi 'player1Name = ""; –

+0

ana (null) çağırıyordu, bu yüzden welcomeBanner() ve mainMenu()' yı tekrar destabiliyorum, başka bir çözüm düşünmüyorum. ben player1Name = "" atarsam Programın derlenmesini sağlayabilecektim. Bu sadece istediğim şeyin bir çizimi –

+0

Bana bir dakika ver ve bunu yeniden yapılandırmana yardım edebilirim. –

cevap

2

Mevcut uygulamanızı farklı bir şekilde yeniden düzenlemenin bir yolu. Başlıca değişikliklerden bazıları, ana metot haricinde tüm metotları statik olmayan yapmak ve uygulamanın giriş noktası için bir RockPaperScissorsNew nesnesi oluşturmaktır. Ayrıca, sınıf değişkenlerini ekledim, böylece Tarayıcınızı tüm yöntemleriniz için bir nesne olarak geçirmeniz gerekmez.

Kullanıcı tarafından girilen girdiyi yeniden nasıl kullanabileceğinizi orijinal sorunuzu yanıtlamak için, sağladığım çözüm bu bilgiyi sınıf değişkeni içinde tutmaktır.

import java.util.Random; 
import java.util.Scanner; 


public class RockPaperScissorsNew { 

    //Class variables 
    Scanner keyboard; 
    String player1choice, player1Name; //Name will be stored here. 
    int mainMenu,subMenu; 

    public RockPaperScissorsNew() 
    { 
     keyboard = new Scanner(System.in); 
     welcomeBanner(); //Display the welcome banner once. 
     while(true)  //Repeatedly display the main menu. 
      getChoice(); //Get the user's choice 
    } 

    public void getChoice() 
    { 
     int choice = -1;   //Set choice to fail first. 
     while (choice > 3 || choice < 0) //Wait until user choice passes. 
     { 
      choice = getMenu(); 
     } 
     if (choice == 1) { //Choose your sub option. 
      getAName(); // Get the user name. 
      System.out.println("Your name is " + player1Name); //Saved 
     } 
     if (choice == 2) 
      getsubMenu(); 
     if (choice == 3) 
      System.exit(0); 
    } 

    public void welcomeBanner() 
    { 
     for (int i = 0; i < 60; i++) 
     { 
      System.out.print('*'); 
     } 
     System.out.println(""); 
     System.out.println("*  Welcome To The Rock, Paper, Scissors Game   *"); 
     System.out.println("*----------------------------------------------------------*"); 
     System.out.println("*  Created by: Jonathan Gutierrez, and I am NoxBot!  *"); 
     for (int i = 0; i < 60; i++) 
     { 
      System.out.print('*'); 
     } 
     System.out.println(""); 
     System.out.println(""); 
    } 

    public int getMenu() 
    { 
     int playermenuChoice; 
     System.out.println("1. Enter Player Name"); 
     System.out.println("2. Play a Game"); 
     System.out.println("3. Exit Application"); 
     System.out.println(""); 
     System.out.print("Enter your choice: "); 
     playermenuChoice = Integer.parseInt(keyboard.nextLine().trim()); 
     return playermenuChoice; 
    } 

    public int getsubMenu() 
    { 
     int submenuChoice; 
     System.out.println("Enter 1 for Rock"); 
     System.out.println("Enter 2 for Paper"); 
     System.out.println("Enter 3 for Scissors"); 
     System.out.println(""); 
     System.out.print("Enter choice: "); 
     submenuChoice = Integer.parseInt(keyboard.nextLine().trim()); 
     return submenuChoice; 
    } 

    //This method has been changed to use the class variable, and no longer 
    //returns a string. 
    public void getAName() 
    { 
     //String player1Info; 
     System.out.print("Enter your name: "); 
     player1Name = keyboard.nextLine(); 
     //return player1Info; 
    } 

    public String computerChoice() 
    { 
     String cpuChoice; 
     cpuChoice = ""; 
     Random randomNumbers = new Random(); 
     int cpu = randomNumbers.nextInt (2) + 1; 
     switch (cpu) 
     { 
      case 1: 
      cpuChoice = "Rock"; 
      break; 
      case 2: 
      cpuChoice = "Paper"; 
      break; 
      case 3: 
      cpuChoice = "Scissors"; 
      break; 
     } 
     return cpuChoice; 
    } 

    public static void main(String...args) 
    { 
     new RockPaperScissorsNew(); 
    } 
} 
+0

Gerçekten bunu beğenmeme rağmen, gerekli olan birkaç şeyi özledim, sadece bir düzenleme yayınladım :) kodunuzu gördüğümde hala cevabı aldım –

İlgili konular