作業完成,歡迎討論
不能超過兩萬字!! <-?評論繼續貼
先貼截圖:


附代碼:
Card.java //撲克牌類
package?com.playcards;
/**
?*?撲克牌類<br>
?*?實現Comparable
?*?
?*?@author?Cothrax
?*?
?*/
public?class?Card?implements?Comparable<Card>?{
????private?Integer?type;
????private?Integer?num;
????/**
?????*?Crad的無參構造方法
?????*/
????public?Card()?{
????}
????/**
?????*?Card的有參構造方法
?????*?
?????*?@param?type
?????*????????????指牌的花色:黑紅梅方<br>
?????*????????????type?=?1;?==>?方片<br>
?????*????????????type?=?2;?==>?梅花<br>
?????*????????????type?=?3;?==>?紅心<br>
?????*????????????type?=?4;?==>?黑桃<br>
?????*?@param?num
?????*????????????指牌的數值:1-13
?????*?@exception?Card?type在1-4之間
?????*?@exception?Card?num在1-13之間
?????*/
????public?Card(Integer?type,?Integer?num)?{
????????if?(type?>?4?^?type?<?1)?{
????????????throw?new?IllegalArgumentException("type在1-4之間");
????????}
????????if?(num?<?1?^?num?>?13)?{
????????????throw?new?IllegalArgumentException("num在1-13之間");
????????}
????????this.type?=?type;
????????this.num?=?num;
????}
????/**
?????*?獲取花色的方法
?????*?@return?花色
?????*/
????public?int?getType()?{
????????return?type;
????}
????/**
?????*?設置花色的方法
?????*?@param?type?新的花色
?????*?@exception?Card?type在1-4之間
?????*/
????public?void?setType(int?type)?{
????????if?(type?>?4?^?type?<?1)?{
????????????throw?new?IllegalArgumentException("type在1-4之間");
????????}
????????this.type?=?type;
????}
????/**
?????*?獲取牌的值的方法
?????*?@return?牌的值
?????*/
????public?int?getNum()?{
????????return?num;
????}
????/**
?????*?設置牌的值的方法
?????*?@param?num?新的牌值
?????*?@exception?Card?num在1-13之間
?????*/
????public?void?setNum(int?num)?{
????????if?(num?<?1?^?num?>?13)?{
????????????throw?new?IllegalArgumentException("num在1-13之間");
????????}
????????this.num?=?num;
????}
????/**
?????*?重寫的hashCode方法
?????*/
????@Override
????public?int?hashCode()?{
????????final?int?prime?=?31;
????????int?result?=?1;
????????result?=?prime?*?result?+?num;
????????result?=?prime?*?result?+?type;
????????return?result;
????}
????/**
?????*?重寫的equals方法
?????*?@param?obj?與之比較的對象
?????*/
????@Override
????public?boolean?equals(Object?obj)?{
????????if?(this?==?obj)
????????????return?true;
????????if?(obj?==?null)
????????????return?false;
????????if?(getClass()?!=?obj.getClass())
????????????return?false;
????????Card?other?=?(Card)?obj;
????????if?(num?!=?other.num)
????????????return?false;
????????if?(type?!=?other.type)
????????????return?false;
????????return?true;
????}
????/**
?????*?Card轉String方法
?????*?
?????*?@return?牌字符串(類型+值)
?????*/
????@Override
????public?String?toString()?{
????????String?typeString?=?"";
????????switch?(type)?{
????????case?1:
????????????typeString?=?"方片";
????????????break;
????????case?2:
????????????typeString?=?"梅花";
????????????break;
????????case?3:
????????????typeString?=?"紅心";
????????????break;
????????case?4:
????????????typeString?=?"黑桃";
????????????break;
????????default:
????????????break;
????????}
????????String?numString;
????????switch?(num)?{
????????case?1:
????????????numString?=?"A";
????????????break;
????????case?11:
????????????numString?=?"J";
????????????break;
????????case?12:
????????????numString?=?"Q";
????????????break;
????????case?13:
????????????numString?=?"K";
????????????break;
????????default:
????????????numString?=?String.valueOf(num);
????????????break;
????????}
????????return?typeString?+?numString;
????}
????@Override
????public?int?compareTo(Card?arg0)?{
????????//?TODO?Auto-generated?method?stub
????????if?(this.type?==?arg0.type)?{
????????????return?this.num.compareTo(arg0.num);
????????}?else?{
????????????return?this.type.compareTo(arg0.type);
????????}
????}
}Player.java //玩家類
package?com.playcards;
import?java.util.Arrays;
/**
?*?玩家類
?*?@author?Cothrax
?*
?*/
public?class?Player?{
????private?int?id;
????private?String?name;
????private?Card[]?cards;
????
????/**
?????*?Player的無參構造方法
?????*/
????public?Player()?{
????}
????/**
?????*?Player的有參構造方法
?????*?@param?id?玩家id
?????*?@param?name?玩家名稱
?????*/
????public?Player(int?id,?String?name)?{
????????this.id?=?id;
????????this.name?=?name;
????}
????
????/**
?????*?Player的有參構造方法
?????*?@param?id?玩家id
?????*?@param?name?玩家名稱
?????*?@param?cards?玩家手中的牌
?????*?
?????*?@exception?Player?一個玩家手中只能有兩張牌!
?????*/
????public?Player(int?id,?String?name,?Card[]?cards)?{
????????this.id?=?id;
????????this.name?=?name;
????????if?(cards.length?!=?2)?{
????????????throw?new?IllegalArgumentException("一個玩家手中只能有兩張牌!");
????????}
????????this.cards?=?cards;
????}
????/**
?????*?獲取玩家id
?????*?@return?玩家id
?????*/
????public?int?getId()?{
????????return?id;
????}
????/**
?????*?設置玩家id
?????*?@param?id?新的玩家id
?????*/
????public?void?setId(int?id)?{
????????this.id?=?id;
????}
????/**
?????*?獲取玩家名稱
?????*?@return?玩家名稱
?????*/
????public?String?getName()?{
????????return?name;
????}
????/**
?????*?設置玩家名稱
?????*?@param?name?新的玩家名稱
?????*/
????public?void?setName(String?name)?{
????????this.name?=?name;
????}
????/**
?????*?獲取玩家手中的牌
?????*?@return?玩家手中的牌
?????*/
????public?Card[]?getCards()?{
????????return?cards;
????}
????/**
?????*?設置玩家手中的牌
?????*?@param?cards?新的手牌
?????*?@exception?Player?一個玩家手中只能有兩張牌!
?????*/
????public?void?setCards(Card[]?cards)?{
????????if?(cards.length?!=?2)?{
????????????throw?new?IllegalArgumentException("一個玩家手中只能有兩張牌!");
????????}
????????this.cards?=?cards;
????}
????/**
?????*?重寫的hashCode方法
?????*/
????@Override
????public?int?hashCode()?{
????????final?int?prime?=?31;
????????int?result?=?1;
????????result?=?prime?*?result?+?Arrays.hashCode(cards);
????????result?=?prime?*?result?+?id;
????????result?=?prime?*?result?+?((name?==?null)???0?:?name.hashCode());
????????return?result;
????}
????/**
?????*?重寫的eqauls方法
?????*?@param?obj?與之比較的對象
?????*/
????@Override
????public?boolean?equals(Object?obj)?{
????????if?(this?==?obj)
????????????return?true;
????????if?(obj?==?null)
????????????return?false;
????????if?(getClass()?!=?obj.getClass())
????????????return?false;
????????Player?other?=?(Player)?obj;
????????if?(!Arrays.equals(cards,?other.cards))
????????????return?false;
????????if?(id?!=?other.id)
????????????return?false;
????????if?(name?==?null)?{
????????????if?(other.name?!=?null)
????????????????return?false;
????????}?else?if?(!name.equals(other.name))
????????????return?false;
????????return?true;
????}
????
????/**
?????*?返回玩家字符串的方法
?????*?@return?玩家字符串(id+名稱+手牌)
?????*?
?????*/
????@Override
????public?String?toString()?{
????????return?id?+?"號玩家"?+?name?+?":"?+?Arrays.toString(cards);
????}
????
????
????
}未完
不能超過兩萬字?。?<-?評論繼續貼
2015-03-30
有錯誤????
2015-02-12
繼續貼...
Main.java //測試類
package?com.playcards; import?java.util.ArrayList; import?java.util.Scanner; public?class?Main?{ ????public?static?void?main(String[]?args)?{ ????????//?TODO?Auto-generated?method?stub ????????System.out.println("————————————創建撲克牌...——————————————"); ????????ArrayList<Card>?cards?=?DoCards.createCards(); ????????System.out.println("——————————成功創建撲克牌!—————————————"); ????????System.out.println("——————————————創建玩家...——————————————"); ????????ArrayList<Player>?players?=?DoCards.createPlayer(); ????????System.out.println("—————————————創建成功!————————————————"); ????????int?times?=?1; ????????int?winner?=?0; ????????while?(true)?{ ????????????System.out.println("—————————————洗牌中...—————————————————"); ????????????cards?=?DoCards.randomCards(cards); ????????????System.out.println("—————————————成功洗牌!————————————————"); ????????????System.out.println("——————————————發牌...——————————————————"); ????????????players?=?DoCards.handCards(players,?cards); ????????????System.out.println("—————————————成功發牌!————————————————"); ????????????System.out.println("———————————游戲開始-第"+times+"局—————————————————"); ????????????ArrayList<Card>?maxCards?=?DoCards.playCards(players); ????????????int?isWin?=?DoCards.whoWin(maxCards); ????????????System.out.println(players.get(0).getName()?+?"出牌:?"?+?maxCards.get(0)); ????????????System.out.println(players.get(1).getName()?+?"出牌:?"?+?maxCards.get(1)); ????????????if?(isWin?>?0)?{ ????????????????System.out.println(players.get(0).getName()?+?"贏!"); ????????????????winner++; ????????????}?else?if(isWin?==?0)?{ ????????????????System.out.println("平局=="); ????????????}?else?{ ????????????????System.out.println(players.get(1).getName()?+?"贏!"); ????????????????winner--; ????????????} ????????????System.out.println("————————————列出玩家手牌——————————————————"); ????????????for?(int?i?=?0;?i?<?players.size();?i++)?{ ????????????????System.out.println(players.get(i)); ????????????} ????????????Scanner?console?=?new?Scanner(System.in); ????????????System.out.println("——————————————第"+times+"局結束!——————————————————"); ???????????? ????????????System.out.print("是否在來一局?(yes/no)"); ????????????String?isGoOn?=?console.next(); ????????????if(isGoOn.toLowerCase().equals("yes"))?{ ????????????????System.out.println("再來一局!:)"); ????????????????times++; ????????????????continue; ????????????}?else?if?(isGoOn.toLowerCase().equals("no"))?{ ????????????????System.out.println("——————————————大結局————————————————————"); ????????????????if?(winner>0)?{ ????????????????????System.out.println("最終"+players.get(0).getName()+"勝利!O(∩_∩)O"); ????????????????}?else?if(winner<0)?{ ????????????????????System.out.println("最終"+players.get(1).getName()+"勝利!(^o^)/~"); ????????????????}?else?{ ????????????????????System.out.println("最終,平局!-_-!"); ????????????????} ????????????????System.out.println("已退出!歡迎再來!(?^_^?)/~~"); ????????????????break; ????????????}?else?{ ????????????????System.out.println("輸入有誤!╭∩╮(︶︿︶)╭∩╮~~退出!"); ????????????????break; ????????????} ????????} ???????? ???????? ????} ???? ???? }完畢。
2015-02-12
繼續貼
DoCards.java?//將創建牌、創建玩家、洗牌、發牌、玩牌方法放在一起
package?com.playcards; import?java.util.ArrayList; import?java.util.Arrays; import?java.util.Random; import?java.util.Scanner; /** ?*?Card工具類(也含有Player相關) ?*?@author?Cothrax ?* ?*/ public?class?DoCards?{ ???? ????/** ?????*?創建一副撲克牌的方法 ?????*?@return?一副有序的撲克牌 ?????*/ ????public?static?ArrayList<Card>?createCards()?{ ????????ArrayList<Card>?cards?=?new?ArrayList<Card>(); ????????for?(int?i?=?1;?i?<?5;?i++)?{ ????????????Integer?type?=?i; ????????????Integer?num?=?1; ????????????while?(num?<?14)?{ ????????????????Card?temp?=?new?Card(type,?num); ????????????????cards.add(temp); ????????????????num++; ????????????} ????????} ????????return?cards; ????} ????/** ?????*?洗牌的方法 ?????*?@param?originalList?原始的牌 ?????*?@return?打亂的牌 ?????*/ ????public?static?ArrayList<Card>?randomCards(ArrayList<Card>?originalList)?{ ????????ArrayList<Card>?temp?=?originalList; ????????ArrayList<Card>?newList?=?new?ArrayList<Card>(); ????????int?bound?=?originalList.size(); ????????Random?random?=?new?Random(); ????????while(temp.size()?!=?0)?{ ????????????int?index?=?random.nextInt(bound); ????????????newList.add(originalList.get(index)); ????????????originalList.remove(index); ????????????bound--; ????????} ????????return?newList; ????} ???? ????/** ?????*?發牌的方法 ?????*?@param?players?玩家序列 ?????*?@param?cards?未發的牌的序列 ?????*?@return?發過牌的玩家的序列 ?????*?@exception?DoCards?玩家應該有兩人! ?????*?@exception?DoCards?牌不夠了! ?????*/ ????public?static?ArrayList<Player>?handCards(ArrayList<Player>?players,?ArrayList<Card>?cards)?{ ????????if?(players.size()?!=?2)?{ ????????????throw?new?IllegalArgumentException("玩家應該有兩人!"); ????????} ????????if?(cards.size()?<?4)?{ ????????????throw?new?IllegalArgumentException("牌不夠了!("?+?cards.size()?+?")"); ????????} ????????Card[]?cards1?=?{cards.get(0),?cards.get(2)}; ????????Card[]?cards2?=?{cards.get(1),?cards.get(3)}; ????????ArrayList<Player>?newPlayers?=?players; ????????newPlayers.get(0).setCards(cards1); ????????newPlayers.get(1).setCards(cards2); ????????return?newPlayers; ????} ???? ????/** ?????*?玩牌的方法 ?????*?@param?players?玩家的序列 ?????*?@return?最大牌的序列(玩家1的最大牌,玩家2的最大牌) ?????*?@exception?DoCards?玩家應該有兩人! ?????*?@exception?玩家的手牌數不對~~! ?????*/ ????public?static?ArrayList<Card>?playCards(ArrayList<Player>?players)?{ ????????if?(players.size()?!=?2)?{ ????????????throw?new?IllegalArgumentException("玩家應該有兩人!"); ????????} ????????if?(players.get(0).getCards().length?!=?2?^? ????????????????players.get(1).getCards().length?!=?2)?{ ????????????throw?new?IllegalArgumentException("玩家的手牌數不對~~!"); ????????} ????????Card[]?cards1?=?players.get(0).getCards(); ????????Card[]?cards2?=?players.get(1).getCards(); ????????Arrays.sort(cards1); ????????Arrays.sort(cards2); ????????ArrayList<Card>?maxCards?=?new?ArrayList<Card>(); ????????maxCards.add(cards1[1]); ????????maxCards.add(cards2[1]); ????????return?maxCards; ????} ???? ????/** ?????*?判斷勝負的方法 ?????*?@param?maxCards?最大牌序列 ?????*?@return?哪個玩家勝<br> ?????*?大于0:玩家1勝<br> ?????*?等于0:平局<br> ?????*?小于0:玩家2勝<br> ?????*?@exception?DoCards?參數非法! ?????*/ ????public?static?int?whoWin(ArrayList<Card>?maxCards)?{ ????????if?(maxCards.size()!=2)?{ ????????????throw?new?IllegalArgumentException("參數非法!"); ????????} ????????return?maxCards.get(0).compareTo(maxCards.get(1)); ????} ???? ????/** ?????*?創建玩家的方法 ?????*?@return?玩家序列 ?????*/ ????public?static?ArrayList<Player>?createPlayer()?{ ????????ArrayList<Player>?al?=?new?ArrayList<Player>(); ????????Scanner?console?=?new?Scanner(System.in); ????????for?(int?i?=?1;?i?<?3;?i++)?{ ????????????System.out.println("玩家"+i+":"); ????????????Integer?id?=?0; ????????????while?(true)?{ ????????????????try?{ ????????????????????System.out.print("玩家"+i+"的id:"); ????????????????????String?idStr?=?console.next(); ????????????????????id?=?Integer.valueOf(idStr); ????????????????????if?(i?==?2?&&?id?==?al.get(0).getId())?{ ????????????????????????System.out.println("id重復!"); ????????????????????????continue; ????????????????????} ????????????????????break; ????????????????}?catch?(NumberFormatException?e)?{ ????????????????????//?TODO:?handle?exception ????????????????????System.out.println("id應該是數字!"); ????????????????????continue; ????????????????} ????????????} ????????????String?name?=?""; ????????????while?(true)?{ ????????????????System.out.print("輸入玩家"+i+"的名稱:"); ????????????????name?=?console.next(); ????????????????if?(i?==?2?&&?name.equals(al.get(0).getName()))?{ ????????????????????System.out.println("名字重復!"); ????????????????????continue; ????????????????} ????????????????break; ????????????} ???????????? ????????????Player?p?=?new?Player(id,?name); ????????????al.add(p); ????????} ????????return?al; ????} }未完 ————?不能超過20000字