package?com.ppcc.control;
/**
?*?單張撲克牌
?*?@author?ppcc
?*
?*/
public?class?Card?implements?Comparable<Card>{
/**
?*?撲克牌的值
?*/
private?String?cardVal;?
/**
?*?撲克牌的花色
?*/
private?String?cardColor;
/**
?*?構(gòu)造函數(shù)
?*?@param?cardVal?撲克牌的值
?*?@param?cardColor?撲克牌的花色
?*/
public?Card(String?cardVal,?String?cardColor)?{
super();
this.cardVal?=?cardVal;
this.cardColor?=?cardColor;
}
/**
?*?獲取撲克牌的值
?*?@return?撲克牌的值
?*/
public?String?getCardVal()?{
return?cardVal;
}
/**
?*?獲取撲克牌的花色
?*?@return?撲克牌的花色
?*/
public?String?getCardColor()?{
return?cardColor;
}
/**
?*?顯示卡片內(nèi)容
?*/
public?void?showCard(){
System.out.print(this.cardColor+this.cardVal+"?");
}
@Override
public?int?compareTo(Card?o)?{
?//撲克牌的大小依次增加
?String?cardNum?=?"2,3,4,5,6,7,8,9,10,J,Q,K,A";
?//撲克牌的花色依次增大
?????String?cardColor?=?"梅花,方塊,黑桃,紅桃";
?????int?flag=cardNum.indexOf(this.getCardVal())-cardNum.indexOf(o.getCardVal());
?????if(flag==0)
???? ?flag=cardColor.indexOf(this.getCardColor())-cardColor.indexOf(o.getCardColor());
?????return?flag;
}
}
package?com.ppcc.control;
import?java.util.ArrayList;
import?java.util.Collections;
/**
?*?創(chuàng)建一副撲克牌
?*?@author?ppcc
?*
?*/
public?class?Pocker?{
/**
?*?一副撲克牌
?*/
private?ArrayList<Card>?pocker;
/**
?*?撲克牌的值
?*/
private?static?final?String[]?valBase={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
/**
?*?撲克牌的花色
?*/
private?static?final?String[]?colorBase={"紅桃","黑桃","梅花","方塊"};
/**
?*?構(gòu)造函數(shù)
?*/
public?Pocker()?{
pocker=new?ArrayList<Card>();
this.createPocker();
}
/**
?*?創(chuàng)建撲克牌
?*/
private?void?createPocker(){
for(String?color?:?colorBase)
for(String?val?:?valBase)
pocker.add(new?Card(val,color));
}
/**
?*?顯示所有撲克牌
?*/
public?void?showPocker(){
for(Card?currCard?:?pocker)
currCard.showCard();
}
/**
?*?洗牌
?*/
public?void?rePocker(){
Collections.shuffle(pocker);
}
/**
?*?臭牌
?*?@param?players?玩家
?*?@param?num?玩家需抽取的牌數(shù)目
?*/
public?void?sendOutPocker(ArrayList<Player>?players,int?num){
for(int?j=0;?j<num;?j++){
for(int?i=0;?i<players.size();?i++){
System.out.println("---玩家:"+players.get(i).getName()+"-拿牌");
//玩家抽牌
????players.get(i).setHandCard(pocker.get(0));
????//將抽取后排從pocker里刪除
????pocker.remove(0);
}
}
}
}
package?com.ppcc.control;
import?java.util.ArrayList;
/**
?*?玩家類
?*?@author?ppcc
?*
?*/
public?class?Player?{
/**
?*?玩家ID
?*/
private?int?ID;
/**
?*?玩家姓名
?*/
private?String?name;
/**
?*?玩家手牌
?*/
private?ArrayList<Card>?handCard;
/**
?*?構(gòu)造函數(shù)
?*?@param?iD?玩家ID
?*?@param?name?玩家姓名
?*?@param?handCard?玩家手牌
?*/
public?Player(int?iD,?String?name)?{
this.ID?=?iD;
this.name?=?name;
handCard=new?ArrayList<Card>();
}
/**
?*?獲取玩家ID
?*?@return?玩家ID
?*/
public?int?getID()?{
return?ID;
}
/**
?*?獲取玩家姓名
?*?@return?玩家姓名
?*/
public?String?getName()?{
return?name;
}
/**
?*?修改玩家手牌
?*?@param?handCard?玩家手牌
?*/
public?void?setHandCard(Card?card)?{
this.handCard.add(card);
}
/**
?*?獲取玩家手中大的牌
?*?@return?大的牌
?*/
public?Card?maxCard(){
//初始化最大牌
Card?maxCard=handCard.get(0);
for(int?i=1;?i<handCard.size();?i++){
//兩兩比較得到最大牌
if(handCard.get(i).compareTo(maxCard)>0)
maxCard=handCard.get(i);
}
return?maxCard;
}
/**
?*?打印玩家手中的牌
?*/
public?void?showHandCard(){
System.out.print(this.name+":");
//for循環(huán)來遍歷打印手中的牌
for(Card?card?:handCard)
card.showCard();
System.out.println("");
}
}
package?com.ppcc.control;
import?java.util.ArrayList;
import?java.util.InputMismatchException;
import?java.util.Scanner;
/**
?*?比點(diǎn)數(shù)游戲
?*?@author?ppcc
?*
?*/
public?class?Game?{
/**
?*?玩家數(shù)組鏈表
?*/
private?ArrayList<Player>?players;?
/**
?*?撲克牌
?*/
private?Pocker?pocker;
/**
?*?玩家數(shù)目
?*/
private?int?playNum;
/**
?*?玩家抽取牌數(shù)目
?*/
private?int?getCardNum;
/**
?*?輸入
?*/
private?Scanner?sc=new?Scanner(System.in);
/**
?*?構(gòu)造函數(shù)
?*/
public?Game(){
players=new?ArrayList<Player>();
this.prePocker();
}
/**
?*?準(zhǔn)備撲克牌
?*/
public?void?prePocker(){
System.out.println("-----------------創(chuàng)建撲克牌-----------------");
//創(chuàng)建撲克牌
pocker=new?Pocker();
System.out.println("----------------創(chuàng)建撲克牌成功!----------------");
//將創(chuàng)建好撲克牌打印出來
pocker.showPocker();
System.out.println("-----------------開始洗牌-----------------");
//進(jìn)行洗牌
pocker.rePocker();
System.out.println("-----------------洗牌結(jié)束!-----------------");
}
/**
?*?創(chuàng)建玩家
?*/
public?void?createPlayers(){
System.out.println("-----------------創(chuàng)建玩家-----------------");
//輸入玩家數(shù)目
do{
playNum=inputCommand("輸入玩家數(shù)目:");
if(playNum<2?||?playNum>10)
System.out.println("玩家數(shù)目為2~10!\n");
}while(playNum<2?||?playNum>10);
//輸入玩家抽取的牌數(shù)
do{
getCardNum=inputCommand("輸入玩家抽取牌數(shù):");
if(getCardNum<1?||?getCardNum>5)
System.out.println("玩家抽取為1~5!\n");
}while(getCardNum<1?||?getCardNum>5);
//for循環(huán)創(chuàng)建玩家
for(int?i=0;?i<playNum;?i++){
System.out.println("\n請輸入第"+(i+1)+"玩家的ID和姓名!");
int?id=idJup();
System.out.print("玩家姓名:");
String?name=sc.next();
//創(chuàng)建玩家并添加到玩家數(shù)組鏈表中
players.add(new?Player(id,name));
}
//打印所有玩家姓名
for(Player?player?:?players)
System.out.println("----歡迎玩家:"+player.getName());
System.out.println("----------------創(chuàng)建玩家結(jié)束!----------------");
}
/**
?*?發(fā)牌
?*/
public?void?sendPocker(){
System.out.println("------------------開始發(fā)牌------------------");
//發(fā)牌
pocker.sendOutPocker(players,?getCardNum);
System.out.println("------------------發(fā)牌結(jié)束------------------");
}
/**
?*?開始游戲
?*/
public?void?game(){
System.out.println("------------------開始游戲------------------");
//初始化贏的玩家
Player?win=players.get(0);
for(Player?player?:?players){
System.out.print("玩家:"+player.getName()+"最大的手牌為:");
//獲取玩家手中的最大牌
????player.maxCard().showCard();
????System.out.println("");
????//比較玩家之間的最大牌
????if(win.maxCard().compareTo(player.maxCard())<0)
???? win=player;
}
//打印贏的玩家
System.out.println("玩家:"+win.getName()+"獲勝!");
System.out.println("------------------游戲結(jié)束------------------");
}
/**
?*?顯示所有玩家手中的牌
?*/
public?void?playerPocker(){
for(Player?player?:?players){
player.showHandCard();
}
}
/**
?*?輸入整數(shù)
?*?@param?str?提示語句
?*?@return?返回輸入值
?*/
public?int?inputCommand(String?str){
try{
System.out.print(str);
int?input=sc.nextInt();
return?input;
}catch(InputMismatchException?e){
System.out.println("輸入有誤!請輸入數(shù)字命令!\n");
sc=new?Scanner(System.in);
return?inputCommand(str);
}
}
/**
?*?判斷是否存在id
?*?@return
?*/
public?int?idJup(){
int?id=inputCommand("玩家ID:");
for(Player?player?:?players){
if(player.getID()==id){
System.out.println("ID不唯一,重新輸入!\n");
return?idJup();
}
}
return?id;
}
}
package?com.ppcc.control;
/**
?*?測試類
?*?@author?ppcc
?*
?*/
public?class?Test?{
/**
?*?@param?args
?*/
public?static?void?main(String[]?args)?{
Game?game=new?Game();
game.createPlayers();
game.sendPocker();
game.game();
game.playerPocker();
}
}
2016-01-09
可以可以