⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 puker.c

📁 这是一个练习链表的扑克牌程序
💻 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 + -