Java 撲克發牌演算法實現,java撲克牌演算法
原文:Java 撲克發牌演算法實現 代碼:http://www.zuidaima.com/share/1550463274224640.htm
兩種方法: A. 撲克發牌演算法是棋牌遊戲中常用的基礎演算法,也是遊戲開發人員需要熟悉的基礎演算法之一。下面介紹一下該演算法的一種實現方式。 B.利用Random類的對象的鏈表中一隨機的順序儲存一副52張的紙牌。用含有連個字元的字串代表紙牌,例如“1C”表示梅花A,”JD”表示方片J等。從棧中輸出4手牌,每手牌有13張紙牌。
首先給撲克牌中每張牌設定一個編號,下面演算法實現的編號規則如下: u 紅桃按照從小到大依次為:1-13 u 方塊按照從小到大依次為:14-26 u 黑桃按照從小到大依次為:27-39 u 梅花按照從小到大依次為:40-52 u 小王為53,大王為54 演算法實現如下: u 首先按照以上編號規則初始化一個包含108個數位數組 u 每次隨機從該數組中抽取一個數字,分配給儲存玩家資料的數組 實現該功能的代碼如下所示: package com.zuidaima; import Java.util.*; /** * 發牌演算法的實現 * 要求:把2副牌,也就是108張,發給4個人,留6張底牌* @author www.zuidaima.com*/public class Exec{ public static void main(String[] args){ //儲存108張牌的數組 int[] total = new int[108]; //儲存四個玩家的牌 int[][] player = new int[4][25]; //儲存當前剩餘牌的數量 int leftNum = 108; //隨機數字 int ranNumber; //隨機對象 Random random = new Random(); //初始化數組 for(int i = 0;i < total.length;i++){ total[i] = (i + 1) % 54; //處理大小王編號 if(total[i] == 0){ total[i] = 54; } } //迴圈發牌 for(int i = 0;i < 25;i++){ //為每個人發牌 for(int j = 0;j < player.length;j++){ //產生隨機下標 ranNumber = random.nextInt(leftNum); //發牌 player[j][i] = total[ranNumber]; //移動已經發過的牌 total[ranNumber] = total[leftNum - 1]; //可發牌的數量減少1 leftNum--; } } //迴圈輸出玩家手中的牌 for(int i = 0;i < player.length;i++){ for(int j = 0;j < player[i].length;j++){ System.out.print(" " + player[i][j]); } System.out.println(); } //底牌 for(int i = 0;i < 8;i++){ System.out.print(" " + total[i]); } System.out.println(); }}
標籤: 演算法 撲克 發牌 java話題: 語言基礎
Java四人撲克發牌,教將代碼進行更好的縮排,在簡潔點,最主要性可以
提點小小的建議:使用集合,同時可以使用Collections類的shuffle方法來發牌,效率比自己寫更高,更簡潔
java編寫撲克牌遊戲裡,洗牌時發牌時用到了隨機分配的功可以,問在那個包中哪個類哪個方法?
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
/**
* Author:danagao
* java 發牌程式,
* 不含大王,小王
* 可設定發牌人數
*/
public class Pai {
HashMap<String, String> map = new HashMap<String, String>();
private static final String[] colors = {"紅桃", "方塊", "梅花", "黑桃"};
private static final String[] values = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
private String[] newpai; private int len;
//初始化52張牌
public Pai() {
len = colors.length * values.length;
newpai = new String[len];
int k = 0;
for (int i = 0; i < colors.length; i++) {
for (int j = 0; j < values.length; j++) {
newpai[k] = colors[i] + values[j];
k++;
}
}
}
//洗牌(把牌打亂)
private void getNums() {
Random r = new Random();
int i = r.nextInt(len);
String s;
if (i >= 0 && !map.containsKey(String.valueOf(i))) {
s = String.valueOf(i);
map.put(s, newpai[i]);
} else {
getNums();
}
}
//發牌
public void showResult(int p) {
for (int i = 0; i < len; i++) {
getNums();
}
int l = len/p; //每人發幾張牌
int j=1;//計人數
int k=0;//計牌數
for (Map.Entry<String, String> entry : map.entrySet()) {
if(k%l==0 && j<=p){
......餘下全文>>