簡易撲克牌游戲【3個(gè)晚上2小時(shí),暴力簡單。】
用了3個(gè)晚上寫出來,在每個(gè)玩家選出最大的牌子里面糊涂了,導(dǎo)致自己找bug找了很久。其實(shí)名字一定要用心起好,才免于自己一直費(fèi)時(shí)間找bug。代碼放上來,每個(gè)類都有一定的步驟解釋,各位一起交流下,一起進(jìn)步!么么噠(*  ̄3)(ε ̄ *)
主要分三個(gè)大類:撲克牌、玩家、游戲(發(fā)牌、拿牌、比牌)
撲克牌創(chuàng)建:
package?com.imooc.season3.porkDemo; import?java.util.ArrayList; import?java.util.List; /* ?*?創(chuàng)建撲克牌 ?*?①創(chuàng)建一個(gè)撲克牌集合,利用List集合 ?*?②創(chuàng)建一個(gè)數(shù)字?jǐn)?shù)組,裝2,3... ?*?③創(chuàng)建一個(gè)花色數(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,?昵稱,手中的牌的集合三個(gè)屬性 ?*?②游戲設(shè)定為兩個(gè)玩家,并且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ā)牌,打亂牌的循序,然后每個(gè)玩家拿到兩張牌 ?*?②比牌 ?*/ 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("============請輸入每個(gè)玩家的持牌數(shù)============"); ??? playerHold=new?Scanner(System.in); ??? playersCardHold?=playerHold.nextInt();?//輸入每個(gè)玩家可以持有的撲克牌數(shù)目,并捕捉異常 ??? break;} ??? catch(Exception?e){ ??? System.out.println("============輸入非數(shù)字,請重新輸入============"); ??? continue; ??? } ??? } ??? ??? for(int?i=0;i<playersCardHold;i++){?//玩家持牌數(shù)為2,則給每位玩家發(fā)牌2次 ??? ????//兩個(gè)玩家,就是總共發(fā)兩輪(每輪發(fā)給兩個(gè)玩家一次) ??? String?tmpCard;?????????????? ??? ?//創(chuàng)建臨時(shí)存儲撲克牌、玩家姓名和玩家ID的局部變量 ??? int?tmpPlayerID; ??? String?tmpPlayerName; ??? ??? tmpPlayerID=players.playerID[0];??? ??? //第一個(gè)玩家拿牌 ??? tmpPlayerName?=players.player.get(tmpPlayerID); ??? ????System.out.println(""); ? ????System.out.println("==玩家"+tmpPlayerName+"拿牌=="); ? ????tmpCard=cardSet.cards.get(i); ? ???cardSet.cards.remove(i);??????? ? ??//玩家拿完牌要刪除這個(gè)牌,已經(jīng)不存在在可抽取的牌里 ? ????playersCard_v1.put(tmpCard,?new?Players(tmpPlayerID,tmpPlayerName)); ? ??? ? ???tmpPlayerID=players.playerID[1];??? ? ???//第二個(gè)玩家拿牌 ??? 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一個(gè)對象,指向一個(gè)新的位置 cardRule.cardCreation();???? ?//牌的大小排好隊(duì),需要比對位置。 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){?? //如果每個(gè)玩家持牌數(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))??????????????????????????//這個(gè)撲克牌位于哪個(gè)位置 ???? ?{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,則需要先對自己的牌進(jìn)行比對,然后選出最大的進(jìn)行比對 else{ String?tmpPlayer_v1Cards;?? //創(chuàng)建臨時(shí)變量,作為暫時(shí)存儲 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))??//這個(gè)撲克牌位于哪個(gè)位置 ???? ????{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]);
這個(gè)代碼我有點(diǎn)繞暈了,能不能幫我解釋一下,謝謝!