您的位置:首页 > 编程语言 > C语言/C++

C语言实现简易版三子棋

2017-10-28 15:25 459 查看
//三子棋
//game.h头文件
#ifndef __GAME_H__
#define __GAME_H__

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>

#define ROW 3
#define COL 3

void Inin_Board(char arr[ROW][COL],int row,int col);
void Display_Board(char arr[ROW][COL], int row, int col);
void Computer_Put(char arr[ROW][COL], int row, int col);
void Customer_Put(char arr[ROW][COL], int row, int col);
char Check_Win(char arr[ROW][COL], int row, int col);
#endif

//game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void Inin_Board(char arr[ROW][COL], int row, int col)//初始化棋盘,使其全为空格
{
memset(arr,' ',row*col);
}
void Display_Board(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");
}
}
}
void Computer_Put(char arr[ROW][COL], int row, int col)//电脑走一步
{
printf("电脑走:\n");
while (1)
{
row = rand() % 3;
col = rand() % 3;
if (arr[row][col] == ' ')
{
break;
}
}
arr[row][col] = '@';
}
void Customer_Put(char arr[ROW][COL], int row, int col)//你走一步
{
int i = 0, j = 0;
printf("你走:\n");
printf("请输入你要走的坐标:");
while (1)
{
scanf("%d%d", &i, &j);
i--; j--;
if ((i >= 0 && i <= 2) && (j <= 2 && j >= 0))
{
if (arr[i][j] == ' ')
{
arr[i][j] = 'X';
break;
}
else
{
printf("坐标已被占用,请重新输入:");
}
}
else
{
printf("输入坐标错误,请重新输入:");
}
}
}

int Full_Board(char arr[ROW][COL], int row, int col)//判断棋盘是否下满
{
int i = 0, 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, j = 0;
for (i = 0; i < row; i++)
{
if (arr[i][0] == arr[i][1] && arr[i][0] == arr[i][2] && arr[i][0] != ' ')
{
return arr[i][1];
}
}
for (i = 0; i < col; i++)
{
if (arr[0][i] == arr[1][i] && arr[0][i] == arr[2][i] && arr[0][i] != ' ')
{
return arr[0][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];
}
else
{
if (Full_Board(arr, row, col))
{
return 'q';
}
else return ' ';
}
}

//Main.C
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#include"game.h"
void Menu()
{
printf("**************************\n");
printf("****  1.play  0.exit  ****\n");
printf("**************************\n");
}
void game()
{
char flag = 0;
char board[ROW][COL];
Inin_Board(board, ROW, COL);
Display_Board(board, ROW, COL);
while (1)
{
Computer_Put(board, ROW, COL);
Display_Board(board, ROW, COL);
if ((flag = Check_Win(board, ROW, COL)) != ' ')
break;
Customer_Put(board, ROW, COL);
Display_Board(board, ROW, COL);
if ((flag = Check_Win(board, ROW, COL)) != ' ')
break;
}
if (flag == '@')
{
printf("电脑赢!\n");
}
if (flag == 'X')
{
printf("你赢了!\n");
}
if (flag == 'q')
printf("平局\n");
}
int main()
{
int choose = 0;
srand((unsigned int)time(NULL));
do
{
Menu();
printf("请输入你的选择:");
scanf("%d", &choose);
switch (choose)
{
case 1:game();
break;
case 0:break;
default:printf("输入错误,请重新输入!\n");
break;
}

} while (choose);
fflush(stdin);
getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息