c语言实现井字棋和五子棋(附源代码)

#include<stdio.h>
#define row 3
#define col 3

void print_borad(char borad[row][col],int a,int b)//打印棋盘函数 
{
    int i=0,j=0,n=0;
    for(n=0;n<row;n++)
            {
                printf("_____");
            }
            printf("\n");
    for(i=0;i<row;i++)
        {
            for(j=0;j<col;j++)
            {
                printf("  %c |",borad[i][j]);
            }
            printf("\n");
            for(n=0;n<row;n++)
            {
                printf("_____");
            }
            printf("\n");
        }
}

int win(char borad[row][col],int a,int b)//判断输赢函数 
{
    int i,j,sum=0;
//右对角线相连    
    for(i=0;i<row-1;i++)
    {
        if(borad[i][i]==borad[i+1][i+1]&&borad[i][i]!=' ')
        {
            sum++;
        }
    }
    if(sum==row-1)
    {
    if(borad[i][i]=='x')
    {
        printf("x方胜利\n");
    }
    else
    {
        printf("o方胜利\n"); 
    }
    return 0;
    }
//左对角线相连    
    sum=0;
    for(i=0;i<row-1;i++)
    {
    
        if(borad[i][row-i-1]==borad[i+1][row-i-2]&&borad[i][row-i-1]!=' ')
        {
            sum++;
        }
    }
    if(sum==row-1)
    {
    if(borad[i][row-i-1]=='x')
    {
        printf("x方胜利\n");
    }
    else
    {
        printf("o方胜利\n"); 
    }
    return 0;
    }
//整行相连    
    sum=0;
    for(i=0;i<row;i++)
    {
        for(j=0;j<col-1;j++)
        {
        if(borad[i][j]==borad[i][j+1]&&borad[i][j]!=' ')
        {
        sum++;    
        }    
        }
        if(sum!=row-1)
        {
            sum=0;
        }
        else if(sum=row-1)
        {
        break;
        }
    }
    if(sum==row-1)
    {
    if(borad[i][j]=='x')
    {
        printf("x方胜利\n");
    }
    else
    {
        printf("o方胜利\n"); 
    }
    return 0;
    }
//整列相连    
    sum=0;
    for(i=0;i<col;i++)
    {
        for(j=0;j<row-1;j++)
        {
            if(borad[j][i]==borad[j+1][i]&&borad[j][i]!=' ')
            {
                sum++;
            }
        }
        if(sum!=row-1)
        {
            sum=0;
        }
        else if(sum=row-1)
        {
        break;
        }
    }
    if(sum==row-1)
    {
    if(borad[j][i]=='x')
    {
        printf("x方胜利\n");
    }
    else
    {
        printf("o方胜利\n"); 
    }
    return 0;
    } 
    
    int n=0;//判断平局 
    for(i=0;i<row;i++)
             {
                 for(j=0;j<col;j++)
                 {
                     if(borad[i][j]!=' ')
                     {
                     n++;    
                    }
                }
             }
             if(n==row*col)
             {
                 printf("平局\n");
                 return 0; 
             }
    
    if(sum!=row-1)
    return 1;
}

void play_game()//游戏运行主函数 
{
    int i=0,j=0;
    int n;
    char borad[row][col];
    for(i=0;i<row;i++)
        {
            for(j=0;j<col;j++)
            {
                borad[i][j]=' ';
            }
        }
        print_borad(borad,row,col);
        do
        {
             int r=0,c=0;
             
        printf("请第一位玩家输入棋格的坐标\n");
        scanf("%d %d",&r,&c);
             borad[r-1][c-1]='x';
        print_borad(borad,row,col);
        int t=win(borad,row,col);
        if(t==0)
        break;    
        printf("请第二位玩家输入棋格的坐标\n"); 
        scanf("%d %d",&r,&c);
             borad[r-1][c-1]='o';
        print_borad(borad,row,col);
        win(borad,row,col);
        if(t==0)
        break;
        }while(1);
}

int main()
{
    int x=0;
    
    printf("开始游戏请输入1,结束游戏请输入0\n");
    scanf("%d",&x);
    
    do
    {
    switch(x)
    {
        case 1:
             {
                printf("游戏开始\n");
                play_game();
                break;
             }
        case 0:
            {
                return 0;
            }
        default:
        {
            printf("操作错误,请重新输入\n");
            scanf("%d",&x);
            break;
        }         
    }
            printf("继续游戏请输入1,退出游戏请输入0\n");
            scanf("%d",&x);
    }while(x!=0); 
    return 0;

只需将宏定义行列改为5,即可实现五子棋

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值