C语言实现洗牌发牌小程序

本文实例为大家分享了C语言实现洗牌发牌小程序的具体代码,供大家参考,具体内容如下

构建一副扑克牌,并实现洗牌发牌。

代码

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define NUM 10000 //洗牌混乱度

char color[7][7] = {"空白","红桃","黑桃","草花","方片","小王","大王"}; // 1:红桃 2:黑桃 3:草花 4:方片 5:小王 6:大王
char number[]={"0A234567890JQK"}; // 0:不存内容 1:A 2:2 3:3 4:4 5:5 6:6 7:7 8:8 9:9 10:10 11:J 12:Q 13:K

//构建扑克
struct card{
  unsigned int number;
  unsigned int color;
};

unsigned int NUM_card=53; //剩余未发的牌数(发牌时用的变量)

struct card card[54]; //创建保存一副牌的结构体

//构建一副牌(有序)
void creat_pair_card()
{
  int num=1;
  int col=1;
  int i=0;
  for(num=1;num<=15;num++)
  {
    //生成大小王
    if(num>=14)
    {
      card[i].number=num;
      card[i].color=col++;
      i++;
    }
    else
    {
      //生成普通牌
      for(col=1;col<=4;col++)
      {
        card[i].number=num;
        card[i].color=col;
        i++;
      }
    }
  }
}

//显示一副牌
void print_card()
{
  int i;
  int num,col; //点数与花色对应数组下标
  for(i=0;i<54;i++)
  {
    col=card[i].color;
    num=card[i].number;
    if(col>=5)
    {
      printf("%s\t",color[col]);
    }
    else
    {
      if(num==10)
      {
        printf("%s:",color[col]);
        printf("10\t");
      }
      else
      {
        printf("%s:",color[col]);
        printf("%c\t",number[num]);
      }
    }
  }
  printf("\n");
}

//洗牌
void wash_card()
{
  int i;
  int ch1,ch2;
  srand((unsigned)time(NULL));
  for(i=0;i<NUM;i++) //循环次数越大越乱
  {

    ch1=rand()%100; //2147483647 取最后两位0-99
    ch2=rand()%100;

    if(ch1>53)
    {
      ch1=100-ch1; //随机数大于53则减小
    }

    if(ch2>53)
    {
      ch2=100-ch2;
    }

    if(ch1 == ch2)
    {
      continue;
    }
    //两个随机牌交换
    struct card tmp=card[ch1];
    card[ch1]=card[ch2];
    card[ch2]=tmp;
  }
}

//发牌
void send_card(struct card hand[],int num)
{
  if(NUM_card<num)
  {
    printf("数量不足\n");
    return;
  }
  int i;
  for(i=0;i<num;i++)
  {
    hand[i]=card[NUM_card-i];
  }
  NUM_card=NUM_card-num;
}

//显示手牌
void print_hand_card(struct card hand[],int num)
{
  int i;
  int point,col;
  for(i=0;i<num;i++)
  {
    col=hand[i].color;
    point=hand[i].number;
    if(col>=5)
    {
      printf("%s ",color[col]);
    }
    else
    {
      if(point==10)
      {
        printf("%s:",color[col]);
        printf("10 ");
      }
      else
      {
        printf("%s:",color[col]);
        printf("%c ",number[point]);
      }
    }
  }
  printf("\n");
}

