———————————————————————————————————————
———————————————————————————————————————
——————————一个扑克牌核心和简单斗地主发牌实现;\n——————————
个人感觉良好
拓展性强(?
PukCard
下面是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 + "";
}
}
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);
}
}
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);
}
}
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();
}
}
不出意外应该会逐步完善