package?com.game;
/**
?*?撲克牌類
?*/
public?class?Card?{
????String?num;??//?卡牌標號?2-10??A?J?Q?K
????String?type;?//?花色?黑桃?紅桃?梅花?方片
????Card(String?num,?String?type)?{
????????this.num?=?num;
????????this.type?=?type;
????}
????@Override
????public?String?toString()?{
????????return?type?+?num;
????}
}
package?com.game;
import?java.util.ArrayList;
import?java.util.List;
/**
?*?玩家角色
?*/
public?class?Role?{
????int?id;?//?玩家id
????String?name;?//?玩家姓名
????List<Card>?cards;?//?玩家手牌
????Role(int?id,?String?name)?{
????????this.id?=?id;
????????this.name?=?name;
????????cards?=?new?ArrayList<>();
????}
}
package?com.game;
import?java.util.*;
/**
?*?比較兩名玩家的手牌,首先比較點數、若點數相同則比較花色
?*/
public?class?Game?{
????//?一副撲克牌?共52張
????private?List<Card>?cards?=?new?ArrayList<>();
????//?玩家角色?共兩人
????private?Role[]?roles?=?new?Role[2];
????//?玩家持有的手牌數量
????private?int?num?=?2;
????public?void?run()?{
????????System.out.println("----------------------------------開始游戲?。?!----------------------------------");
????????initCards();
????????showCards();
????????shuffle();
????????initRole();
????????send();
????????compare();
????????showRoleCards();
????????System.out.println("----------------------------------游戲結束?。?!----------------------------------");
????}
????//?對撲克牌進行初始化
????private?void?initCards()?{
????????System.out.println("-----------------創建撲克牌?。?!-----------------");
????????String[]?type?=?{"黑桃",?"紅桃",?"梅花",?"方片"};
????????for?(int?i?=?0;?i?<?4;?i++)?{
????????????cards.add(new?Card("A",?type[i]));
????????????for?(int?j?=?2;?j?<=?10;?j++)?{
????????????????cards.add(new?Card(j?+?"",?type[i]));
????????????}
????????????cards.add(new?Card("J",?type[i]));
????????????cards.add(new?Card("Q",?type[i]));
????????????cards.add(new?Card("K",?type[i]));
????????}
????????System.out.println("-----------------創建撲克牌成功?。?!-----------------");
????}
????//?初始化角色
????private?void?initRole()?{
????????System.out.println("-----------------創建玩家?。。?----------------");
????????Scanner?sc?=?new?Scanner(System.in);
????????int?id;?//?玩家id
????????String?name;?//?玩家姓名
????????for?(int?i?=?0;?i?<?roles.length;?i++)?{
????????????System.out.println("請輸入玩家"?+?(i?+?1)?+?"的id:");
????????????id?=?sc.nextInt();
????????????System.out.println("請輸入玩家"?+?(i?+?1)?+?"的name:");
????????????name?=?sc.next();
????????????roles[i]?=?new?Role(id,?name);
????????}
????????for?(Role?role?:?roles)?{
????????????System.out.println("-------歡迎玩家:"?+?role.name);
????????}
????}
????//?展示撲克牌
????private?void?showCards()?{
????????System.out.println(cards);
????}
????//?展示玩家手牌
????private?void?showRoleCards()?{
????????System.out.println("玩家各自的手牌為:");
????????for?(Role?role?:?roles)?{
????????????System.out.println(role.name?+?":"?+?role.cards);
????????}
????}
????//?洗牌
????private?void?shuffle()?{
????????System.out.println("-----------------開始洗牌?。?!-----------------");
????????Collections.shuffle(cards);
????????System.out.println("-----------------洗牌結束!??!-----------------");
????}
????//?游戲規則
????private?void?send()?{
????????System.out.println("-----------------開始發牌?。?!-----------------");
????????Iterator<Card>?iter?=?cards.iterator();
????????for?(int?i?=?0;?i?<?num;?i++)?{
????????????for?(Role?role?:?roles)?{
????????????????System.out.println("玩家:"?+?role.name?+?"-拿牌");
????????????????role.cards.add(iter.next());
????????????}
????????}
????????System.out.println("-----------------發牌結束?。。?----------------");
????}
????//?比較
????private?void?compare()?{
????????Map<Card,?String>?map?=?new?HashMap<>();
????????for?(Role?role?:?roles)?{
????????????Collections.sort(role.cards,?new?CardComparator());
????????????map.put(role.cards.get(0),?role.name);
????????}
????????for?(Map.Entry<Card,?String>?entry?:?map.entrySet())?{
????????????System.out.println("玩家:"?+?entry.getValue()?+?"?最大的手牌為:"?+?entry.getKey());
????????}
????????List<Card>?list?=?new?ArrayList<>(map.keySet());
????????Collections.sort(list,?new?CardComparator());
????????System.out.println("-----------------玩家:"?+?map.get(list.get(0))?+?"?獲勝?。?!-----------------");
????}
}
package?com.game;
import?java.util.Comparator;
public?class?CardComparator?implements?Comparator<Card>?{
????@Override
????public?int?compare(Card?c1,?Card?c2)?{
????????if?(!c1.num.equals(c2.num))?{
????????????return?c2.num.compareTo(c1.num);
????????}?else?{
????????????return?c2.type.compareTo(c1.type);
????????}
????}
}
package?com.game;
public?class?Client?{
????public?static?void?main(String[]?args)?{
????????Game?game?=?new?Game();
????????game.run();
????}
}