本文实例为大家分享了java实现简单扑克牌游戏的具体代码,供大家参考,具体内容如下
扑克牌小游戏:
游戏玩法简介:定义五个People在玩扑克牌游戏,玩法是5个人从一副没有大小王的扑克牌中各抽取4张,牌的类型有四种:♥,♣,♠,♦。牌的大小为从1~13。(此处为了简单,只取1 -5).
1.黑桃♠A在哪名玩家手中,哪名玩家就获胜。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
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就获胜。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
//添加打印手牌的方法 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。(交换牌之前,有机会变一次;交换牌之后,有机会变一次)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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); |
定义玩家新的的一个类:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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; } } |
定义扑克牌的一个类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
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 方法的写法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/m0_46551861/article/details/108650353