简单的三子棋代码设计

  三子棋是一种玩法简单的棋类游戏,对战双方在3x3的棋盘上轮流下棋,先将自己的三颗棋子连成一线的玩家获胜,当棋盘下满还没有玩家获胜,则为平局。

  了解三子棋的基本玩法后,我们就可以开始设计代码了。

  首先我们需要一个棋盘,一个简单的三行三列二维数组就可以完成棋盘,之后只要将数组内容全部初始化为'  ',就完成了棋盘的设计。

  有了棋盘,就可以开始下棋了。下棋就是玩家输入坐标,程序就在输入的坐标上打印一个棋子。例如,玩家输入‘1 1’,就将我们的二维数组第一行第一列的内容改为‘ * ’。但是,数组的第一行第一列坐标是‘0 0‘,所以我们还需要对玩家输入的值进行一个‘-1’的操作。

  既然要输入坐标,当然就要判断坐标的合法性,如果玩家输入的坐标超出了我们的棋盘,就要提示玩家输入错误,重新输入,如果该位置已经被下过了,也要有对应的提示。每下完一步都要展示棋盘目前的情况,只要再定义一个函数来打印棋盘就可以了。

void show(char qipan[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    int k = 0;
    printf("   ");
    for (k = 1; k <= row; k++)
    {
        printf("%d  ", k);
    }
    printf("\n");
    for (i = 0; i < row; i++)
    {
        printf("%d  ", i + 1);
        for (j = 0; j < col; j++)
        {
            printf("% c ", qipan[i][j]);
            if (j < col - 1)
            {
                printf("|");
            }
        }
        if (i < row - 1)
        {
            printf("\n   __ __ __ \n");
        }
    }
    printf("\n \n");
}

  具体的代码可以这样操作: 

void player_move(char qipan[ROW][COL], int row, int col) //row和r表示行,col和c表示列
{
    int R = 0;
    int C = 0;
    scanf("%d%d", &R, &C);
    int r = R - 1;
    int c = C - 1;
    if (R >= 1 && R <= row  && C >= 1 && C <= col)
    {
        if (qipan[r][c] == ' ')
        {
            qipan[r][c] = '*';
            show(qipan, ROW, COL);
        }
        else
        {
            printf("该位置已被下,请重新下棋\n");
        }
    }
    else
    {
        printf("输入错误,请重新下棋\n");
    }
}

  玩家下完就是电脑下棋,两个玩家下棋和电脑智能下棋的情况暂时先不考虑。

  电脑随机下棋就是要随机生成一个坐标,坐标的值自然也要合法,通过rand()% 3,就可以得到0~2的数字,再判定下这个位置是否被下过就完成了电脑下棋的步骤。

void computer_move(char qipan[ROW][COL], int row, int col)
{
    int r = 0;
    int c = 0;
    while (1)
    {
        r = rand() % 3;
        c = rand() % 3;
        if (qipan[r][c] == ' ')
        {
            qipan[r][c] = '#';
            show(qipan, ROW, COL);
            break;
        }
    }
}

  双方都下完棋之后,就要判定是否分出胜负,分别检查三行、三列以及两条对角线是否有三个相同的、非‘  ’字符就能判断是否有一方获胜,再判断棋盘填满时有没有玩家获胜,就可以知道是否下到了平局。            

 char a = end(qipan, ROW, COL);
                 if (a == 'p')
                 {
                     printf("平局\n");
                     break;
                 }
                 if (a == '*')
                 {
                     printf("玩家胜\n");
                     break;
                 }
             computer_move(qipan, ROW, COL);
                 if (a == '#')
                 {
                     printf("电脑胜\n");
                     break;
                 }

char end(char qipan[ROW][COL], int row, int col)
{
    int r = 0;
    int c = 0;
    int count = 0;

    if (qipan[r][c] == qipan[r + 1][c + 1] && qipan[r][c] == qipan[r + 2][c + 2] && qipan[r][c] != ' ')
    {
        return qipan[r][c];
    }
    if (qipan[r][c + 2] == qipan[r + 1][c + 1] && qipan[r][c + 2] == qipan[r + 2][c] && qipan[r][c + 2] != ' ')
    {
        return qipan[r][c + 2];
    }
    for (r = 0, c = 0; r < row; r++)
    {
        if (qipan[r][c] == qipan[r][c + 1] && qipan[r][c + 1] == qipan[r][c + 2] && qipan[r][c] != ' ')
        {
            return qipan[r][c];
        }
    }
    for (r = 0,c = 0; c < col; c++)
    {
        if (qipan[r][c] == qipan[r + 1][c] && qipan[r + 1][c] == qipan[r + 2][c] && qipan[r][c] != ' ')
        {
            return qipan[r][c];
        }
    }

    for (r = 0; r < row; r++)
    {
        for (c = 0; c < col; c++)
        {
            if (qipan[r][c] == ' ')
                count++;
        }
    }
    if (count == 0)
    {
        return 'p';
    }
}

以上就是简单的一个三子棋游戏设计思路和部分代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值