好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

java简单实现斗地主发牌功能

本文实例为大家分享了java简单实现斗地主发牌的具体代码,供大家参考,具体内容如下

问题:

参考斗地主的游戏规则,完成一个发牌的功能(54张牌,考虑点数,花色;三名玩家,其中地主比其他玩家多3张牌)
要求实现以下功能:

1、洗牌
2、发牌(发牌按照常规方式A-B-C-A-B-C-A…,不允许一次性随机17张给某个玩家)
3、玩家手中牌的展示(要求按点数实现排序)

分析

运用面向对象的程序设计思维分为扑克、玩家和游戏三部分,扑克类属性有花色,点数,次序;玩家类属性有玩家id,昵称,是否地主,牌的集合;游戏过程分为洗牌,随机产生地主,发牌,完成牌的排序,玩家手里的牌展示功能

程序实现

?

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

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

package com.lesson17.homework;

 

/**

  * @author HUC

  *

  */

 

/**扑克类*/

public class Poker {

 

  /** 扑克花色 */

  private String flower;

  /** 扑克点数 */

  private String pointer;

  /** 扑克顺序 */

  private int sort;

 

  public Poker(String flower, String pointer, int sort) {

   super ();

   this .flower = flower;

   this .pointer = pointer;

   this .sort = sort;

  }

 

  public String getFlower() {

   return flower;

  }

 

  public void setFlower(String flower) {

   this .flower = flower;

  }

 

  public String getPointer() {

   return pointer;

  }

 

  public void setPointer(String pointer) {

   this .pointer = pointer;

  }

 

  public int getSort() {

   return sort;

  }

 

  public void setSort( int sort) {

   this .sort = sort;

  }

 

  @Override

  public String toString() {

   return flower + pointer;

  }

 

package com.lesson17.homework;

   

public class Player {

 

  /** 玩家id */

  private int id;

  /** 玩家昵称 */

  private String name;

  /** 玩家拿到的牌 */

  private ArrayList<Poker> pokers = new ArrayList<>();

  /** 玩家是否地主 */

  private boolean boss;

 

  public Player( int id, String name) {

   super ();

   this .id = id;

   this .name = name;

  }

 

  public int getId() {

   return id;

  }

 

  public void setId( int id) {

   this .id = id;

  }

 

  public String getName() {

   return name;

  }

 

  public void setName(String name) {

   this .name = name;

  }

 

  public ArrayList<Poker> getPokers() {

   return pokers;

  }

 

  public void setPokers(ArrayList<Poker> pokers) {

   this .pokers = pokers;

  }

 

  public boolean isBoss() {

   return boss;

  }

 

  public void setBoss( boolean boss) {

   this .boss = boss;

  }

 

package com.lesson17.homework;

 

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Collections;

import java.util.List;

import java.util.Random;

 

public class PokerGame {

 

  static List<Player> players;

  static ArrayList<Poker> list = new ArrayList<>();

  static String[] flowers = { "方块" , "梅花" , "黑桃" , "红心" };

  static String[] pointers = { "3" , "4" , "5" , "6" , "7" , "8" , "9" , "10" , "J" , "Q" , "K" , "A" , "2" };

  int bossIndex; //地主索引

 

  static {

   //初始化扑克

   for ( int i = 0 ; i < flowers.length; i++) {

    for ( int j = 0 ; j < pointers.length; j++) {

     //生成一张扑克对象

     Poker p = new Poker(flowers[i], pointers[j], j);

     list.add(p);

    }

   }

   //单独将大小王加入集合

   list.add( new Poker( "小" , "王" , 13 ));

   list.add( new Poker( "大" , "王" , 14 ));

  

   //初始化玩家

   players = Arrays.asList(

     new Player( 1 , "刘备" ),

     new Player( 2 , "关羽" ),

     new Player( 3 , "张飞" ));

  }

 

  /**洗牌*/

  public void washPoker(){

   Collections.shuffle(list);

  }

 

  /**随机地主*/

  public void pushBoss(){

   Random r = new Random();

   bossIndex = r.nextInt(players.size());

   //设置被随机到的玩家为地主

   players.get(bossIndex).setBoss( true );

  }

 

 

  /**依次发牌*/

  public void pushPoker(){

   for ( int i = 0 ; i < 51 ; i+= 3 ) {

    players.get( 0 ).getPokers().add(list.get(i));

    players.get( 1 ).getPokers().add(list.get(i+ 1 ));

    players.get( 2 ).getPokers().add(list.get(i+ 2 ));

   }

   for ( int i = 51 ;i < 54 ;i++){

    //将最后剩余的牌(3张)全部给地主

    players.get(bossIndex).getPokers().add(list.get(i));

   }

  }

 

  /**排序*/

  public void sortPoker() {

   Collections.sort(players.get( 0 ).getPokers(), (a,b)->a.getSort()-b.getSort());

   Collections.sort(players.get( 1 ).getPokers(), (a,b)->a.getSort()-b.getSort());

   Collections.sort(players.get( 2 ).getPokers(), (a,b)->a.getSort()-b.getSort());

  }

 

  public void start(){

   //随机地主

   pushBoss();

   //洗牌

   washPoker();

   //发牌

   pushPoker();

   //排序

   sortPoker();

   //展示牌

   for (Player p : players){

    System.out.println(p.getPokers());

   }

  }

 

  public static void main(String[] args) {

   new PokerGame().start();

  }

}

结果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

原文链接:https://blog.csdn.net/qq_35937045/article/details/97620335

查看更多关于java简单实现斗地主发牌功能的详细内容...

  阅读:16次