Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1318771
  • 博文数量: 228
  • 博客积分: 9988
  • 博客等级: 中将
  • 技术积分: 7540
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-01 23:49
文章分类

全部博文(228)

文章存档

2009年(228)

我的朋友

分类: C/C++

2009-08-27 14:42:22

#include
#include
#include
#include

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     {
       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              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                 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++;
           }
}

阅读(870) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~