文档章节

问题求解模拟发牌2

zengxiangwei
 zengxiangwei
发布于 2013/10/21 19:30
字数 706
阅读 94
收藏 0
点赞 0
评论 0

/***********************************************************************

2. 随机发牌:去掉大小王,发给4个人,每人发13张,要求分四行,并按花色

和牌点排序。样例:SAK9  HKT9876  DQ32  CJ。

分析:

首先创建一个结构体来表示牌,包括花色和面值,共52张牌,用一个结构体数

组表示即可。填充花色时,采用依次填充一种花色,当前花色填充完毕,换成

下一钟花色。洗牌采用将每一个位置的牌随机同另外的牌交换一次来以到达洗

牌的目的。在排序时要特别注意,由于面值和花色都不是规则的,既其大小不

是顺序的。我们将转换为相应的有序数值进行比较,2——A装换为2——14;花色依

次转换为20——23,转换之后可以很简单就比较其大小。

*************************************************************************/

 

/*******************************************************************************
Copyright (c)哈尔滨工程大学  曾相未  保留所有权利。

文件名: main.cpp

描述: 问题求解模拟发牌
作者: 曾相未
时间:2013/10/3

*******************************************************************************/

#include <stdio.h> 

#include <stdlib.h> 

#include <time.h> 


struct card { 

         char suit;//花色 

         char face;//面值 

};//牌的结构体 


typedef struct card Card;//结构体重命名 


//将面值及花色转换为相应的数值便于排序 

int facetonum(char  a) 

{ 

    //花色的转换 

    if(a == '\006') return 23;//黑桃 

    if(a == '\003') return 22;//红桃 

    if(a == '\004') return 21;//方块 

    if(a == '\005') return 20;//梅花 

    //面值的转换 

    if(a == 'A')  return 14; 

    if(a == 'T')  return 10; 

    if(a == 'J')  return 11; 

    if(a == 'Q')  return 12; 

    if(a == 'K')  return 13; 

    return a - '0'; 

} 


//比较牌大小的函数 

int compare(const void *elem1,const void *elem2) 

{ 

    Card * elem1t = (Card*) elem1; 

    Card * elem2t = (Card*) elem2; 

    //先从花色判断大小 

    if(facetonum(elem1t->suit) > facetonum(elem2t->suit)) return  -1; 

    if(facetonum(elem1t->suit) < facetonum(elem2t->suit) ) return 1; 

    //花色相同由面值决定大小 

    return  facetonum(elem1t->face) > facetonum(elem2t->face) ?  -1:1; 

} 

//填充面值及花色 

void fillDeck(Card *wDeck, char wFace[], char wSuit[]) 

{ 

         int i; 

         for (i=0; i<52; i++) 

         {        wDeck[i].face = wFace[i%13];//面值13张轮换一次 

                   wDeck[i].suit = wSuit[i/13];//每种花色是13张 

         } 

} 

//洗牌 

void shuffle(Card *wDeck) 

{        int i, j; 

         Card temp;//用于交换的中间牌 

         srand(time(NULL)); 

         for (i=0; i<52; i++) 

         {        j = rand()%52;//产生0 - 51的随机数 

        //将当前牌与j位置的牌交换 

                   temp.suit = wDeck[i].suit; 

                   temp.face = wDeck[i].face; 

                   wDeck[i].suit = wDeck[j].suit; 

                   wDeck[i].face = wDeck[j].face; 

                   wDeck[j].suit = temp.suit; 

                   wDeck[j].face = temp.face; 

         } 

} 

//发牌 

void deal (Card *wDeck) 

{        int i; 

         printf("\n\n"); 

         for (i=0; i<52; i++) 

                   printf("%c%c%c", wDeck[i].suit, wDeck[i].face, 

                                               (i+1)%13==0 ? '\n' : ' ');//13牌为一组 

} 

int  main() 

{ 

    Card deck[52]; 

    //面值数组 

         char face[] = {'A', 'K', 'Q', 'J', 'T', '9', '8', '7', '6', '5', '4', '3', '2'}; 

    //花色数组 

         char suit[] = {'\006', '\003', '\004', '\005'}; 


         fillDeck(deck, face, suit); 

         shuffle(deck); 

         //对每一手牌进行排序 

         qsort(deck,13,sizeof(deck[0]),compare); 

         qsort(deck+13,13,sizeof(deck[0]),compare); 

         qsort(deck+26,13,sizeof(deck[0]),compare); 

         qsort(deck+39,13,sizeof(deck[0]),compare); 

         deal(deck); 

         return 0; 

}

© 著作权归作者所有

共有 人打赏支持
zengxiangwei
粉丝 8
博文 14
码字总数 18050
作品 0
郑州
程序员
day18-----------集合框架(map集合)(传智视频)

