当前位置:首页 » 编程语言 » 纸牌怎么用c语言画出来
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

纸牌怎么用c语言画出来

发布时间: 2023-05-02 10:15:05

‘壹’ 如何用c语言编德州扑克

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

const char ranks[]= {'A','2','3','4','5','6','7','8','9','T','J','Q','K'};
const char suits[]= {'C','D','H','S'};
int num[7]= {0,1,2,3,4,5,6};
int in_hand[4][13]= {0}; /*防止发到重覆的牌*/
int repeat[13]= {0}; /*存数字重复的数量*/
int cnt=0,cnt2=1;
int max=0; /*存最佳牌型的值*/

typedef struct Sort_ /*分开存每张牌的帆培花色及数字*/
{
char suit;
int rank;
} Sort;

Sort rec_cards[52]; /*出现过的牌*/
Sort p_cards[2]; /*玩家手牌*/
Sort r_cards[2]; /*电脑手牌*/
Sort s_cards[5]; /*公牌*/
Sort c_cards[7]; /*手牌+公牌*/
Sort m_cards[5]; /*c_cards 7取5 出来的阵列*/
Sort n_cards[5]; /*存最佳牌型*/态肢唯
Sort t_cards[5]; /*暂存牌型*/

int compare(const Sort *a,const Sort *b) /*qsort比较函式*/
{
...
}

void combine_sort(Sort a[],Sort b[],int len_a,int len_b) /饥敬*合并手牌与公牌*/
{
int i;
for(i=0; i<len_a; i++)
c_cards[i]=a[i];

for(i=0; i<len_b; i++)
c_cards[i+len_a]=b[i];

qsort(c_cards,len_a+len_b,sizeof(Sort),compare);
}

bool straight(Sort data[]) /*判断顺子*/
{
int i,j,flag=0;
for(i=0; i<4; i++)
{
if(data[i].rank+1==data[i+1].rank)
{
flag++;
if(flag==3 && data[flag+1].rank==0 || flag==4)
return true;
}
else
return false;
}
}

int find_type(Sort data[]) /*判断牌型*/
{
int i,j,flag=0;
int repeat[13]= {0};
for(i=0; i<5; i++) /*纪录每个数字出现了几次*/
repeat[data[i].rank]++;

for(i=0; i<5; i++) /*同花顺*/
{
if (data[0].suit==data[i].suit)
{
if (i==4)
if (straight(data)==true)
return 9;
}
else break;
}

for(i=0; i<13; i++) /*四条*/
{
if(repeat[i]==4)
return 8;
}

for(i=0; i<13; i++) /*葫芦*/
{
if (repeat[i]==3)
for(j=0; j<13; j++)
{
if(repeat[j]==2)
return 7;
}
}

for(i=0; i<5; i++) /*同花*/
{
if (data[0].suit==data[i].suit)
{
if (i==4)
return 6;
}
else
break;
}

if(straight(data)==true) /*顺子*/
return 5;

for(i=0; i<13; i++) /*三条*/
{
if (repeat[i]==3)
for(j=0; j<5; j++)
{
if(repeat[j]==1)
return 4;
}
}

flag=0;
for(i=0; i<13; i++) /*两对*/
if (repeat[i]==2)
{
flag++;
if(flag==2)
return 3;
}

flag=0;
for(i=0; i<13; i++) /*一对*/
if (repeat[i]==2)
{
flag++;
if(flag==1)
return 2;
}

return 1; /*高牌*/
}

int combination(int data[],int after, int got) /* 找出手牌+公牌取5张的所有组合 */
{
int i;
if (5==got)
{
for (i=0; i<5; i++)
m_cards[i]=c_cards[data[i]];

int tmp=find_type(m_cards); /*每种组合丢入find_type找出是哪种牌型*/
if (tmp==max)
{
if (m_cards[4].rank>t_cards[4].rank)
{
if(m_cards[4].suit>t_cards[4].suit)
for (i=0; i<5; i++)
n_cards[i]=m_cards[i];
for (i=0; i<5; i++)
n_cards[i]=m_cards[i];
}

else
for (i=0; i<5; i++)
n_cards[i]=t_cards[i];
}

if (tmp>max)
{
max=tmp;
for (i = 0; i < 5; i++)
n_cards[i]=m_cards[i];
}
return;
}

for (i=after; i<7; i++)
{
int tmp=data[got];
data[got]=data[i];
data[i]=tmp;
combination(data,i + 1,got+1);
tmp=data[got];
data[got]=data[i];
data[i]=tmp;
}
}

int reset() /*重置max*/
{
max=0;
combination(num,0,0);
return max;
}

void num_to_type(int n) /*印出牌型名称*/
{
...
}

void save_cards(Sort a[],int len) /*把发的牌分别存起来*/
{
int i;
if (len==2 && cnt2%3==1)
for(i=0; i<2; i++)
p_cards[i]=a[i];

if (len==2 && cnt2%3==2)
for(i=0; i<2; i++)
r_cards[i]=a[i];

if (len==5)
for(i=0; i<5; i++)
s_cards[i]=a[i];
cnt2++;
}

void deal_cards(int n) /*发牌*/
{
int i,rank,suit;
Sort data[n];

for(i=0; i<n;)
{
suit=rand() % 4;
rank=rand() % 13;
if(in_hand[suit][rank]==0)
{
in_hand[suit][rank]=1;
printf("%c%c ",ranks[rank],suits[suit]);
data[i].suit=suits[suit];
data[i].rank=rank;
rec_cards[cnt].suit=suits[suit];
rec_cards[cnt].rank=rank;
i++;
cnt++;
}
}
save_cards(data,n);
qsort(rec_cards,cnt,sizeof(Sort),compare);
printf("\n\n");
}

void welcome() /*欢迎接口*/
{
...
}

int main()
{
srand((unsigned)time(NULL));
int i,round=0,p_tmp,r_tmp,p_win=0,r_win=0;
printf("是否开始游戏?(Y/N):");
welcome();

while(round++<5)
{
printf("\n");
printf("你的牌:\n");
deal_cards(2);
printf("电脑的牌:\n");
deal_cards(2);
printf("公牌:\n");
deal_cards(5);

printf("按任意键显示胜负\n\n");
getch();

combine_sort(p_cards,s_cards,2,5);
printf("你的牌与公牌:");
for(i=0; i<7; i++)
printf("%c%c ",ranks[c_cards[i].rank],c_cards[i].suit);
printf("\n");

p_tmp=reset();
printf("最佳组合:");
for(i=0; i<5; i++)
printf("%c%c ",ranks[n_cards[i].rank],n_cards[i].suit);
num_to_type(p_tmp);

combine_sort(r_cards,s_cards,2,5);
printf("\n\n电脑的牌与公牌:");
for(i=0; i<7; i++)
printf("%c%c ",ranks[c_cards[i].rank],c_cards[i].suit);
printf("\n");

r_tmp=reset();
printf("最佳组合:");
for(i=0; i<5; i++)
printf("%c%c ",ranks[n_cards[i].rank],n_cards[i].suit);
num_to_type(r_tmp);

if (p_tmp>r_tmp)
{
printf("\n你赢了!\n");
p_win++;
}
else if(p_tmp<r_tmp)
{
printf("\n你输了!\n");
r_win++;
}
else
printf("\n平手!\n");

printf("\n目前比数(你:电脑) %d:%d\n",p_win,r_win);

printf("\n已出现的纸牌:");
for(i=0; i<cnt; i++)
printf("%c%c ",ranks[rec_cards[i].rank],rec_cards[i].suit);
printf("张数:%d\n",cnt);

printf("\n按任意键进行下一局\n");
getch();
}
printf("\n游戏结束!\n\n最终比数(你:电脑) %d:%d",p_win,r_win);
}

‘贰’ C语言设计憋七纸牌游戏

/* 纸牌模拟程序 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
struct card
{ char suit[2];
char face[3];
};
typedef struct card CARD;
void initcard(CARD deck[],char s[][2],char f[][3]);
void shuffle(CARD deck[]);
void print(CARD deck[]);

int main()
{ CARD deck[52];
char s[4][2]={"\003","\004","\005","\006"};
char f[13][3]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
initcard(deck,s,f);
srand(time(NULL));
shuffle(deck);
print(deck);
system("pause");
return 0;
}

void initcard(CARD deck[],char s[][2],char f[][3])
{ int i;
for(i=0;i<52;i++)
{ strcpy(deck[i].suit,s[i/13]);
strcpy(deck[i].face,f[i%13]);
}
}
void shuffle(CARD deck[])
{ int i,j;
CARD temp;
for(i=0;i<52;i++)
{ j=rand()%52;
if(j!=i)
{ temp=deck[i];
deck[i]=deck[j];
deck[j]=temp;
}
}
}
void print(CARD deck[])
{ int i;
for(i=0;i<52;i++)
{ printf("%2s--%2s",deck[i].suit,deck[i].face);
printf("%c",(i+1)%4? '\t' : '\n');
}
}

‘叁’ c语言扑克牌

  1. 定义个字符数组,存放A-K牌面的字母 char ch[][3]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};

  2. 牌的大小从A-K分别为 0-12

  3. 在输出牌的牌面字符时,输出ch数据中牌面值下标的字符串。如某牌数值是9,输出时如下:

    printf("%s", ch[9]);

  4. “%d\%c”是格式输出字符串,表示要输出一个整数(%d)一个字符(%c) ,后面的两个参数分别是整数,字符,和格式化字符串相对应。是转义符,对于要输出特殊字符时,需要在前面加上,比如输出时,就写成\;再如 " ,应写成";输出换行写成 ,输出回车写成 等。在这个题目中,和后面的%构不成特殊字符转义,所以不输出,删掉它也是一样的。

‘肆’ 大学初学c语言,作业,c程序编写出扑克牌黑桃A的图案

#include<stdio.h>
int main()

{
printf("%c\n",6);

return 0;
}
把ASCII码对应的字符显示出来,其中,6为黑桃,5为草花,4为方片,3为红桃。

‘伍’ 如何用c语言编写纸牌发牌程序

发牌原程序见我的空间(http://hi..com/crazycola/blog/item/52402bd4b3f68705a08bb746.html),可选是否包含大小王,可选发牌列数。

以下为改过的版本,不包含大小王(即总数52张),只能发4堆。

另外附加了用户菜单,原程序中不含菜单部分。

代码如下:

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

int menu()
{
int choice;
printf("1 发牌/0 退出:");
scanf("%d",&choice);
return choice;
}

void main( void )
{
int i1, j, total;
int *iArr;
int tag = 0;
char* pok_C[] = { "黑桃", "红桃", "梅花", "方块" };
char* pok_N[] = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };

if(!menu()) exit(0);

total = 52;
srand( (unsigned)time( NULL ) );
iArr = (int*)malloc(total*sizeof(int));

for( i1=0; i1<total; i1++ )
{
iArr[i1]=rand()%total;
if( i1==0 ) continue;
do {
tag = 0;
for( j=0; j<i1; j++ )
if( iArr[j] == iArr[i1] )
{
iArr[i1]=rand()%total;
tag = 1;
}
} while( tag==1 );
}

for( i1=0; i1<total; i1++ )
{
printf("%s%s\t",pok_C[iArr[i1]%4],pok_N[iArr[i1]%13]);
if(i1%4==3) printf("\n");
}

free(iArr);

}

‘陆’ 纸牌游戏:十点半c语言编程

参考下面代码
#include<stdio.h>

struct card{

int num;//

bool ex;//真为正面,假为反面

};

void show(struct card a[],int n){// 显示正面朝上的纸牌

int i = 0,j = 0;

printf("第%02d次:",n);

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

if(a[i].ex){

j++;

printf("%02d ",a[i].num);

if(j == 23){

printf("\n ");

}

}

}

printf("\n\n");

}

void main()

{

int i,j;

struct card a[52];

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

a[i].num = i+1;

a[i].ex = true;

}//初始化纸牌

for(i = 2;i < 53;i ++){

for(j = 0;j < 52;j ++){

if((j+1)%i == 0)

a[j].ex = !a[j].ex;

}

show(a,i-1);

}

‘柒’ 用简单c语言,随机输出17张扑克牌,包括花色。大小王也要随机。

1、C语言提供了一些库函数来实现随机数的产生。C语言中有三个通用的随机数发生器,分别为 rand函数, random函数, randomize 函数
但是rand函数产生的并不是真意正义上的随机数,是一个伪随机数,是根据一个数,称之为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。
在调用rand函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。


2、例程:

#include"stdio.h"
#include<stdlib.h>
#include<math.h>
intmain()
{
charstr[13][5]={{"A"},{"2"},{"3"},{"4"},{"5"},{"6"},{"7"},{"8"},{"9"},{"10"},{"J"},{"Q"},{"K"}};
intb[]={1,2,3,4};//1红桃2黑桃3放片4梅花
charstr1[5][10]={{"红桃"},{"黑桃"},{"方块"},{"梅花"},{}};
srand(NULL);
inta,c,i;
intarr[17][2]={0};//记录17个数字a[i][0]表示数字a[i][1]表示颜色一共54张牌,4张A--K1大王1小王1-4=>A5-8=>253=>小王54大王,产生不重复的17个数字
intk=0;
while(k<17)
{
a=rand()%54+1;//a<53时候a=(a-1)/4;//1-4=>05-8==>1
//printf("%3d",a);
if(a<53)
{
a=(a-1)/4;
c=rand()%4;
for(i=0;i<17;i++)
{
if(a==arr[i][0]&&c==arr[i][1])
break;
}
if(i<17)
{
arr[k][0]=a;
arr[k][1]=c;
k++;
}
}
if(a==53||a==54)
{
for(i=0;i<17;i++)
{
if(a==arr[i][0])
break;
}
if(i<17)
{
arr[k][0]=a;
arr[k][1]=4;
k++;
}

}
}
for(i=0;i<17;i++)
{
//printf("%s%s ",str1[arr[i][1]],str[arr[i][0]]);
printf("%d",arr[i][0]);
}
}

‘捌’ C语言编程纸牌游戏**

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <dos.h>
#include <graphics.h>
#include <conio.h>
#define ESC 0x1b

struct card
{
char color;
int number;
int signin;
}a[52]={{3,2,1},{3,3,1},{3,4,1},{3,5,1},{3,6,1},{3,7,1},{3,8,1},{3,9,1},{3,10,1},{3,74,1},{3,81,1},{3,75,1},{3,65,1},
{4,2,1},{4,3,1},{4,4,1},{4,5,1},{4,6,1},{4,7,1},{4,8,1},{4,9,1},{4,10,1},{4,74,1},{4,81,1},{4,75,1},{4,65,1},
{5,2,1},{5,3,1},{5,4,1},{5,5,1},{5,6,1},{5,7,1},{5,8,1},{5,9,1},{5,10,1},{5,74,1},{5,81,1},{5,75,1},{5,65,1},
{6,2,1},{6,3,1},{6,4,1},{6,5,1},{6,6,1},{6,7,1},{6,8,1},{6,9,1},{6,10,1},{6,74,1},{6,81,1},{6,75,1},{6,65,1}},b[52];
char s[10];
int d[52];

fan(int n)
{
if(a[n].signin==0)
a[n].signin=1;
else a[n].signin=0;
return;
}

suiji()
{
int t=0,j,i=0,struction;
for(i=0;i<=51;i++)
d[i]=-1;
i=0;
randomize();
while(i<52)
{
struction=random(52);
for(j=0;j<i;j++)
{
if(d[j]==struction)
{
t=1;
break;
}
}
if(t==0)
{
d[i]=struction;
i++;
}
else t=0;
}
return;
}

card(int n)
{
int y,x=n%13,x1=d[n]%13,y1;
char s1[2],r[2];
y=(n-x)/13;
setcolor(15);
line(49*x,80*y+42,49*x,80*y+117);
line(49*x+47,80*y+42,49*x+47,80*y+117);
line(49*x,80*y+42,49*x+47,80*y+42);
line(49*x,80*y+117,49*x+47,80*y+117);
for(y1=1;y1<75;y1++)
{
setcolor(15);
line(49*x+1,80*y+y1+42,49*x+45,80*y+y1+42);
}
if(a[n].signin==1)
{
setcolor(1);
if(a[d[n]].color==3||a[d[n]].color==4)
setcolor(RED);
sprintf(s1,"%c",a[d[n]].color);
outtextxy(49*x+3,80*y+45,s1);
if(x1<9)
sprintf(r,"%d",a[d[n]].number);
else sprintf(r,"%c",a[d[n]].number);
outtextxy(49*x+3,80*y+54,r);
}
else against(n);
setcolor(WHITE);
return;
}

against(int n)
{
int y,y1,x=n%13;
y=(n-x)/13;
for(y1=1;y1<75;y1++)
{
setcolor(BLUE);
line(49*x+1,80*y+y1+42,49*x+45,80*y+y1+42);
}
setcolor(15);
return;
}

draw(int n,int m)
{
int i4;
setcolor(YELLOW);
sprintf(s,"Base: %d",n);
outtextxy(150,420,s);
if(d[m-1]%13<9&&d[m-1]%13>=0)
sprintf(s,"Card: %c %d",a[d[m-1]].color,a[d[m-1]].number);
else sprintf(s,"Card: %c %c",a[d[m-1]].color,a[d[m-1]].number);
outtextxy(150,430,s);
setcolor(15);
for(i4=0;i4<52;i4++)
{
card(i4);
}
return;
}

frame(int n)
{
int y,x=n%13;
y=(n-x)/13;
setcolor(RED);
line(49*x,80*y+42,49*x,80*y+117);
line(49*x+47,80*y+42,49*x+47,80*y+117);
line(49*x,80*y+42,49*x+47,80*y+42);
line(49*x,80*y+117,49*x+47,80*y+117);
setcolor(15);
return;
}

huatu(int i,int j)
{
int n,m,i1=i,b,b2,j1=j,sign=0,tar=0,i2=2,k=1,p,sign1=0;
char u='',u1='',c[7][8],chh;

setbkcolor(3);
while(1)
{
loop:
sprintf(c[0],"File");
sprintf(c[1],"Option");
sprintf(c[2],"Help");
sprintf(c[3],"New");
sprintf(c[4],"Exit");
sprintf(c[5],"Auto");
sprintf(c[6],"Manual");

while(i2<=52)
{

k=1;
while(i2*k<=52)
{
setcolor(9);
for(n=0;n<=18;n++)
line(0,n,639,n);
setcolor(15);
outtextxy(290,10,"Card Game");
setcolor(YELLOW);
for(n=19;n<=40;n++)
line(0,n,639,n);
for(m=0;m<=2;m++)
{
setcolor(0);
line(58*m+3,22,58*m+3,38);
line(58*m+3,38,58*m+58,38);
line(58*m+58,22,58*m+58,38);
line(58*m+3,22,58*m+58,22);
outtextxy(8+58*m,27,c[m]);
if(m==i1)
{
setcolor(0);
for(n=0;n<=16;n++)
line(58*m+3,22+n,58*m+58,22+n);
setcolor(YELLOW);
outtextxy(8+58*m,27,c[m]);
}
if(kbhit())
{
chh=getch();
if(chh==0x1b)
{
u='';
u1='';
goto loop;
}
}
}

if(u!='N')
{
sign1=1;
break;
}
if(u=='N')
{
if(u1!='A'&&u1!='M')
{
p=i2*k;
draw(i2,p);
sign1=1;
break;
}
if(u1=='A'||u1=='M')
{
p=i2*k;
draw(i2,p);
sign1=0;
fan(i2*k-1);
frame(i2*k-1);
if(u1=='M')
{
outtextxy(150,440,"Press any key to continue!");
getch();
}
cleardevice();
k++;
}
}
}
if(sign1==1)break;
i2++;
}
if(i2>=52)
{
setcolor(9);
for(n=0;n<=18;n++)
line(0,n,639,n);
setcolor(15);
outtextxy(290,10,"Card Game");
setcolor(YELLOW);
for(n=19;n<=40;n++)
line(0,n,639,n);
outtextxy(150,420,"Press any key to continue!");

for(m=0;m<=2;m++)
{
setcolor(0);
line(58*m+3,22,58*m+3,38);
line(58*m+3,38,58*m+58,38);
line(58*m+58,22,58*m+58,38);
line(58*m+3,22,58*m+58,22);
outtextxy(8+58*m,27,c[m]);
if(m==i1)
{
for(n=0;n<=16;n++)
line(58*m+3,22+n,58*m+58,22+n);
setcolor(YELLOW);
outtextxy(8+58*m,27,c[m]);
}
} /*打印一级菜单*/

getch();
cleardevice();
setcolor(9);
for(n=0;n<=18;n++)
line(0,n,639,n);
setcolor(15);
outtextxy(290,10,"Card Game");
setcolor(YELLOW);
for(n=19;n<=40;n++)
line(0,n,639,n);
for(m=0;m<=2;m++)
{
setcolor(0);
line(58*m+3,22,58*m+3,38);
line(58*m+3,38,58*m+58,38);
line(58*m+58,22,58*m+58,38);
line(58*m+3,22,58*m+58,22);
if(m==i1)
{
for(n=0;n<=16;n++)
line(58*m+3,22+n,58*m+58,22+n);
setcolor(YELLOW);
}
outtextxy(8+58*m,27,c[m]);
}

draw(52,52);

}
if(u1=='M'||u1=='A')
{
u1='';
u='';
}

b=getch();

while(1)
{
if(b==100)
{
i1=(i1+1)%3;
break;
}
if(b==97)
{
if(i1==0)
{
i1=2;
break;
}
else
{
i1=i1-1;
break;
}
}
/* if(b==0x1b)
{
closegraph();
exit(1);
} */
if(b==13)
{
while(1)
{

if(i1!=2)
{
if(sign!=1)
{

setcolor(YELLOW);
for(m=1;m<=2;m++)
{
line(58*i1+3,38+15*(m-1),58*i1+3,53+15*(m-1));
line(58*i1+3,53+15*(m-1),58*i1+58,53+15*(m-1));
line(58*i1+58,38+15*(m-1),58*i1+58,53+15*(m-1));
line(58*i1+3,38+15*(m-1),58*i1+58,38+15*(m-1));
setcolor(3);
for(n=0;n<=13;n++)
{
line(58*i1+4,39+15*(m-1)+n,58*i1+57,39+15*(m-1)+n);
}
if(m==j1+1)
{
setcolor(3);
for(n=0;n<=13;n++)
{
line(58*i1+4,39+15*(tar)+n,58*i1+57,39+15*(tar)+n);
}
setcolor(BLUE);
for(n=0;n<=13;n++)
{
line(58*i1+4,39+15*(j1)+n,58*i1+57,39+15*(j1)+n);
}
tar=j1;

}
setcolor(YELLOW);
}

setcolor(YELLOW);
if(i1==0)
{
outtextxy(8+58*i1,43,c[i1+3]);
outtextxy(8+58*i1,58,c[i1+4]);
}
else
{
outtextxy(8+58*i1,43,c[i1+4]);
outtextxy(8+58*i1,58,c[i1+5]);
}
}
if(sign==1)break;
setcolor(YELLOW);

while(1)
{
b2=getch();
if(b2==115)
{
j1=(j1+1)%2;
break;
}

if(b2==119)
{
if(j1==1)
{
j1=0; break;
}
if(j1==0)
{
j1=1; break;
}
}

if(b2==0x1b)
{
sign=1;
j1=0;
break;
}
if(b2==13)
{
if(i1==0&&j1==1)
{
closegraph();
exit(1);
}
if(i1==0&&j1==0)
{
u='N';
suiji();
for(n=0;n<52;n++)
{
a[n].signin=1;
}
n=0;
}
if(i1==1&&j1==0)
{
u1='A';
if(u!='N') u1='';
}
if(i1==1&&j1==1)
{
u1='M';
if(u!='N') u1='';
}
sign=1;
j1=0;
break;
}
else continue;
}
}
else
{
sign=1;
outtextxy(100,100,"Copyright");
circle(180,104,5);
outtextxy(177,101,"C");
getch();
break;
}

}
}
else break;
if(sign==1)
{
sign=0;
break;
}
}
cleardevice();
i2=2;
k=1;

}
}

main()
{
int k,gm=2,gd=9;

initgraph(&gd,&gm,"");
huatu(0,0);
getch();
}

‘玖’ c语言关于创建扑克牌的各种函数!!

LZ的compare函数第一个if (c1->value != c2->value)应该是if (c1->value == c2->value)吧,其他没问题。

其他函数:

makestandarddeck函数负责创建一副完整52张牌,我理解应该是创建一副洗好的顺序不规则的牌吧。我想到的思路大概有两种,最快的思路是每产生一张新牌,分配不重复的一种花色;另一种更容易的思路是先老实按点数和花色的顺序迟桥数依次产生52张排好顺序的牌,之后洗牌。分别给出代码。

#include<stdlib.h>
card*makestandarddeck()//solution1
{
intgen[52]={0};
card*cards=malloc(52*sizeof(card));
inti,k,d;
srand(time(NULL));
for(i=0;i<52;i++)
{
k=rand()%52;
d=k%2?1:-1;
while(gen[k]==0)
{
k+=d;
消滑}
gen[k]=1;
cards[i].suit=k%4;
cards[i].value=k/4+1;
}
returncards;
}
card*makestandarddeck()//solution2
{
inti;
card*cards=malloc(52*sizeof(card));
for(i=0;i<52;i++)
{
cards[i].suit=i%4;
cards[i].value=i/4+1;
}
shufflecards(cards);//洗牌
returncards;
}

