2016-11-22 14 views
-1

したがって、ユーザーが2つの異なるゲームをプレイすることを選択できるメニューを作成したいとします。私はメインメソッドを作成し、forループを作成したり、さまざまなゲームオプションのためのステートメントを切り替えたり、終了することができるようにしたいが、クラスをどのように呼び出すかわからないので、選択したときにゲームが実行される。メインメソッドでのクラスの呼び出し

誰かが私にこのことについてどうやって説明してもらえますか?ありがとう!

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

public class RpsGame { 

    /* Valid user input: rock, paper, scissors */ 

    public static void main(String[] args) { 

     System.out.print("Please Make Your Choice (Rock, Paper or Scissors): "); 

      try { 
       Scanner sc = 
       new Scanner(System.in); 

       String userInput = 
       sc.next();      
       if (isValid(userInput)) { 
        game(userInput); 

       } else { 
        print("Invalid user input!\nWrite rock, paper or scissors!"); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
    } 

    public static void print(String text) { 
     System.out.println(text); 
    } 

    public static boolean isValid(String input) { 

     if (input.equalsIgnoreCase("rock")) { 
      return true; 
     } 

     if (input.equalsIgnoreCase("paper")) { 
      return true; 
     } 

     if (input.equalsIgnoreCase("scissors")) {        
      return true; 
     } 

     return false; 
    } 

    public static void game(String user) { 
     String computer = computerResults(); 
     //System.out.print("Please Make Your Choice: "); 

     print(user + " vs " + computer + "\n"); 

     if (user.equalsIgnoreCase(computer)) { 
      print("Oh, Snap! Tied - No winners."); 
     } else { 

      if (checkWin(user, computer)) { 
       print("You won against the computer!"); 
      } else { 
       print("You lost against the computer!"); 
      } 
     } 
    } 

    public static String computerResults() { 

     String types[] = 
     {"rock", "paper", "scissors"}; 

     Random rand = new Random(); 
     int computerChoice = rand.nextInt(3);; 

     return types[computerChoice]; 
    } 

    public static boolean checkWin(String user, String opponent) { 

     if ((!isValid(user)) && (!isValid(opponent))) { 
      return false; 
     } 

     String rock = "rock", paper = "paper", scissors = "scissors"; 

     if ((user.equalsIgnoreCase(rock)) && (opponent.equalsIgnoreCase(scissors))) { 
      return true; 
     } 

     if ((user.equalsIgnoreCase(scissors)) && (opponent.equalsIgnoreCase(paper))) { 
      return true; 
     } 

     if ((user.equalsIgnoreCase(paper)) && (opponent.equalsIgnoreCase(rock ))) { 
      return true; 
     } 

     return false; 
     //If no possible win, assume loss. 
    } 
} 
+3

をあなたは「クラスを呼び出す」とはどういう意味ですか?クラスのインスタンスを作成し、メソッドなどを呼び出すことができます。これを行う方法の構造は、Javaチュートリアルでカバーされています。あなたがすでに持っているコードにはその例があります。あなたが試したものと何が効いていないものかを明確にすることはできますか? – David

+0

はい。だから、私はそれが私の主な方法であるように新しいファイルを作成するつもりです。その中で私はメニューを持っていますが、私はゲームを走らせるためにメソッドをどのように呼び出すのかは分かりません。私はまだコードを書いていない、私はちょうど私がこれについて行くだろうかを把握しようとしています。 –

+0

次に、入門的なJavaチュートリアルから始めましょう。クラスのインスタンスとメソッドの作成は* *チュートリアルでカバーされます。 'MyClass x = new MyClass();'と 'x.someMethod();'は簡単な例です。 – David

答えて

0

私がよく知っている最も簡単な方法は、ドライバクラスと呼ばれるものを使用することです。ドライバクラスは、2つの異なるゲームを実行するのに最適な、他のクラスのコードを実行するように設計されたクラスです。あなたはより多くの情報が必要な場合は、この記事をチェックしてください:What is a driver class? (Java)

0

をこのような何か試してみてください:

public class MyGameApp { 
    public static final String OPTION_1 = "1"; 
    public static final String OPTION_2 = "2"; 
    public static final String OPTION_EXIT = "3"; 

    public static void main(String... args) { 
     Scanner sc = new Scanner(System.in); 

     String userChoice = null; 
     do { 
      System.out.println("Choose an option: \n 1. Game 1\n2. Game 2\n3. Exit"); 

      userChoice = sc.nextLine(); 

      switch(userChoice) { 
       case OPTION_1: 
        /* 
         Calls a static method of a class, so there is no need of instantiate the class first. 
         */ 
        GameOne.start(); 
        break; 
       case OPTION_2: 
        /* 
         In this case, create a new instance of the class GameTwo, and then call the method start(). 
         */ 
        GameTwo game = new GameTwo(); 
        game.start(); 
        break; 
       default: 
        System.out.println("Wrong option, try again."); 
      } 
     while(!OPTION_EXIT.equals(userChoice)); 

    } 
} 

class GameOne { 
    public static void start() { ... } 
} 

class GameTwo { 
    public void start() { ... } 
} 
+0

ありがとう!これはほとんど私がそれをやっていると思っていた...私は、このケースでは、オプション1、私は上にペーストされたゲームを呼び出すだろうに付着している唯一のことは?それはRpsGame.game()でしょうか? それは私が立ち往生している部分です –

+0

RpsGameがあなたのゲームの1つであることを考えれば、メインメソッドをその中に入れないことをお勧めします。だから後で、あなたはRpsGameを開始する静的メソッドを持つことができ、ゲームが終了するとメインメニューに戻ることができます。 –

+0

Dammit、間違って "enter"を押してしまいます。あなたの場合、mainメソッドの名前を "public static void start(){Scanner sc ...}"に変更した場合、私の場合はyesです"GameOne game = new GameOne(); game.start();"という2つの行を置き換えるだけです。 "RpsGame.start()"で、ロック、ペーパー、はさみのゲームを開始します。 –

関連する問題