| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1683 人关注过本帖
标题:c语言做的扑克牌游戏.
只看楼主 加入收藏
┄┅☆伊ル利
Rank: 1
等 级:新手上路
帖 子:1554
专家分:0
注 册:2006-1-26
收藏
 问题点数:0 回复次数:2 
c语言做的扑克牌游戏.
c语言做的扑克牌游戏.
/*---------------------------------------------------------------------------*/
/* 程序名称: 扑克牌对战 */
/* 程序语言: C语言 */
/* 编译器: Win-Tc */
/* 程序功能和实现:玩家和电脑对战,先生成一个包扩所有牌的单链表。 */
/* 然后随机发牌,各26张分别存到自己的新生成的单链表里。 */
/* 然后由玩家自己决定先出什么牌,每出一张,自己的牌就少一张 */
/* 同时电脑随机出牌,每局记录成绩,最后算出总分。 */
/*---------------------------------------------------------------------------*/
#include <stdlib.h>
#include <stdio.h>
#include <alloc.h>
#include <time.h>

struct all_card /*定义数组存放所有牌的花色和点数*/
{
char mode[20];
int number;
}card[52];

typedef struct lnode /*定义单链表用于存放52张扑克牌*/
{
struct all_card data;
struct lnode *next;
}lnode;

void creat(lnode *h) /*生成牌函数,把52张牌存到链表里*/
{
lnode *t,*p;
int i,j,k;
k=0;
for(i=1;i<=4;i++)
{

for(j=1;j<=13;j++)
{
card[k].number=j; /*对点数赋值*/
if(i==1) /*对花色分别赋值*/
strcpy(card[k].mode,"Red");
if(i==2)
strcpy(card[k].mode,"Black");
if(i==3)
strcpy(card[k].mode,"Petal");
if(i==4)
strcpy(card[k].mode,"rectangle");
k++;
}
}


t=h;
for(k=0;k<52;k++)
{
p=(lnode*)malloc(sizeof(lnode));
p->data=card[k];
p->next=NULL;
t->next=p;
t=p;
}

}

void print(lnode *h) /*输出函数*/
{
int k=1;
lnode *p;
p=h->next;
while(p)
{
printf("%d.%s %d ",k,p->data.mode,p->data.number);
p=p->next;
k++;
}
}

int take_big() /*第一次随机数生产函数*/
{
int j;
static int array[53]={0};
srand(time(NULL));
while(1)
{
j=(rand()%52)+1;
if(array[j]==0)
{
array[j]=j;
break;
};
}
return j;
}

putcard(lnode *h,lnode *hx,lnode *hy) /*发牌函数*/
{
lnode *p,*x,*y;
lnode *tx,*ty;
int i,j,k=1;

p=h;
tx=hx;
ty=hy;

while(k<=52)
{


i=take_big(); /*调用随机生成函数*/
if(k%2==1) /*如果是奇数次就发给玩家,偶数次就发给电脑*/
{
j=1;
p=h->next;
while(p&&j<i) /*找到主链表中第i个元素的位置*/
{
p=p->next;
++j;
}
if(i>0&&j==i) /*把第i个元素读入玩家的单链表中*/
{
x=(lnode*)malloc(sizeof(lnode));
x->data=p->data;
x->next=NULL;
tx->next=x;
tx=x;
}

}

else
{
j=1;
p=h->next;
while(p&&j<i)
{
p=p->next;
++j;
}
if(i>0&&j==i)
{
y=(lnode*)malloc(sizeof(lnode));
y->data=p->data;
y->next=NULL;
ty->next=y;
ty=y;

}
}
k++;

}

}

lnode* tip_you(lnode *hx,int i) /*玩家的出牌函数*/
{
int j;
lnode *p,*q,*t;


p=hx;
j=1;
while(p&&j<i)
{
++j;
p=p->next;
}
if(i>0&&j==i)
{

t=p->next;
q=p->next;
p->next=q->next;
return(t);

}
}


lnode* tip_computer(lnode *hy,int i) /*电脑的出牌函数*/
{
int j;
lnode *p,*q;
p=hy->next;
j=1;
while(p&&j<i)
{
++j;
p=p->next;
}
if(i>0&&j==i)
{
return(p);
}

}


int take_small()
{
int j;
static int array[27]={0};
srand(time(NULL));
while(1)
{
j=(rand()%26)+1;
if(array[j]==0)
{
array[j]=j;
break;
};
}
return j;
}


/*比较函数,比较玩家和电脑出牌的大小并记录成绩*/
int compare(lnode *hx,lnode *hy,int i,int j,int *result)
{
int k;
int add;
lnode *x,*y;

x=tip_you(hx,i); /*调用玩家抓牌函数*/
y=tip_computer(hy,j); /*调用电脑抓牌函数*/

if(x->data.number>y->data.number)
{
printf("You put the card is : %s %d\n",x->data.mode,x->data.number);
printf("Compter put the card is : %s %d\n",y->data.mode,y->data.number);
printf("You win this time!\n");
*result=*result+1;
}
else if(x->data.number<y->data.number)
{
printf("You put the card is : %s %d\n",x->data.mode,x->data.number);
printf("Compter put the card is : %s %d\n",y->data.mode,y->data.number);
printf("Compter win this time!\n");
*result=*result-1;
}
else
{
printf("You put the card is : %s %d\n",x->data.mode,x->data.number);
printf("Compter put the card is : %s %d\n",y->data.mode,y->data.number);
printf("You are deuce this time!\n");
}

}

main() /*主函数*/
{
lnode *h,*hx,*hy;
int i,j;
int k;
int *result=0;

h=(lnode*)malloc(sizeof(lnode)); /*生成3个单链表,分别存储所有牌,玩家抓的牌,和电脑抓的牌*/
h->next=NULL;
hx=(lnode*)malloc(sizeof(lnode));
hx->next=NULL;
hy=(lnode*)malloc(sizeof(lnode));
hy->next=NULL;

creat(h); /* 调用生成牌函数*/
putcard(h,hx,hy); /* 调用发牌函数*/

printf("You have this card:\n");
print(hx); /*调用显示牌函数*/

printf("\n");
printf("\n");
for(k=1;k<=26;k++)
{
printf("please in put the number:");

scanf("%d",&i);
if(i<=0||i>27-k) /*用于控制输入数的范围*/
{
printf("\nPlease input the right number!!\n");
k--;
continue;
}
j=take_small();

compare(hx,hy,i,j,result); /*调用比较函数,由比较函数调用抓牌函数*/
printf("\n");
printf("You have the point is:%d\n",*result); /*显示当前得分*/
printf("\n");

printf("You have this card:\n");
print(hx);
printf("\n"); /*显示当前你拥有的扑克牌*/
printf("\n");
}
if(*result>0)
printf("You win the game!!"); /*显示最后结果*/
else if(*result<0)
printf("Computer win the game!!");
else
printf("You are deuce !!");
getch();
搜索更多相关主题的帖子: c语言 扑克牌 游戏 
2006-03-27 14:36
仰望者
Rank: 2
等 级:论坛游民
帖 子:57
专家分:86
注 册:2009-11-6
收藏
得分:0 
群殴按了\,enter,就死循环。。。
2009-11-12 13:39
快速回复:c语言做的扑克牌游戏.
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017383 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved