天天看點

java集合架構實踐簡單撲克牌比較遊戲

簡單的撲克牌比較遊戲
           
1. 建立一副撲克牌,不考慮大小王
2. 建立兩名玩家,玩家至少要有ID、姓名、手牌等屬性
3. 洗牌,将之前建立的撲克牌順序打亂(說明集合是有序的)
4. 發牌,将洗牌之後的撲克牌集合,從第一張開始,發給兩名玩家,按照一人一張的方式,每人發兩張
5. 開始遊戲,比大小,取兩人各自的點數最大的牌進行比較,點數大的赢,若大小相同比花色(黑紅梅方)
           
package com.poker;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class PlayPoker {
	List<Card> cards ;  //牌
	List<Player> players;   //玩家
	//static Player[] players = new Player[2];
	PlayPoker(){
		this.cards =  new ArrayList<Card>();
		this.players = new ArrayList<Player>();
	}
	public static void main(String[] args) {		
		PlayPoker play = new PlayPoker();
		play.addCards();
		play.foreach();
		play.reCards();
		play.addplayer();
		play.playerGetCards();
		play.playerForeach();
		play.campareCards();
	}
	//加入牌52張無大小王
	public void addCards() {
		String[] colors = {"黑桃","紅心","草花","方塊"};
		String[] num = {"2","3","4","5","6","7","8","9","10","J","Q","K","A",};
		System.out.println("---------添加牌-------");
		for(int i = 0; i <colors.length; i++) {
			for(int j = 0; j < num.length; j++) {
				cards.add(new Card(colors[i],num[j]));
			}
		}
		System.out.println("------添加成功--------");
	}
	//重洗牌  方法不是很好有待改善
	public void reCards() {
		System.out.println("\n----開始洗牌----");
		Random random = new Random();
       for(int i =0 ; i < 52; i++) {		
    	int k = random.nextInt(cards.size());
   		Card c =cards.get(k);
   		cards.remove(k);
   		cards.add(random.nextInt(cards.size()),c);	
       }	
       System.out.println("-----洗牌結束-------");
	}
	// 按順序周遊所有的牌
	public void foreach() {
		System.out.print("添加的牌:");
		for(Card c:cards) {
			System.out.print(c.color+c.num+" ");
		}
	}
	//添加玩家   限制兩名玩家 
	public void addplayer() {
		Scanner console = new Scanner(System.in);
		for( int i = 0; i < 2; i++) {
			 System.out.println("輸玩家id");
			 int cinid = console.nextInt();
	         System.out.println("輸入玩家姓名");
	         String cinname = console.next();   
	        // players[i] =new Player(id,name); 
	         players.add(new Player(cinid,cinname)); 
		}
	}
	// 随機取牌發給 個個玩家   這限制了玩家拿牌數量
	public void playerGetCards() {
		System.out.println("----發牌----");
		Random random = new Random();
		for(Player player:players) {
			for( int j = 0; j < 2; j++) {  //這裡的2為拿牌限制
			  Card c = cards.get(random.nextInt(cards.size()));
			  player.cards.add(c);
			}
//		for(int i = 0; i < players.length; i++)
//		{
//			for( int j = 0; j < 2; j++) {  //這裡的2為拿牌限制
//				 Card c = cards.get(random.nextInt(cards.size()));
//				 players[i].cards.add(c);
//			}
//		}
	}
		System.out.println("-----發牌結束-----");			
}
// 周遊 每次玩家的拿牌	并列印
public void playerForeach() {
		for(Player player:players) {			
			for(Card card:player.cards) {
				System.out.print(player.name + ": " + card.color + card.num + "\n");
			}
		}
	}
// 列印兩個玩家的最大手牌
//  比較 最大手牌 并列印赢家
public void campareCards() {
	
	for(Player player:players) {
		Collections.sort(player.cards,new CardComparator());
	}
	Player player1 =players.get(0);
	Player player2 =players.get(1);
	System.out.print(player1.name + "最大的牌是:");
	Card card1 = player1.cards.get(1);
	System.out.print(card1.color+card1.num + "\n");
	System.out.print(player2.name + "最大的牌是:");
	Card card2 = player2.cards.get(1);
	System.out.print(card2.color+card2.num + "\n");
	System.out.println("------比較大小結果------");
	if(card1.num==card2.num) {
		if(card1.compareTo(card2)>0)
		{
			System.out.println(player1.name + "獲勝");
		}
		if(card1.compareTo(card2)==0) {
			System.out.println("平");
		}
		if(card1.compareTo(card2)<0) {
			System.out.println(player2.name + "獲勝");
		}
	}
	if(card1.num.compareToIgnoreCase(card2.num)>0) {
		System.out.println(player1.name + "獲勝");
	}
	if(card1.num.compareToIgnoreCase(card2.num)<0) {
		System.out.println(player2.name + "獲勝");
	}
}
}
           
package com.poker;
public class Card implements Comparable {
   public String color;
   public String num;
   public Card(String color,String num) {
	   this.color = color;
	   this.num = num;	   
   }
@Override
public int compareTo(Object o) {
	// TODO Auto-generated method stub
	return this.color.compareTo(((Card)o).color);
}
           
}
           
package com.poker;
import java.util.ArrayList;
import java.util.List;
public class Player {
		public int id;
		public String name;
		public List<Card> cards;
      public Player(int id,String name) {
    	  this.id = id;
    	  this.name = name;  
    	  this.cards = new ArrayList<Card>();
        }
      public Player()
      {
    	  this.cards = new ArrayList<Card>(); 
      }
}
           
package com.poker;
import java.util.Comparator;
public class CardComparator implements Comparator<Card> {
	@Override
	public int compare(Card o1, Card o2) {
		// TODO Auto-generated method stub
		return o1.num.compareTo(o2.num);
	}
}
           

繼續閱讀