int main(void)
{

  creat_pair_card(); //创建一副牌 有序
  wash_card();//洗牌
  print_card();//打印

  struct card hand1[17]; //创建两个结构体保存手牌17张
  struct card hand2[17];
  send_card(hand1,17); //发牌
  send_card(hand2,17);
  printf("手牌A: ");
  print_hand_card(hand1,17);
  printf("\n");
  printf("手牌B: ");
  print_hand_card(hand2,17);
  printf("\n");
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现简易扑克牌游戏

    将一副扑克牌平均分成两份,每人拿一份.a先拿出手中的第一张扑克牌放在桌上,然后b也拿出手中的第一张扑克牌,并放在a刚打出的扑克牌的上面,就像这样两人交替出牌.出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾.当任意一人手中的牌全部出完时,游戏结束,对手获胜. 以下是代码的实现: #define _crt_secure_no_deprecate #include<stdio.h> #include<stdlib.h>

  • 使用C语言求解扑克牌的顺子及n个骰子的点数问题

    扑克牌的顺子     问题描述:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字.          思路:可以将这5张牌排个序,然后统计出0的个数以及非0数字之间的间隔数,如果出现重复的非0数字,那么不是顺子.如果间隔数小于等于0的个数,那么是顺子.暂时未想到更好的办法.          参考代码: //函数功能 : 从扑克牌中随机抽5张牌,判断是不是一个顺子 //函数参数 : pCards

  • C语言实现自动发牌程序

    C语言自动发牌程序,供大家参考,具体内容如下 一副扑克有52张牌,打桥牌时应将牌分给4个人.请设计一个程序完成自动发牌的工作.要求:黑桃用S (Spaces)表示,红桃用H (Hearts)表示,方块用D (Diamonds)表示,梅花用C (Clubs)表示. 分析: 要设置数组表现扑克牌 要设置数组表现玩家 要给扑克牌做特定标识,得到结果后玩家要知道自己手中黑桃有哪些.方块有哪些 初步想法: 设置4个字符数组保存4种梅花牌,设置4个字符数组表示4名玩家分配到的牌 每张牌随机发给4名玩家,当玩

  • C语言实现随机发牌

    本文实例为大家分享了C语言实现随机发牌的具体代码,供大家参考,具体内容如下 #include "stdafx.h" #include<time.h> #include<stdlib.h> int card[54];//保存每张牌的数字符号 bool flag[54];//标记数组 false 代表这个单元编号的牌没抽过 void show1(); void mix1(); int main() { srand(time(NULL)); mix1(); show1

  • C语言实现扑克牌计算24点

    题目描述: 一副扑克牌的每张牌表示一个数(J.Q.K分别表示11.12.13,两个司令都表示6).任取4张牌,即得到4个1~13的数,请添加运算符(规定为加+ 减- 乘* 除/ 四种)使之成为一个运算式.每个数只能参与一次运算,4个数顺序可以任意组合,4个运算符任意取3个且可以重复取.运算遵从一定优先级别,可加括号控制,最终使运算结果为24.请输出一种解决方案的表达式,用括号表示运算优先.如果没有一种解决方案,则输出-1表示无解. 输入格式说明: 输入在一行中给出4个整数,每个整数取值在[1,

  • C语言编写洗牌发牌程序

    用C语言编写洗牌发牌程序,供大家参考,具体内容如下 题目 现在只有一套扑克牌中52张副牌(无大王小王),包含了4种花色的牌 现在打乱顺序后分给甲乙丙丁四人 全部分配完毕后,输出甲乙丙丁四人所获得的扑克大小及花色 再经过排序,将甲乙丙丁四人的牌按由大到小顺序输出到屏幕上 要素提取 略 补充 牌面上的数字/字母由小到大为: 3 4 5 6 7 8 9 10 J Q K A 2 牌面上的花色由小到大为: 方块 梅花 红桃 黑桃 思路 略 可能出现的问题 略 代码 #include<stdio.h>

  • C语言实现洗牌发牌小程序

    本文实例为大家分享了C语言实现洗牌发牌小程序的具体代码,供大家参考,具体内容如下 构建一副扑克牌,并实现洗牌发牌. 代码 #include <stdio.h> #include <time.h> #include <stdlib.h> #define NUM 10000 //洗牌混乱度 char color[7][7] = {"空白","红桃","黑桃","草花","方片"

  • python小程序之4名牌手洗牌发牌问题解析

    本文为大家解析了python实现4名牌手洗牌发牌的问题,供大家参考,具体内容如下 编写程序, 4名牌手打牌,计算机随机将52张牌(不含大小鬼)发给4名牌手,在屏幕上显示每位牌手的牌.创建函数gen_pocker()交换牌的顺序,函数getColor()获取牌的花色,函数getValue()获取牌的牌面大小,函数getPuk()获取花色和牌面大小的组合 运行效果 [51, 45, 31, 4, 48, 26, 11, 2, 24, 44, 22, 21, 16, 41, 50, 47, 13, 2

  • C语言实现洗牌与发牌游戏

    本文实例为大家分享了C语言实现洗牌与发牌游戏的具体代码,供大家参考,具体内容如下 普通版 #include<stdio.h> #include<stdlib.h> #include<time.h> #define SUITS 4 #define FACES 13 #define CARDS 52 void shuffle(int wDeck[][FACES]); void send(int wDeck[][FACES], const char* wSuit[], con

  • Java超详细教你写一个斗地主洗牌发牌系统

    目录 一.斗地主 1.前言 2.介绍 3.图解 二.准备牌 1.代码示例 2.数据展示 三.洗发牌与排序 代码示例 四.看牌(打印到控制台) 1.代码示例 2.展示 六.总结 一.斗地主 1.前言 相信每位看过<赌神>的同学都知道,里面有一种神奇的类似于魔术的力量. 没错!我们今天要说的这个神奇的东西就是:特异功能(不是) 就是:斗地主的洗牌发牌系统!!! 2.介绍 扑克牌经典游戏"斗地主"相信很多人都会玩,这次就用Java语言来编写一个斗地主的洗牌发牌程序,要求按照斗地主

  • java实现发牌小程序

    本文实例为大家分享了java实现发牌小程序的具体代码,供大家参考,具体内容如下 关键字:掌握Java数组.方法的基本定义 内容要求: 编写程序,项目名和类名均为PokerGame. 实现功能: (1) 共有m幅扑克牌,每幅扑克牌不包括大王和小王共52张牌. (2) 可能有n个人参与扑克游戏,2<=n<=52. (3) 程序运行时输入扑克牌幅数m和人数n,然后所有牌分别依次分发给n个人.不能整除时,每个人的牌数可以不同,如3个人1幅牌,则第1个人18张,第2个和第3个人17张牌. (4) 发牌完

  • Java实现洗牌发牌的方法

    本文实例讲述了Java实现洗牌发牌的方法.分享给大家供大家参考.具体如下: import java.util.*; public class Main { /** * @param args the command line arguments */ static int numbersOfPlayers = 4; static int numbersOfHandCard = 13; public static void main(String[] args) { // TODO code ap

  • C++扑克牌的洗牌发牌游戏设计

    笔者在大学二年级期间,做过的一次C++程序设计:扑克牌的洗牌发牌游戏.具体内容是:除去大王和小王,将52张扑克牌洗牌,并发出5张牌.然后判断这5张牌中有几张相同大小的牌,是否是一条链,有几个同花等. 笔者在学习他人设计的基础上,完成了自己的程序设计.这里将源程序分享给大家. [1] 文件"card.h" #ifndef CARD_H #define CARD_H #include<string> using namespace std; class Card { publi

  • java模拟实现斗地主发牌小程序

    一副扑克有54张牌:大小王+4*13,接下来我们来模拟一下斗地主的发牌过程 首先,我们需要买牌,新买来的牌都是按顺序摆放的,因此下一步是洗牌,最后就是发牌了,不过发牌的时候要注意还要在最后留三张底牌. 主要使用的类有 ArrayList:用来存储扑克,Collections用来洗牌. import java.util.ArrayList; import java.util.Collections; /* * 模拟斗地主发牌 一共54张牌 * 买牌 * 洗牌 * 发牌 * */ public cl

  • Java实现斗地主之洗牌发牌

    本文通过实例为大家分享了Java实现斗地主之洗牌发牌的具体代码,供大家参考,具体内容如下 案例分析 需求: 实现斗地主过程中的洗牌,发牌和看牌. 并且确保每一位玩家手上拿到的牌是随机并且按照大小排序好的 思路 1.创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现 2.往牌盒里面装牌 3.洗牌,也就是把牌打散,用Collections的shuffle()方法实现 4.发牌,也就是遍历结合,给三个玩家发牌 5.看牌,也就是三个玩家分别遍历自己的牌 代码实现 1.创建牌盒,存放所有牌

随机推荐