📄 puker.c
字号:
/*-------------------------扑克牌程序-----------------------------------------------*/
/*----------------- 自动抓牌,自动出牌,显示最终结果,并且有声音提示---------------*/
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <dos.h>
typedef struct node
{
int data;
struct node *next;
}lnode; /*定义一个LNODE的结构体*/
void main()
{
void print(); /*遍历函数*/
void del(); /*出牌函数*/
lnode *creat(); /*返回头指针的函数*/
lnode *beforepoint(); /*当往链表里添加数据时(抓牌),返回添加数据前一元素的指针(便于操作)*/
void insert(); /*抓牌函数(把数据读入链表)*/
lnode *x,*y,*point=NULL,*findo,*findt;/*X,Y分别为两个链表的头指针,piont为添加数据前一元素的指针
*findo,*findt是用于遍历两张链表的指针*/
int count,another,a=0,b=0;/*count,another是计数变量用于FOR循环,a,b为统计输赢的变量*/
int number;/*用于随机生成数字的变量*/
long s;/*---使用空的FOR循环使程序暂停的一个变量*/
sound(1800);
delay(1000);
nosound();
printf("\n");
printf("\n");
printf(" P U K E R R A N D O M S Y S T E M \n");
printf("\n");
printf(" version 1.0 beta \n");
printf("\n");
printf(" editor by SCOTT\n \n");
printf("\n");
printf("\n");
sleep(1);
sound(1500);
delay(1000);
nosound();
printf(" this program will begining in 3 seconds\n");
sleep(3);
x=creat();/*创建链表,并插入一个元素(系统指定)*/
point=beforepoint(x,0);/*返回插入元素前面元素的指针*/
randomize();
another=random(11);
insert(point,another);/*插入新的元素*/
for(count=0;count<10;count++)
{
point=beforepoint(x,another);
another=random(11);
insert(point,another);
}/*插入元素*/
sound(2000);
delay(1000);
nosound();
printf("\n");
printf("\n");
printf(" A's puker numbers are: ");
print(x);
y=creat();/*创建链表,并插入一个元素(系统指定)*/
point=beforepoint(y,0);/*返回插入元素前面元素的指针*/
number=random(11);
insert(point,number);/*插入新的元素*/
for(count=0;count<10;count++)
{
point=beforepoint(y,number);
number=random(11);
insert(point,number);
}/*插入元素*/
printf(" B's puker numbers are: ");
print(y);
printf("\n");
printf("\n");
printf(" next time will delete pai wait 3 seconds \n");
sleep(3);
printf("\n");
findt=y->next;
findo=x->next;
findo=findo->next;
findt=findt->next;/*由于链表第一个元素是自定义的,所以把指针指向第二的元素,用于比较大小
统计输赢*/
for(count=0;count<11;count++)
{
if (findo->data>findt->data)
{
a++;
printf(" A is winer \n");
}
else if (findo->data<findt->data)
{
b++;
printf(" B is winer \n");
}
else
{
printf(" A and B had same pai \n");
}
findo=findo->next;
findt=findt->next;
printf("\n");
point=beforepoint(x,0);
del(point);/*删除牌*/
point=beforepoint(y,0);
del(point);/*删除牌*/
printf(" A's puker numbers are: ");
print(x);
printf("\n");
sound(1800);
delay(1000);
nosound();
printf(" B's puker numbers are: ");
print(y);
printf("\n");
printf("\n");
sleep(2);
}
sound(1800);
delay(1000);
nosound();
printf(" A's puker numbers are: \n");/*没有释放链表,为了界面美观,打印了一些语句(我的这种
删除方法不能删除链表中的第一个元素*/
printf("\n");
printf(" B's puker numbers are: ");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
sleep(2);
if(a>b)
{
printf(" A is winer \n");
}
else if(a<b)
{
printf(" B is winer \n");
}
else
{
printf(" pingju \n");
}
printf("\n");
printf("\n");
printf("\n");
printf("\n");
sound(2200);
delay(1000000);
nosound();
for(s=0;s<90000000;s++)
{
;
}/*空循环用于暂停程序,使机器发出不连续的响声*/
sound(2200);
delay(10000000);
nosound();
sleep(3);
exit(1);
}
lnode *creat()/*创建链表,用于创建一个新的链表,名称creat(),返回类型为lnode型,无参数*/
{
lnode *h,*p;
int x=0;
h=(lnode*)malloc(sizeof(lnode));
h->next=NULL;
p=(lnode*)malloc(sizeof(lnode));
p->data=x;
p->next=h->next;
h->next=p;
return(h);
}
void print(lnode *h)/*遍历链表,用于遍历整个链表并打印链表数据,名称print(),无返回类型,参数为链表的头指针*/
{
lnode *p;
p=h->next;
while(p!=NULL)
{
printf("%4d",p->data);
p=p->next;
}
printf("\n");
}
lnode *beforepoint(lnode *h,int x)/*返回前一元素指针,用于返回插入(删除)元素前一元素指针,名称beforepoint,返回类型lnode,参数为链表的头指针*/
{
lnode *p;
p=h;
while(p->data!=x&&(p!=NULL))
p=p->next;
return(p);
}
void insert(lnode *p,int x)/*抓牌函数,用于插入元素,名称insert,无返回类型,参数为插入元素前一元素指针,插入的元素*/
{ lnode *s;
s=(lnode*)malloc(sizeof(lnode));
s->data=x;
s->next=p->next;
p->next=s;
}
void del(lnode *p)/*出牌函数,用于删除元素,名称del,无返回类型,参数为删除元素前一元素指针*/
{
lnode *q;
if(p->next!=NULL)
{ q=p->next;
p->next=q->next;
free(q);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -