簡易撲克牌游戲,寫的略長了點,花了一下午,給大家看一下
游戲開始:O(∩_∩)O哈哈~
package?imooc.pocker; import?java.util.ArrayList; import?java.util.Collections; import?java.util.List; import?java.util.Scanner; /* ?*?可改變玩家數(shù)量和玩家手牌數(shù) ?*?根據(jù)手牌中最大牌進行簡單大小比較 ?*/ public?class?Test?{ public?static?void?main(String[]?args)?{ System.out.println("--------產(chǎn)生一副撲克牌--------"); List<Pocker>?pockers?=?Pocker.createPocker(); System.out.println("--------撲克牌創(chuàng)建成功--------"); System.out.println(pockers.toString()); System.out.println("--------開始洗牌--------"); Collections.shuffle(pockers); System.out.println("--------洗牌結束--------"); System.out.println(pockers.toString()); System.out.println("--------創(chuàng)建玩家--------"); Scanner?scanner?=?new?Scanner(System.in); List<Player>?players?=?new?ArrayList<Player>(); int?handCardNum?=?3; int?playerNum?=?2; while?(true)?{ try?{ System.out.println("請輸入玩家數(shù)量:"); playerNum?=?scanner.nextInt(); int?id; String?name; for?(int?i?=?0;?i?<?playerNum;?i++)?{ System.out.println("創(chuàng)建第"?+?(i?+?1)?+?"位玩家的ID和姓名:"); System.out.println("輸入玩家id(int):?"); id?=?scanner.nextInt(); System.out.println("輸入玩家姓名:"); name?=?scanner.next(); players.add(new?Player(id,?name)); } for?(int?i?=?0;?i?<?playerNum;?i++)?{ System.out.println("歡迎玩家:"?+?players.get(i).getName()); } System.out.println("--------開始發(fā)牌--------"); int?cardNums?=?handCardNum?*?playerNum; Pocker?pocker; for?(int?i?=?0;?i?<?cardNums;?i++)?{ pocker?=?pockers.get(i); players.get(i?%?playerNum).getHandPockers().add(pocker); } System.out.println("--------發(fā)牌結束--------"); System.out.println("--------開始游戲--------"); Pocker?maxPocker?=?new?Pocker("方塊",?"2"); int?winPlayer?=?0; for?(int?i?=?0;?i?<?playerNum;?i++)?{ Collections.sort(players.get(i).getHandPockers());?//?對手牌進行排序 Collections.reverse(players.get(i).getHandPockers());?//?排序后的手牌進行翻轉,第一位為最大值 System.out .println("玩家" +?players.get(i).getName() +?"最大手牌為:" +?players.get(i).getHandPockers().get(0) .toString()); if?(maxPocker.compareTo(players.get(i).getHandPockers() .get(0))?<?0)?{ maxPocker?=?players.get(i).getHandPockers().get(0); winPlayer?=?i; } } System.out.println("玩家"?+?players.get(winPlayer).getName() +?"獲勝"); System.out.println("玩家各自的手牌為:"); for?(int?i?=?0;?i?<?playerNum;?i++)?{ System.out.println(players.get(i).getName()?+?":?" +?players.get(i).getHandPockers().toString()); } break; }?catch?(Exception?e)?{ System.out.println("輸入值錯誤,請重新輸入"); scanner?=?new?Scanner(System.in); } } } }
玩家類:Player
package?imooc.pocker; import?java.util.ArrayList; import?java.util.List; public?class?Player?{ /* ?*?玩家 ?*?屬性:ID,姓名,手牌 ?*?手牌為撲克牌的集合 ?*/ private?int?id; private?String?name; private?List<Pocker>?handPockers; public?Player(int?id,?String?name)?{ this.id?=?id; this.name?=?name; this.handPockers?=?new?ArrayList<Pocker>(); } public?int?getId()?{ return?id; } public?String?getName()?{ return?name; } public?List<Pocker>?getHandPockers()?{ return?handPockers; } }
撲克牌類:Pocker
package?imooc.pocker; import?java.util.ArrayList; import?java.util.Arrays; import?java.util.Collections; import?java.util.List; /** ?*? ?*?@author?sun ?*??撲克牌 ?*??包括四種花色:黑桃、紅桃、梅花、方塊、 ?*??十三中點數(shù):2~10,J、Q、K、A,不包括大小王 ?*/ public?class?Pocker?implements?Comparable<Pocker>{ private?String?color;??//撲克牌花色 private?String?value;??//撲克牌面值 private?static?final?int?CARDNUM?=?52;???//撲克牌總量 private?static?final?int?SINGLECOLORNUM?=?13;?//每種顏色撲克牌數(shù)量 public?Pocker(){ } public?Pocker(String?color,?String?value)?{ this.color?=?color; this.value?=?value; } public?String?getColor()?{ return?color; } public?String?getValue()?{ return?value; } /* ?*?產(chǎn)生52張撲克牌 ?*?return?List<Pocker> ?*/ ? public?static?List<Pocker>?createPocker(){ List<Pocker>?pockers?=?new?ArrayList<Pocker>(); for(int?i?=?0;?i?<?CARDNUM;?i++){ String?newValue?=?null; int?temp?=?i?%?SINGLECOLORNUM; switch?(temp)?{ case?11: newValue?=?"j"; break; case?12: newValue?=?"Q"; break; case?0: newValue?=?"K"; break; case?1: newValue?=?"A"; break; default: newValue?=?String.valueOf(temp); } String?newColor?=?null; switch?(i?/?SINGLECOLORNUM)?{ case?0: newColor?=?"黑桃"; break; case?1: newColor?=?"紅桃"; break; case?2: newColor?=?"梅花"; break; case?3: newColor?=?"方塊"; } pockers.add(new?Pocker(newColor,newValue)); } return?pockers; } /* ?*?Collections.shuffle進行洗牌 ?*/ public?static?List<Pocker>?shuffle(List<Pocker>?pockers){ Collections.shuffle(pockers); return?pockers; } /* ?*?(non-Javadoc) ?*?@see?java.lang.Comparable#compareTo(java.lang.Object) ?*?重寫了copmareTo方法,實現(xiàn)了Comparable接口 ?*?根據(jù)牌值和花色在列表中的順序進行比較 ?*/ @Override public?int?compareTo(Pocker?o)?{ List<String>?valueBase?=?Arrays.asList("2","3","4","5","6","7","8","9","10","J","Q","K","A"); List<String>?colorBase?=?Arrays.asList("方塊","梅花","紅桃","黑桃"); if(valueBase.indexOf(this.value)?==?valueBase.indexOf(o.value)) return?Integer.valueOf(colorBase.indexOf(this.color)).compareTo(Integer.valueOf(colorBase.indexOf(o.getColor()))); else? return?Integer.valueOf(valueBase.indexOf(this.value)).compareTo(Integer.valueOf(valueBase.indexOf(o.getValue()))); } @Override public?String?toString()?{ return?color+value; } }
2016-12-25
雖然我暫時寫不好,但是這個軟件問題太多了,比如玩家數(shù)可以大于17,在輸完id和姓名后才報錯,然后我試了下17,然后創(chuàng)建玩家就會一直進行下去。
2016-07-04
好東西~
2015-09-04
?pockers.add(new?Pocker(newColor,newValue));這里為什么出錯啊
2015-08-13
這段代碼比較的是什么和什么啊,這段代碼看不懂了,大神們能解釋一下么?valueBase.indexOf(this.value)是誰的值的位置,valueBase.indexOf(o.value)又是誰的值在valueBase里的位置?
2015-08-12
666
2015-07-15
public int compareTo(Pocker o) {
? ? ? ?List<String> valueBase = Arrays.asList("2","3","4","5","6","7","8","9","10","J","Q","K","A");
? ? ? ?List<String> colorBase = Arrays.asList("方塊","梅花","紅桃","黑桃");
? ? ? ?if(valueBase.indexOf(this.value) == valueBase.indexOf(o.value))
? ? ? ? ? ?return Integer.valueOf(colorBase.indexOf(this.color)).compareTo(Integer.valueOf(colorBase.indexOf(o.getColor())));
? ? ? ?else
? ? ? ? ? ?return Integer.valueOf(valueBase.indexOf(this.value)).compareTo(Integer.valueOf(valueBase.indexOf(o.getValue())));
? ?}
請教下各位大牛,這個方法內(nèi)部為啥可以調用compareTo本身呢?
2015-06-23
這一句怎么理解?直接返回
colorBase.indexOf(this.color).compareTo(colorBase.indexOf(o.getColor()))
不行嗎?
2015-06-19
大贊!
2015-06-04
寫的太棒了~~~~
2015-06-04
就是,傳作品里去吧。