java控制台小程序(斗地主发牌功能)
近期时间较少不做详细介绍了,请直接观察注释!
效果:
(代码简陋,不喜勿喷TVT)
代码:
Card类:
/**
* 牌堆
* @author ASUS
*
*/
public class Card {
/**点数*/
private String count;
/**大小*/
private int size;
public Card() {
// TODO Auto-generated constructor stub
}
public Card(String count, int size) {
super();
this.count = count;
this.size = size;
}
public String getCount() {
return count;
}
public void setCount(String count) {
this.count = count;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
BossCard类:
/**
* 大小王牌
* @author ASUS
*
*/
public class BossCard extends Card{
/**大小王*/
private String count = super.getCount();
/**实际大小*/
private int size = super.getSize();
public BossCard(String count,int size) {
super(count,size);
}
@Override
public String toString() {
return count;
}
}
NormalCard类:
/**
* 普通牌
* @author ASUS
*
*/
public class NormalCard extends Card{
/**花色*/
private String color;
/**点数*/
private String count = super.getCount();
/**真正大小*/
private int size = super.getSize();
public NormalCard() {
}
public NormalCard(String count,int size,String color) {
super(count,size);
this.color = color;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return color+count;
}
}
Player类:
/**
* 玩家类
* @author ASUS
*
*/
public class Player {
/**玩家id*/
private int id;
/**玩家身份*/
private String nickname = "农民";
/**玩家手牌*/
private List<Card> card;
/**是否是地主*/
private boolean isBoss = false;
public Player() {
// TODO Auto-generated constructor stub
}
public Player(int id) {
super();
this.id = id;
}
public Player(int id, String nickname, List<Card> card, boolean isBoss) {
super();
this.id = id;
this.nickname = nickname;
this.card = card;
this.isBoss = isBoss;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public List<Card> getCard() {
return card;
}
public void setCard(List<Card> card) {
this.card = card;
}
public boolean isBoss() {
return isBoss;
}
public void setBoss(boolean isBoss) {
this.isBoss = isBoss;
}
@Override
public String toString() {
return "玩家"+id+"\n"+"身份:"+nickname+"\n"+"地主:"+isBoss+"\n"+"手牌:"+card;
}
}
Landlords类(功能实现的类):
public class Landlords {
/**
* 添加牌堆
*/
List<Card> card = new ArrayList<>();
/**玩家集合*/
List<Player> player = new ArrayList<>();
Random r = new Random();
/**地主索引*/
private int index;
/**初始化游戏*/
{ /**添加普通牌*/
String[] count = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
String[] color = {"黑桃","红心","梅花","方块"};
for (int i = 0; i < color.length; i++) {
for (int j = 0; j < count.length; j++) {
card.add(new NormalCard(count[j],j,color[i]));
}
}
/**添加大小王牌*/
card.add(new BossCard("小王", 13));
card.add(new BossCard("大王", 14));
/**创建玩家*/
player.add(new Player(1));
player.add(new Player(2));
player.add(new Player(3));
}
/**
* 洗牌功能
*/
public void getRandomCard() {
Collections.shuffle(card);
}
/**
* 发牌功能
*/
public void giveCard() {
/**随机一个地主*/
int i = r.nextInt(3);
player.get(i).setBoss(true);
player.get(i).setNickname("地主");
/**分配牌堆*/
List<Card> c0 = new ArrayList<>();//玩家一手牌
List<Card> c1 = new ArrayList<>();//玩家二手牌
List<Card> c2 = new ArrayList<>();//玩家三手牌
List<Card> c3 = new ArrayList<>();//地主牌
/**分发手牌*/
for (int j = 0; j < card.size(); j++) {
if(j < 3) {
c0.add(card.get(j));
}else if(j%3 == 0) {
c1.add(card.get(j));
}else if(j%3 == 1) {
c2.add(card.get(j));
}else if(j%3 == 2) {
c3.add(card.get(j));
}
}
player.get(0).setCard(c1);
player.get(1).setCard(c2);
player.get(2).setCard(c3);
/**找出地主*/
for (int j = 0; j < player.size(); j++) {
if(player.get(j).isBoss() == true) {
index = j;
}
}
/**地主牌添加到地主手牌*/
for (Card c4 : c0) {
player.get(index).getCard().add(c4);
}
/**手牌排序*/
for (int j = 0; j < player.size(); j++) {
player.get(j).getCard().sort(new MyComparator());
}
}
/**查看手牌*/
public void showAll() {
player.forEach(p->System.out.println(p));
}
/**按手牌真实大小排序*/
class MyComparator implements Comparator<Card>{
@Override
public int compare(Card o1, Card o2) {
return o1.getSize()-o2.getSize();
}
}
public static void main(String[] args) {
Landlords l = new Landlords();
l.getRandomCard();
l.giveCard();
l.showAll();
}
}