简易扑克牌游戏【3个晚上2小时,暴力简单。】
用了3个晚上写出来,在每个玩家选出最大的牌子里面糊涂了,导致自己找bug找了很久。其实名字一定要用心起好,才免于自己一直费时间找bug。代码放上来,每个类都有一定的步骤解释,各位一起交流下,一起进步!么么哒(*  ̄3)(ε ̄ *)
主要分三个大类:扑克牌、玩家、游戏(发牌、拿牌、比牌)
扑克牌创建:
package com.imooc.season3.porkDemo; import java.util.ArrayList; import java.util.List; /* * 创建扑克牌 * ①创建一个扑克牌集合,利用List集合 * ②创建一个数字数组,装2,3... * ③创建一个花色数组,装方片,梅花... */ 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("============扑克牌创建成功============"); for(String cards:cards){ System.out.print(cards+" "); } System.out.println(""); } }
//创建玩家 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; /* * 创建游戏玩家 * ①玩家具有ID, 昵称,手中的牌的集合三个属性 * ②游戏设定为两个玩家,并且ID具有异常捕捉 * */ public class Players { int[] playerID; String playerName; Map<Integer,String> player ; public Players(){ playerID=new int[2]; //要赋值必须初始化数组长度 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("============创建玩家============"); 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("请输入数字!!!"); 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("============创建玩家成功============"); 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(){ } }
游戏(发牌、拿牌、比牌)
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; /* * ①发牌,打乱牌的循序,然后每个玩家拿到两张牌 * ②比牌 */ 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("============请输入每个玩家的持牌数============"); playerHold=new Scanner(System.in); playersCardHold =playerHold.nextInt(); //输入每个玩家可以持有的扑克牌数目,并捕捉异常 break;} catch(Exception e){ System.out.println("============输入非数字,请重新输入============"); continue; } } for(int i=0;i<playersCardHold;i++){ //玩家持牌数为2,则给每位玩家发牌2次 //两个玩家,就是总共发两轮(每轮发给两个玩家一次) String tmpCard; //创建临时存储扑克牌、玩家姓名和玩家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){ //如果每个玩家持牌数为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); } //玩家持牌数大于2,则需要先对自己的牌进行比对,然后选出最大的进行比对 else{ String tmpPlayer_v1Cards; //创建临时变量,作为暂时存储 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(); //创建扑克牌 cards.cardShow(); Players players =new Players(); //初始化游戏玩家 players.playerCreation(); //创建游戏玩家 Game games =new Game(cards, players); //创建游戏变量games games.pickCards(); //游戏玩家拿牌 games.showCards(); } }