用C语言实现双人对战五子棋游戏的思路和代码

先说思路

1,输出图像

先用15x15的二维数组来模拟棋盘并且靠遍历循环输出棋盘图像,并初始化为0。之后靠time变量的正负来判断该由哪位玩家输入,之后让玩家一输入点位的X,Y值,将对应的棋子位置的数组元素变为1,玩家二输入的地点变成另一个值,2,3,4...都可以,不能和玩家一一样。之后遍历输出时,为零的输出“+”,为1的输出“O”,为二的输出“X”;这样子就可以区分输入了。

2,判定输赢

判定输赢的条件有四个:

1.左斜着连五个

2.右斜着连五个

3.水平

4 竖直

相应的,这个也需要遍历语句和IF语句进行判别。遍历就不说了,看代码就行。IF语句涉及到算法,

首先看向左斜着连5个的,那如果向左斜着连5个,那么就意味着如果选一个最左边的数作为起始点,那么向右每一个斜着连着的旗子,它的Y值都要加以X值也要加以,所以最左边的这个棋子,它的最大值不能大于15-5再减1,也就是9。

同理,向右斜着的5个棋子,他最右面的棋子,最小X值不能小于4。

竖着连着的棋子,最上面棋子Y值的不能小于9。

水平连着的棋子,最左边的棋子的X值最大不能超过九。

这个就是最主要需要注意的点之后,通过先判断棋子的X值,Y值是否符合范围之后,在相应的范围里进行判定是否胜利,如果胜利则跳到开头,并且加上胜利的输出语句,如果并没有胜利,那么就开始新的轮回。

代码

 

#include<stdio.h>

int main()
{
    int cb[15][15];
    for(int i=0;i<15;i++)
    {
        for(int j=0;j<15;j++)
        {
            cb[i][j]=0;
        }
    }
    int time=1,x=0,y=0,z=0,w=0;
    five:
first:    if(time>0)
    {
        printf("玩家一请输入落子的行与列;(形式:(y,x))\n");
        scanf("%d,%d",&x,&y);
        if(x>14||y>14)
        {
            printf("您输入错误!请重新输入!"); 
            goto first;      
        }
        time*=-1;
        cb[x][y]=1;
        
    }
    else
    {
        printf("玩家二请输入落子的行与列;(形式:(y,x))\n");
        scanf("%d,%d",&z,&w);
        if(z>14||w>14)
        {
            printf("您输入错误!请重新输入!"); 
            goto first;
        }
        time*=-1;
        cb[z][w]=2;    
    }
    for(int i=0;i<15;i++)
    {
        for(int j=0;j<15;j++)
        {
            if(cb[i][j]==0)
            {
                printf("+ ");
            }
            if(cb[i][j]==1)
            {
                printf("O ");
            }
            if(cb[i][j]==2)
            {
                printf("X ");
            }
        }
        printf("\n");
    }    
    //判定胜负:1,左斜着连。2,右斜着连。3,水平。4,竖直。
    int wxy=0;
    for(int cpx=0;cpx<15;cpx++)
    {
        for(int cpy=0;cpy<15;cpy++)
        {
            if(cpx<=10&&cpy<=10)
            {
                if(cb[cpx][cpy]==1&&cb[cpx+1][cpy+1]==1&&cb[cpx+2][cpy+2]==1&&cb[cpx+3][cpy+3]==1&&cb[cpx+4][cpy+4]==1)
                {
                    printf("恭喜玩家一胜利!是否要再对战一局?\n 如果是,请输入 1,如果不是,请输入 2 。\n");
                        scanf("%d",&wxy);
                        if(wxy==1)
                        {
                            goto five;
                        }
                        else
                        {
                            goto four;    
                        }
                }
                if(cb[cpx][cpy]==2&&cb[cpx+1][cpy+1]==2&&cb[cpx+2][cpy+2]==2&&cb[cpx+3][cpy+3]==2&&cb[cpx+4][cpy+4]==2)
                {
                    printf("恭喜玩家二胜利!是否要再对战一局?\n 如果是,请输入 1,如果不是,请输入 2 。\n");
                        scanf("%d",&wxy);
                        if(wxy==1)
                        {
                            goto five;
                        }
                        else
                        {
                            goto four;    
                        }
                }
            }
            if(cpx>=4&&cpy<=10)
            {
                if(cb[cpx][cpy]==1&&cb[cpx+1][cpy-1]==1&&cb[cpx+2][cpy-2]==1&&cb[cpx+3][cpy-3]==1&&cb[cpx+4][cpy-4]==1)    
                {
                    printf("恭喜玩家一胜利!是否要再对战一局?\n 如果是,请输入 1,如果不是,请输入 2 。\n");
                        scanf("%d",&wxy);
                        if(wxy==1)
                        {
                            goto five;
                        }
                        else
                        {
                            goto four;    
                        }
                }
                if(cb[cpx][cpy]==2&&cb[cpx+1][cpy-1]==2&&cb[cpx+2][cpy-2]==2&&cb[cpx+3][cpy-3]==2&&cb[cpx+4][cpy-4]==2)    
                {
                    printf("恭喜玩家二胜利!是否要再对战一局?\n 如果是,请输入 1,如果不是,请输入 2 。\n");
                        scanf("%d",&wxy);
                        if(wxy==1)
                        {
                            goto five;
                        }
                        else
                        {
                            goto four;    
                        }
                }
            }
            if(cpx<=10)
            {
                if(cb[cpx][cpy]==1&&cb[cpx+1][cpy]==1&&cb[cpx+2][cpy]==1&&cb[cpx+3][cpy]==1&&cb[cpx+4][cpy]==1)
                {
                    printf("恭喜玩家一胜利!是否要再对战一局?\n 如果是,请输入 1,如果不是,请输入 2 。\n");
                        scanf("%d",&wxy);
                        if(wxy==1)
                        {
                            goto five;
                        }
                        else
                        {
                            goto four;    
                        }
                }
                if(cb[cpx][cpy]==2&&cb[cpx+1][cpy]==2&&cb[cpx+2][cpy]==2&&cb[cpx+3][cpy]==2&&cb[cpx+4][cpy]==2)
                {
                    printf("恭喜玩家二胜利!是否要再对战一局?\n 如果是,请输入 1,如果不是,请输入 2 。\n");
                     scanf("%d",&wxy);
                    if(wxy==1)
                    {
                        goto five;
                    }
                    else
                    {
                        goto four;    
                    }
                }
            }
            if(cpy<=10)
            {
                if(cb[cpx][cpy]==1&&cb[cpx][cpy+1]==1&&cb[cpx][cpy+2]==1&&cb[cpx][cpy+3]==1&&cb[cpx][cpy+4]==1)
                {
                    printf("恭喜玩家一胜利!是否要再对战一局?\n 如果是,请输入 1,如果不是,请输入 2 。\n");
                        scanf("%d",&wxy);
                        if(wxy==1)
                        {
                            goto five;
                        }
                        else
                        {
                            goto four;    
                        }
                }
                if(cb[cpx][cpy]==2&&cb[cpx][cpy+1]==2&&cb[cpx][cpy+2]==2&&cb[cpx][cpy+3]==2&&cb[cpx][cpy+4]==2)
                {
                    printf("恭喜玩家二胜利!是否要再对战一局?\n 如果是,请输入 1,如果不是,请输入 2 。\n");
                    scanf("%d",&wxy);
                    if(wxy==1)
                    {
                        goto five;
                    }
                    else
                    {
                        goto four;    
                    }
                }
            }
        }
    }
    goto first;
four:    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值