今天就跟大家聊聊有关使用java编写一个斗地主小游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
实现斗地主功能
共54张牌,地主比其他两名玩家多三张牌。
有一个card牌类和player玩家类,还有一个发牌类用于实现发牌的方法。
为了模拟每个玩家的牌都是随机的,我是这样想的:
1)初始化方法:用于将54张牌存到一个数组里,每张牌都一个唯一的序号。
2) 利用随机数,将每个序号打乱存到一个新数组里。
3)再根据序号取到初始化牌库数组内的牌,存到每个玩家的牌集合内。
附一个在老师指导下写的:斗地主发牌功能,自己还是有些没考虑周到。/_ \
代码如下:
牌类
public class Card {
/**花色*/
private String HuaSe;
/**点数*/
private String DianShu;
/**序号*/
private int XuHao;
public Card(String huaSe, String dianShu, int xuHao) {
super();
HuaSe = huaSe;
DianShu = dianShu;
XuHao = xuHao;
}
public String getHuaSe() {
return HuaSe;
}
public void setHuaSe(String huaSe) {
HuaSe = huaSe;
}
public String getDianShu() {
return DianShu;
}
public void setDianShu(String dianShu) {
DianShu = dianShu;
}
public int getXuHao() {
return XuHao;
}
public void setXuHao(int xuHao) {
XuHao = xuHao;
}
@Override
public String toString() {
return "[" + HuaSe + DianShu + "]";
}
}
玩家类
public class Player {
/**玩家id*/
private int id;
/**玩家姓名*/
private String name;
/**是否是地主*/
private boolean dizhu;
/**牌的集合*/
private ArrayList<Card> list;
public Player(int id, String name, boolean dizhu) {
super();
this.id = id;
this.name = name;
this.dizhu = dizhu;
}
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 isDizhu() {
return dizhu;
}
public void setDizhu(boolean dizhu) {
this.dizhu = dizhu;
}
public ArrayList<Card> getList() {
return list;
}
public void setList(ArrayList<Card> list) {
this.list = list;
}
@Override
public String toString() {
return name + ", 牌:" + list ;
}
}
发牌类: 这里还有许多缺陷 :例如地主是需要自己指定而不是随机的,在给每个人发牌时,可以利用remove()方法将已经发过的牌移除,这样可以节省很多重复代码。
public class SendCard {
static ArrayList<Card> arrayList = new ArrayList<Card>();
Random r = new Random();
/**
* 初始话牌库
*/
public void init() {
for (int i = 1; i < 14; i++) {
arrayList.add(new Card("梅花", Integer.toString(i), i));
arrayList.add(new Card("方块",Integer.toString(i),13 + i));
arrayList.add(new Card("红心", Integer.toString(i), 26 + i));
arrayList.add(new Card("黑桃", Integer.toString(i), 39 + i));
}
arrayList.add(new Card("","大王",53));
arrayList.add(new Card("", "小王", 54));
}
/**
* 发牌(默认p3为地主)
* @param p1
* @param p2
* @param p3
*/
public void send(Player p1,Player p2,Player p3) {
ArrayList<Integer> intList = new ArrayList<Integer>();
intList = fenpei(intList);
//给p1发牌
ArrayList<Card> clist = new ArrayList<Card>();
for (int i = 0; i < 17; i++) {
clist.add(arrayList.get(intList.get(i)));
}
p1.setList(clist);
//给p2发牌
clist = new ArrayList<Card>();
for (int i = 17; i < 34; i++) {
clist.add(arrayList.get(intList.get(i)));
}
p2.setList(clist);
//给p3发牌
clist = new ArrayList<Card>();
for (int i = 34; i < 54; i++) {
clist.add(arrayList.get(intList.get(i)));
}
p3.setList(clist);
}
/**
* 将初始化牌库打乱后存入新数组
* @param list
* @return
*/
public ArrayList<Integer> fenpei(ArrayList<Integer> list) {
int index = 0;
while (true) {
int i = r.nextInt(54);
for (Integer integer : list) {
if (integer == i) {
index = 1;
break;
}
index = 0;
}
if(index == 0)
list.add(i);
if(list.size() == 54)
break;
}
return list;
}
}
看完上述内容,你们对使用java编写一个斗地主小游戏有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。