C和单片机爱好者 发表于 2017-1-31 21:08:45

新人写的井字棋 (人人版 人机版)

#include<stdio.h>
#include<windows.h>
int main()
{
    int i,j,m,hang,lie,winner;
    char qipan;
    void printqipan(char a);
    int caipan(char a);
    for(i=0;i<3;i++)
      for(j=0;j<3;j++)
      qipan='*';
    printqipan(qipan);   //棋谱初始绘制

    for(m=0;m<9;m++)
    {
      if(m%2==0)
      {
            printf("请玩家1下棋\n输入要下的行和列\n");
            scanf("%d%d",&hang,&lie);
            hang--;
            lie--;
         if(qipan=='O'||qipan=='X')
             {
               printf("这里已经有子了,重下吧\n请输入你要下的行和列\n");
               scanf("%d%d",&hang,&lie);
               hang--;
               lie--;
            }
            qipan='O';
            system("cls");
            printqipan(qipan);
            winner=caipan(qipan);
    }
      else
      {
            printf("请玩家2下棋\n输入要下的行和列\n");
            scanf("%d%d",&hang,&lie);
            hang--;
            lie--;
            if(qipan=='O'||qipan=='X')
             {
               printf("这里已经有子了,重下吧\n请输入你要下的行和列\n");
               scanf("%d%d",&hang,&lie);
               hang--;
               lie--;
            }
            qipan='X';
            system("cls");
            printqipan(qipan);
            winner=caipan(qipan);
      }
      if(winner==1)
            {printf("玩家1胜利!");break;}
      if(winner==2)
            {printf("玩家2胜利!");break;}
      if(m==8)
            printf("平局");
    }
}

void printqipan(char a)
{
    int i,j;
    printf("这是一个无聊的井字棋游戏\n玩家1出O,玩家2出X\n废话不多说 决一死战吧\n\n");
    for(i=0;i<3;i++)
      {
            for(j=0;j<3;j++)
                printf("%c",a);
            printf("\n");
      }
}

int caipan(char a)
{
    int flag=0;
    if((a==a&&a==a&&a=='O')||
       (a==a&&a==a&&a=='O')||
       (a==a&&a==a&&a=='O')||//行
       (a==a&&a==a&&a=='O')||
       (a==a&&a==a&&a=='O')||
       (a==a&&a==a&&a=='O')||//列
       (a==a&&a==a&&a=='O')||
       (a==a&&a==a&&a=='O'))//对角线
       {flag=1;}

   if((a==a&&a==a&&a=='X')||
       (a==a&&a==a&&a=='X')||
       (a==a&&a==a&&a=='X')||//行
       (a==a&&a==a&&a=='X')||
       (a==a&&a==a&&a=='X')||
       (a==a&&a==a&&a=='X')||//列
       (a==a&&a==a&&a=='X')||
       (a==a&&a==a&&a=='X'))//对角线
       {flag=2;}
       return(flag);
}



#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    int i,j,m,n,hang,lie,winner;
    char qipan;
    void printqipan(char a);
    int caipan(char a);
    for(i=0;i<3;i++)
      for(j=0;j<3;j++)
      qipan='*';
    printqipan(qipan);   //棋谱初始绘制

    for(m=0;m<9;m++)
    {
      srand(time(0));
      if(m%2==0)
      {
            printf("请玩家下棋\n输入要下的行和列\n");
            scanf("%d%d",&hang,&lie);
            hang--;
            lie--;
         if(qipan=='O'||qipan=='X')
             {
               printf("这里已经有子了,重下吧\n请输入你要下的行和列\n");
               scanf("%d%d",&hang,&lie);
               hang--;
               lie--;
            }
            qipan='O';
            system("cls");
            printqipan(qipan);
            winner=caipan(qipan);
    }
      else
      {
            printf("电脑正在思考中.....");
            Sleep(1500);
            hang=rand()%3;
            lie=rand()%3;
            for(n=0;n<10;n++)//防止hang,lie重复
            {
                if((qipan=='O')||(qipan=='X'))
                {
                  hang=rand()%3;
                  lie=rand()%3;
               }
               if(qipan=='*')
                  break;
            }
            qipan='X';
            system("cls");
            printqipan(qipan);
            winner=caipan(qipan);
      }
      if(winner==1)
            {printf("老哥,你赢了电脑,稳!要不要再来一局^_^");break;}
      if(winner==2)
            {printf("哈哈,我是井字棋中的AlphaGo");break;}
      if(m==8)
            printf("平局");
    }
}

void printqipan(char a)
{
    int i,j;
    printf("这是一个无聊的井字棋游戏\n玩家出O,电脑出X\n废话不多说 决一死战吧\n\n");
    for(i=0;i<3;i++)
      {
            for(j=0;j<3;j++)
                printf("%c",a);
            printf("\n");
      }
}

int caipan(char a)
{
    int flag=0;
    if((a==a&&a==a&&a=='O')||
       (a==a&&a==a&&a=='O')||
       (a==a&&a==a&&a=='O')||//行
       (a==a&&a==a&&a=='O')||
       (a==a&&a==a&&a=='O')||
       (a==a&&a==a&&a=='O')||//列
       (a==a&&a==a&&a=='O')||
       (a==a&&a==a&&a=='O'))//对角线
       {flag=1;}

   if((a==a&&a==a&&a=='X')||
       (a==a&&a==a&&a=='X')||
       (a==a&&a==a&&a=='X')||//行
       (a==a&&a==a&&a=='X')||
       (a==a&&a==a&&a=='X')||
       (a==a&&a==a&&a=='X')||//列
       (a==a&&a==a&&a=='X')||
       (a==a&&a==a&&a=='X'))//对角线
       {flag=2;}
       return(flag);
}




上面是人人,下面是人机 很粗糙 还存在很多问题

C和单片机爱好者 发表于 2017-1-31 21:11:18

问题:1.若是玩家两次重复下在一个地方程序不能处理
          2.棋子坐标乱输入的话下不了棋
         3.电脑比较智障,因为是随机下的棋,很难赢玩家

C和单片机爱好者 发表于 2017-1-31 21:12:00

大家发表发表意见 若是能修改修改就更好了{:10_250:}
页: [1]
查看完整版本: 新人写的井字棋 (人人版 人机版)