您的位置: 飞扬精品软件园 >> 文章中心 >> 软件使用 >> 程序开发 >> C语言写的简单井字过三关(初学者入门版)

相关文章链接

本类文章排行

最新新闻资讯

    C语言写的简单井字过三关(初学者入门版)

    C语言写的简单井字过三关(初学者入门版)


    • 阅览次数: 文章来源: 网络 原文作者: 佚名 整理日期: 2009-11-30

     

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

    void prinf(void);/*这里负责输出与清屏*/
    int judge_chess(void);/*判断棋局输赢,同时为电脑服务*/
    int Computer_strategy(void);/*作为电脑攻防优先级*/
    int compurter_think(void);/*电脑思考,实质是发生随机数*/

    int a[9]={49,50,51,52,53,54,55,56,57};/*棋盘*/
    int b_j=0,who=0; /*who为限制使用权限*/
    struct computer_construe/*作为电脑判断用*/
    {
       int n;
       int attack;
    }b[8];

    int main(void)
    {
       int scan,i,j=5;
       char compurter_one;

        prinf();
        puts("电脑先下,请按y或Y,否则按其它键,默认电脑为X,用户黙认为O");
       compurter_one=getchar();
       if(compurter_one=='y'||compurter_one=='Y')/*电脑先下,按y,否则按其它键*/
       {

           compurter_think();
           prinf();
           j=4;
       }
       for(i=0;i<j;i++)
         {
           printf("\t\t\t\t\t\t输入时按数字:");
           do{
            scanf("%d",&scan);
            if(scan<0||scan>9)
            printf("请新重生输入");
            }
            while(scan<1||scan>9);
             if(who==0)
              who=1;
       switch(scan)
      {
          case 1:scan=i;if(a[0]>='1'&&a[0]<='9')a[0]=79;else{--i;printf("己使用\n");}break;
          case 2:scan=i;if(a[1]>='1'&&a[1]<='9')a[1]=79;else{--i;printf("己使用\n");}break;
          case 3:scan=i;if(a[2]>='1'&&a[2]<='9')a[2]=79;else{--i;printf("己使用\n");}break;
          case 4:scan=i;if(a[3]>='1'&&a[3]<='9')a[3]=79;else{--i;printf("己使用\n");}break;
          case 5:scan=i;if(a[4]>='1'&&a[4]<='9')a[4]=79;else{--i;printf("己使用\n");}break;
          case 6:scan=i;if(a[5]>='1'&&a[5]<='9')a[5]=79;else{--i;printf("己使用\n");}break;
          case 7:scan=i;if(a[6]>='1'&&a[6]<='9')a[6]=79;else{--i;printf("己使用\n");}break;
          case 8:scan=i;if(a[7]>='1'&&a[7]<='9')a[7]=79;else{--i;printf("己使用\n");}break;
          case 9:scan=i;if(a[8]>='1'&&a[8]<='9')a[8]=79;else{--i;printf("己使用\n");}break;
      }
         if(scan==i)
         {
            if(!(judge_chess()))
                if(Computer_strategy())
                compurter_think();
                  who=0;
                 prinf();
             if(judge_chess())
             {
                 if(judge_chess()==3)
                    puts("YOU WIN");
                 else
                    puts("COM WIN");
                 break; }
         }
         scan=j;
       }
       if(scan==j)
       puts("a draw in chess");/*和局*/
       getch();
       return 0;
    }

    void prinf(void)
    {
        int i;
        system("cls");
        for(i=0;i<7;i++)
         puts("");
        for(i=1;i<4;i++)
        {
        printf("\t\t\t  %c  |  %c  |  %c  \n",a[3*(i-1)],a[3*(i-1)+1],a[3*(i-1)+2]);
        if(i!=3)
        printf("\t\t\t_________________\n");}

    }
    int judge_chess(void)
    {
        int i,j,k,m,n,X,O;
        for(i=1;i<4;i++)
        {
             k=0;X=0;O=0;
          for(j=0;j<9;j++)
            {

               switch(i)
               {
                 case 1:m=a[j];break;
                 case 2:m=a[j%3*3+k];break;
                 case 3:if(j<6) m=a[2*(2-k)*(j%3+k)];break;
               }

                switch(m)
                {
                   case 'O':++O;break;
                   case 'X':--X;break;
                   default:
                       switch(i)
                     {
                         case 1:n=j;break;
                         case 2:n=j%3*3+k;break;
                         case 3:if(j<6) n=2*(2-k)*(j%3+k);break;
                     }
                }
               if(2==j%3)
               {
                 m=O+X;
                 switch(m)
                 {
                  case 2:if(who){b[b_j].n=n;b[b_j].attack=-1;++b_j;}break;
                  case 3:return 3;break;
                  case -2:if(who){b[b_j].n=n;b[b_j].attack=1;++b_j;}break;
                  case -3:return -3;break;
                 }
                 ++k;
                 X=0;
                 O=0;
                }
             }
             if(i==3&&j>5)
               return 0;
         }

    }

    int Computer_strategy(void)/*电脑战略*/
    {
        int i;
              for(i=0;i<b_j;i++)
                  if(b[i].attack==1&&a[b[i].n]!=88&&a[b[i].n]!=79)
                   {a[b[i].n]=88;
                   return 0;}
              for(i=0;i<b_j;i++)
                     if(b[i].attack!=1&&a[b[i].n]!=88&&a[b[i].n]!=79)
                   {a[b[i].n]=88;
                   return 0;}
          return 1;

    }

    int compurter_think(void)
    {
        int i,j,k=1,m=0;

       srand(time(NULL));

       do{
       m=rand()%10;
       if(m==0&&a[4]!=88&&a[4]!=79)
       {a[4]=88;return 0;} }while(m==0);

       for(j=0;j<9;j++)
          for(i=0;i<9;i++)/*选译功能*/
             if(a[i]>='1'&&a[i]<='9')
               {if(k==m)
                 {a[i]=88;
                 return 0;
                  }
                  k++;
               }
    }


查看所有评论

网友对C语言写的简单井字过三关(初学者入门版)的评论

网名:
主题:
内容:
验证码: