2017-03-13 6 views
1

この問題を解決するのに問題があります。私は問題の名前を印刷するためのコンソールを得ることができません。これは、roshamboゲームを作成するプログラムです。正しい名前をコンソールに表示するにはどうすればいいですか? Java

ここに私のコードです。このような

public enum Roshambo { 

    rock { 
     public String toString() { 
      return "rock"; 
     } 
    }, 
    paper { 
     public String toString() { 
      return "paper"; 
     } 
    }, 
    scissors { 
     public String toString() { 
      return "scissors"; 
     } 
    } 
} 

public abstract class Player { 

    String name; 
    Roshambo value; 

    abstract Roshambo generateRoshambo(); 

    void setName(String name) { 
     this.name = name; 
    } 

    void setRoshambo(Roshambo value) { 
     this.value = value; 
    } 

    String getName() { 
     return name; 
    } 

    Roshambo getRoshambo() { 
     return value; 
    } 
} 

class Bart extends Player { 
    public Roshambo generateRoshambo() { 
     super.name = "Bart"; 
     return Roshambo.rock; 
    } 
} 


public class Lisa extends Player { 
    public Roshambo generateRoshambo() { 
     super.name = "Lisa"; 
     Random r = new Random(); 
     int ch = r.nextInt(3); 
     if (ch == 0) return Roshambo.rock; 
     else if (ch == 1) return Roshambo.paper; 
     else return Roshambo.scissors; 
    } 
} 

public class Player1 extends Player { 

    char value; 

    Player1(char value) { 
     this.value = value; 
    } 

    public Roshambo generateRoshambo() { 
     if (value == 'r') 
      return Roshambo.rock; 
     else if (value == 's') 
      return Roshambo.scissors; 
     else 
      return Roshambo.paper; 
    } 
} 

import java.util.Scanner; 

public class RoshamboApp { 
    public static void main(String args[]) { 

     char choice = 'y'; 
     char player; 

     Scanner s = new Scanner(System.in); 
     System.out.println("Welcome to the game of Roshambo"); 

     Bart b = new Bart(); 
     Lisa l = new Lisa(); 
     Player p = null; 

     String name; 
     System.out.println("Enter your name : "); 
     name = s.next(); 

     System.out.println("Would you like to play Bart or Lisa?(B/L):"); 
     player = s.next().charAt(0); 

     if (player == 'b') 
      p = b; 

     else if (player == 'l') 
      p = l; 

     while (choice != 'n') { 
      System.out.println("Rock, paper or scissors?(R/P/S)"); 
      char ch = s.next().charAt(0); 
      Player1 p1 = new Player1(ch); 
      System.out.println(name + ":" + p1.generateRoshambo()); 
      System.out.println(player + ":" + p.generateRoshambo()); 

      if (p1.generateRoshambo() == p.generateRoshambo()) 
       System.out.println("Draw!"); 

      else if (p1.generateRoshambo() == Roshambo.paper && p.generateRoshambo() == Roshambo.rock) 
       System.out.println(p1.getName() + "Wins"); 

      else if (p1.generateRoshambo() == Roshambo.paper && p.generateRoshambo() == Roshambo.scissors) 
       System.out.println(p.getName() + "Wins!"); 

      else if (p1.generateRoshambo() == Roshambo.scissors && p.generateRoshambo() == Roshambo.rock) 
       System.out.println(p.getName() + "Wins"); 

      System.out.println("Play again?(y/n):"); 
      choice = s.next().charAt(0); 
     } 
    } 
} 

コンソールプリントアウト:ジャンケンのゲームに

ようこそ 自分の名前を入力してください:? ショーン あなたはバートやリサ(B/L)を再生したいと思います:B 紙 B: プレイもう一度 nullWinsをロック(Y/N):(R/P/S) 紙 ショーンはロック、紙やはさみ??私は

b:岩がバートになるようにしようとする:ロックとヌーンが勝ち、シアン勝になる。例えば

public enum Roshambo { 
ROCK("rock"), ... other constants ; 

private final String stringRepresentation; 
private Roshambo(String stringRepresentation) { 
    this.stringRepresentation = stringRepresentation; 
} 

@Override 
public String toString() { return stringRepresentation; } 

:すべての

答えて

1

まず、過度に複雑周りのコード、ここのような存在です。

メインの実際の問題について:Player1クラスは、必要以上に10倍も複雑です。ユーザーに "あなたは何をしたいですか"と尋ねるだけです。入力に応じて、Roshamboを選択します。言い換えれば

:私はこの1つは何とか

  • が似UserPlayerか何かにあなたのPlayer1クラスを変更しジャンケン値を計算していることを示すために、ComputerPlayer

    1. 変更プレイヤークラスにあなたをお勧めします。

    あなたの主な問題はあなたが複雑すぎることです。だからあなたは解決しようとする問題に集中することはできません。もう一つの例;

    char playerSelection = ... coming from user 
    if (playerSelection == 'b') { 
        player = new Bart(); 
    } else { 
        player = new Lisa(); 
    } 
    

    これらの単一文字の名前付き変数は何も言いません。彼らはあなたがしようとしているものを混乱させるだけです。

    player = s.next().charAt(0); 
    ... 
    
    System.out.println(name + ":" + p1.generateRoshambo()); 
    System.out.println(player + ":" + p.generateRoshambo()); 
    

    あなたは選手名印刷する必要があります:彼らはプレーしたい選手だけのキャラクターである

  • 0

    あなたの問題は、あなたが印刷されているプレーヤー、

    System.out.println(p.getName() + ":" + p.generateRoshambo()); 
    

    注意を

    このコードはあまりに複雑で、コードの行数を減らして同じ作業を行うことができます。リファクタリングを調べます。

    関連する問題