java斗地主发牌_[Java源码]扑克牌——斗地主发牌实现

———————————————————————————————————————

———————————————————————————————————————

——————————一个扑克牌核心和简单斗地主发牌实现;\n——————————

个人感觉良好

拓展性强(?5ca5f088d4f5648cb6aa0b03a5473418.png

623c097543c58871fd4ae0a7b4fdbefb.png

c78813eff66af5bb47542d9e87da46cf.png

97d81c890a7daf3c27a4bd681ee73e20.png

PukCard308bccddb99803a698af055d81aa0cb3.png

b7c7418de72bae436dff1e4397bfbd7f.png

8b22ab26ef493287a87a82da4f4b89c6.png

下面是Ctrl-C,V专用

package xyz.hmy.poker;

/**

* 和扑克牌有关数据和显示

*/

public class PukCard {

char _kind;

char _size;

public static char[] sizes = new char[] { '2', 'K', 'Q', 'J', 'X', '9', '8', '7', '6', '5', '4', '3', 'A' };

public static char[] kinds = new char[] { '黑', '方', '桃', '梅' };

public PukCard(char kind, char size) {

_kind = kind;

_size = size;

}

public char kind() {

return _kind;

}

public char size() {

return _size;

}

@Override

public String toString() {

return "" + _kind + _size + "";

}

}

8b22ab26ef493287a87a82da4f4b89c6.png

package xyz.hmy.poker;

import java.util.List;

/**

* 不需要注释

*/

public class Player {

List _cards;

public Player(List cards) {

_cards = cards;

}

// void addPukCards(List cards){

//     _cards.addAll(cards);

//     _cards.sort(new PukCardComparator());

// }

/** 展示己方扑克(演示) */

public void showCards() {

System.out.println(_cards);

}

}8b22ab26ef493287a87a82da4f4b89c6.png

package xyz.hmy.poker;

import java.util.Comparator;

public class PukCardComparator implements Comparator {

/**

* 一个普通的查找字符在字符数组中的索引的方法

*/

private int getIndex(char[] chrs, char chr) {

for (int i = 0; i 

if (chrs[i] == chr)

return i;

return -1;

}

/**

* 得到扑克的排位绝对值(花色敏感):花色是个位,大小在十位、百位;

* 若只需要大小的绝对值,可以将个位舍去:getRank(p)/10

*/

private int getRank(PukCard p) {

if (p.kind() == '大')

return -21;

if (p.kind() == '小')

return -11;

return getIndex(PukCard.sizes, p.size()) * 10 + getIndex(PukCard.kinds, p.kind());

}

/**

* 比较大小的方法当然是做减法了!

*/

@Override

public int compare(PukCard o1, PukCard o2) {

return getRank(o1) - getRank(o2);

}

}

8b22ab26ef493287a87a82da4f4b89c6.png

package xyz.hmy.poker;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

/**

* 一个斗地主发牌简单示例

*

* @author 幻梦言

*/

public class Game {

List _players;

public Game() {

// 准备玩家、扑克

_players = new ArrayList<>(3);

preparePukCard();

// 展示扑克

for (int i = 1; i <= 3; i++) {

System.out.printf("玩家%d:", i);

_players.get(i - 1).showCards();

}

}

protected void preparePukCard() {

// 初始化一副扑克牌

List poker = new ArrayList<>();

poker.add(new PukCard('大', '王'));

poker.add(new PukCard('小', '王'));

for (char kind : PukCard.kinds)

for (char size : PukCard.sizes)

poker.add(new PukCard(kind, size));

// 打乱

Collections.shuffle(poker);

// 取出并排序

for (int i = 0; i 

// 抢地主请修改本行并取消Player类addPukCards方法注释,以完成修改

List Cards = i != 34 ? poker.subList(i, i + 17) : poker.subList(i, i + 20);

Cards.sort(new PukCardComparator());

_players.add(new Player(Cards));

}

}

/**

* 只起演示作用

*/

public static void main(String[] args) {

// 开始游戏

new Game();

}

}

5a6248719eab539b6cda4d7ca48f5a7b.png

不出意外应该会逐步完善

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值