准备好纸牌
打牌前是先要把牌拿出来的,下面我们就来准备好供玩的纸牌。把这功能哪好呢?打牌应该有一个打牌各个过程的类,这个类暂叫PlayCard。好,要为PlayCard类增加准备纸牌功能,就先从为它写个测试开始,测试类名为TestPlayCard,内容在下:
package yxc.card.common.test;
import java.util.List;
import yxc.card.common.Card;
import yxc.card.common.PlayCard;
import junit.framework.TestCase;
public class TestPlayCard extends TestCase {
public void testReady(){
PlayCard playCard=new PlayCard();
List<Card> cardList=playCard.ready(1,true);
assertEquals("1",54,cardList.size());
cardList=playCard.ready(1,false);
assertEquals("2",52,cardList.size());
cardList=playCard.ready(4,true);
assertEquals("3",216,cardList.size());
cardList=playCard.ready(5,false);
assertEquals("4",260,cardList.size());
}
}
为通过此测试,写出的PlayCard类代码如下,它有ready(int pairsOfCard, boolean hasJoker)函数,负责生成纸牌,第一个参数是要准备几副牌,第二个参数是包括大小王否。
package yxc.card.common;
import java.util.ArrayList;
import java.util.List;
public class PlayCard {
public PlayCard() {
super();
}
public List<Card> ready(int pairsOfCard, boolean hasJoker) {
List<Card> list=new ArrayList<Card>();
for(int i=0;i<pairsOfCard;i++){
int number=54;
if(!hasJoker){
number=52;
}
for(int j=1;j<=number;j++){
list.add(new Card(j));
}
}
return list;
}
}
为了把准备好的Card的列表转换成相应的CardFace列表以供显示和用户操作,写了个转换函数:cardToCardFace()。
在TestPlayCard类中增加测试代码:
public void testCardToCardFace(){
PlayCard playCard=new PlayCard();
List<Card> cardList=playCard.ready(1,true);
assertEquals("1",54,cardList.size());
cardList=playCard.ready(1,false);
List<CardFace> cardFaceList=playCard.cardToCardFace(cardList);
assertEquals("2",cardList.size(),cardFaceList.size());
assertEquals("3",cardList.get(5),cardFaceList.get(5).getCard());
}
在PlayCard类中增加函数public List<CardFace> cardToCardFace(List<Card> cardList);代码在下:
public List<CardFace> cardToCardFace(List<Card> cardList) {
List<CardFace> cardFaceList=new ArrayList<CardFace>();
if(cardList==null||cardList.size()<1){
return cardFaceList;
}
for(Card card:cardList){
cardFaceList.add(new CardFace(card));
}
return cardFaceList;
}
顺便把CardFace列表转换成Card列表的功能也做了出来。
在TestPlayCard类中增加测试代码:
public void testCardFaceToCard(){
PlayCard playCard=new PlayCard();
List<Card> cardList=playCard.ready(1,true);
cardList=playCard.ready(1,false);
List<CardFace> cardFaceList=playCard.cardToCardFace(cardList);
cardList=playCard.cardFaceToCard(cardFaceList);
assertEquals("1",cardFaceList.size(),cardList.size());
assertEquals("2",cardFaceList.get(5).getCard(),cardList.get(5));
}
在PlayCard类中增加函数cardFaceToCard():
public List<Card> cardFaceToCard(List<CardFace> cardFaceList) {
List<Card> cardList=new ArrayList<Card>();
if(cardFaceList==null||cardFaceList.size()<1){
return cardList;
}
for(CardFace cardFace:cardFaceList){
cardList.add(cardFace.getCard());
}
return cardList;
}
以纸牌玩法锄大地为例,它用一副牌,不要大小王,用下面代码即可把牌准备好:
PlayCard playCard=new PlayCard();
List<CardFace> cardFaceList=playCard.cardToCardFace(playCard.ready(1,false));
纸牌的准备就暂到这,以后不合用再修改了。