网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月20日漏签0天
c语言吧 关注:798,837贴子:4,357,417
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1回复贴,共1页
<<返回c语言吧
>0< 加载中...

看了20天的新手写的斗地主洗牌发牌程序,求执行,没界面

  • 取消只看楼主
  • 收藏

  • 回复
  • dstling
  • 强能力者
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
extern int rand1(void);
extern void srand1(int);
extern void End();
extern void xipai(int *p); //洗牌程序
extern void sjsz(int *p,int n); //产生一组n的随即数组,并存储在p【n】数组中
extern void paixu(int *p,int n);
extern char pipei(int num);
static unsigned int next=1;
#define PAI 54
#define REN 3
char pipei(int num)
{
char paidian;
switch(num)
{
case(1):paidian='A';break;
case(2):paidian='A';break;
case(3):paidian='A';break;
case(4):paidian='A';break;
case(5):paidian='2';break;
case(6):paidian='2';break;
case(7):paidian='2';break;
case(8):paidian='2';break;
case(9):paidian='3';break;
case(10):paidian='3';break;
case(11):paidian='3';break;
case(12):paidian='3';break;
case(13):paidian='4';break;
case(14):paidian='4';break;
case(15):paidian='4';break;
case(16):paidian='4';break;
case(17):paidian='5';break;
case(18):paidian='5';break;
case(19):paidian='5';break;
case(20):paidian='5';break;
case(21):paidian='6';break;
case(22):paidian='6';break;
case(23):paidian='6';break;
case(24):paidian='6';break;
case(25):paidian='7';break;
case(26):paidian='7';break;
case(27):paidian='7';break;
case(28):paidian='7';break;
case(29):paidian='8';break;
case(30):paidian='8';break;
case(31):paidian='8';break;
case(32):paidian='8';break;
case(33):paidian='9';break;
case(34):paidian='9';break;
case(35):paidian='9';break;
case(36):paidian='9';break;
case(37):paidian='0';break;
case(38):paidian='0';break;
case(39):paidian='0';break;
case(40):paidian='0';break;
case(41):paidian='J';break;
case(42):paidian='J';break;
case(43):paidian='J';break;
case(44):paidian='J';break;
case(45):paidian='Q';break;
case(46):paidian='Q';break;
case(47):paidian='Q';break;
case(48):paidian='Q';break;
case(49):paidian='K';break;
case(50):paidian='K';break;
case(51):paidian='K';break;
case(52):paidian='K';break;
case(53):paidian='X';break;
case(54):paidian='X';break;
}
return paidian;
} int rand1(void)
{
next=next*1103515245+123456;
return (unsigned int)(next/65536)%32768;
}
void srand1(int seed)
{
next=seed;
} void End(void)
{
fflush(stdin);
printf("\nThis is End!\n");
getchar();
} void xipai(int *p) //洗牌程序
{
int * sui,temp;
int i,j,k,l;
sui=(int *)calloc(100,sizeof(int)); //申请存放随机数的空间
sjsz(sui,100); //产生n个随机数,并放在数组sui中。
for(i=0;i<98;i++) //根据随机数产生的数组下标交换1000次;
{
temp=p[(sui[i])%PAI];
p[(sui[i])%PAI]=p[(sui[i+1])%PAI];
p[(sui[i+1])%PAI]=temp;
}
free(sui);
} void sjsz(int *p,int n) //产生一组n的随机数组,并存储在p【n】数组中,用于洗牌用
{
int i;
srand1((unsigned int)time(0));
for(i=0;i<n;i++)
{
p[i]=rand1();
}
} void paixu(int *p,int n)
{
int i,j,temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(p[i]>p[j])
{
temp=p[i];p[i]=p[j];p[j]=temp;
}
}
}
} int main(void)
{
int i,j,k;
int * p=(int *)calloc(PAI,sizeof(int)); //请求54张牌的存储空间;
int * abc[REN]; //根据玩家数目请求存放玩家牌的指针数组
for(i=0;i<PAI;i++)
p[i]=i+1; //初始化牌数组内的牌点数,即对应数组下标
xipai(p);
for(i=0;i<REN;i++) //为每个玩家牌的地址赋值指针;
abc[i]=p+PAI/REN*i;
for(j=0;j<REN;j++) //输出每个玩家手里的牌
{
printf("\nabc[%d]:\n",j);
paixu(abc[j],PAI/REN);
for(k=0;k<PAI/REN;k++)
{
printf("%c ",pipei(abc[j][k]));
}
} free(p) ;
End();
}


  • dstling
  • 强能力者
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
简单写下洗牌的思路
先将1到54的数组初始化
然后随机一个数组,用于洗牌交换用
通过数组求模,然后将两两交换数值
由于是随机的都的数组,所以交换的时候是随机的,也就是1到54之间的值是随便交换的
然后取交换后数组的值分配给三个的地址数组
思路真是我个人想出来的 不是google出来的
本人看到cpp12章


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1回复贴,共1页
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示