鱼C论坛

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

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

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

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

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

x
#include<stdio.h>
#include<windows.h>
int main()
{
    int i,j,m,hang,lie,winner;
    char qipan[3][3];
    void printqipan(char a[3][3]);
    int caipan(char a[3][3]);
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
        qipan[i][j]='*';
    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[hang][lie]=='O'||qipan[hang][lie]=='X')
             {
               printf("这里已经有子了,重下吧\n请输入你要下的行和列\n");
               scanf("%d%d",&hang,&lie);
               hang--;
               lie--;
              }
            qipan[hang][lie]='O';
            system("cls");
            printqipan(qipan);
            winner=caipan(qipan);
    }
        else
        {
            printf("请玩家2下棋\n输入要下的行和列\n");
            scanf("%d%d",&hang,&lie);
            hang--;
            lie--;
            if(qipan[hang][lie]=='O'||qipan[hang][lie]=='X')
             {
               printf("这里已经有子了,重下吧\n请输入你要下的行和列\n");
               scanf("%d%d",&hang,&lie);
               hang--;
               lie--;
              }
            qipan[hang][lie]='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[3][3])
{
    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[i][j]);
            printf("\n");
        }
}

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

   if((a[0][0]==a[0][1]&&a[0][1]==a[0][2]&&a[0][0]=='X')||
       (a[1][0]==a[1][1]&&a[1][1]==a[1][2]&&a[1][0]=='X')||
       (a[2][0]==a[2][1]&&a[2][1]==a[2][2]&&a[2][0]=='X')||//行
       (a[0][0]==a[1][0]&&a[1][0]==a[2][0]&&a[0][0]=='X')||
       (a[0][1]==a[1][1]&&a[1][1]==a[2][1]&&a[0][1]=='X')||
       (a[0][2]==a[1][2]&&a[1][2]==a[2][2]&&a[0][2]=='X')||//列
       (a[0][0]==a[1][1]&&a[1][1]==a[2][2]&&a[0][0]=='X')||
       (a[0][2]==a[1][1]&&a[1][1]==a[2][0]&&a[0][2]=='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[3][3];
    void printqipan(char a[3][3]);
    int caipan(char a[3][3]);
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
        qipan[i][j]='*';
    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[hang][lie]=='O'||qipan[hang][lie]=='X')
             {
               printf("这里已经有子了,重下吧\n请输入你要下的行和列\n");
               scanf("%d%d",&hang,&lie);
               hang--;
               lie--;
              }
            qipan[hang][lie]='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[hang][lie]=='O')||(qipan[hang][lie]=='X'))
                {
                    hang=rand()%3;
                    lie=rand()%3;
                 }
                 if(qipan[hang][lie]=='*')
                    break;
            }
            qipan[hang][lie]='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[3][3])
{
    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[i][j]);
            printf("\n");
        }
}

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

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


上面是人人,下面是人机 很粗糙 还存在很多问题
想知道小甲鱼最近在做啥?请访问 -> 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-11-27 19:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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