玩家类
package test2;
/**
* 5、 参考斗地主的游戏规则,完成一个发牌的功能(54张牌,考虑点数,花色;三名玩家,其中地主比其他玩家多3张牌)
(1) 牌类(花色,牌面值, 点数大小)
(2) 玩家类(id,名字,是否地主,牌集合)
3-10 J Q K A 2 King Queen
* @author ZyKun.
*
*/
import java.util.ArrayList;
public class Player {
//玩家id
private int id;
//玩家姓名
private String name;
//是否为地主
private boolean boos;
//牌集合
private ArrayList<Poker> cards = new ArrayList<Poker>();
public Player() {
// TODO Auto-generated constructor stub
}
public Player(int id, String name, boolean boos, ArrayList<Poker> cards) {
super();
this.id = id;
this.name = name;
this.boos = boos;
this.cards = cards;
}
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 boolean isBoos() {
return boos;
}
public void setBoos(boolean boos) {
this.boos = boos;
}
public ArrayList<Poker> getCards() {
return cards;
}
public void setCards(ArrayList<Poker> cards) {
this.cards = cards;
}
@Override
public String toString() {
return "Player [id=" + id + ", name=" + name + ", boos=" + boos + ", cards=" + cards + "]";
}
}
扑克类
package test2;
/**
* 5、 参考斗地主的游戏规则,完成一个发牌的功能(54张牌,考虑点数,花色;三名玩家,其中地主比其他玩家多3张牌)
(1) 牌类(花色,牌面值, 点数大小)
(2) 玩家类(id,名字,是否地主,牌集合)
3-10 J Q K A 2 King Queen
* @author ZyKun.
*
*/
public class Poker {
//花色
private String flowerColor;
//牌面值
private String name;
//点数大小
private int num;
public Poker() {
// TODO Auto-generated constructor stub
}
public Poker(String flowerColor, String name, int num) {
super();
this.flowerColor = flowerColor;
this.name = name;
this.num = num;
}
public String getFlowerColor() {
return flowerColor;
}
public void setFlowerColor(String flowerColor) {
this.flowerColor = flowerColor;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
@Override
public String toString() {
return "Poker [flowerColor=" + flowerColor + ", name=" + name + ", num=" + num + "]";
}
}
方法类
package test2;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
/**
* 5、 参考斗地主的游戏规则,完成一个发牌的功能(54张牌,考虑点数,花色;三名玩家,其中地主比其他玩家多3张牌)
(1) 牌类(花色,点数,序号)
(2) 玩家类(id,名字,是否地主,牌集合)
* @author ZyKun.
*
*/
public class GameManage {
//声明所有牌的集合
private static ArrayList<Poker> all = new ArrayList<Poker>();
//用于生成牌的牌面数
private static String [] names = {"A","2","3","4","5","6","7","8","9","10","J","Q","K","King","Queen"};
//用于生成花色
private static String [] flowerColor ={"红桃","黑桃","方块","梅花"};
//所有玩家集合
private ArrayList<Player> players = new ArrayList<Player>();
//声名一个随机数生成器
private static Random randomGen = new Random();
//初始化所有牌
static {
//笛卡尔积
int i = 0;
for(; i<names.length-2; i++) {
for(int j = 0; j<flowerColor.length; j++) {
Poker p = new Poker(names[i],flowerColor[j],i);
all.add(p);
}
}
//将大小王加入
all.add(new Poker (names[names.length-2],null,i++));
all.add(new Poker (names[names.length-1],null,i++));
//遍历出所有的牌
// for (Poker p : all) {
// System.out.println(p);
// }
}
//添加玩家
public void addPlayer() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入玩家1名称:");
String name1 = sc.nextLine();
System.out.println("请输入玩家2名称:");
String name2 = sc.nextLine();
System.out.println("请输入玩家3名称:");
String name3 = sc.nextLine();
Player p1 = new Player();
p1.setId(1);
p1.setName(name1);
Player p2 = new Player();
p2.setId(2);
p2.setName(name2);
Player p3 = new Player();
p3.setId(3);
p3.setName(name3);
//将三名玩家加入集合
players.add(p1);
players.add(p2);
players.add(p3);
}
//随机地主
public void randomBoos() {
//添加玩家
addPlayer();
//随机生成地主索引
int i = randomGen.nextInt(players.size());
//设置指定位置的玩家为地主
players.get(i).setBoos(true);
}
//发牌
public ArrayList<Player> sendCard() {
//随机地主
randomBoos();
//对每一位玩家遍历
for (Player p : players) {
//先为每一位玩家随机发17张牌
for(int i = 0; i<17; i++) {
//随机一张牌的索引值
int cardIndex = randomGen.nextInt(all.size());
Poker card = all.get(cardIndex);
//将随机的牌加入到容器中
p.getCards().add(card);
//从源集合中移除这张牌
all.remove(card);
}
}
//最后的三张牌给地主
for (Player p : players) {
if(p.isBoos()) {
//将all集合中所有的元素加入地主的集合
p.getCards().addAll(all);
}
}
return players;
}
public static void main(String[] args) {
ArrayList<Player> players =new GameManage().sendCard();
for (Player s : players) {
System.out.println(s);
}
}
}
测试效果图
ps:注解很详细,小白一枚枚,仅供参考