题目:一副扑克有52张牌,打桥牌时应将牌分给四个人。请设计一个程序完成自动发牌的工作。要求:黑桃用S(Spaces)表示;红桃用H(Hearts)表示;方块用D(Diamonds)表示;梅花用C(Clubs)表示。
解答:虽然比较简单,动手练习还是我的目的~
import java.util.Random;
/**
* 模拟随机发牌的过程。<br>
* 书中的思想:生成[1,52]的随机数,存到数组int[] faPais中,如果不存在,则存放,如果存在,则重新生成随机数。以上重复52遍。<br>
* 我的思想:定义存放1到52的数组A,生成[1,i]的随机数num(i从52到1),生成num之后,打印出来,并且从数组A中删除num<br>
* 区别:<br>
* 书中的思想的耗时时间是52*X,X是判断随机数是否已经存在的时间,X大约是[1,52]不等,如果已经存在,X将会翻n倍。<br>
* 我的思想的耗时时间是52*X,X是从数组中删除num的时间,大约是[1,52]不等。(如果使用链表代替顺序数组,增加查找时间,减少是删除时间,总体不变)
*
* @author atell
*
*/
public class FaPai {
public static Random random = new Random();
/**
* [1,52]对应扑克牌的规则:A<2<3<...<K的顺序,方块<梅花<红心<黑桃的顺序。<br>
*/
public static void main(String[] args) {
int[] pais = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,43, 44, 45, 46, 47, 48, 49, 50, 51, 52 };
for(int i=52;i>0;i--){
int num =random.nextInt(i);
System.out.print(convert2Pai(pais[num])+' ');
if(i%13==1)System.out.println();//13张则换行
delete(pais,num,i);
}
}
public static void delete(int[] pais, int num,int length) {
for(int i = num;i<length-1;i++){
pais[i] = pais[i+1];
}
pais[length -1] = 0;
}
public static String[] HuaSes = { "黑桃", "方块", "梅花", "红桃" };
public static String convert2Pai(int num) {
int huaSe = num % 4;
int shuZi = num / 4 + 1;
if (shuZi == 1)
return HuaSes[huaSe] + "A";
else if (shuZi == 11)
return HuaSes[huaSe] + "J";
else if (shuZi == 12)
return HuaSes[huaSe] + "Q";
else if (shuZi == 13)
return HuaSes[huaSe] + "K";
else
return HuaSes[huaSe] + shuZi;
}
}
效果:
方块5 方块10 梅花2 黑桃5 红桃J 方块3 黑桃4 梅花6 红桃2 方块6 黑桃Q 方块A 方块Q
梅花10 梅花4 黑桃J 梅花3 方块K 黑桃2 梅花7 梅花8 红桃7 方块8 黑桃8 梅花9 方块7
黑桃6 红桃4 红桃6 红桃3 方块2 红桃5 红桃8 梅花A 黑桃10 梅花Q 方块4 黑桃7 红桃9
梅花J 方块J 梅花K 黑桃14 红桃Q 黑桃3 红桃K 黑桃K 方块9 梅花5 红桃A 黑桃9 红桃10
分享到:
相关推荐
自动发牌 87.黑白子交换 88.常胜将军 89.抢30 90.搬山游戏 <br>C/C++语言经典实用趣味程序设计编程百例精解(10) <br>91.人机猜数游戏 92.人机猜数游戏(2) 93.汉诺塔 94.兎子产子...
32. 黑白子自动发牌:模拟棋类游戏中的发牌过程。 33. 数制转换和分数比较:算法在不同数制转换和分数大小比较上的应用。 34. 分币换算和拉丁方阵:解决货币换算和特殊矩阵填充的问题。 35. 年龄几何和分数之和:...
自动发牌 87.黑白子交换 88.常胜将军 89.抢30 90.搬山游戏 <br>C/C++语言经典实用趣味程序设计编程百例精解(10) (详解收藏在)http://www.klfd.net.cn/?p=393 <br>91.人机猜数游戏 92....
100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...
自动发牌 87.黑白子交换 88.常胜将军 89.抢30 90.搬山游戏 <br>91.人机猜数游戏 92.人机猜数游戏(2) 93.汉诺塔 94.兎子产子 95.将阿拉伯数字转换为罗马数字 96.选美比赛 ...
100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 ...
100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...
100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...
100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 111 绘制...
100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...
100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...
100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...
100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...
100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...
100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...
100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...
100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...
100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 111 绘制...
这包括发牌、玩家出牌的合法性检查(检查两端点是否匹配)、骨牌的布局显示等。这些功能可以通过函数实现,如`deal_cards()`、`check_play合法性()`和`display_layout()`。合法性检查是游戏的关键,它需要对当前骨牌...
100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 ...