十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要講解了java如何實(shí)現(xiàn)斗地主游戲,內(nèi)容清晰明了,對此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會有幫助。
創(chuàng)新互聯(lián)建站主營平陸網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶App定制開發(fā),平陸h5小程序定制開發(fā)搭建,平陸網(wǎng)站營銷推廣歡迎平陸等地區(qū)企業(yè)咨詢
思路:
1、創(chuàng)建一個(gè)撲克牌的實(shí)體類Poker,設(shè)置了四個(gè)參數(shù):花色、數(shù)字、牌值(判斷大小)、是否地主牌,實(shí)現(xiàn)getset方法和構(gòu)造方法;
2、創(chuàng)建一個(gè)玩家的實(shí)體類Player,設(shè)置了四個(gè)參數(shù): 初始牌集合,排序后牌集合,牌值集合,是否地主,實(shí)現(xiàn)getset方法和構(gòu)造方法;
3、洗牌:循環(huán)嵌套花色數(shù)組跟數(shù)字?jǐn)?shù)組生成52個(gè)Poker,手動(dòng)加入大小王Poker,放進(jìn)map(int,Poker)里面,利用Collections.shuffle隨機(jī)排序map的key,再根據(jù)key生成排序后的Poker集合
4、發(fā)牌:生成3個(gè)玩家對象,拿到洗牌后的集合,前51張牌為玩家牌,后3張為地主牌,在51張牌中隨機(jī)一張為地主牌,遍歷玩家牌分配個(gè)每一個(gè)Player,同時(shí)根據(jù)玩家牌的牌值生成集合grades存進(jìn)Player對象中,將grades轉(zhuǎn)為int數(shù)組并進(jìn)行升序排序,根據(jù)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 pokers;
private boolean isLandower;
private ArrayList newPokers;
private LinkedList grades;
public LinkedList getGrades() {
return grades;
}
public void setGrades(LinkedList grades) {
this.grades = grades;
}
public ArrayList getNewPokers() {
return newPokers;
}
public void setNewPokers(ArrayList newPokers) {
this.newPokers = newPokers;
}
public boolean isLandower() {
return isLandower;
}
public void setLandower(boolean landower) {
isLandower = landower;
}
public Player() {
}
public ArrayList getPokers() {
return pokers;
}
public void setPokers(ArrayList pokers) {
this.pokers = pokers;
}
} 洗牌:
/*洗牌*/ public static LinkedListgetPokerList() { LinkedList pokers = new LinkedList (); LinkedList newPokers = new LinkedList (); ArrayList arrayList = new ArrayList<>(); int[] arr; /*生成54張撲克牌(Poker對象)*/ /*用嵌套循環(huán)生成從方塊3到黑桃2的Poker對象,放進(jìn)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放進(jìn)map*/ for (int z = 1; z <= pokers.size(); z++) { map.put(z, pokers.get(z - 1)); } /*遍歷Map,將每個(gè)Poker對應(yīng)的key放進(jìn) ArrayList arrayList */ Set > set = map.entrySet(); Iterator it = set.iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry ) it.next(); arrayList.add(e.getKey()); } /*利用Collections.shuffle隨機(jī)排序key*/ Collections.shuffle(arrayList); /*將亂序后的key對于的Poker放進(jìn)newPokers里面 */ for (Integer i : arrayList) { newPokers.add(map.get(i)); } return newPokers; }
發(fā)牌:
/*發(fā)牌*/
/*根據(jù)玩家人數(shù)生成Player,默認(rèn)num=3*/
private static void sentPoker(int num) {
/*獲取洗牌后的LinkedList,保證順序*/
LinkedList Allpokers = getPokerList();
ArrayList pokers = new ArrayList<>();
ArrayList 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));
}
}
/*玩家牌中隨機(jī)一張為地主牌*/
Random rand = new Random();
int s = rand.nextInt(51);
pokers.get(s).setLandowners(true);
System.out.println("地主牌: " + pokers.get(s));
/*根據(jù)num生成Player對象*/
for (int j = 0; j < num; j++) {
/*玩家的牌值集合*/
LinkedList grades = new LinkedList<>();
/*玩家的手牌集合*/
ArrayList playerPokers = new ArrayList();
/*根據(jù)玩家個(gè)數(shù)分配玩家牌*/
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);
}
/*根據(jù)玩家牌中的地主牌設(shè)置玩家是否地主*/
for (Poker p : players.get(j).getPokers()) {
if (p.isLandowners() == true) {
players.get(j).setLandower(true);
}
}
/*根據(jù)玩家的牌值集合生成數(shù)組*/
Integer[] gs = new Integer[players.get(j).getGrades().size()];
grades.toArray(gs);
/*排序數(shù)組,由低到高*/
Arrays.sort(gs);
/*排序后的玩家牌*/
ArrayList 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 + " ");
}
} 效果如下:

看完上述內(nèi)容,是不是對java如何實(shí)現(xiàn)斗地主游戲有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。