程序实现前提:
1.了解java集合框架
2.Collections工具类
3.Comparable,Comparator接口
游戏要求:
游戏有两个玩家,分别会得到两张纸牌,然后进行比较大小,拿到纸牌最大者获胜,比较规则:比较数字(2,3,4,5,6,7,8,9,10,J,Q,K,A)按这个顺序,越往后越大,数字一样则比较花色(黑桃,红桃,梅花,方块),越往后越大。
代码分析:
首先需要有Player类,Card类,里面封装了玩家和纸牌的属性和方法,然后还需要GameBegin类开始游戏,这个类需要实现以下功能,创建一副扑克牌,洗牌,创建人物,发牌,比较大小,有几个要点需要注意:
1.先后顺序很重要,先创建扑克牌后创建人物,发牌
2.创建人物时注意初始化List,以防空指针异常
3.发牌:List.get(index),所以只需要产生随机数即可实现发牌这个效果
4.比较大小需要重新Compara方法
实现效果图:
实现代码:
/**
* 牌类
*/
public class Card {
public String number;
public String color;
public Card(String color,String number) {
super();
this.number = number;
this.color = color;
}
public String getNumber() {
return number;
}
public String getColor() {
return color;
}
}
/**
* 玩家类
*/
public class Player {
public String name;
public List<Card> list=new ArrayList<Card>();
public Player(String name) {
this.name = name;
}
}
/**
* 比较规则类
*/
public class Compara implements Comparator<Card>{
@Override
public int compare(Card arg0, Card arg1) {
String color="黑桃 红桃 梅花 方块";
String numbers="2 3 4 5 6 7 8 9 10 J Q K A";
int result=numbers.indexOf(arg0.number)-numbers.indexOf(arg1.number);
if(result<0){
return -1;
}else if(result>0){
return 1;
}else {
int result2=color.indexOf(arg0.color)-color.indexOf(arg0.color);
if(result2>0){
return 1;
}else if(result<0){
return -1;
}else{
return 0;
}
}
}
}
public class GameBegin {
private static Scanner console=new Scanner(System.in);
private Random random=new Random();
private List<Card> cardsList=new ArrayList<Card>();
private static Player playA;
private static Player playB;
public static void main(String[] args) {
GameBegin gb=new GameBegin();
gb.createCardsList();
System.out.println("\n****************GAME IS ON******************");
System.out.println("hello,player A ,please input you name:");
String nameA=console.next();
playA=gb.getPlayer(nameA);
System.out.println("\nhello,player B ,please input you name:");
String nameB=console.next();
playB=gb.getPlayer(nameB);
gb.lastTEST();
}
/**
* 创建扑克牌
*/
public List<Card> createCardsList(){
String[] color={"黑桃","红桃","梅花","方块"};
String[] numbers={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
for(String temp:color){
for(int i=0;i<numbers.length;i++){
Card card=new Card(temp,numbers[i]);
cardsList.add(card);
}
}
mixCardsList();
return cardsList;
}
/**
* 洗牌
*/
private void mixCardsList(){
Collections.shuffle(cardsList);
}
/**
* 创建玩家
*/
public Player getPlayer(String name){
Player play=new Player(name);
for(int i=0;i<2;i++){
play.list.add(cardsList.get(getRandomNumber()));
}
outputPlayerCards(play);
return play;
}
/**
* 发牌-产生随机数
*/
private int getRandomNumber(){
int k;
k=random.nextInt(51);
return k;
}
/**
* 显示玩家拿到的牌
*/
private void outputPlayerCards(Player play){
System.out.print("Player you got:");
for(Card c:play.list){
System.out.print(c.getColor()+" "+c.getNumber()+" ");
}
Collections.sort(play.list,new Compara());
System.out.println(" the biger card is :"+play.list.get(1).color+" "+play.list.get(1).number);
}
/**
* 得到两个玩家中较大的牌,分出胜负
*/
public void lastTEST(){
List<Card> lastCards=new ArrayList<Card>();
lastCards.add(playA.list.get(1));
lastCards.add(playB.list.get(1));
Collections.sort(lastCards,new Compara());
System.out.println("the biger card is: "+lastCards.get(1).color+lastCards.get(1).number);
if(lastCards.get(1).color.equals(playA.list.get(1).color)){
System.out.println("\n"+playA.name+" is win!");
}else{
System.out.println("\n"+playB.name+" is win!");
}
}
}