C语言编写三子棋完整代码(分三个文件)

来源:互联网 发布:投影仪检测软件 编辑:程序博客网 时间:2024/06/05 01:34

1.game.h 头文件

#ifndef   __GAME_H__   //防止头文件被重复引用#define   __GAME_H__#include <stdio.h>#include <string.h>#include <windows.h>#include <time.h>#define ROW 3#define COL 3void InitBoard(char arr[ROW][COL], int row, int col);void Display(char arr[ROW][COL], int row, int col);void Manplay(char arr[ROW][COL], int row, int col);char is_Win(char arr[ROW][COL], int row, int col);void Computerplay(char arr[ROW][COL], int row, int col);#endif  //__GAME_H__

2.game.c 游戏所有的实现代码

#include "game.h"void InitBoard(char arr[ROW][COL], int row, int col)//初始化棋盘,把二维数组的值全部初始化为空格{    memset(arr, ' ', sizeof(arr[0][0])*col*row);}void Display(char arr[ROW][COL], int row, int col)//打印棋盘{    int i = 0;    for (i = 0; i < row; ++i)    {        printf(" %c | %c | %c \n",arr[i][0],arr[i][1],arr[i][2]);        if (i != row - 1)        {            printf("--- --- ---\n");        }    }    printf("\n");}void Manplay(char arr[ROW][COL], int row, int col)//玩家走{    int i = 0;    int j = 0;    while (1)    {        printf("请输入坐标(x,y):");        scanf_s("%d%d", &i, &j);        if (i >= 1 && i <= 3 && j >= 1 && j <= 3)        {            if (arr[i - 1][j - 1] == ' ')//判断位置是否为空            {                arr[i - 1][j - 1] = 'X';                break;            }            else            {                printf("该位置被占\n");            }        }        else        {            printf("坐标不合法\n");        }    }}int is_Full(char arr[ROW][COL], int row, int col)//判断棋盘是否满{    int i = 0;    int j = 0;    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 j = 0;    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 (j = 0; j < col; j++) //判断列    {        if ((arr[0][j] == arr[1][j]) && (arr[1][j] == arr[2][j]) && (arr[1][j]) != ' ')        {            return arr[1][j];        }    }    if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]) && (arr[0][0] != ' ')) //判断斜列    {        return arr[1][1];    }    else if ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]) && (arr[0][0] != ' '))    {        return arr[1][1];    }    else if (is_Full(arr, row, col) == 1)    {        return 'w';    }    else    {        return ' ';    }}void Computerplay(char arr[ROW][COL], int row, int col)//电脑走{    int i = 0;    int j = 0;    while (1)    {        i = rand() % 3;        j = rand() % 3;        if (arr[i][j] == ' ')        {            arr[i][j] = 'O';            break;        }    }    system("cls");//清屏}

3.Tic Tac Toe.c 游戏测试代码

#include "game.h"void game(){    char ret = ' ';    char Board[ROW][COL] = { 0 };    InitBoard(Board, ROW, COL);    Display(Board, ROW, COL);    srand((unsigned int) time(NULL));    while (1)    {        Manplay(Board, ROW, COL);        Display(Board, ROW, COL);        ret = is_Win(Board, ROW, COL);        if (ret != ' ')            break;        Computerplay(Board, ROW, COL);        Display(Board, ROW, COL);        ret = is_Win(Board, ROW, COL);        if (ret != ' ')            break;    }    if (ret == 'X')        printf("这局玩家胜利\n");    else if (ret == 'O')        printf("这局电脑胜利\n");    else if (ret == 'w')    {        printf("平局\n");    }}void menu(){    printf("**********************************\n");    printf("***** 1. play       2. exit ******\n");    printf("**********************************\n");}void test(){    do    {        menu();        printf("请选择:");        int input = 0;        scanf_s("%d", &input);        switch (input)        {        case 1:            game();            break;        case 2:            exit(0);            break;        default:            printf("输入错误\n");            break;        }    } while (1);}int main(){    test();}
原创粉丝点击