三子棋进阶版(N子棋)

我们今天要分享的题目是三子棋,相信大家对于三子棋并不陌生

我们在设计三子棋的时候,脑袋一定不要混,不要害怕

做任何题目脑袋里要慢慢形成框架

比如本题:三子棋

游戏开始要有游戏界面,进入游戏界面时候,要选择开始游戏(1),退出游戏(0)

当我们选择开始游戏的时候要有游戏内的棋盘,所以要先打印一个棋盘

我们脑海中想到的是棋盘,这里拿三子棋举例

3*3的网格结构所以需要的符号有---,这个用来挡住空格 的下部分,|这个用来挡住空格的两侧。

当我们设计好棋盘之后,肯定是填棋盘,放棋子

我们放完电脑放

在每次放完之后需要判断输赢,平局和继续比赛。

判断输赢无非就是,行是三个,列是三个,两个对角线是三个

平局就是我们在判断输赢之后并没有结论

这时候如果棋盘没有空格就是满了,就是平局

若还有则游戏继续。

我们在分析完题目之后,话不多说直接上代码

我们这个代码可以实现N子棋,并不局限于三子棋,具体改变可以改变宏定义中的大小。

#include    //输入输出函数头文件
#include   //rand头文件
#include     //time头文件
#define Line 5   //宏定义line为3
#define Row 5    //宏定义row为3
//初始化棋盘
void Board_1(char ch[Line][Row],int line,int row)
{
    int i = 0;
    int j = 0;
    for(i=0;i\n");
        scanf("%d %d",&i,&j);
        if((i>=1&&i<=line)&&(j>=1&&j<=row))
        {
            if(ch[i-1][j-1]!=' ')
            {
                printf("输入的坐标被占用,请重新输入:\n");
                continue;
            }
            else
            {
                ch[i-1][j-1] = '*';
                Board_2(ch,Line,Row);
                break;
            }
        }      
        else
        {
            printf("输入坐标错误,请重新输入:\n");
            continue;
        }
    }
}
//电脑下棋
void Computer(char ch[Line][Row],int line,int row)
{

    printf("电脑下棋:> \n");
    int x = 0;
    int y = 0;
    while(1)
    {
        x = rand()%line;   //随机数生成
        y = rand()%row;
        if(ch[x][y]== ' ')
        {
            ch[x][y] = 'a';
            Board_2(ch,Line,Row);
            break;
        }
    }
}
//判断是否下满,下满了就平局
int Is_full(char ch[Line][Row],int line,int row)
{
    int i = 0;
    int j = 0;
    for(i=0;i0;i--,j--)//对角线左下右上
    {
        if(ch[i][j]!=ch[i-1][j-1])
        {
            flag4 = 1;
            break;
        }
    }
    if(flag4==0)
    return ch[0][0];

    int full = Is_full(ch,Line,Row);
    if(full==1)
    {
        return 'C';
    }
    return 'Q';

}
void Game ()
{
    char ret = 0;
    char ch[Line][Row] = {0};
    Board_1(ch,Line,Row);//初始化棋盘
    Board_2(ch,Line,Row);//打印棋盘
    while(1)
    {
        People(ch,Line,Row);//玩家下棋
        ret = Win_or(ch,Line,Row);//比较比赛战况
        if(ret != 'C')
        break;
        Computer(ch,Line,Row);//电脑下棋
        ret = Win_or(ch,Line,Row);
        if(ret != 'C')
        break;
    }
    if(ret == '*')
    printf("恭喜你赢得比赛 (*^o^*)\n");
    if(ret == 'a')
    printf("你输了 ╮( ̄▽ ̄"")╭\n");
    if(ret == 'Q')
    printf("平局,不分伯仲\n");
}
//菜单
void Menu()
{
    int a = 0;
    do
    {
        printf("*********************\n");
        printf("********1.play*******\n");
        printf("********0.exit*******\n");
        printf("*********************\n");
        printf("1-开始游戏  0-退出游戏 \n");
        scanf("%d",&a);
        if(a==1)
        {
            printf("开始比赛!!!\n");
            Game();
        }
        else if(a==0)
        {
            printf("退出游戏成功!!!\n");
            break;
        }
        else
        {
            printf("输入错误,请重新输入:> ");
            continue;
        }
    } while (a);
    
}
int main ()
{
    srand((unsigned int)time(NULL));//写rand之前要写这个
    Menu();
    return 0;
}

你可能感兴趣的:(数学建模,算法,c语言,开发语言)