职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1298|回复: 1

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

[复制链接]
一路顺风 发表于 2008-11-20 18:57 | 显示全部楼层 |阅读模式
#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.attack==1&&a[b.n]!=88&&a[b.n]!=79)
               {a[b.n]=88;
               return 0;}
          for(i=0;i<b_j;i++)
                 if(b.attack!=1&&a[b.n]!=88&&a[b.n]!=79)
               {a[b.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>=\'1\'&&a<=\'9\')
           {if(k==m)
             {a=88;
             return 0;
              }
              k++;
           }
}
dab 发表于 2008-12-13 15:30 | 显示全部楼层
下来试下不错不错。
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-29 16:45 , Processed in 0.124645 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表