Deckクラスを作る
はい、今回はやっとデッキを作っていきます。
前回、折角作った紙束インターフェースをしっかり使っていきましょう。
まずはClassを作る
public class Deck{
private Stack<Card> deck = new Stack();
}
はい、デッキができました。
というのは流石に冗談ですが、カードをStackとして持つDeckクラスができました。
ちなみにJavaのStackはListのサブクラスです。
デッキは基本的にはトップから取り出す操作しか行わないため、配列や線形リストではなくスタックを利用しました。
CardSheafを実装する。
public class Deck implements CardSheaf {
private Stack<Card> deck = new Stack<>();
public Deck(List<Card> deck) {
this.deck.addAll(deck);
}
public Deck(Card... deck) {
this.deck.addAll(Arrays.asList(deck));
}
@Override
public int indexOf(Card card) {
return CardSheaf.indexOf(deck, card);
}
//CardSheafクラスではcardSizeの標準実装を提供していないため、実装した。
//要素数を取り出すだけ。
@Override
public int cardSize() {
return deck.size();
}
@Override
public void addCard(Card card) {
CardSheaf.addCard(deck, card);
}
@Override
public void removeCard(Card card) {
CardSheaf.removeCard(deck, card);
}
@Override
public void removeCard(int index) {
CardSheaf.removeCard(deck, index);
}
@Override
public Card find(int number, Card.Mark mark) {
return CardSheaf.find(deck, number, mark);
}
@Override
public int indexOf(int number, Card.Mark mark) {
return CardSheaf.indexOf(deck, number, mark);
}
@Override
public Card getCard(int index) {
return CardSheaf.getCard(deck, index);
}
@Override
public Card takeCard(int index) {
return CardSheaf.takeCard(deck, index).getValue();
}
}
Deckクラスでは、カードをListで扱うため、CardSheafのstaticメソッドをそのまま利用した。
Deckに必要なメソッドを定義する
import java.util.*;
public class Deck implements CardSheaf {
private Stack<Card> deck = new Stack<>();
/**
* リスト内のカードでデッキを初期化する。
* @param deck 初めにデッキ内に置きたいカードすべてのリスト
*/
public Deck(List<Card> deck) {
this.deck.addAll(deck);
}
/**
* 配列内のカードでデッキを初期化する。
* @param deck 初めにデッキ内に置きたいカードすべての配列
*/
public Deck(Card... deck) {
this.deck.addAll(Arrays.asList(deck));
}
//略
/**
* デッキの一番上のカードを取り出す。
*/
public Card take_top() {
return deck.pop();
}
/**
* ゲーム開始時の先攻判定に用いる。
* @return デッキの一番上のカード
*/
public Card first_step() {
return this.take_top();
}
/**
* カードをドローする。
* @return デッキの一番上のカード
*/
public Card draw() {
return this.take_top();
}
/**
* ダメージを受けたときに呼ばれる。
* @return デッキの一番上のカード
*/
public Card damage() {
return this.take_top();
}
/**
* デッキをシャッフルする。
*/
public void shuffle() {
Collections.shuffle(deck);
}
/**
* デッキ内にカードが存在するかどうかを判定する。
* @return デッキ内にカードがあるならtrue、ないならfalse
*/
public boolean hasCard() {
return cardSize() > 0;
}
}
では、今回はここまで。
次回は手札を実装予定です。