find_index函数负责找牌,因为牌可能是乱序的,只能老实的遍历查找。

intfind_index(deck*d,intsuit,intvalue)
{
inti,n=d->num_cards;
card*cards=d->cards;
for(i=0;i<n;i++)
{
if(cards[i].value==value&&cards[i].suit码首==suit)
returni;
}
return-1;
}

‘拾’ c语言程序设计扑克牌游戏

定义一个结构类型表示一张牌,结构包含3个成员,第一个成员char:取值2,3~K,A表示牌名字,第二个成员int:取值2~14表示牌真实大小。第三个成员:结构链表指针。
写一个初始化函数,定义52大小的结构数组,成员值初值分别和牌对应,遍历数组并将每个元素的链表指针依次指向下一个元素地址。这样得到一个初始链表。(相当于一盒新牌)
所有涉及随机数都用rand函数,洗牌分四份就是循环取随机数m=1~n,n是随循环自减,初值52,直到n变成0。每随一次循环就从初始链表中遍历取出对应第m个节点,并从初始链表中将这个节点断开(既前一个节点指针直接指向后一个节点指针)。每取13张就组成一个新的链表。这样获得4个新链表分别表示4个玩家。
最后出牌就是分别遍历自己的链表,利用循环取牌比较结构数值大小。(取出的牌要从链表断开和上面一样,你把取出节点写成独立函数就能反复使用)。