Map集合的获取功能测试 package cn.itcast_01; import java.util.HashMap;import java.util.Map; /* * 作为学生来说,是根据学号来区分不同的学生的,那么假设我现在已经知道了学生的学号,我...

萧小蚁
2016/02/16
122
0
请教:游戏界面的更新是用GET方式还是SET方式

第一次发贴,谢谢大家捧场哦....本人从事游戏开发也有一定的时间了,但是以前是做J2ME开发了,去年转到了Android开发.所以过于Android开发来说呢,还是个新手啦,呵呵... 最近呢,自己在做游戏的时...

Hxuejie
2013/11/13
188
0
h5牛牛源码出售你的斗地主能拿多少炸?

最近无聊,想知道一下玩斗地主的话我能有多大的概率拿到炸弹(4张同点数牌 或 集齐大小王)。但是我概率学学得不好,于是想到用统计学来试试,随手写了一个程序模拟一下斗地主的发牌过程 面向...

sinat_41780517
03/02
0
0
使用Poker.js在html页面上绘制扑克牌

今天研究了下Poker.js,Poker.js是通过扩展HTML5 Canvas实现的画扑克牌的JS库。 Poker.js下载地址:https://github.com/Tairraos/Poker.JS 如要使用Poker.js,从github下载代码后,直接引用r...

北风其凉
2016/08/26
110
0
量子十问之七:量子模拟到底是啥?

随着计算机技术的发展,人类利用计算机来模拟现实世界的能力越来越强大:现在飞机和汽车性能的测试、核试验,都可以在超级计算机的赛博空间中进行;甚至,当前热门的人工智能研究,也可以看成...

雪花又一年
05/03
0
0
最近很火的一个微信H5牛牛的源码的一个BUG修复

最新版修复所有bug出租牛牛房卡h5.fanshubbs.com需要牛牛源码的联系Q1687054422这套程序一流出,就马上烂大街了,很火也很多问题。 BUG说明:当后台设定某个玩家的控制赢率后。10局20局的就没...

H5房卡棋牌
01/02
0
0
关于C语言中的随机数及扑克游戏发牌随机算法的一点疑惑

我仅仅是一个C语言爱好者,虽然爱好了好几年,但是一些简单的代码写起来很费劲,读仅仅几十行的代码还勉强可以。 我在读C语言学习参考书的时候,看到作者的实际例子,一个二十一点游戏,我很...

逍遥书生
2012/11/14
2.2K
5
图像素描风格生成

前言 论文链接:Combining Sketch and Tone for Pencil Drawing Production Matlab版本的代码,目前找到有两个: 1、https://github.com/fumin/pencil 2、https://github.com/candycat1992/P......

Ldpe2G
2016/05/19
530
1
ubuntu中无法创建和调试安卓应用的问题

目前本人电脑安装的是ubuntu 16.04 是从14.04升级而来。 目前遇到问题如下: 1)使用Eclipse 创建Android应用,发现无法自动创建MainActivity,同时项目下面也没有包。不能运行,不能模拟安卓...

诸葛非卿
2016/09/18
110
1
简短—揭开数学学科对于计算机应用的神秘面纱

我想先用第一段话,以我亲身的经验,告诉大家,各种高大上的数学工具(最优化,进化算法,机器学习,深度学习,神经网络……)其实并不难。随着知识的积累,逐渐的深入,就会发现其实这些东西...

刘小米
2016/06/14
75
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ecstore 在没有后台管理界面(维护)的情况如何更新表的字段

window 系统: 切换到:app\base 目录下: C:\Users\qimh>d: D:\>cd D:\WWW\huaqh\app\base 执行:D:\WWW\huaqh\app\base>cmd update linux 系统: 1># cd /alidata/www.novoeshop.com/app/......

qimh
7分钟前
0
0
设计模式-策略模式

策略模式 解释 对工厂模式的再次封装,使用参数控制上下文信息(将工厂返回的实例赋值给context field) 不会返回bean实例,只是设置对应的条件 调用context的方法(调用field的方法) 用户只...

郭里奥
10分钟前
0
0
python使用有序字典

python自带的collections包中有很多有用的数据结构可供使用,其中有个叫OrderedDict类,它可以在使用的时候记录元素插入顺序,在遍历使用的时候就可以按照原顺序遍历。 a = {"a":1,"b"...

芝麻糖人
40分钟前
0
0
RestTemplate HttpMessageConverter

RestTemplate 微信接口 text/plain HttpMessageConverter

微小宝
40分钟前
0
0
mysql视图/存储过程/函数/事件/触发器

--语法参考:https://dev.mysql.com/doc/ (当前用的是5.6) https://dev.mysql.com/doc/refman/5.6/en/sql-syntax-data-manipulation.html --视图 CREATE VIEW test.v AS SELECT * FROM t;......

坦途abc
42分钟前
0
0
MySQL参数优化案例

环境介绍 硬件配置 cpu核心数 内存大小 磁盘空间 16核 256G 3T 软件环境 操作系统版本 mysql版本 表数目 单表行数 centos-7.4 mysql-5.7.22 128张表 2kw行 优化层级与指导思想 优化层级 MySQ...

小致dad
51分钟前
0
0
【HAVENT原创】NodeJS 短网址开发(调用第三方接口)

最近想弄个短网址的示例站点,在网上搜集了一些代码,都需要数据库支持,所以只能自己写个简单的不需要数据库支持的(PS:那就只能借调第三方的接口了)。 index.js 启动文件 'use strict';...

HAVENT
52分钟前
0
0
219. Contains Duplicate II - LeetCode

Question 219. Contains Duplicate II Solution 题目大意:数组中两个相同元素的坐标之差小于给定的k,返回true,否则返回false 思路:用一个map记录每个数的坐标,如果数相同,如果坐标差小...

yysue
今天
0
0
Android 自动生成java bean

背景: 想搞一个自动生成java bean 的方案。 首先想到的是注解自动生成代码的方法。但是看了看注解相关的东西,发现对已有的类,增加方法,目前没有找到办法。 继续goole :发现了这里。 ht...

Carlyle_Lee
今天
0
0
图片加载相关

本文记载有关于 图片懒加载、图片模糊加载等与图片加载相关的知识,后续会更新 图片懒加载 利用img标签src属性,在该图片快到达客户可视范围时,给img添加src属性(添加后,会发起请求下载图...

littleFaye
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部