package?com.imooc;
import?java.util.ArrayList;
import?java.util.List;
/**
*?創(chuàng)建玩家!
*?@author?SANGONG
*
*/
public?class?Player?{
public?String?id;
public?String?name;
public?List<Puke>?handList;
public?Player(String?id,?String?name)?{
this.id?=?id;
this.name?=?name;
this.handList?=?new?ArrayList<Puke>();
}
public?Player(){
}
}
package?com.imooc;
import?java.util.Comparator;
/**
*?撲克牌類
*?@author?SANGONG
*
*/
public?class?Puke?{
public?String?huase;
public?String?value;
public?String[]?values?=?{"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
public?Puke(String?huase,String?value){
this.huase?=?huase;
this.value?=?value;
}
}
package?com.imooc;
import?java.util.Comparator;
public?class?PukeComparator?implements?Comparator?<Puke>{
public?String[]?values?=?{"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
public?int?stringToInt(String[]?str,String?value){
int?i?=?0;
while(!str[i].equals(value)){
i?++;
}
return?i+2;
}
@Override
public?int?compare(Puke?o1,?Puke?o2)?{
Integer?index1?=?stringToInt(values,o1.value);
Integer?index2?=?stringToInt(values,o2.value);
int?no?=?index1?-?index2;
if(no?==?0)?{
return?o1.huase.compareTo(o2.huase);
}else?if(no?>?0){
return?1;
//return?index1.compareTo(index2);
}else{
return?-1;
}
}
}
package?com.imooc;
import?java.util.ArrayList;
import?java.util.Arrays;
import?java.util.Collections;
import?java.util.HashMap;
import?java.util.List;
import?java.util.Map;
import?java.util.Random;
import?java.util.Scanner;
import?java.util.Set;
/**
*?1.創(chuàng)建一副撲克牌,不考慮大小王
2.創(chuàng)建兩名玩家,玩家至少要有ID、姓名、手牌等屬性,手牌為撲克牌的集合
3.洗牌,將之前創(chuàng)建的撲克牌順序打亂
4.發(fā)牌,將洗牌之后的撲克牌集合,從第一張開始,發(fā)給兩名玩家,按照一人一張的方式,每人發(fā)兩張
5.開始游戲,比大小,大小相同比花色
*?@author?SANGONG
*
*/
public?class?Game?{
public?static?List<Puke>?handList;
public?static?Map<String,Player>?playersMap;
public?static?List<Puke>?pukeList;?
public?static?Scanner?input;
Puke[]?pk?=?new?Puke[52];
public?String[]?values?=?{"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
public?Game(){
this.handList?=?new?ArrayList<Puke>();
this.playersMap?=?new?HashMap<String,Player>();
this.pukeList?=?new?ArrayList<Puke>();
this.input?=?new?Scanner(System.in);
}
//創(chuàng)建撲克牌,添加到puke序列中
public?void?addPuke(){
for(int?i?=?0;i?<?13;i++){
pk[i]?=?new?Puke("Diamonds",values[i]);?//方塊Diamonds
}
for(int?i?=?13;i?<?26;i++){
pk[i]?=?new?Puke("Hearts",values[i-13]);?//紅桃Hearts
}
for(int?i?=?26;i?<?39;i++){
pk[i]?=?new?Puke("Clubs",values[i-26]);?//黑桃Clubs
}
for(int?i?=?39;i?<?52;i++){
pk[i]?=?new?Puke("Spades",values[i-39]);?//梅花Spades
}
pukeList.addAll(Arrays.asList(pk));
}
//輸出puke序列
public?void?putOut(List<Puke>?puke){
int?i?=?1;
for?(Object?obj?:?puke)?{
Puke?pks?=?(Puke)obj;
System.out.print(?pks.huase?+?pks.value?+?"?");
if(i%8?==?0)
System.out.println();
i++;
}
System.out.println();
}
//洗牌,先將puke序列清空再將數(shù)組pk打亂順序后添加到puke序列中
public?void?shuffle(){
pukeList.clear();
Random?ran?=?new?Random();
for(int?i?=?0;i?<?pk.length;i++){
int?index?=?ran.nextInt(pk.length);
Puke?temp?=?pk[i];
pk[i]?=?pk[index];
pk[index]?=?temp;
}
pukeList.addAll(Arrays.asList(pk));
}
//創(chuàng)建玩家添加到players序列
public?void?creatPlayer(int?num){
Random?ran?=?new?Random();
for(int?i?=?1;i?<=?num;i++){
int?m?=?ran.nextInt(100);
if(m?==?0){
m?=?ran.nextInt(100);
}
String?id?=?m+"";
do{
m?=?ran.nextInt(100);
}while(playersMap.containsKey(id));
System.out.println("第"?+?i?+?"玩家的ID為"?+?id);
System.out.print("輸入該玩家的姓名:");
String?name?=?input.next();
Player?newPlayer?=?new?Player(id,name);
playersMap.put(id,?newPlayer);
}
Set<String>?keySet?=?playersMap.keySet();
for?(String?id?:?keySet)?{
Player?pl?=?playersMap.get(id);
System.out.println("歡迎玩家:"?+?pl.name?+?"進入游戲!");
}
}
//發(fā)牌方法;從puke序列中選取前幾個元素加入到hand手牌序列中List<PuKe>?hand,List<PuKe>?puke
public?void?licensing(){
int?j?=?0;
for(int?i?=?0;i?<?2;?i++){
Set<String>?keySet?=?playersMap.keySet();
for?(String?id?:?keySet)?{
Player?pl?=?playersMap.get(id);
Puke?temp?=?(Puke)pukeList.get(j);
j++;
pl.handList.add(i,?temp);
System.out.println("----------玩家"?+?pl.name?+?"拿牌---------"?);
}
}
}
public?static?void?main(String[]?args){
Game?gm?=?new?Game();
System.out.println("--------------開始創(chuàng)建撲克牌----------------");
gm.addPuke();
System.out.println("--------------撲克牌創(chuàng)建成功!---------------");
System.out.println("撲克牌為:");
gm.putOut(pukeList);
System.out.println("----------------開始洗牌-------------------");
gm.shuffle();
System.out.println("----------------洗牌完成!------------------");
//gm.putOut(pukeList);
System.out.println("---------------開始創(chuàng)建玩家------------------");
System.out.print("請輸入玩家人數(shù):");
int?num?=?input.nextInt();?
gm.creatPlayer(num);
System.out.println("----------------開始發(fā)牌-------------------");
gm.licensing();
System.out.println("----------------發(fā)牌結束!------------------");
System.out.println("----------------開始游戲-------------------");
Set<String>?keySet?=?playersMap.keySet();
List<Puke>?bigHandList?=?new?ArrayList<Puke>();
for?(String?id:?keySet)?{
Player?pl?=?playersMap.get(id);
Collections.sort(pl.handList,new?PukeComparator());
System.out.println("玩家:"?+?pl.name?+?"?最大的手牌是:"?+
pl.handList.get(1).huase?+?pl.handList.get(1).value);
bigHandList.add(pl.handList.get(1));
}
for?(String?id:?keySet)?{
Player?pl?=?playersMap.get(id);
Collections.sort(pl.handList,new?PukeComparator());
boolean?no1?=?
Collections.max(bigHandList,new?PukeComparator()?)
.huase.equals(pl.handList.get(1).huase?);
boolean?no2?=?
Collections.max(bigHandList,new?PukeComparator()?)
.value.equals(pl.handList.get(1).value?);
if(no1?&&?no2){
System.out.println("--------------玩家:"?+
pl.name?+?"獲勝!-------------");
}
}
for?(String?id:?keySet)?{
Player?pl?=?playersMap.get(id);
System.out.print("玩家:"?+?pl.name?+?"的手牌為:?"?);
gm.putOut(pl.handList);
}
}
}
2016-08-02
--------------開始創(chuàng)建撲克牌----------------
--------------撲克牌創(chuàng)建成功!---------------
撲克牌為:
Diamonds2 ?Diamonds3 ?Diamonds4 ?Diamonds5 ?Diamonds6 ?Diamonds7 ?Diamonds8 ?Diamonds9 ?
Diamonds10 ?DiamondsJ ?DiamondsQ ?DiamondsK ?DiamondsA ?Hearts2 ?Hearts3 ?Hearts4 ?
Hearts5 ?Hearts6 ?Hearts7 ?Hearts8 ?Hearts9 ?Hearts10 ?HeartsJ ?HeartsQ ?
HeartsK ?HeartsA ?Clubs2 ?Clubs3 ?Clubs4 ?Clubs5 ?Clubs6 ?Clubs7 ?
Clubs8 ?Clubs9 ?Clubs10 ?ClubsJ ?ClubsQ ?ClubsK ?ClubsA ?Spades2 ?
Spades3 ?Spades4 ?Spades5 ?Spades6 ?Spades7 ?Spades8 ?Spades9 ?Spades10 ?
SpadesJ ?SpadesQ ?SpadesK ?SpadesA ?
----------------開始洗牌-------------------
----------------洗牌完成!------------------
---------------開始創(chuàng)建玩家------------------
請輸入玩家人數(shù):4
第1玩家的ID為25
輸入該玩家的姓名:jessy
第2玩家的ID為50
輸入該玩家的姓名:luna
第3玩家的ID為91
輸入該玩家的姓名:alx
第4玩家的ID為9
輸入該玩家的姓名:skert
歡迎玩家:jessy進入游戲!
歡迎玩家:alx進入游戲!
歡迎玩家:skert進入游戲!
歡迎玩家:luna進入游戲!
----------------開始發(fā)牌-------------------
----------玩家jessy拿牌---------
----------玩家alx拿牌---------
----------玩家skert拿牌---------
----------玩家luna拿牌---------
----------玩家jessy拿牌---------
----------玩家alx拿牌---------
----------玩家skert拿牌---------
----------玩家luna拿牌---------
----------------發(fā)牌結束!------------------
----------------開始游戲-------------------
玩家:jessy ?最大的手牌是:Spades6
玩家:alx ?最大的手牌是:HeartsJ
玩家:skert ?最大的手牌是:DiamondsA
玩家:luna ?最大的手牌是:DiamondsQ
--------------玩家:skert獲勝!-------------
玩家:jessy的手牌為: Spades5 ?Spades6 ?
玩家:alx的手牌為: ClubsJ ?HeartsJ ?
玩家:skert的手牌為: ClubsK ?DiamondsA ?
玩家:luna的手牌為: Diamonds8 ?DiamondsQ ?
程序完整結果是這樣。
2016-08-02
不錯。