package?com.imooc;
import?java.util.ArrayList;
import?java.util.Collections;
import?java.util.HashSet;
import?java.util.Iterator;
import?java.util.List;
import?java.util.Scanner;
import?java.util.Set;
/**
?*?控制器,主函數
?*?@author?jelly
?*
?*/
public?class?Controller?{
List<Poker>?poker?=?new?ArrayList<Poker>();
List<Player>?player?=?new?ArrayList<Player>();
Set<Poker>?newPoker;
????//創建poker牌
public?void?build()?{
System.out.println("-----------開始創建撲克牌-----------");
String[]?suits?=?{?"方片",?"梅花",?"紅桃",?"黑桃"?};
String[]?numbers?=?{?"2",?"3",?"4",?"5",?"6",?"7",?"8",?"9",?"10",?"J",
"Q",?"K",?"A",?};
System.out.println("-----------撲克創建成功----------");
System.out.print("為:[");
for?(int?i?=?0;?i?<?4;?i++)?{
for?(int?j?=?0;?j?<?13;?j++)?{
poker.add(new?Poker(suits[i],?numbers[j]));
}
}
for?(Poker?pk?:?poker)?{
System.out.print(pk?+?",");
}
System.out.println("]");
}
//?洗牌
public?void?shuffle()?{
System.out.println("----------開始洗牌----------");
this.newPoker?=?new?HashSet<>(poker);
System.out.println("----------洗牌結束----------");
}
//?創建玩家
public?void?buildPlayer()?{
System.out.println("----------創建玩家----------");
int?i?=?0;
while?(i?<?2)?{
System.out.println("請輸入第"?+?(i?+?1)?+?"位玩家的ID和姓名");
try?{
Scanner?in?=?new?Scanner(System.in);
System.out.println("輸入ID:");
int?id?=?in.nextInt();
System.out.println("輸入姓名:");
String?name?=?in.next();
player.add(new?Player(id,?name));
i++;
}?catch?(Exception?e)?{
System.out.println("請輸入整數類型的ID");
}
}
for?(int?k?=?0;?k?<?player.size();?k++)?{
System.out.println("歡迎玩家:"?+?player.get(k).getName());
}
}
//?發牌
public?void?deal()?{
System.out.println("----------開始發牌----------");
for?(int?i?=?0;?i?<?2;?i++)?{
for?(int?j?=?0;?j?<?2;?j++)?{
Iterator<Poker>?it?=?newPoker.iterator();
Poker?poker?=?it.next();
player.get(j).handPoker.add(poker);
System.out.println("玩家"?+?player.get(j).getName()?+?"拿牌");
newPoker.remove(poker);
}
}
System.out.println("----------發牌結束----------");
}
public?void?game()?{
System.out.println("----------開始游戲----------");
Compare?compare?=?new?Compare();
for?(int?i?=?0;?i?<?2;?i++)?{
Collections.sort(player.get(i).handPoker,?compare);
System.out.println("玩家"?+?player.get(i).getName()?+?"最大的手牌為"
+?player.get(i).handPoker.get(1));
}
if?(compare.compare(player.get(0).handPoker.get(0),
player.get(1).handPoker.get(1))?>?0)?{
System.out.println("玩家"?+?player.get(0).getName()?+?"獲勝");
}?else?{
System.out.println("玩家"?+?player.get(1).getName()?+?"獲勝");
}
System.out.println("玩家各自的手牌為");
for?(int?j?=?0;?j?<?2;?j++)?{
System.out.println("玩家"+player.get(j).getName());
for?(Poker?poker?:?player.get(j).handPoker)?{
System.out.println(poker+"??");
}
}
}
public?static?void?main(String[]?args)?{
Controller?cr?=?new?Controller();
cr.build();
cr.shuffle();
cr.buildPlayer();
cr.deal();
cr.game();
}
}
2015-08-17
恩,有一些漏洞,應該用collection.shuffle(),方法,不過我當時不知道這個方法,謝謝各位了,多多學習
2015-08-05
然后 game方法 中對比的應該是2個較大的手牌么?,
if?(compare.compare(player.get(0).handPoker.get(0),
????????????????player.get(1).handPoker.get(1))?>?0)
此句第一個handPoker.get(0),應該是較小那一個,是否該改為handPoker(1)??? ?
2015-08-05
洗牌部分真的洗牌了嗎?
這樣多次運行結果應該不會變,因為并沒有洗牌,只是把newpoker賦值了poker,然而前面應該加一句?Collections.shuffle(poker);
才可做到洗牌效果吧?
可能不對,考慮考慮
2015-08-04
Controller 中 創建Poker 語句
for?(Poker?pk?:?poker)?{
????????????System.out.print(pk?+?",");
????????}
為什么我輸出的是地址符?
2015-07-26
代碼無懈可擊,但我覺得有個地方可能有問題:
老師要求隨機洗牌后按順序從第一張撲克開始發牌,用Set(無序的)集合,用迭代器取牌并不符合發牌規則,這更像從撲克牌中隨機取牌,如果洗牌后的排序不變,你的發牌出現的結果是隨機的:
?//?發牌 ????public?void?deal()?{ ????????System.out.println("----------開始發牌----------"); ????????for?(int?i?=?0;?i?<?2;?i++)?{ ????????????for?(int?j?=?0;?j?<?2;?j++)?{ ????????????????Iterator<Poker>?it?=?newPoker.iterator(); ????????????????Poker?poker?=?it.next(); ????????????????player.get(j).handPoker.add(poker); ????????????????System.out.println("玩家"?+?player.get(j).getName()?+?"拿牌"); ????????????????newPoker.remove(poker); ????????????} ????????} ????????System.out.println("----------發牌結束----------"); ????}2015-07-16
厲害啊
2015-07-10
package?com.imooc; import?java.util.Arrays; import?java.util.Comparator; import?java.util.List; /** ?*?比較規則 ?*?@author?jelly ?* ?*/ public?class?Compare?implements?Comparator<Poker>?{ @Override public?int?compare(Poker?o1,?Poker?o2)?{ List<String>?nums?=?Arrays.asList("2",?"3",?"4",?"5",?"6",?"7",?"8", "9",?"J",?"Q",?"K",?"A"); List<String>?color?=?Arrays.asList("方塊",?"梅花",?"紅桃",?"黑桃"); if?(nums.indexOf(o1.getNum())?==?nums.indexOf(o2.getNum())) return?(((Integer)?(color.indexOf(o1.getSuit()))) .compareTo((Integer)?(color.indexOf(o2.getSuit())))); else?{ return?(((Integer)?nums.indexOf(o1.getNum()))) .compareTo(((Integer)?nums.indexOf(o2.getNum()))); } } }2015-07-10
package?com.imooc; /** ?*?poker?class ?*?@author?jelly ?* ?*/ public?class?Poker?{ private?String?suit;//撲克牌的花色 private?String?num;//poker's?number public?Poker(String?suit,String?num){ this.suit?=?suit; this.num?=?num; } public?String?getSuit()?{ return?suit; } public?void?setSuit(String?suit)?{ this.suit?=?suit; } public?String?getNum()?{ return?num; } public?void?setNum(String?num)?{ this.num?=?num; } ????public?String?toString() ????{ ????????return?this.suit+this.num; ????} }2015-07-10
package?com.imooc; import?java.util.ArrayList; import?java.util.List; /** ?*?玩家類 ?*?@author?jelly ?* ?*/ public?class?Player?{ private?int?ID;//萬家的ID private?String?name; List<Poker>?handPoker?=?new?ArrayList<Poker>(); public?Player(int?ID,String?name){ this.ID?=?ID; this.name?=?name; } public?int?getID()?{ return?ID; } public?void?setID(int?iD)?{ ID?=?iD; } public?String?getName()?{ return?name; } public?void?setName(String?name)?{ this.name?=?name; } }