C语言实现三子棋

一 要实现三子棋有以下几个基本功能:

1.初始化棋盘:用空字符初始化

2.打印棋盘:控制打印九宫格来表示棋盘

3.玩家下棋:用X表示玩家的棋子

4.电脑随机下棋:随机生成坐标,用0表示玩家的棋子

5.判断输赢:分为玩家赢,电脑赢,平局,继续游戏四种情况

二 程序如下:

1.头文件(函数的声明)

#define _CRT_SECURE_NO_WARNINGS 1  
#ifndef  __SANZIQI_H__  
#define  __SANZIQI_H__  
  
#define ROW 3  
#define COL 3  
  
//初始化  
void InitBorad(char arr[ROW][COL], int row, int col);  
  
//显示棋盘  
void Display(char arr[ROW][COL], int row, int col);  
  
//电脑走  
void Computer(char arr[ROW][COL], int row, int col);  
  
//人走  
void Player(char arr[ROW][COL], int row, int col);  
  
//判断是否还有空格  
int Check_full(char arr[ROW][COL], int row, int col);  
  
//判断输赢  
char Is_Win(char arr[ROW][COL], int row, int col);  
  
#endif  

2.子程序

 

 

 

 
#define _CRT_SECURE_NO_WARNINGS 1  
#include   
#include   
#include   
  //初始化  
void InitBorad(char arr[ROW][COL], int row, int col)  
{  
    int i;  
    int j;  
    for (i = 0; i < row;i++)  
    for (j = 0; j < col; j++)  
        arr[i][j] = ' ';  
}  
  
//显示棋盘  
void Display(char arr[ROW][COL], int row, int col)  
{  
    int i;  
    int j;  
    printf("----------\n");  
    for (i = 0; i < row; i++)  
    {  
        printf("|");  
        for (j = 0; j < col; j++)  
        {  
            printf("%2c|", arr[i][j]);  
        }  
        printf("\n----------\n");  
    }  
}  
  
//电脑走  
void Computer(char arr[ROW][COL], int row, int col)  
{  
    srand((unsigned int)time(NULL)); //产生随机数  
    while (1)  
    {  
        int x = rand() % 3; //产生一个小于3的数  
        int y = rand() % 3;  
        if (arr[x][y] == ' ') //判断这个元素是否为空  
        {  
            arr[x][y] = 'X';  
            break;  
        }     
    }     
}  
  
//人走  
void Player(char arr[ROW][COL], int row, int col)  
{  
    int x;  
    int y;  
    while (1)  
    {  
        printf("请输入坐标:");  
        scanf("%d%d", &x, &y);  
        x--;  
        y--;  
        if ((0 <= x && x <= row - 1) && (0 <= y && y <= col - 1)) //玩家输入的坐标要在棋盘范围内  
        {  
            if (arr[x][y] == ' ')  
            {  
                arr[x][y] = 'O';  
                break;  
            }  
            else  
            {  
                printf("你输入的下标被占,请重新输入!\n");  
            }  
        }  
        else  
        {  
            printf("越界了,请重新输入!\n");  
        }     
    }  
}  
  
//判断是否还有空格  
int Check_full(char arr[ROW][COL], int row, int col)  
{  
    int i;  
    int j;  
    for (i = 0; i < row; i++)  
    {  
        for (j = 0; j < col; j++)  
        {  
            if (arr[i][j] == ' ') //判断数组中有没有空格,如果出现一次空格,就已经可以证明数组没满  
                return 0;  
        }  
    }  
    return 1;  
}  
  
//判断输赢  
char Is_Win(char arr[ROW][COL], int row, int col)  
{  
    int i;  
    if (Check_full(arr, ROW, COL) == 1) //棋盘满了没有空格,平局  
        return 'Q';  
    for (i = 0; i < row; i++)//某一行连3  
    {  
        if(arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2])  
        return arr[i][1];  
    }  
    for (i = 0; i < col; i++) //某一列连3  
    {  
        if(arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i])  
        return arr[1][i];  
    }  
    if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2]) //右对角线\连3  
        return arr[1][1];  
    if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0]) //左对角线/连3  
        return arr[1][1];  
    return ' '; //如果没有判断出谁赢并且棋盘还没满,则继续进行游戏  
}  

 

 

3.主函数

 

 

#define _CRT_SECURE_NO_WARNINGS 1  
#include   
#include   

void menu()  
{  
    printf("**************************************\n");  
    printf("*************** 1.play ***************\n");  
    printf("*************** 0.exit ***************\n");  
    printf("**************************************\n");  
}  
void game()  
{  
    char arr[ROW][COL];  
    InitBorad(arr,ROW,COL);//初始化棋盘  
    //Display(arr, ROW, COL);  
    do{  
        Computer(arr, ROW, COL); //电脑先走  
        Display(arr, ROW, COL); //打印棋盘  
        if (Is_Win(arr, ROW, COL) != ' ') //如果棋盘不为空的话,即判断出谁赢或平局,就跳出循环  
        {  
            break;  
        }  
        Player(arr, ROW, COL); //玩家走  
        Display(arr, ROW, COL); //打印棋盘  
        if (Is_Win(arr, ROW, COL) != ' ') //如果棋盘不为空的话,即判断出谁赢或平局,就跳出循环  
        {  
            break;  
        }  
    } while (Is_Win(arr, ROW, COL) == ' '); //如果棋盘没有满,同时也没有判断出输赢的话,继续执行循环,否则跳出循环  
    if (Is_Win(arr, ROW, COL) == 'O')  
        printf("玩家赢\n");  
    else if (Is_Win(arr, ROW, COL) == 'X')  
        printf("电脑赢\n");  
    else if (Is_Win(arr, ROW, COL) == 'Q')  
        printf("平局\n");  
  
}  
int main()  
{  
    int choose = 0;   
    do{  
        menu();  
        printf("请选择>");  
        scanf("%d", &choose);  
        switch (choose)  
        {  
        case 1:  
            game();  
            break;  
        case 0:  
            printf("退出游戏\n");  
            break;  
        default:  
            printf("输入错误,重新输入!\n");  
        }  
    } while (choose);  
    system("pause");  
    return 0;  
}  

运行结果如下:

C语言实现三子棋_第1张图片

C语言实现三子棋_第2张图片

C语言实现三子棋_第3张图片

你可能感兴趣的:(C)