鱼C论坛

 找回密码
 立即注册
查看: 1976|回复: 2

[技术交流] 新人写的井字棋 (人人版 人机版)

[复制链接]
发表于 2017-1-31 21:08:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<stdio.h>
  2. #include<windows.h>
  3. int main()
  4. {
  5.     int i,j,m,hang,lie,winner;
  6.     char qipan[3][3];
  7.     void printqipan(char a[3][3]);
  8.     int caipan(char a[3][3]);
  9.     for(i=0;i<3;i++)
  10.         for(j=0;j<3;j++)
  11.         qipan[i][j]='*';
  12.     printqipan(qipan);   //棋谱初始绘制

  13.     for(m=0;m<9;m++)
  14.     {
  15.         if(m%2==0)
  16.         {
  17.             printf("请玩家1下棋\n输入要下的行和列\n");
  18.             scanf("%d%d",&hang,&lie);
  19.             hang--;
  20.             lie--;
  21.            if(qipan[hang][lie]=='O'||qipan[hang][lie]=='X')
  22.              {
  23.                printf("这里已经有子了,重下吧\n请输入你要下的行和列\n");
  24.                scanf("%d%d",&hang,&lie);
  25.                hang--;
  26.                lie--;
  27.               }
  28.             qipan[hang][lie]='O';
  29.             system("cls");
  30.             printqipan(qipan);
  31.             winner=caipan(qipan);
  32.     }
  33.         else
  34.         {
  35.             printf("请玩家2下棋\n输入要下的行和列\n");
  36.             scanf("%d%d",&hang,&lie);
  37.             hang--;
  38.             lie--;
  39.             if(qipan[hang][lie]=='O'||qipan[hang][lie]=='X')
  40.              {
  41.                printf("这里已经有子了,重下吧\n请输入你要下的行和列\n");
  42.                scanf("%d%d",&hang,&lie);
  43.                hang--;
  44.                lie--;
  45.               }
  46.             qipan[hang][lie]='X';
  47.             system("cls");
  48.             printqipan(qipan);
  49.             winner=caipan(qipan);
  50.         }
  51.         if(winner==1)
  52.             {printf("玩家1胜利!");break;}
  53.         if(winner==2)
  54.             {printf("玩家2胜利!");break;}
  55.         if(m==8)
  56.             printf("平局");
  57.     }
  58. }

  59. void printqipan(char a[3][3])
  60. {
  61.     int i,j;
  62.     printf("这是一个无聊的井字棋游戏\n玩家1出O,玩家2出X\n废话不多说 决一死战吧\n\n");
  63.     for(i=0;i<3;i++)
  64.         {
  65.             for(j=0;j<3;j++)
  66.                 printf("%c  ",a[i][j]);
  67.             printf("\n");
  68.         }
  69. }

  70. int caipan(char a[3][3])
  71. {
  72.     int flag=0;
  73.     if((a[0][0]==a[0][1]&&a[0][1]==a[0][2]&&a[0][0]=='O')||
  74.        (a[1][0]==a[1][1]&&a[1][1]==a[1][2]&&a[1][0]=='O')||
  75.        (a[2][0]==a[2][1]&&a[2][1]==a[2][2]&&a[2][0]=='O')||//行
  76.        (a[0][0]==a[1][0]&&a[1][0]==a[2][0]&&a[0][0]=='O')||
  77.        (a[0][1]==a[1][1]&&a[1][1]==a[2][1]&&a[0][1]=='O')||
  78.        (a[0][2]==a[1][2]&&a[1][2]==a[2][2]&&a[0][2]=='O')||//列
  79.        (a[0][0]==a[1][1]&&a[1][1]==a[2][2]&&a[0][0]=='O')||
  80.        (a[0][2]==a[1][1]&&a[1][1]==a[2][0]&&a[0][2]=='O'))//对角线
  81.        {flag=1;}

  82.    if((a[0][0]==a[0][1]&&a[0][1]==a[0][2]&&a[0][0]=='X')||
  83.        (a[1][0]==a[1][1]&&a[1][1]==a[1][2]&&a[1][0]=='X')||
  84.        (a[2][0]==a[2][1]&&a[2][1]==a[2][2]&&a[2][0]=='X')||//行
  85.        (a[0][0]==a[1][0]&&a[1][0]==a[2][0]&&a[0][0]=='X')||
  86.        (a[0][1]==a[1][1]&&a[1][1]==a[2][1]&&a[0][1]=='X')||
  87.        (a[0][2]==a[1][2]&&a[1][2]==a[2][2]&&a[0][2]=='X')||//列
  88.        (a[0][0]==a[1][1]&&a[1][1]==a[2][2]&&a[0][0]=='X')||
  89.        (a[0][2]==a[1][1]&&a[1][1]==a[2][0]&&a[0][2]=='X'))//对角线
  90.        {flag=2;}
  91.        return(flag);
  92. }



  93. #include<stdio.h>
  94. #include<windows.h>
  95. #include<stdlib.h>
  96. #include<time.h>
  97. int main()
  98. {
  99.     int i,j,m,n,hang,lie,winner;
  100.     char qipan[3][3];
  101.     void printqipan(char a[3][3]);
  102.     int caipan(char a[3][3]);
  103.     for(i=0;i<3;i++)
  104.         for(j=0;j<3;j++)
  105.         qipan[i][j]='*';
  106.     printqipan(qipan);   //棋谱初始绘制

  107.     for(m=0;m<9;m++)
  108.     {
  109.         srand(time(0));
  110.         if(m%2==0)
  111.         {
  112.             printf("请玩家下棋\n输入要下的行和列\n");
  113.             scanf("%d%d",&hang,&lie);
  114.             hang--;
  115.             lie--;
  116.            if(qipan[hang][lie]=='O'||qipan[hang][lie]=='X')
  117.              {
  118.                printf("这里已经有子了,重下吧\n请输入你要下的行和列\n");
  119.                scanf("%d%d",&hang,&lie);
  120.                hang--;
  121.                lie--;
  122.               }
  123.             qipan[hang][lie]='O';
  124.             system("cls");
  125.             printqipan(qipan);
  126.             winner=caipan(qipan);
  127.     }
  128.         else
  129.         {
  130.             printf("电脑正在思考中.....");
  131.             Sleep(1500);
  132.             hang=rand()%3;
  133.             lie=rand()%3;
  134.             for(n=0;n<10;n++)//防止hang,lie重复
  135.             {
  136.                 if((qipan[hang][lie]=='O')||(qipan[hang][lie]=='X'))
  137.                 {
  138.                     hang=rand()%3;
  139.                     lie=rand()%3;
  140.                  }
  141.                  if(qipan[hang][lie]=='*')
  142.                     break;
  143.             }
  144.             qipan[hang][lie]='X';
  145.             system("cls");
  146.             printqipan(qipan);
  147.             winner=caipan(qipan);
  148.         }
  149.         if(winner==1)
  150.             {printf("老哥,你赢了电脑,稳!要不要再来一局^_^");break;}
  151.         if(winner==2)
  152.             {printf("哈哈,我是井字棋中的AlphaGo");break;}
  153.         if(m==8)
  154.             printf("平局");
  155.     }
  156. }

  157. void printqipan(char a[3][3])
  158. {
  159.     int i,j;
  160.     printf("这是一个无聊的井字棋游戏\n玩家出O,电脑出X\n废话不多说 决一死战吧\n\n");
  161.     for(i=0;i<3;i++)
  162.         {
  163.             for(j=0;j<3;j++)
  164.                 printf("%c  ",a[i][j]);
  165.             printf("\n");
  166.         }
  167. }

  168. int caipan(char a[3][3])
  169. {
  170.     int flag=0;
  171.     if((a[0][0]==a[0][1]&&a[0][1]==a[0][2]&&a[0][0]=='O')||
  172.        (a[1][0]==a[1][1]&&a[1][1]==a[1][2]&&a[1][0]=='O')||
  173.        (a[2][0]==a[2][1]&&a[2][1]==a[2][2]&&a[2][0]=='O')||//行
  174.        (a[0][0]==a[1][0]&&a[1][0]==a[2][0]&&a[0][0]=='O')||
  175.        (a[0][1]==a[1][1]&&a[1][1]==a[2][1]&&a[0][1]=='O')||
  176.        (a[0][2]==a[1][2]&&a[1][2]==a[2][2]&&a[0][2]=='O')||//列
  177.        (a[0][0]==a[1][1]&&a[1][1]==a[2][2]&&a[0][0]=='O')||
  178.        (a[0][2]==a[1][1]&&a[1][1]==a[2][0]&&a[0][2]=='O'))//对角线
  179.        {flag=1;}

  180.    if((a[0][0]==a[0][1]&&a[0][1]==a[0][2]&&a[0][0]=='X')||
  181.        (a[1][0]==a[1][1]&&a[1][1]==a[1][2]&&a[1][0]=='X')||
  182.        (a[2][0]==a[2][1]&&a[2][1]==a[2][2]&&a[2][0]=='X')||//行
  183.        (a[0][0]==a[1][0]&&a[1][0]==a[2][0]&&a[0][0]=='X')||
  184.        (a[0][1]==a[1][1]&&a[1][1]==a[2][1]&&a[0][1]=='X')||
  185.        (a[0][2]==a[1][2]&&a[1][2]==a[2][2]&&a[0][2]=='X')||//列
  186.        (a[0][0]==a[1][1]&&a[1][1]==a[2][2]&&a[0][0]=='X')||
  187.        (a[0][2]==a[1][1]&&a[1][1]==a[2][0]&&a[0][2]=='X'))//对角线
  188.        {flag=2;}
  189.        return(flag);
  190. }

复制代码



上面是人人,下面是人机 很粗糙 还存在很多问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-1-31 21:11:18 | 显示全部楼层
问题:1.若是玩家两次重复下在一个地方程序不能处理
          2.棋子坐标乱输入的话下不了棋
         3.电脑比较智障,因为是随机下的棋,很难赢玩家
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-31 21:12:00 | 显示全部楼层
大家发表发表意见 若是能修改修改就更好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 18:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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