简单的五子棋

#define _CRT_SECURE_NO_WARNINGS
#define MAX_ROW 11
#define MAX_COL 11
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int x = 0;
int y = 0;
//初始化棋盘
void init(char chessBoard[MAX_ROW][MAX_COL])
{
    for (int row = 1; row <= 10; row++)
    {
        for (int col = 1; col <= 10; col++)
        {
            chessBoard[row][col] = ' ';
        }
    }
}

//打印棋盘
void print_chessBoard(char chessBoard[MAX_ROW][MAX_COL])
    {
        printf("+---+---+---+---+---+---+---+---+---+---+\n");
        for (int row = 1; row <= 10; row++)
        {
            printf("| %c | %c | %c | %c | %c | %c | %c | %c | %c | %c |\n",chessBoard[row][1],
                chessBoard[row][2], chessBoard[row][3], chessBoard[row][4], chessBoard[row][5],
                chessBoard[row][6],chessBoard[row][7], chessBoard[row][8], chessBoard[row][9],
                chessBoard[row][10] );
            printf("+---+---+---+---+---+---+---+---+---+---+\n");
        }
    }

//玩家落子
void playerMove(char chessBoard[MAX_ROW][MAX_COL])
{
    int row = 0;
    int col = 0;
    printf("轮到你了!\n");
    
    
    do
    {
        printf("请输入坐标:>");
        scanf("%d %d", &row, &col);
        if (row <= 0 || row >= MAX_ROW || col <= 0 || col >= MAX_COL)
        {
            printf("超出范围,请重试\n");
            continue;
        }
            
        if (chessBoard[row][col] != ' ')
        {
            printf("此处已经有子了\n");
            continue;
            
        }
        else
        {
            chessBoard[row][col] = 'X';
            x = row;
            y = col;
            break;
        }
    } while (1);
}

//电脑落子
void computerMove(char chessBoard[MAX_ROW][MAX_COL]) 
{
    

    while (1)
    {
        int row = rand() % 5;
        int col = rand() % 5;
        if (row >= 3)
        {
            if (chessBoard[-(row/2) +x][-(col/2) + y] == ' ')
            {
                chessBoard[-(row/2) +x][-(col/2) +y] = 'O';
                break;
            }
            else
            {
                continue;
            }
        }
        if (row < 3)
        {
            if (chessBoard[row + x][col + y] == ' ')
            {
                chessBoard[row + x][col + y] = 'O';
                break;
            }
            else
            {
                continue;
            }
        }

    }
}

//判断棋盘是否已满
int isFull(char chessBoard[MAX_ROW][MAX_COL]) 
{
    for (int row = 1; row < MAX_ROW; row++) 
    {
        for (int col = 1; col < MAX_COL; col++) 
        {
            if (chessBoard[row][col] == ' ')
            {
                return 0;
            }

        }
    }
    return 1;
}

//判断谁获胜
char isWin(char chessBoard[MAX_ROW][MAX_COL])
{
    for (int row = 1; row < MAX_ROW; row++)
    {
        for (int col = 1; col <= 5; col++)
        {
            if (chessBoard[row][col] != ' '
                && chessBoard[row][col] == chessBoard[row][col+1]
                && chessBoard[row][col] == chessBoard[row][col+2]
                && chessBoard[row][col] == chessBoard[row][col+3]
                && chessBoard[row][col] == chessBoard[row][col+4]
                )
            {
                return chessBoard[row][col];
            }

        }

        
    }
    for (int col = 1; col < MAX_COL; col++) 
    {
        for(int row=1;row<=5;row++)
        { 
            if (
                chessBoard[row][col] != ' '
                && chessBoard[row][col] == chessBoard[row + 1][col]
                && chessBoard[row][col] == chessBoard[row + 2][col]
                && chessBoard[row][col] == chessBoard[row + 3][col]
                && chessBoard[row][col] == chessBoard[row + 4][col]
                )
            {
                return chessBoard[row][col];
            }
        }
        
    }

    for (int row = 1; row <= 5; row++)
    {
        for (int col = 1; col <= 5; col++)
        {
            if (
                chessBoard[row][col] != ' '
                &&chessBoard[row][col] == chessBoard[row + 1][col + 1]
                && chessBoard[row][col] == chessBoard[row + 2][col + 2]
                && chessBoard[row][col] == chessBoard[row + 3][col + 3]
                && chessBoard[row][col] == chessBoard[row + 4][col + 4]
                )
            {
                return chessBoard[row][col];
            }
        }
    }


    for (int row = 10; row >= 5; row--)
    {
        for (int col = 1; col <= 5; col++)
        {
            if (
                chessBoard[row][col] != ' '
                &&chessBoard[row][col]==chessBoard[row-1][col+1]
                && chessBoard[row][col] == chessBoard[row - 2][col + 2]
                && chessBoard[row][col] == chessBoard[row - 3][col + 3]
                && chessBoard[row][col] == chessBoard[row - 4][col + 4]
                )
            {
                return chessBoard[row][col];
            }
        }
    }
    
    if (isFull(chessBoard)) 
    {
        return 'q';
    }
    return ' ';
}

//游戏主体
void game() 
{
    char chessBoard[MAX_ROW][MAX_COL] = { 0 };
    init(chessBoard);
    char winner = ' ';
    while (1) 
    {
        
        system("cls");
        print_chessBoard(chessBoard);
        playerMove(chessBoard);
        winner = isWin(chessBoard);
        if (winner != ' ') 
        {
            break;
        }
        computerMove(chessBoard);
        winner = isWin(chessBoard);
        if (winner != ' ')
        {
            break;
        }
        
    }
    print_chessBoard(chessBoard);
    if (winner == 'X')
    {
        
        printf("恭喜您, 您赢了!\n");
    }
    else if (winner == 'O')
    {
        
        printf("哈哈,您连人工智障都下不过!\n");
    }
    else 
    {
        
        printf("您只能和人工智障打平手!!\n");
    }
}

void menu() 
{
    printf("--------------------------\n");
    printf("--------1.开始游戏--------\n");
    printf("--------0.退出游戏--------\n");
    printf("--------------------------\n");
    
    
}
int main()
{
    int choice = 0;
    srand((unsigned int)time(0));
    do
     {
        menu();
        printf("请输入你的选择:");
        scanf("%d", &choice);
        switch(choice)
        {
        case 1:
            game();
            break;
        
        case 0:
            printf("退出游戏,GOODBYE!!!!!\n");
            break;
    
        default :
            printf("输入错误!请重新输入!\n");
            break;
        }
    } while (choice != 0);
    system("pause");
    return 0;
}
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值