Java實現(xiàn)斗地主案例
本文實例為大家分享了Java實現(xiàn)斗地主的具體代碼,供大家參考,具體內(nèi)容如下
import java.util.ArrayList;
import java.util.Collections;
public class DemoPoker {
public static void main(String[] args) {
/**
*一、準(zhǔn)備牌
普通牌:2 A K...3
花色:♥ ♠ ♣ ♦
王牌:大王 小王
創(chuàng)建一個集合,把牌組裝之后存進(jìn)去
*/
String[] numbers = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};
String[] colors = {"♥", "♠", "♣", "♦"};
ArrayList<String> pokerBox = new ArrayList<>();
for (String color : colors) {
for (String number : numbers) {
pokerBox.add(color + number);
}
}
pokerBox.add("大王");
pokerBox.add("小王");
/**
* 二、洗牌
static void shuffle(List<?> list) 使用默認(rèn)的隨機源隨機置換指定的列表。
此處為了輸出結(jié)果工整所以沒有直接輸出集合
*/
Collections.shuffle(pokerBox);
for (int i = 0; i < pokerBox.size(); i++) {
System.out.print(pokerBox.get(i)+"\t");
if (i==26) {
System.out.println();
}
}
System.out.println();
/**
* 三、發(fā)牌
遍歷集合,用索引%3發(fā)牌,余0給玩家1,余1給玩家2,余2給玩家3
索引0-50是玩家的牌,51-53是底牌
*/
//玩家一
ArrayList<String> player01 = new ArrayList<>();
//玩家二
ArrayList<String> player02 = new ArrayList<>();
//玩家三
ArrayList<String> player03 = new ArrayList<>();
//底牌
ArrayList<String> diPai = new ArrayList<>();
for (int i = 0; i < pokerBox.size(); i++) {
String faces = pokerBox.get(i);
if (i>=51) {
diPai.add(faces);
} else if (i%3==0) {
player01.add(faces);
} else if (i%3==1) {
player02.add(faces);
} else if (i%3==2) {
player03.add(faces);
}
}
/**
* 四、看牌
直接輸出每位玩家的集合
*/
System.out.println("張無忌"+player01);
System.out.println("張翠山"+player02);
System.out.println("殷素素"+player03);
System.out.println("底牌"+diPai);
}
}
帶排序版的
package com.demo_2.poker;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
public class Poker {
/**
*一共要四步。一、備牌 二、洗牌 三、發(fā)牌 四、看牌
目的:練習(xí)集合的用法
*/
public static void main(String[] args) {
/**
* 第一步:備牌
使用List接口中的of()方法添加并分別創(chuàng)建numbers和colors集合
*/
//numbers:存儲普通牌 2、A、K...3從大到小
List<String> numbers = List.of("2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
//colors:存儲四種花色 ♥、♠、♦、♣
List<String> colors = List.of("♥", "♠", "♦", "♣");
//創(chuàng)建一個Map集合存儲索引和組裝好的牌
HashMap<Integer, String> pokerBox = new HashMap<>();
//創(chuàng)建一個List集合儲存牌的索引
LinkedList<Integer> pokerIndex = new LinkedList<>();
//先把大王、小王和下標(biāo)分別放進(jìn)Map的鍵和值里面,再向LinkedList里面存儲下標(biāo),下標(biāo)增加1
int index = 0;
pokerBox.put(index, "大王");
pokerIndex.add(index);
index++;
pokerBox.put(index, "小王");
pokerIndex.add(index);
index++;
//組裝牌:遍歷兩個List集合,使用Map接口中的put()方法給pokerBox添加鍵和值,并給LinkedList傳下標(biāo)
for (String number : numbers) {
for (String color : colors) {
pokerBox.put(index, color + number);
pokerIndex.add(index);
index++;
}
}
/**
* 第二步:洗牌
使用Collocations類中的shuffler方法,傳遞參數(shù)pokerIndex
*/
Collections.shuffle(pokerIndex);
/**
* 第三步:發(fā)牌
創(chuàng)建四個List集合,分別存儲三位玩家和底牌
使用for循環(huán)遍歷pokerIndex,i%3結(jié)果為0的給玩家1,1的給玩家2,2的給玩家3
*/
LinkedList<Integer> player01 = new LinkedList<>();
LinkedList<Integer> player02 = new LinkedList<>();
LinkedList<Integer> player03 = new LinkedList<>();
LinkedList<Integer> diPai = new LinkedList<>();
for (int i = 0; i < pokerIndex.size(); i++) {
Integer in = pokerIndex.get(i);
if (i >= 51) {
diPai.add(in);
} else if (i % 3 == 0) {
player01.add(in);
} else if (i % 3 == 1) {
player02.add(in);
} else if (i % 3 == 2) {
player03.add(in);
}
}
//給玩家的牌排序,使用Collocations接口中的sort()方法排序
Collections.sort(player01);
Collections.sort(player02);
Collections.sort(player03);
Collections.sort(diPai);
/**
*第四步:看牌
遍歷排過序的List集合作為Map集合的鍵值獲取對應(yīng)的值
為提高代碼復(fù)用性定義一個方法代替
*/
print("令狐沖",player01,pokerBox);
print("諸葛瑾",player02,pokerBox);
print("司馬懿",player03,pokerBox);
print("底牌",diPai,pokerBox);
}
/**
*看牌的方法:
參數(shù):
String name
LinkedList<Integer> list
HashMap<Integer, String> map
*/
public static void print(String name,LinkedList<Integer> list,HashMap<Integer, String> map){
System.out.print(name+":");
for (Integer key : list) {
System.out.print(map.get(key)+" ");
}
System.out.println();
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java?RabbitMQ的持久化和發(fā)布確認(rèn)詳解
這篇文章主要為大家詳細(xì)介紹了RabbitMQ的持久化和發(fā)布確認(rèn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03
idea創(chuàng)建javaweb原生項目的實現(xiàn)示例
這篇文章主要介紹了idea創(chuàng)建javaweb原生項目的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Java中使用HttpPost發(fā)送form格式的請求實現(xiàn)代碼
在Java中使用HttpPost發(fā)送form格式的請求,可以使用Apache HttpClient庫來實現(xiàn),這篇文章主要介紹了Java中使用HttpPost發(fā)送form格式的請求,本文給大家展示示例代碼,需要的朋友可以參考下2023-08-08
Java設(shè)計模式之責(zé)任鏈模式(Chain of Responsibility模式)介紹
這篇文章主要介紹了Java設(shè)計模式之責(zé)任鏈模式(Chain of Responsibility模式)介紹,本文講解了如何使用責(zé)任鏈模式,并給出了4種使用實例,需要的朋友可以參考下2015-03-03
Java數(shù)據(jù)結(jié)構(gòu)及算法實例:漢諾塔問題 Hanoi
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)及算法實例:漢諾塔問題 Hanoi,本文直接給出實現(xiàn)代碼,代碼中包含大量注釋,需要的朋友可以參考下2015-06-06
SpringBoot使用validation-api實現(xiàn)對枚舉類參數(shù)校驗的方法
這篇文章主要介紹了SpringBoot使用validation-api實現(xiàn)對枚舉類參數(shù)校驗,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11

