利用java集合框架實現撲克牌比大小遊戲
阿新 • • 發佈:2019-02-20
程式實現前提:
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!");
}
}
}