簡易撲克牌游戲【3個晚上2小時,暴力簡單?!?/h1>
用了3個晚上寫出來,在每個玩家選出最大的牌子里面糊涂了,導致自己找bug找了很久。其實名字一定要用心起好,才免于自己一直費時間找bug。代碼放上來,每個類都有一定的步驟解釋,各位一起交流下,一起進步!么么噠(*  ̄3)(ε ̄ *)
主要分三個大類:撲克牌、玩家、游戲(發(fā)牌、拿牌、比牌)
撲克牌創(chuàng)建:
package?com.imooc.season3.porkDemo;
import?java.util.ArrayList;
import?java.util.List;
/*
?*?創(chuàng)建撲克牌
?*?①創(chuàng)建一個撲克牌集合,利用List集合
?*?②創(chuàng)建一個數(shù)字數(shù)組,裝2,3...
?*?③創(chuàng)建一個花色數(shù)組,裝方片,梅花...
?*/
public?class?CardCreation?{
???????List<String>?cards?=?new?ArrayList<String>();
????
???? String[]?digits?=?{"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
???? String[]?col?={"方片","紅桃","梅花","黑桃"};
???? public?void?cardCreation(){
???? for(int?i=0;i<digits.length;i++){
???? for(int?y=0;y<col.length;y++){
???? String?tmp?=col[y]+digits[i];
???? cards.add(tmp);
???? }
???? }
????
????
???? }
???? public?void?cardShow(){
???? System.out.println("============撲克牌創(chuàng)建成功============");
???????? for(String?cards:cards){
???????? System.out.print(cards+"??");
???????? }
???????? System.out.println("");
???? }
}//創(chuàng)建玩家
package?com.imooc.season3.porkDemo;
import?java.util.ArrayList;
import?java.util.HashMap;
import?java.util.List;
import?java.util.Map;
import?java.util.Scanner;
import?java.util.Set;
import?java.util.Map.Entry;
import?com.imooc.season3.CollectionDemo.Student;
/*
?*?創(chuàng)建游戲玩家
?*?①玩家具有ID,?昵稱,手中的牌的集合三個屬性
?*?②游戲設定為兩個玩家,并且ID具有異常捕捉
?*?
?*/
public?class?Players?{
int[]?playerID;
String?playerName;
Map<Integer,String>?player?;
public?Players(){
?playerID=new?int[2];??
?//要賦值必須初始化數(shù)組長度
?player?=new?HashMap<Integer,String>();
}
public?Players(int?playerID,String?playerName){
?player?=new?HashMap<Integer,String>();
?player.put(playerID,?playerName);
}
public?void??playerCreation(){
System.out.println("");
System.out.println("============創(chuàng)建玩家============");
for(int?i=0;i<2;i++){
while(true){
System.out.println("請輸入第"+(i+1)+"位玩家的ID");
Scanner?inputID?=new?Scanner(System.in);
try{
playerID[i]=inputID.nextInt();
}catch(Exception?e){
System.out.println("請輸入數(shù)字?。?!");
continue;
}
System.out.println("請輸入第"+(i+1)+"位玩家的姓名");
Scanner?inputName?=new?Scanner(System.in);
playerName=inputName.next();
player.put(playerID[i],?playerName);
break;
}
}
System.out.println("");
System.out.println("============創(chuàng)建玩家成功============");
System.out.println("");
System.out.println("玩家:"+"?");
Set<Entry<Integer,String>>?playerList?=player.entrySet();?//遍歷map的方法--》EntrySet
for(Entry<Integer,String>?playerls?:playerList?){
System.out.print(playerls.getKey()+":"+playerls.getValue());
System.out.println("");
}
}
public?void?pickCards(){
}
}游戲(發(fā)牌、拿牌、比牌)
package?com.imooc.season3.porkDemo;
import?java.util.Collections;
import?java.util.HashMap;
import?java.util.Map;
import?java.util.Scanner;
import?java.util.Set;
import?java.util.Map.Entry;
import?com.imooc.season3.CollectionDemo.Student;
/*
?*?①發(fā)牌,打亂牌的循序,然后每個玩家拿到兩張牌
?*?②比牌
?*/
public?class?Game?{
public?Map<String,Players>?playersCard_v1;?//兩位玩家的牌--姓名加ID
public?Map<String,Players>?playersCard_v2;
int?playersCardHold;
Scanner?playerHold;
CardCreation?cardRule;?
CardCreation?cardSet?;
Players?players;
public?Game(CardCreation?cardSet?,Players?players){
playersCard_v1?=new?HashMap<String,Players>();
playersCard_v2?=new?HashMap<String,Players>();
this.cardSet=cardSet;
this.players=players;
}
public?void?pickCards(){
Collections.shuffle(cardSet.cards);??
//打亂該變量的撲克牌的順序,Randomly?permutes?the?specified?list?using?a?default?source?of?randomness.
??? while(true){
??? try{
????System.out.println("");
System.out.println("============請輸入每個玩家的持牌數(shù)============");
??? playerHold=new?Scanner(System.in);
??? playersCardHold?=playerHold.nextInt();?//輸入每個玩家可以持有的撲克牌數(shù)目,并捕捉異常
??? break;}
??? catch(Exception?e){
??? System.out.println("============輸入非數(shù)字,請重新輸入============");
??? continue;
??? }
??? }
???
??? for(int?i=0;i<playersCardHold;i++){?//玩家持牌數(shù)為2,則給每位玩家發(fā)牌2次
??? ????//兩個玩家,就是總共發(fā)兩輪(每輪發(fā)給兩個玩家一次)
??? String?tmpCard;??????????????
??? ?//創(chuàng)建臨時存儲撲克牌、玩家姓名和玩家ID的局部變量
??? int?tmpPlayerID;
??? String?tmpPlayerName;
???
??? tmpPlayerID=players.playerID[0];???
??? //第一個玩家拿牌
??? tmpPlayerName?=players.player.get(tmpPlayerID);
??? ????System.out.println("");
? ????System.out.println("==玩家"+tmpPlayerName+"拿牌==");
? ????tmpCard=cardSet.cards.get(i);
? ???cardSet.cards.remove(i);???????
? ??//玩家拿完牌要刪除這個牌,已經不存在在可抽取的牌里
? ????playersCard_v1.put(tmpCard,?new?Players(tmpPlayerID,tmpPlayerName));
? ???
? ???tmpPlayerID=players.playerID[1];???
? ???//第二個玩家拿牌
??? tmpPlayerName?=players.player.get(tmpPlayerID);
??? ????System.out.println("");
? ????System.out.println("==玩家"+tmpPlayerName+"拿牌==");
? ????tmpCard=cardSet.cards.get(i);
? ???cardSet.cards.remove(i);
? ????playersCard_v2.put(tmpCard,?new?Players(tmpPlayerID,tmpPlayerName));
???
??? }
????System.out.println("");
System.out.println("==玩家抽牌完畢==");
???
}
public?void?showCards(){
CardCreation?cardRule?=new?CardCreation();?
//重新new一個對象,指向一個新的位置
cardRule.cardCreation();????
?//牌的大小排好隊,需要比對位置。
String?player_v1Name=players.player.get(players.playerID[0]);??
//玩家v1名稱
String?player_v2Name=players.player.get(players.playerID[1]);?
//玩家v2名稱
?????
String?player_v1Card?=?null;
String?player_v2Card?=?null;
int?player_v1Index?=?0;
int?player_v2Index?=?0;
Set<Entry<String,Players>>?player_v1Set=playersCard_v1.entrySet();??//玩家1
Set<Entry<String,Players>>?player_v2Set=playersCard_v2.entrySet();??//玩家2
if(playersCardHold==1){??
//如果每個玩家持牌數(shù)為1,那么就只需要比對返回的Index值
????for(Entry<String,Players>?player_v1:player_v1Set){
???? ?player_v1Card=player_v1.getKey();??//拿到撲克牌的值
???? ?for(String?cardsForRule_v1:cardRule.cards){
???? ?if(cardsForRule_v1.equals(player_v1Card))??????????????????????????//這個撲克牌位于哪個位置
???? ?{player_v1Index?=cardRule.cards.indexOf(cardsForRule_v1);
???? ???break;} ??
?????????}
????}
????System.out.println("");
System.out.println("玩家"+player_v1Name+"拿到"+player_v1Card);
????for(Entry<String,Players>?player_v2:player_v2Set){
???? ?player_v2Card=player_v2.getKey();
???? ?for(String?cardsForRule_v2:cardRule.cards){
???? ?if(cardsForRule_v2.equals(player_v2Card))
???? ?{player_v2Index?=cardRule.cards.indexOf(cardsForRule_v2);
???? ???break;} ??
?????????}
????}
????System.out.println("");
System.out.println("玩家"+player_v2Name+"拿到"+player_v2Card);
}
//玩家持牌數(shù)大于2,則需要先對自己的牌進行比對,然后選出最大的進行比對
else{
String?tmpPlayer_v1Cards;??
//創(chuàng)建臨時變量,作為暫時存儲
String?tmpPlayer_v2Cards;
int?tmpPlayer_v1Index;
int?tmpPlayer_v2Index;
for(Entry<String,Players>?player_v1:player_v1Set){
??tmpPlayer_v1Cards=player_v1.getKey();??
??//拿到撲克牌的值
???? ?for(String?cardsForRule_v1:cardRule.cards){
???? ?if(cardsForRule_v1.equals(tmpPlayer_v1Cards))??//這個撲克牌位于哪個位置
???? ????{tmpPlayer_v1Index?=cardRule.cards.indexOf(cardsForRule_v1);
???? ???if(tmpPlayer_v1Index>player_v1Index){
???? ???player_v1Card=tmpPlayer_v1Cards;
???? ???player_v1Index=tmpPlayer_v1Index;??
???? ????????}
???? ???} ??
?????????}
}
System.out.println("");
System.out.println("玩家"+player_v1Name+"拿到的最大撲克牌為"+player_v1Card);
??for(Entry<String,Players>?player_v2:player_v2Set){
???? ?tmpPlayer_v2Cards=player_v2.getKey();
???? ?for(String?cardsForRule_v2:cardRule.cards){
???? ?if(cardsForRule_v2.equals(tmpPlayer_v2Cards))
???? ?{??tmpPlayer_v2Index?=cardRule.cards.indexOf(cardsForRule_v2);
???? ?if(tmpPlayer_v2Index>player_v2Index){
???? ???player_v2Index=tmpPlayer_v2Index;
???? ????player_v2Card=tmpPlayer_v2Cards;
???? ??????}
???? ???} ??
?????????}
????}
????System.out.println("");
System.out.println("玩家"+player_v2Name+"拿到的最大撲克牌為"+player_v2Card);
}
System.out.println("");
if(player_v1Index>player_v2Index){
System.out.println("玩家"+player_v1Name+"勝");
}else{
System.out.println("玩家"+player_v2Name+"勝");
}
System.out.println("");
System.out.print("玩家"+player_v1Name+"持牌:");
for(Entry<String,Players>?player_v1:player_v1Set){
System.out.print(player_v1.getKey());
??}
System.out.println("");
System.out.print("玩家"+player_v2Name+"持牌:");
for(Entry<String,Players>?player_v2:player_v2Set){
System.out.print(player_v2.getKey());
??}
}
}
//Main方法
package?com.imooc.season3.porkDemo;
import?java.util.Collections;
import?java.util.List;
public?class?GameDemo?{
public?static?void?main(String[]?args)?{
//?TODO?Auto-generated?method?stub
CardCreation?cards?=new?CardCreation();?//初始化撲克牌
cards.cardCreation();??//創(chuàng)建撲克牌
cards.cardShow();
?
Players?players?=new?Players();???//初始化游戲玩家
players.playerCreation();?????//創(chuàng)建游戲玩家
Game?games?=new?Game(cards,?players);??//創(chuàng)建游戲變量games
games.pickCards();???//游戲玩家拿牌
games.showCards();
}
}
用了3個晚上寫出來,在每個玩家選出最大的牌子里面糊涂了,導致自己找bug找了很久。其實名字一定要用心起好,才免于自己一直費時間找bug。代碼放上來,每個類都有一定的步驟解釋,各位一起交流下,一起進步!么么噠(*  ̄3)(ε ̄ *)
主要分三個大類:撲克牌、玩家、游戲(發(fā)牌、拿牌、比牌)
撲克牌創(chuàng)建:
package?com.imooc.season3.porkDemo;
import?java.util.ArrayList;
import?java.util.List;
/*
?*?創(chuàng)建撲克牌
?*?①創(chuàng)建一個撲克牌集合,利用List集合
?*?②創(chuàng)建一個數(shù)字數(shù)組,裝2,3...
?*?③創(chuàng)建一個花色數(shù)組,裝方片,梅花...
?*/
public?class?CardCreation?{
???????List<String>?cards?=?new?ArrayList<String>();
????
???? String[]?digits?=?{"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
???? String[]?col?={"方片","紅桃","梅花","黑桃"};
???? public?void?cardCreation(){
???? for(int?i=0;i<digits.length;i++){
???? for(int?y=0;y<col.length;y++){
???? String?tmp?=col[y]+digits[i];
???? cards.add(tmp);
???? }
???? }
????
????
???? }
???? public?void?cardShow(){
???? System.out.println("============撲克牌創(chuàng)建成功============");
???????? for(String?cards:cards){
???????? System.out.print(cards+"??");
???????? }
???????? System.out.println("");
???? }
}//創(chuàng)建玩家
package?com.imooc.season3.porkDemo;
import?java.util.ArrayList;
import?java.util.HashMap;
import?java.util.List;
import?java.util.Map;
import?java.util.Scanner;
import?java.util.Set;
import?java.util.Map.Entry;
import?com.imooc.season3.CollectionDemo.Student;
/*
?*?創(chuàng)建游戲玩家
?*?①玩家具有ID,?昵稱,手中的牌的集合三個屬性
?*?②游戲設定為兩個玩家,并且ID具有異常捕捉
?*?
?*/
public?class?Players?{
int[]?playerID;
String?playerName;
Map<Integer,String>?player?;
public?Players(){
?playerID=new?int[2];??
?//要賦值必須初始化數(shù)組長度
?player?=new?HashMap<Integer,String>();
}
public?Players(int?playerID,String?playerName){
?player?=new?HashMap<Integer,String>();
?player.put(playerID,?playerName);
}
public?void??playerCreation(){
System.out.println("");
System.out.println("============創(chuàng)建玩家============");
for(int?i=0;i<2;i++){
while(true){
System.out.println("請輸入第"+(i+1)+"位玩家的ID");
Scanner?inputID?=new?Scanner(System.in);
try{
playerID[i]=inputID.nextInt();
}catch(Exception?e){
System.out.println("請輸入數(shù)字?。?!");
continue;
}
System.out.println("請輸入第"+(i+1)+"位玩家的姓名");
Scanner?inputName?=new?Scanner(System.in);
playerName=inputName.next();
player.put(playerID[i],?playerName);
break;
}
}
System.out.println("");
System.out.println("============創(chuàng)建玩家成功============");
System.out.println("");
System.out.println("玩家:"+"?");
Set<Entry<Integer,String>>?playerList?=player.entrySet();?//遍歷map的方法--》EntrySet
for(Entry<Integer,String>?playerls?:playerList?){
System.out.print(playerls.getKey()+":"+playerls.getValue());
System.out.println("");
}
}
public?void?pickCards(){
}
}游戲(發(fā)牌、拿牌、比牌)
package?com.imooc.season3.porkDemo;
import?java.util.Collections;
import?java.util.HashMap;
import?java.util.Map;
import?java.util.Scanner;
import?java.util.Set;
import?java.util.Map.Entry;
import?com.imooc.season3.CollectionDemo.Student;
/*
?*?①發(fā)牌,打亂牌的循序,然后每個玩家拿到兩張牌
?*?②比牌
?*/
public?class?Game?{
public?Map<String,Players>?playersCard_v1;?//兩位玩家的牌--姓名加ID
public?Map<String,Players>?playersCard_v2;
int?playersCardHold;
Scanner?playerHold;
CardCreation?cardRule;?
CardCreation?cardSet?;
Players?players;
public?Game(CardCreation?cardSet?,Players?players){
playersCard_v1?=new?HashMap<String,Players>();
playersCard_v2?=new?HashMap<String,Players>();
this.cardSet=cardSet;
this.players=players;
}
public?void?pickCards(){
Collections.shuffle(cardSet.cards);??
//打亂該變量的撲克牌的順序,Randomly?permutes?the?specified?list?using?a?default?source?of?randomness.
??? while(true){
??? try{
????System.out.println("");
System.out.println("============請輸入每個玩家的持牌數(shù)============");
??? playerHold=new?Scanner(System.in);
??? playersCardHold?=playerHold.nextInt();?//輸入每個玩家可以持有的撲克牌數(shù)目,并捕捉異常
??? break;}
??? catch(Exception?e){
??? System.out.println("============輸入非數(shù)字,請重新輸入============");
??? continue;
??? }
??? }
???
??? for(int?i=0;i<playersCardHold;i++){?//玩家持牌數(shù)為2,則給每位玩家發(fā)牌2次
??? ????//兩個玩家,就是總共發(fā)兩輪(每輪發(fā)給兩個玩家一次)
??? String?tmpCard;??????????????
??? ?//創(chuàng)建臨時存儲撲克牌、玩家姓名和玩家ID的局部變量
??? int?tmpPlayerID;
??? String?tmpPlayerName;
???
??? tmpPlayerID=players.playerID[0];???
??? //第一個玩家拿牌
??? tmpPlayerName?=players.player.get(tmpPlayerID);
??? ????System.out.println("");
? ????System.out.println("==玩家"+tmpPlayerName+"拿牌==");
? ????tmpCard=cardSet.cards.get(i);
? ???cardSet.cards.remove(i);???????
? ??//玩家拿完牌要刪除這個牌,已經不存在在可抽取的牌里
? ????playersCard_v1.put(tmpCard,?new?Players(tmpPlayerID,tmpPlayerName));
? ???
? ???tmpPlayerID=players.playerID[1];???
? ???//第二個玩家拿牌
??? tmpPlayerName?=players.player.get(tmpPlayerID);
??? ????System.out.println("");
? ????System.out.println("==玩家"+tmpPlayerName+"拿牌==");
? ????tmpCard=cardSet.cards.get(i);
? ???cardSet.cards.remove(i);
? ????playersCard_v2.put(tmpCard,?new?Players(tmpPlayerID,tmpPlayerName));
???
??? }
????System.out.println("");
System.out.println("==玩家抽牌完畢==");
???
}
public?void?showCards(){
CardCreation?cardRule?=new?CardCreation();?
//重新new一個對象,指向一個新的位置
cardRule.cardCreation();????
?//牌的大小排好隊,需要比對位置。
String?player_v1Name=players.player.get(players.playerID[0]);??
//玩家v1名稱
String?player_v2Name=players.player.get(players.playerID[1]);?
//玩家v2名稱
?????
String?player_v1Card?=?null;
String?player_v2Card?=?null;
int?player_v1Index?=?0;
int?player_v2Index?=?0;
Set<Entry<String,Players>>?player_v1Set=playersCard_v1.entrySet();??//玩家1
Set<Entry<String,Players>>?player_v2Set=playersCard_v2.entrySet();??//玩家2
if(playersCardHold==1){??
//如果每個玩家持牌數(shù)為1,那么就只需要比對返回的Index值
????for(Entry<String,Players>?player_v1:player_v1Set){
???? ?player_v1Card=player_v1.getKey();??//拿到撲克牌的值
???? ?for(String?cardsForRule_v1:cardRule.cards){
???? ?if(cardsForRule_v1.equals(player_v1Card))??????????????????????????//這個撲克牌位于哪個位置
???? ?{player_v1Index?=cardRule.cards.indexOf(cardsForRule_v1);
???? ???break;} ??
?????????}
????}
????System.out.println("");
System.out.println("玩家"+player_v1Name+"拿到"+player_v1Card);
????for(Entry<String,Players>?player_v2:player_v2Set){
???? ?player_v2Card=player_v2.getKey();
???? ?for(String?cardsForRule_v2:cardRule.cards){
???? ?if(cardsForRule_v2.equals(player_v2Card))
???? ?{player_v2Index?=cardRule.cards.indexOf(cardsForRule_v2);
???? ???break;} ??
?????????}
????}
????System.out.println("");
System.out.println("玩家"+player_v2Name+"拿到"+player_v2Card);
}
//玩家持牌數(shù)大于2,則需要先對自己的牌進行比對,然后選出最大的進行比對
else{
String?tmpPlayer_v1Cards;??
//創(chuàng)建臨時變量,作為暫時存儲
String?tmpPlayer_v2Cards;
int?tmpPlayer_v1Index;
int?tmpPlayer_v2Index;
for(Entry<String,Players>?player_v1:player_v1Set){
??tmpPlayer_v1Cards=player_v1.getKey();??
??//拿到撲克牌的值
???? ?for(String?cardsForRule_v1:cardRule.cards){
???? ?if(cardsForRule_v1.equals(tmpPlayer_v1Cards))??//這個撲克牌位于哪個位置
???? ????{tmpPlayer_v1Index?=cardRule.cards.indexOf(cardsForRule_v1);
???? ???if(tmpPlayer_v1Index>player_v1Index){
???? ???player_v1Card=tmpPlayer_v1Cards;
???? ???player_v1Index=tmpPlayer_v1Index;??
???? ????????}
???? ???} ??
?????????}
}
System.out.println("");
System.out.println("玩家"+player_v1Name+"拿到的最大撲克牌為"+player_v1Card);
??for(Entry<String,Players>?player_v2:player_v2Set){
???? ?tmpPlayer_v2Cards=player_v2.getKey();
???? ?for(String?cardsForRule_v2:cardRule.cards){
???? ?if(cardsForRule_v2.equals(tmpPlayer_v2Cards))
???? ?{??tmpPlayer_v2Index?=cardRule.cards.indexOf(cardsForRule_v2);
???? ?if(tmpPlayer_v2Index>player_v2Index){
???? ???player_v2Index=tmpPlayer_v2Index;
???? ????player_v2Card=tmpPlayer_v2Cards;
???? ??????}
???? ???} ??
?????????}
????}
????System.out.println("");
System.out.println("玩家"+player_v2Name+"拿到的最大撲克牌為"+player_v2Card);
}
System.out.println("");
if(player_v1Index>player_v2Index){
System.out.println("玩家"+player_v1Name+"勝");
}else{
System.out.println("玩家"+player_v2Name+"勝");
}
System.out.println("");
System.out.print("玩家"+player_v1Name+"持牌:");
for(Entry<String,Players>?player_v1:player_v1Set){
System.out.print(player_v1.getKey());
??}
System.out.println("");
System.out.print("玩家"+player_v2Name+"持牌:");
for(Entry<String,Players>?player_v2:player_v2Set){
System.out.print(player_v2.getKey());
??}
}
}
//Main方法
package?com.imooc.season3.porkDemo;
import?java.util.Collections;
import?java.util.List;
public?class?GameDemo?{
public?static?void?main(String[]?args)?{
//?TODO?Auto-generated?method?stub
CardCreation?cards?=new?CardCreation();?//初始化撲克牌
cards.cardCreation();??//創(chuàng)建撲克牌
cards.cardShow();
?
Players?players?=new?Players();???//初始化游戲玩家
players.playerCreation();?????//創(chuàng)建游戲玩家
Game?games?=new?Game(cards,?players);??//創(chuàng)建游戲變量games
games.pickCards();???//游戲玩家拿牌
games.showCards();
}
}




2016-02-12
?String?player_v1Name=players.player.get(players.playerID[0]);
這個代碼我有點繞暈了,能不能幫我解釋一下,謝謝!