【算法】撲克發(fā)牌算法實現(xiàn)
更新時間:2008年11月21日 19:23:39 作者:
撲克發(fā)牌算法是棋牌游戲中常用的基礎(chǔ)算法,也是游戲開發(fā)人員需要熟悉的基礎(chǔ)算法之一。下面介紹一下該算法的一種實現(xiàn)方式。
首先給撲克牌中每張牌設(shè)定一個編號,下面算法實現(xiàn)的編號規(guī)則如下:
u 紅桃按照從小到大依次為:1-13
u 方塊按照從小到大依次為:14-26
u 黑桃按照從小到大依次為:27-39
u 梅花按照從小到大依次為:40-52
u 小王為53,大王為54
算法實現(xiàn)如下:
u 首先按照以上編號規(guī)則初始化一個包含108個數(shù)字的數(shù)組
u 每次隨機(jī)從該數(shù)組中抽取一個數(shù)字,分配給保存玩家數(shù)據(jù)的數(shù)組
實現(xiàn)該功能的代碼如下所示:
import java.util.*;
/**
* 發(fā)牌算法的實現(xiàn)
* 要求:把2副牌,也就是108張,發(fā)給4個人,留6張底牌
*/
public class Exec{
public static void main(String[] args){
//存儲108張牌的數(shù)組
int[] total = new int[108];
//存儲四個玩家的牌
int[][] player = new int[4][25];
//存儲當(dāng)前剩余牌的數(shù)量
int leftNum = 108;
//隨機(jī)數(shù)字
int ranNumber;
//隨機(jī)對象
Random random = new Random();
//初始化數(shù)組
for(int i = 0;i < total.length;i++){
total[i] = (i + 1) % 54;
//處理大小王編號
if(total[i] == 0){
total[i] = 54;
}
}
//循環(huán)發(fā)牌
for(int i = 0;i < 25;i++){
//為每個人發(fā)牌
for(int j = 0;j < player.length;j++){
//生成隨機(jī)下標(biāo)
ranNumber = random.nextInt(leftNum);
//發(fā)牌
player[j][i] = total[ranNumber];
//移動已經(jīng)發(fā)過的牌
total[ranNumber] = total[leftNum - 1];
//可發(fā)牌的數(shù)量減少1
leftNum--;
}
}
//循環(huán)輸出玩家手中的牌
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();
}
}
u 紅桃按照從小到大依次為:1-13
u 方塊按照從小到大依次為:14-26
u 黑桃按照從小到大依次為:27-39
u 梅花按照從小到大依次為:40-52
u 小王為53,大王為54
算法實現(xiàn)如下:
u 首先按照以上編號規(guī)則初始化一個包含108個數(shù)字的數(shù)組
u 每次隨機(jī)從該數(shù)組中抽取一個數(shù)字,分配給保存玩家數(shù)據(jù)的數(shù)組
實現(xiàn)該功能的代碼如下所示:
復(fù)制代碼 代碼如下:
import java.util.*;
/**
* 發(fā)牌算法的實現(xiàn)
* 要求:把2副牌,也就是108張,發(fā)給4個人,留6張底牌
*/
public class Exec{
public static void main(String[] args){
//存儲108張牌的數(shù)組
int[] total = new int[108];
//存儲四個玩家的牌
int[][] player = new int[4][25];
//存儲當(dāng)前剩余牌的數(shù)量
int leftNum = 108;
//隨機(jī)數(shù)字
int ranNumber;
//隨機(jī)對象
Random random = new Random();
//初始化數(shù)組
for(int i = 0;i < total.length;i++){
total[i] = (i + 1) % 54;
//處理大小王編號
if(total[i] == 0){
total[i] = 54;
}
}
//循環(huán)發(fā)牌
for(int i = 0;i < 25;i++){
//為每個人發(fā)牌
for(int j = 0;j < player.length;j++){
//生成隨機(jī)下標(biāo)
ranNumber = random.nextInt(leftNum);
//發(fā)牌
player[j][i] = total[ranNumber];
//移動已經(jīng)發(fā)過的牌
total[ranNumber] = total[leftNum - 1];
//可發(fā)牌的數(shù)量減少1
leftNum--;
}
}
//循環(huán)輸出玩家手中的牌
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();
}
}
相關(guān)文章
JavaWeb Servlet中url-pattern的使用
這篇文章主要介紹了JavaWeb Servlet中url-pattern的使用的相關(guān)資料,希望通過本文能幫助到大家,讓大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下2017-10-10JSP application(return String)用法詳例
JSP中application(return String)用法詳例,需要用的朋友可以參考下代碼。2009-10-10JSP實現(xiàn)用于自動生成表單標(biāo)簽html代碼的自定義表單標(biāo)簽
這篇文章主要介紹了JSP實現(xiàn)用于自動生成表單標(biāo)簽html代碼的自定義表單標(biāo)簽,可實現(xiàn)自動生成html標(biāo)簽的功能,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10tomcat共享多個web應(yīng)用會話的實現(xiàn)方法
這篇文章主要介紹了tomcat共享多個web應(yīng)用會話的實現(xiàn)方法的相關(guān)資料,希望通過本文能幫助到大家,讓大家實現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10