编程三子棋游戏

用编程实现简单的三子棋游戏

先是头文件区域,声明主函数将用到的函数

  • 头文件区
#define _CRT_SECURE_NO_WARNINGS 1 
#ifndef __SANZIQI_H__     

#define __SANZIQI_H__     

#define ROW 3  
#define COL 3  
//初始化棋盘  
void InitBoard(char board[ROW][COL], int row, int col);  
//显示棋盘  
void Display(char board[ROW][COL], int row, int col);  
//玩家下棋
void Player(char board[ROW][COL], int row, int col);  
//电脑下棋  
void Computer(char board[ROW][COL], int row, int col);  
//判断输赢  
char is_win(char board[ROW][COL], int row, int col);  
//判断是否下满  
int IsNull(char board[ROW][COL], int row, int col);  

#endif
  • 主要用到的函数
//初始化棋盘
void InitBorad(char arr[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    for(i=0; ifor(j=0; j' ';
        }
    }
}

//显示棋盘
void Display(char arr[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    printf("----------\n");
    for(i=0; iprintf("|");
        for(j=0; jprintf("%2c|",arr[i][j]);
        }
        printf("\n----------\n");
    }
}

//电脑下棋
void Computer(char arr[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    srand((unsigned int)time(NULL));
    while(1)
    {
        i = rand() % ROW;
        j = rand() % COL;
        if(arr[i][j] == ' ')
        {
            arr[i][j] = 'x';
            break;
        }
    }
}

//玩家下棋
void Player(char arr[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    while(1)
    {
        printf("请输入要下的棋的坐标:");
        scanf("%d,%d",&i,&j);
        i--;
        j--;
        if((0<=i && i<=row-1) && (0<=j && j<=col-1))
        {
        if(arr[i][j] == ' ')
        {
            arr[i][j] = 'o';
            break;
        }
        else
        {
            printf("该位置已有棋子\n");
        }
        }
        else
        {
          printf("输出错误,请重新输入。");
        }
    }
}


//判断输赢
char is_win(char arr[ROW][COL], int row, int col)
{  

    int i = 0;  
    for (i = 0; i < row; i++)  
    {  
        if (((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2])) && (arr[i][1] != ' '))  
        {  
            return arr[i][1];  
        }  

    }  
    for (i = 0; i < col; i++)  
    {  
        if (((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i])) && (arr[1][i] != ' '))  
        {  
            return arr[1][i];  
        }  

    }  
    if (((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2])) && (arr[1][1] != ' '))  
    {  
        return arr[1][1];  
    }  
    if (((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0])) && (arr[1][1] != ' '))  
    {  
        return arr[1][1];  
    }  
    if (IsNull(arr,ROW, COL))  
    {  
        return 'q';  
    }  
    return ' ';  
}  
//棋盘是否下满
int IsNull(char arr[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    for(i=0; ifor(j=0; jif(arr[i][j] == ' ')
            {
            return 0;
            }
        }
    }
    return 1;
}
  • 主函数区
#define _CRT_SECURE_NO_WARNINGS 1 

#include 
#include 
#include 

#include "SANZIQI.h"
void mune()
{
    printf("********************\n");
    printf("*    1.开始游戏    *\n");
    printf("*    0.结束游戏    *\n");
    printf("********************\n");
}
void game()
{
    int n = 0;
    char arr[ROW][COL];        //定义棋盘
    InitBorad(arr, ROW, COL);   //初始化
    Display(arr, ROW, COL);
    while(1)
    {
        //电脑下棋
        Computer(arr,ROW,COL);
        printf("电脑的回合:\n");
        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;
        }
    }
    if(is_win(arr,ROW,COL) == 'x')
    {
        printf("电脑赢。\n");
    }
    if(is_win(arr,ROW,COL) == 'o')
    {
        printf("玩家赢。\n");
    }
    if(is_win(arr,ROW,COL) == 'q')
    {
        printf("平局。\n");
    }
}


int main()
{
    int i = 0;
    do
    {
        mune();
        printf("请选择:");
        scanf("%d", &i);
        switch(i)
        {
        case 1:
            game();
            break;
        case 0:
            printf("结束游戏\n");
            break;
        default:
            printf("输出错误\n");
            break;
        }
    }while(i);
    return 0;
}

你可能感兴趣的:(三子棋游戏)