三子棋的简单实现

来源:互联网 发布:mac看不了b站 编辑:程序博客网 时间:2024/06/05 07:25

//game.h

#ifndef _GAME_H#define _GAME_H#define ROW 3#define COL 3#include <stdio.h>#include <time.h>void Display(char arr[ROW][COL], int row, int col);void InitBoard(char arr[ROW][COL], int row, int col);void computer_move(char arr[ROW][COL]);void player_move(char arr[ROW][COL], int row, int col);char check_win(char arr[ROW][COL], int row, int col);#endif  //end _GAME_H_

//game.c

#define _CRT_SECURE_NO_WARNINGS#include "game.h"int check_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 check_win(char arr[ROW][COL], int row, int col){    int i = 0;    int j = 0;    for (i = 0; i < row; i++)    {        if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != ' ')            return arr[i][0];    }    for (j = 0; j < row; j++)    {        if (arr[0][j] == arr[1][j] && arr[1][j] == arr[2][j] && arr[0][j] != ' ')            return arr[0][j];    }    if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]) && (arr[0][0] != ' '))        return arr[0][0];    if ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]) && (arr[0][2] != ' '))        return arr[0][2];    if (check_full(arr, row, col))    {        return 'q';    }    return ' ';}void computer_move(char arr[ROW][COL]){    int x = 0;    int y = 0;    while (1)    {        x = rand() % 3;        y = rand() % 3;        if (arr[x][y] == ' ')        {            printf("电脑走\n");            arr[x][y] = 'O';            Display(arr, ROW, COL);            break;        }    }}void player_move(char arr[ROW][COL], int row, int col){    int x = 0;    int y = 0;    while (1)    {        printf("请输入坐标>:");        scanf("%d%d", &x, &y);        printf("玩家走\n");        x--;        y--;        if ((x >= 0) && (x <= 2) && (y >= 0) && (y <= 2) && (arr[x][y] == ' '))        {            arr[x][y] = 'X';            Display(arr, ROW, COL);            break;        }        printf("坐标有误");    }}void Display(char arr[ROW][COL], int row, int col){    int i = 0;    int j = 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 InitBoard(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++)        {            arr[i][j] = ' ';        }    }}

//test.c

#define _CRT_SECURE_NO_WARNINGS#include "game.h"void menu(){    printf("*******************************\n");    printf("****   1.play  0.exit  ********\n");    printf("*******************************\n");}void game(){    int ret = 0;    char arr[ROW][COL];    InitBoard(arr, ROW, COL);    Display(arr, ROW, COL);    do    {         computer_move(arr);         ret = check_win(arr, ROW, COL);         if (ret != ' ')         {             break;         }         player_move(arr, ROW, COL);         ret = check_win(arr, ROW, COL);    }     while (ret == ' ');    if (ret == 'X')        printf("玩家赢\n");    else  if (ret == 'O')        printf("电脑赢\n");    else if (ret == 'q')        printf("平局\n");}void test(){    int input = 0;    srand((unsigned)time(NULL));    do    {        menu();        printf("请选择>:");        scanf("%d", &input);        switch (input)        {        case 1:            game();            break;        case 0:            break;        default:            printf("选择错误");            break;        }    } while (input);}int main(){     test();    return 0;}