借鑒別人的代碼加以改造完成的撲克牌游戲~~~貼墻!!
package?com.joker.test;
import?java.util.ArrayList;
import?java.util.Collections;
import?java.util.HashMap;
import?java.util.Iterator;
import?java.util.List;
import?java.util.Map.Entry;
import?java.util.Map;
import?java.util.Scanner;
import?java.util.Set;
import?com.joker.entity.Player;
import?com.joker.entity.Poker;
/**
?*?主體類
?*?@author?MeRos
?*
?*/
public?class?PokerGame?{
Map<Integer,?Player>?playerMap;
List<Poker>?pokerList;
Player?player;
String[]?type?=?{?"黑桃",?"紅桃",?"梅花",?"方塊"?};
String[]?pointer?=?{?"2",?"3",?"4",?"5",?"6",?"7",?"8",?"9",?"10",?"J",
"Q",?"K",?"A"?};
public?PokerGame()?{
pokerList?=?new?ArrayList<Poker>();
playerMap?=?new?HashMap<Integer,?Player>();
}
/**
?*?創建撲克牌
?*?
?*?@param?args
?*/
public?void?pokerAdd()?{
System.out.println("-------創建撲克牌-------");
for?(int?i?=?0;?i?<?type.length;?i++)?{
for?(int?j?=?0;?j?<?pointer.length;?j++)?{
pokerList.add(new?Poker(type[i],?pointer[j]));
}
}
System.out.println("-------撲克牌創建成功-------");
}
/**
?*?遍歷顯示所有撲克牌
?*?
?*?@param?args
?*/
public?void?pokerGet()?{
for?(Iterator<Poker>?it?=?pokerList.iterator();?it.hasNext();)?{
for?(int?i?=?0;?i?<?type.length;?i++)?{
for?(int?j?=?0;?j?<?pointer.length;?j++)?{
Poker?poker?=?it.next();
System.out.print(poker.toString()?+?"?");
}
System.out.println();
}
}
}
/**
?*?洗牌
?*/
public?void?shufflePoker()?{
System.out.println("-------開始洗牌-------");
Collections.shuffle(pokerList);
}
/**
?*?創建玩家
?*?
?*?@param?args
?*/
public?void?playerAdd()?{
System.out.println("-------創建玩家-------");
int?i?=?0;
while?(i?<?2)?{
System.out.println("請輸入玩家的ID:");
try?{
Scanner?input?=?new?Scanner(System.in);
int?id?=?input.nextInt();
Player?playerID?=?playerMap.get(id);
if?(playerID?==?null)?{
System.out.println("請輸入第"?+?(i?+?1)?+?"位玩家的姓名:");
String?name?=?input.next();
Player?player?=?new?Player(id,?name);
playerMap.put(id,?player);
System.out.println("成功創建玩家:"?+?playerMap.get(id).getName());
System.out.println("--------------------");
i++;
}?else?{
System.out.println("該ID已被占用~~");
continue;
}
}?catch?(Exception?e)?{
System.out.println("請輸入整數類型ID!!");
//?e.printStackTrace();
continue;
}
}
//?遍歷輸出玩家信息
Set<Entry<Integer,?Player>>?entrySet?=?playerMap.entrySet();
for?(Entry<Integer,?Player>?entry?:?entrySet)?{
System.out.println("-----歡迎玩家:"?+?entry.getValue().getName());
}
}
/**
?*?開始發牌
?*?
?*?@param?args
?*/
public?void?pokerSend()?{
System.out.println("-------開始發牌-------");
Set<Integer>?keySet?=?playerMap.keySet();
int?num?=?0;
for?(int?i?=?0;?i?<?2;?i++)?{
for?(Integer?id?:?keySet)?{
Player?player?=?playerMap.get(id);
if?(player?!=?null)?{
System.out.println("---玩家:"?+?player.getName()?+?"拿牌~~~");
player.handPoker.add(pokerList.get(num));
num++;
}
}
}
System.out.println("-------發牌結束-------");
}
/**
?*?開始游戲,每個玩家取得手牌中的最大牌
?*?
?*?@param?args
?*/
public?void?pokerGame()?{
System.out.println("-------游戲開始-------");
List<Poker>?pokerMax?=?new?ArrayList<Poker>();
Set<Entry<Integer,?Player>>?entrySet?=?playerMap.entrySet();
//?取得當前玩家的最大手牌
for?(Entry<Integer,?Player>?entry?:?entrySet)?{
//?Set集合轉換為List集合
List<Poker>?poker?=?new?ArrayList<Poker>(entry.getValue().handPoker);
//?手牌sort排序后最大的在最后,所以用到reverse進行翻轉,將最大值放在最前面
Collections.sort(poker);
Collections.reverse(poker);
//?玩家手牌當中的最大牌放入pokerMax集合
pokerMax.add(poker.get(0));
System.out.println("玩家:"?+?entry.getValue().getName()?+?"最大的手牌是:"
+?poker.get(0).toString());
}
//?取得pokerMax集合中的最大牌判斷勝負
Collections.sort(pokerMax);
Collections.reverse(pokerMax);
for?(Entry<Integer,?Player>?entry?:?entrySet)?{
if?(entry.getValue().handPoker.contains(pokerMax.get(0)))?{
System.out.println("-------玩家:"?+?entry.getValue().getName()
+?"獲勝!!");
}
}
//?輸出玩家手中的所有牌
System.out.println("玩家各自的手牌為:");
for?(Entry<Integer,?Player>?entry?:?entrySet)?{
System.out.print(entry.getValue().getName()?+?":");
for?(Poker?poker?:?entry.getValue().handPoker)?{
System.out.print(poker.toString()+"?");
}
System.out.println();
}
}
public?static?void?main(String[]?args)?{
PokerGame?pg?=?new?PokerGame();
pg.pokerAdd();
pg.pokerGet();
pg.shufflePoker();
pg.playerAdd();
pg.pokerSend();
pg.pokerGame();
}
}package?com.joker.entity;
/**
?*?撲克牌類?四種花色:黑桃、紅桃、梅花、方片?十三種點數:2-10、J、Q、K、A,不考慮大小王
?*?
?*?@author?MeRos
?*
?*/
public?class?Poker?implements?Comparable<Poker>?{
private?String?type;
private?String?pointer;
public?Poker(String?type,?String?pointer)?{
this.setPointer(pointer);
this.setType(type);
}
public?String?getType()?{
return?type;
}
public?void?setType(String?type)?{
this.type?=?type;
}
public?String?getPointer()?{
return?pointer;
}
public?void?setPointer(String?pointer)?{
this.pointer?=?pointer;
}
@Override
public?int?hashCode()?{
final?int?prime?=?31;
int?result?=?1;
result?=?prime?*?result?+?((pointer?==?null)???0?:?pointer.hashCode());
result?=?prime?*?result?+?((type?==?null)???0?:?type.hashCode());
return?result;
}
@Override
public?boolean?equals(Object?obj)?{
if?(this?==?obj)
return?true;
if?(obj?==?null)
return?false;
if?(!(obj?instanceof?Poker))
return?false;
Poker?other?=?(Poker)?obj;
if?(pointer?==?null)?{
if?(other.pointer?!=?null)
return?false;
}?else?if?(!pointer.equals(other.pointer))
return?false;
if?(type?==?null)?{
if?(other.type?!=?null)
return?false;
}?else?if?(!type.equals(other.type))
return?false;
return?true;
}
@Override
public?int?compareTo(Poker?o)?{
String?pokerPointer?=?"2,3,4,5,6,7,8,9,10,J,Q,K,A";
String?pokerType?=?"方塊,梅花,紅桃,黑桃";
int?result;
result?=?pokerPointer.indexOf(this.getPointer())
-?pokerPointer.indexOf(o.getPointer());
if?(result?==?0)?{
result?=?pokerType.indexOf(this.getType())
-?pokerType.indexOf(o.getPointer());
}
return?result;
}
@Override
public?String?toString()?{
return?type?+?pointer;
}
}package?com.joker.entity;
import?java.util.HashSet;
import?java.util.Set;
/**
?*?玩家類
?*?屬性:ID、姓名、手牌
?*?手牌為撲克牌集合
?*?@author?MeRos
?*
?*/
public?class?Player?{
private?int?id;
private?String?name;
public?Set<Poker>?handPoker;
public?Player(int?id,?String?name)?{
this.setId(id);
this.setName(name);
handPoker?=?new?HashSet<Poker>();
}
public?int?getId()?{
return?id;
}
public?void?setId(int?id)?{
this.id?=?id;
}
public?String?getName()?{
return?name;
}
public?void?setName(String?name)?{
this.name?=?name;
}
}這里三個集合都有用到、玩家類中的手牌使用Set集合是因為只有一副牌,每個玩家拿到的手牌都是不同的~~
2015-12-30
你的比較大小的方法,寫的太棒啦!?。∧ぐ菽ぐ?。。。。。。
2015-12-14
Set<Entry<Integer,?Player>>?entrySet?=?playerMap.entrySet();
entry是在哪一節的??有點印象,忘記了
2015-12-05
我不太明白,為什么Set,Map,List之間來回轉換,都用統一的集合類型不行嗎?
比如:
????List<Poker>?pokerList;
?Set<Poker>?handPoker;
handPoker?=?new?HashSet<Poker>();這些都是存放撲克的,統一用Set或者List不行嗎
還有
List<Poker>?pokerMax?=?new?ArrayList<Poker>();
?Set<Entry<Integer,?Player>>?entrySet?=?playerMap.entrySet(); ?這些轉換一時真的很費解?。?/p>
求大神解讀?。。。。?!
2015-11-08
比較大小用index那個方法真的太棒了!?。?/p>