站长资讯网
最全最丰富的资讯网站

利用java实现简单的扑克牌小游戏

利用java实现简单的扑克牌小游戏

扑克牌小游戏:

(推荐教程:java课程)

游戏玩法简介:定义五个People在玩扑克牌游戏,玩法是5个人从一副没有大小王的扑克牌中各抽取4张,牌的类型有四种:♥,♣,♠,♦。牌的大小为从1~13。(此处为了简单,只取1-5)。

1、黑桃♠A在哪名玩家手中,哪名玩家就获胜。

package poker; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; import java.util.concurrent.Callable; public class Game {  public static void main(String[] args) {         //定义5名玩家,使用List         List<Player> playerList=new ArrayList<>();         playerList.add(new Player("于美人"));         playerList.add(new Player("小婷子"));         playerList.add(new Player("小晨子"));         playerList.add(new Player("小艾"));         playerList.add(new Player("小珍子"));         //定义扑克牌顺序表         List<Card> cardList=new ArrayList<>();         //初始化扑克牌         initializeCards(cardList);         System.out.println(cardList);         //调用collections下的shuffle(洗牌)方法         //进行洗牌         Collections.shuffle(cardList);         //System.out.println("抽牌前,牌组中的牌:");         System.out.println(cardList);         //发牌         int n=2;//每名玩家发几张牌         for(int i=0;i<n;i++){//一共发n轮牌             for(Player player:playerList){//每名玩家一次抽牌                 Card card=cardList.remove(0);//从牌组中,抽一张牌出来                 player.cardList.add(card);//把这张牌放到当前玩家的手中             }         }         System.out.println("现在牌组中剩余的牌:");         System.out.println(cardList);         System.out.println("交换牌之前:");       for(Player player:playerList){             System.out.printf("玩家[%s]的手牌是: %s%n",player.name,player.cardList);         }         //要找的牌,方法1         Card toFoundCard=new Card("♠",1);         for(Player player:playerList){             for(Card card:player.cardList){                 //比较每张牌和要找的是否为同一张牌                 if(card.equals(toFoundCard)){                     System.out.println(player.name+"获胜");                     return;                 }             }         }         System.out.println("无人获胜");  }  //要找的牌,方法2         Card toFoundCard2=new Card("♠",1);        for(Player player:playerList){             if(player.cardList.contains(toFoundCard)) {                 System.out.println(player.name + "获胜");                 return;             }           }     private static void initializeCards(List<Card> cards){         for(String suit:new String[]{"♠","♥","♦","♣"}){             for(int rank=1;rank<=5;rank++){                 Card card=new Card(suit,rank);                 //把扑克牌放入牌组中                 cards.add(card);             }         }     }

2、让每名玩家,依次抽取他的下家的一张手牌,然后再找♠A,找到♠A就获胜。

//添加打印手牌的方法 public static void printPlayerHandCard(List<Player> playerList){         for(Player player:playerList){             System.out.printf("玩家[%s]的手牌是:%s%n",player.name,player.cardList);         }     }     //集体实现交换的过程          //交换牌         //每名玩家随机抽取下家的一张牌         Random random=new Random();         for(int i=0;i<playerList.size();i++){             Player currentPlayer=playerList.get(i);             //下家就是按照前后关系的下一个,最后一名玩家抽取第0个             Player nextPlayer=playerList.get(i!=playerList.size()-1?i+1:0);              //要取的牌的下标             int toDrawIndex=random.nextInt(nextPlayer.cardList.size());             //取牌             Card drawCard=nextPlayer.cardList.remove(toDrawIndex);             //放入当前玩家的手中             currentPlayer.cardList.add(drawCard);          }         System.out.println("交换牌之后:");         printPlayerHandCard(playerList);

3、于美人是赌神,她有变牌能力:她手中一旦没有♠A,她就可以把第一张牌变成♠A。(交换牌之前,有机会变一次;交换牌之后,有机会变一次)

Card toFoundCard=new Card("♠",1);         //已知于美人的下标为0         Player 于美人=playerList.get(0);         if(!于美人.cardList.contains(toFoundCard)){             于美人.cardList.set(0,toFoundCard);         }         System.out.println("于美人第一次发功:");         printPlayerHandCard(playerList);         System.out.println("交换牌之后:");         printPlayerHandCard(playerList);         //此处交换牌过程省略。。。。。。。。。。。。。。         if(!于美人.cardList.contains(toFoundCard)){             于美人.cardList.set(0,toFoundCard);         }         System.out.println("于美人第二次发功:");         printPlayerHandCard(playerList);

定义玩家新的的一个类:

package poker;  import java.util.ArrayList; import java.util.List;  public class Player {      public List<Card> cardList=new ArrayList<>();     public String name;     public Player(String name){         this.name=name;     } }

定义扑克牌的一个类:

package poker; import java.util.Objects; public class Card {     public String suit;//花色     public int rank;//分值     //构造方法     public Card(String suit,int rank){         this.rank=rank;         this.suit =suit;     }     @Override     public String toString() {         return String.format("[%s%d]",suit,rank);     }     //重写比较相等的方法     @Override     public boolean equals(Object o) {         if (this == o) return true;         if (o == null || getClass() != o.getClass()) return false;         Card card = (Card) o;         return rank == card.rank &&                 Objects.equals(suit, card.suit);     } }

注意:

(1)要重新定义比较相等方法的重写。

(2)注意foreach 方法的写法。

赞(0)
分享到: 更多 (0)
网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号