【游戏中的算法】洗扑克牌算法
2016-05-30 23:10
666 查看
一、洗扑克牌游戏:
此游戏算法的关键是:随机数的产生、扑克牌随机交换 和 数组的控制;
连同大王小王,一共有54张扑克牌,第一步先按顺序初始化所有花色的扑克牌;然后通过每个位置的扑克牌与随机产生的一个位置的另一张扑克牌交换位置,达到随机排序的目的,由于随机数种子使用系统时间,所以这个地方还有不随机漏洞的问题待解决(此处暂且认为是真正的随机)。
二、C/C++实现方法:
运行结果:
![](https://img-blog.csdn.net/20160530225239531?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
三、JavaScript实现效果图:
1、初始页面 和 clear 后:
![](https://img-blog.csdn.net/20160530190418456?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2、初始化扑克牌:
![](https://img-blog.csdn.net/20160530190431649?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3、洗扑克牌后:
![](https://img-blog.csdn.net/20160530190438675?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
四、JS代码和54张扑克牌下载地址:
http://download.csdn.net/detail/tmt123421/9535703 → 点击打开链接
此游戏算法的关键是:随机数的产生、扑克牌随机交换 和 数组的控制;
连同大王小王,一共有54张扑克牌,第一步先按顺序初始化所有花色的扑克牌;然后通过每个位置的扑克牌与随机产生的一个位置的另一张扑克牌交换位置,达到随机排序的目的,由于随机数种子使用系统时间,所以这个地方还有不随机漏洞的问题待解决(此处暂且认为是真正的随机)。
二、C/C++实现方法:
/* ************************************************ */ /* name: shuffle algo */ /* auth: tianmt */ /* introduce: shuffle cards, include 52 + 2 pieces */ /* ************************************************ */ #include <stdio.h> #include <stdlib.h> #include <time.h> typedef struct card{ int Order; // 顺序 char Suit; // 花色 char Number; // 大小 }Card; // card arr Card OneCard[54] = {}; // 打印所有 void showCard(){ int i; for(i=0; i<54; i++){ //printf(" %02d,%c,%c", OneCard[i].Order, OneCard[i].Suit, OneCard[i].Number); printf(" %c,%c", OneCard[i].Suit, OneCard[i].Number); if(12 == i%13){ printf("\n"); } } printf("\n"); } // 随机乱序 void shuffle(){ int i; Card tmpCard; srand(time(NULL)); for(i=0; i<54; i++){ int tmp = rand()%54; tmpCard = OneCard[tmp]; OneCard[tmp] = OneCard[i]; OneCard[i] = tmpCard; } showCard(); return; } // 初始化,顺序 void initCard(){ int i; for(i=0; i<54; i++){ OneCard[i].Order = i; if(i>=52){ if(52 == i){ OneCard[i].Suit = 'g'; OneCard[i].Number = 'g'; }else{ OneCard[i].Suit = 'G'; OneCard[i].Number = 'G'; } }else{ if(i<=12){ OneCard[i].Suit = 'H'; // heart }else if(i<=25){ OneCard[i].Suit = 'S'; // space }else if(i<=38){ OneCard[i].Suit = 'D'; // diamond }else{ OneCard[i].Suit = 'C'; // club } switch(i%13){ case 0: OneCard[i].Number = 'A'; break; case 9: OneCard[i].Number = '@'; break; case 10: OneCard[i].Number = 'J'; break; case 11: OneCard[i].Number = 'Q'; break; case 12: OneCard[i].Number = 'K'; break; default: OneCard[i].Number = (i%13)+'1'; } } } showCard(); return; } int main(void){ printf("init card:\n"); initCard(); printf("\nafter shuffle1 cards: \n"); shuffle(); printf("\nafter shuffle2 cards: \n"); shuffle(); return 0; }
运行结果:
三、JavaScript实现效果图:
1、初始页面 和 clear 后:
2、初始化扑克牌:
3、洗扑克牌后:
四、JS代码和54张扑克牌下载地址:
http://download.csdn.net/detail/tmt123421/9535703 → 点击打开链接
相关文章推荐
- 排序算法
- java学习的第一课
- 迭代器辅助函数
- Kinect深度图像采集和Opencv差帧法运动目标检测
- 最简单Ajax文件异步上传
- 开博第一天~ 开心
- 总结.
- a+b problem 2
- 第7课:Spark Streaming源码解读之JobScheduler内幕实现和深度思考
- 一往无前,请记住最初的梦想。
- 如何使自己高效工作
- 基于Ubuntu14.04+ROS indigo环境LSD-SLAM的数据集测试成功
- Android Studio 配置SVN:can't use subversion command line client
- maven搭建ssm分模块框架+ehcache (myeclipse版) (五)
- RxJava Subscription 自动取消订阅
- Hawk:开源贡献计划,设计,反思
- 总结
- 技术分享-开发利器block底层实现
- ASCII、Unicode、GBK和UTF-8字符编码
- git bash 修改默认路径