カードゲームを作成しており、グラフィックに slick2d を使用しています。public void init でデッキからカードを引くメソッドを呼び出すと、2 回実行されます。以下のメソッドは、デッキ コンストラクターからカードを引き、インデックス番号を返します。
public Card PlayerCardDraw()
{
Card index = cards.remove(1);
System.out.println("Cards left: " + cards.size());
return index;
}
デッキコンストラクター:
Deck()
{
cards = new ArrayList<Card>();
for (int a = 0; a < 52; a++)
{
cards.add(new Card(a));
}
}
public class Play extends BasicGameState
{
Deck deck = new Deck ();
Image PlayScreen;
Image PauseButton;
Image FaceDown1, FaceDown2;
Image card[] = new Image [52];
public String mouse = "no input";
Card C;
public Play (int state)
{
}
public void init (GameContainer gc, StateBasedGame sbg) throws SlickException
{
PlayScreen = new Image ("res/Play/PlayScreen.png");
PauseButton = new Image ("res/Play/PauseButton.png");
FaceDown1 = new Image("res/CardBacks/redback1.png");
FaceDown2 = new Image("res/CardBacks/redback2.png");
String fileLocation = new String ();
for (int i = 0 ; i < 52 ; i++)
{
fileLocation = "res/cards/" + (i+1) + ".png";
card [i] = new Image (fileLocation);
}
//should only run once, right?
C = deck.PlayerCardDraw();
}
実行時に得られる出力は Cards left: 51 Cards left: 50 です
これは、PlayerCardDraw() が 2 回呼び出されたことを意味します。「こんにちは」という簡単なシステムアウトステートメントを追加したところ、2回も実行されました。
なぜこれが起こっているのか、それを修正する方法を知っている人はいますか? ちなみに、このようなものは、プログラムが再生状態に入る前に実行されています。これを含まないタイトル状態のカード left と hi を表示します。