java实现斗地主游戏
程序员文章站
2024-03-31 16:31:46
感想:
第一次写博客,感觉编辑器挺复杂厉害的,感觉自己的内容挺简单的。有什么问题请多多指教!
思路:
1、创建一个扑克牌的实体类poker,设置了四个参数:花色、...
感想:
第一次写博客,感觉编辑器挺复杂厉害的,感觉自己的内容挺简单的。有什么问题请多多指教!
思路:
1、创建一个扑克牌的实体类poker,设置了四个参数:花色、数字、牌值(判断大小)、是否地主牌,实现getset方法和构造方法;
2、创建一个玩家的实体类player,设置了四个参数: 初始牌集合,排序后牌集合,牌值集合,是否地主,实现getset方法和构造方法;
3、洗牌:循环嵌套花色数组跟数字数组生成52个poker,手动加入大小王poker,放进map(int,poker)里面,利用collections.shuffle随机排序map的key,再根据key生成排序后的poker集合
4、发牌:生成3个玩家对象,拿到洗牌后的集合,前51张牌为玩家牌,后3张为地主牌,在51张牌中随机一张为地主牌,遍历玩家牌分配个每一个player,同时根据玩家牌的牌值生成集合grades存进player对象中,将grades转为int数组并进行升序排序,根据grade取得新poker集合分配给玩家。
poker类:
package com.company; public class poker { private string color; private string number; private int grade; boolean islandowners; public boolean islandowners() { return islandowners; } public void setlandowners(boolean landowners) { islandowners = landowners; } public int getgrade() { return grade; } public void setgrade(int grade) { this.grade = grade; } public string getcolor() { return color; } public void setcolor(string color) { this.color = color; } public string getnumber() { return number; } public void setnumber(string number) { this.number = number; } public poker() { } public poker(string color, string number ,int grade,boolean islandowners) { this.color = color; this.number = number; this.grade=grade; this.islandowners=islandowners; } public string tostring() { return this.getcolor()+this.getnumber(); } }
player类:
package com.company; import java.util.arraylist; import java.util.linkedlist; public class player { private arraylist<poker> pokers; private boolean islandower; private arraylist<poker> newpokers; private linkedlist<integer> grades; public linkedlist<integer> getgrades() { return grades; } public void setgrades(linkedlist<integer> grades) { this.grades = grades; } public arraylist<poker> getnewpokers() { return newpokers; } public void setnewpokers(arraylist<poker> newpokers) { this.newpokers = newpokers; } public boolean islandower() { return islandower; } public void setlandower(boolean landower) { islandower = landower; } public player() { } public arraylist<poker> getpokers() { return pokers; } public void setpokers(arraylist<poker> pokers) { this.pokers = pokers; } }
洗牌:
/*洗牌*/ public static linkedlist<poker> getpokerlist() { linkedlist<poker> pokers = new linkedlist<poker>(); linkedlist<poker> newpokers = new linkedlist<poker>(); arraylist<integer> arraylist = new arraylist<>(); int[] arr; /*生成54张扑克牌(poker对象)*/ /*用嵌套循环生成从方块3到黑桃2的poker对象,放进poker的linkedlist保证顺序*/ string[] colors = {"♦", "♣", "♥", "♠"}; string[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "j", "q", "k", "a", "2"}; for (int i = 0; i < numbers.length; i++) { for (int j = 0; j < colors.length; j++) { poker p = new poker(colors[j], numbers[i], (4 * i) + j + 1, false); pokers.add(p); } } /*添加大小王*/ pokers.add(new poker("black", "☆", 53, false)); pokers.add(new poker("red", "☆", 54, false)); /*将生成的54张扑克牌从1到54放进map*/ for (int z = 1; z <= pokers.size(); z++) { map.put(z, pokers.get(z - 1)); } /*遍历map,将每个poker对应的key放进 arraylist<integer> arraylist */ set<map.entry<integer, poker>> set = map.entryset(); iterator it = set.iterator(); while (it.hasnext()) { map.entry<integer, poker> e = (map.entry<integer, poker>) it.next(); arraylist.add(e.getkey()); } /*利用collections.shuffle随机排序key*/ collections.shuffle(arraylist); /*将乱序后的key对于的poker放进newpokers里面 */ for (integer i : arraylist) { newpokers.add(map.get(i)); } return newpokers; }
发牌:
/*发牌*/ /*根据玩家人数生成player,默认num=3*/ private static void sentpoker(int num) { /*获取洗牌后的linkedlist,保证顺序*/ linkedlist<poker> allpokers = getpokerlist(); arraylist<poker> pokers = new arraylist<>(); arraylist<poker> bottompokers = new arraylist<>(); /*生成玩家对象*/ for (int i = 0; i < num; i++) { player p = new player(); players.add(p); } /*前50张牌为玩家牌,后三张为底牌*/ for (int p = 0; p < allpokers.size(); p++) { if (p <= 50) { pokers.add(allpokers.get(p)); } else { bottompokers.add(allpokers.get(p)); } } /*玩家牌中随机一张为地主牌*/ random rand = new random(); int s = rand.nextint(51); pokers.get(s).setlandowners(true); system.out.println("地主牌: " + pokers.get(s)); /*根据num生成player对象*/ for (int j = 0; j < num; j++) { /*玩家的牌值集合*/ linkedlist<integer> grades = new linkedlist<>(); /*玩家的手牌集合*/ arraylist<poker> playerpokers = new arraylist<poker>(); /*根据玩家个数分配玩家牌*/ for (int z = j; z < pokers.size(); z = z + num) { playerpokers.add(pokers.get(z)); grades.add(pokers.get(z).getgrade()); players.get(j).setpokers(playerpokers); players.get(j).setgrades(grades); } /*根据玩家牌中的地主牌设置玩家是否地主*/ for (poker p : players.get(j).getpokers()) { if (p.islandowners() == true) { players.get(j).setlandower(true); } } /*根据玩家的牌值集合生成数组*/ integer[] gs = new integer[players.get(j).getgrades().size()]; grades.toarray(gs); /*排序数组,由低到高*/ arrays.sort(gs); /*排序后的玩家牌*/ arraylist<poker> newpokers = new arraylist<>(); for (int g = 0; g < gs.length; g++) { poker p = map.get(gs[g]); newpokers.add(p); } players.get(j).setnewpokers(newpokers); system.out.println("玩家" + (j + 1) + ": " + players.get(j).getnewpokers() + " 是否地主:" + players.get(j).islandower()); } system.out.print("底牌为: "); for (poker p : bottompokers) { system.out.print(p + " "); } }
效果如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。