Java实现斗地主的发牌功能
程序员文章站
2022-06-27 15:01:11
斗地主是全国范围内的一种桌面游戏,尽管全国各种类型,但大同小异,今天我们先来实现一下斗地主中的发牌功能,为了程序的可读性以及可拓展性,此次我们使用面向对象的方法来实现此功能。首先,斗地主要求有扑克和玩...
斗地主是全国范围内的一种桌面游戏,尽管全国各种类型,但大同小异,今天我们先来实现一下斗地主中的发牌功能,为了程序的可读性以及可拓展性,此次我们使用面向对象的方法来实现此功能。
首先,斗地主要求有扑克和玩家才能开始游戏,所以这里我们首先要创建一个扑克牌实体类和一个玩家实体类,具体代码如下:
首先是poker类,含点数,花色和排序属性,大小王之后额外添加,这里我们必须实现一个comparable接口,方便之后进行排序:
public class poker implements comparable<poker>{ private string flower; private string pointer; private int sort; public poker() { } public poker(string flower, string pointer, int sort) { super(); this.flower = flower; this.pointer = pointer; this.sort = sort; } public string getflower() { return flower; } public void setflower(string flower) { this.flower = flower; } public string getpointer() { return pointer; } public void setpointer(string pointer) { this.pointer = pointer; } public int getsort() { return sort; } public void setsort(int sort) { this.sort = sort; } @override public string tostring() { return flower +"-" + pointer; } @override public int compareto(poker a) { return this.getsort() - a.getsort(); } }
然后就是player类,这里我们定义属性有id,玩家名字以及玩家手牌和是否地主:
import java.util.arraylist; public class player { private int id; private string name; private arraylist<poker> pokers = new arraylist<>(); private boolean boss; public player() { } public player(int id, string name) { super(); this.id = id; this.name = name; } 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 arraylist<poker> getpokers() { return pokers; } public void setpokers(arraylist<poker> pokers) { this.pokers = pokers; } public boolean isboss() { return boss; } public void setboss(boolean boss) { this.boss = boss; } }
实体类建完之后,我们就要开始实现功能了,首先我们将要实现的功能简单叙述一下,首先我们要求有一副54张的完整牌,然后洗牌(此处我们用collections里的静态shuffle方法实现),然后开始按洗好的牌发牌51张,发完随机地主,将剩余的三张牌给地主,并将三名玩家的牌均按大小显示出来。
import java.util.arraylist; import java.util.arrays; import java.util.collections; import java.util.list; import java.util.random; public class pokergame { /**定义为静态以简化代码量*/ static list<player> players; static arraylist<poker> list = new arraylist<>(); static string[] flowers = {"梅花","黑桃","方块","红桃"}; static string[] pointers = {"3","4","5","6","7","8","9","10","j","q","k","a","2"}; int bossindex; static{ for(int i = 0;i < flowers.length;i++){ for(int j = 0;j < pointers.length;j++){ poker p = new poker(flowers[i],pointers[j],j); list.add(p); } } list.add(new poker("小","王",13)); list.add(new poker("大","王",14)); players = arrays.aslist( new player(1,"胡灿"), new player(2,"戴豪杰"), new player(3,"马涛") ); } /**随机地主*/ public void pushboss(){ /**随机一个索引,随到的为地主*/ random r = new random(); bossindex = r.nextint(players.size()); players.get(bossindex).setboss(true); } /**洗牌功能*/ public void xipai(){ /**用collections中的一个静态方法实现随机顺序集合*/ collections.shuffle(list); } /**发牌功能*/ public void fapai(){ /**每次按顺序给每人发一张牌直到51张牌发完*/ for(int i = 0;i < 51;i+=3){ players.get(0).getpokers().add(list.get(i)); players.get(1).getpokers().add(list.get(i+1)); players.get(2).getpokers().add(list.get(i+2)); } /**将剩余的三张牌发给地主*/ for(int j = 51;j < 54;j++){ players.get(bossindex).getpokers().add(list.get(j)); } } /**排序功能*/ public void paixu(){ /**用collections的sort方法实现排序功能*/ collections.sort(players.get(0).getpokers()); collections.sort(players.get(1).getpokers()); collections.sort(players.get(2).getpokers()); } /**开始游戏*/ public void start(){ pushboss(); xipai(); fapai(); paixu(); for(player p:players){ system.out.println(p.getpokers()); } } }
下面我们来看看具体实现:
public class test { public static void main(string[] args) { new pokergame().start(); } }
结果如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Golang的继承模拟实例