1

私は Java (およびプログラミング全般) が初めてで、Go Fish をプレイするプログラムを作成しようとしていますが、あるオブジェクトから別のオブジェクトのメソッドを呼び出すのに苦労しています。まだ終わっていませんが、これまでのところ私が持っているものはここにあります。これは、ゲームを開始するために呼び出されます。

public class StartGame {

public static void start(){
    Deck deck = new Deck(1);
    GoFishHumanPlayer player = new GoFishHumanPlayer();
    GoFishAiPlayer ai = new GoFishAiPlayer();
    player.drawHand();
    ai.drawHand();
    player.turn();
}
}

ゲームデッキとして機能するオブジェクト。

import java.util.Random;

public class Deck {

private int[] card = new int[14];
private int size;

Random r = new Random();

public Deck(int x){
    size = x;
    card[0] = 4 * size * 13;
    card[1] = 4 * size;
    card[2] = 4 * size;
    card[3] = 4 * size;
    card[4] = 4 * size;
    card[5] = 4 * size;
    card[6] = 4 * size;
    card[7] = 4 * size;
    card[8] = 4 * size;
    card[9] = 4 * size;
    card[10] = 4 * size;
    card[11] = 4 * size;
    card[12] = 4 * size;
    card[13] = 4 * size;}

public int draw(){
    int x = r.nextInt(card[0]) + 1;
    int y = 1;
    while(x>card[y]){
        x -=card[y];
        y++;}
    card[y]--;
    card[0]--;
    return y;}

}

この次のクラスは、GoFishHumanPlayer と GoFishAiPlayer によって拡張されます。これらのオブジェクトはプレイヤーを表します。

public class GoFishPlayer {

private int[] hand = new  int[14];
private int pairs;

public void drawHand(){
    for(int x = 0; x < 5; x++){
        int y = deck.draw();//Here's where I get an error "deck cannot be resolved"
        hand[y]++;}
}
}

GoFishPlayer の 8 行目で、IDE に「デッキを解決できません」と表示されます。StartGame に戻り、deck というオブジェクトを作成しましたが、すべてのクラスからアクセスできるようにするにはどうすればよいでしょうか。

4

2 に答える 2

4

すべてのクラスからアクセスできるようにする必要はありません。コンストラクターで参照を渡すだけですGoFishPlayer

public class GoFishPlayer {
  private Deck deck;

  public GoFishPlayer(Deck deck) { this.deck = deck; }
  ...
}

public class StartGame {
  public static void start(){
    Deck deck = new Deck(1);
    GoFishHumanPlayer player = new GoFishHumanPlayer(deck);
    GoFishAiPlayer ai = new GoFishAiPlayer(deck);
    player.drawHand();
    ai.drawHand();
    player.turn();
  }
}
于 2013-08-02T19:18:06.567 に答える
1

すべてのクラスからアクセスできるようにする必要がある場合は、単にコンストラクターに渡します。

public class GoFishPlayer {
private Deck deck;

public GoFishPlayer(Deck deck) { this.deck = deck; }
...
}
于 2013-08-02T19:20:34.860 に答える