本游戏利用了三个文件:
1.主函数文件:包含了游戏的主循环
2.源函数文件:包含了所有函数的具体代码
3.函数集头文件:包含了所有函数的声明
主函数:
#include"函数集.h"
//char arr1[3][3] = { '0','0','0','0','0','0','0','0','0' };
char arr1[3][3] = { 32,32,32,32,32,32,32,32,32};//游戏数组
int main() {
//此菜单用于启动游戏,退出游戏和选择模式
manu();
//此处是人机模式的启动监测点
if (CPcheck == 1) //游戏主线,包含两个分支(模式选择),多个游戏子分支
{
system("cls");
printf("\n**********开始人机模式**********\n");
while (1) //人机模式循环
{
system("cls");
printf("\n******第%d轮******\n", times);
Chessboard(arr1);//刷新棋盘
playermove_X(arr1);//玩家操作
Chessboard(arr1);//刷新棋盘
char ret = judge(arr1);//检测游戏进度
if (ret == 'X') {
printf("\n\n玩家-X-获胜!游戏结束!\n\n");
break;
}
else if (ret == 'O') {
printf("\n\n电脑获胜!游戏结束!\n\n");
break;
}
else if (ret == 'E') {
printf("\n\n势均力敌!游戏结束!\n\n");
break;
}
computermove_O(arr1);//电脑操作
ret = judge(arr1);//检测游戏进度
if (ret == 'X') {
printf("\n\n玩家-X-获胜!游戏结束!\n\n");
break;
}
else if (ret == 'O') {
printf("\n\n电脑获胜!游戏结束!\n\n");
break;
}
else if (ret == 'E') {
printf("\n\n势均力敌!游戏结束!\n\n");
break;
}
times++;
}
}
else if (PPcheck == 1) {
system("cls");
printf("\n**********开始双人对战模式**********\n");
while (1) //双人模式循环
{
system("cls");
printf("\n******第%d轮******\n", times);
Chessboard(arr1);//刷新棋盘
playermove_X(arr1);//玩家X操作
Chessboard(arr1);//刷新棋盘
char ret = judge(arr1);//检测游戏进度
if (ret == 'X') {
printf("\n\n玩家-X-获胜!游戏结束!\n\n");
break;
}
else if (ret == 'O') {
printf("\n\n玩家-O-获胜!游戏结束!\n\n");
break;
}
else if (ret == 'E') {
printf("\n\n势均力敌!游戏结束!\n\n");
break;
}
playermove_O(arr1);//玩家O操作
ret = judge(arr1);//检测游戏进度
if (ret == 'X') {
printf("\n\n玩家-X-获胜!游戏结束!\n\n");
break;
}
else if (ret == 'O') {
printf("\n\n玩家-O-获胜!游戏结束!\n\n");
break;
}
else if (ret == 'E') {
printf("\n\n势均力敌!游戏结束!\n\n");
break;
}
times++;
}
}else {printf("已关闭游戏!\n");}
return 0;
}
源函数:
#include"函数集.h"
int row = 3;
int col = 3;
int times = 1;
int CPcheck = 0;
int PPcheck = 0;
//一阶子菜单函数(用于选择游戏模式)
void manu_1() {
printf("********************选择游戏模式********************\n输入1人机对战 \n输入2双人对战\n\n");
printf("请输入:\n");
int x = 0;
while ((scanf_s("%d", &x)) != EOF) {
if (x == 1) {
CPcheck = 1;
break;
}
else if (x == 2) {
PPcheck = 1;
break;
}
else {
printf("无效字符,请重新输入:\n");
}
}
}
//主菜单函数
void manu() {
printf("********************进入选项********************\n输入1开始游戏\n输入2退出游戏\n\n");
printf("请输入:\n");
int x = 0;
while ((scanf_s("%d",&x)) != EOF) {
if (x==1) {
manu_1();
break;
}else if (x == 2) {
break;
}else {
printf("无效字符,请重新输入:\n");
}
}
}
//棋盘函数
void Chessboard(char arr1[3][3]) {
printf("\n");
for (int i = 0; i <= row- 1; i++)
{
for (int j = 0; j <= col - 1; j++)
{
printf(" %c ",arr1[i][j]);
if (j != 2) {printf("|");}
}
printf("\n");
if(i != 2){ printf("-----------\n"); }
}
}
//玩家X下棋
void playermove_X(char arr1[3][3]) {
int a, b;
printf("玩家X下棋:");
while (scanf_s("%d %d",&a,&b)!=EOF) {
if ((arr1[a - 1][b - 1] == 32)&&(arr1[a-1][b-1]!='O')) {
arr1[a - 1][b - 1] = 'X';
break;
}
else {
printf("*******无效位置重新下棋!********\n");
printf("玩家X下棋:");
}
}
}
//玩家O下棋
void playermove_O(char arr1[3][3]) {
int a, b;
printf("玩家O下棋:");
while (scanf_s("%d %d", &a, &b) != EOF) {
if ((arr1[a - 1][b - 1] == 32) && (arr1[a - 1][b - 1] != 'X')) {
arr1[a - 1][b - 1] = 'O';
break;
}
else {
printf("*******无效位置重新下棋!********\n");
printf("玩家O下棋:");
}
}
}
//随机数生成函数
int generateRandomNumber() {
srand((unsigned int)time(NULL)-1);
return rand() % row + 1;
}
//电脑随机下棋
void computermove_O(char arr1[3][3]) {
int a, b;
printf("电脑下棋中...\n");
//Sleep(1000);
while (1)
{
a = generateRandomNumber();
b = generateRandomNumber();
//printf("a=%d,b=%d\n", a, b);
if ((arr1[a - 1][b - 1] == 32) && (arr1[a - 1][b - 1] != 'X'))
{
arr1[a - 1][b - 1] = 'O';
break;
}
}
}
bool isfull(char arr1[3][3]) {
for (int i = 0; i <= 2; i++) {
for (int j = 0; j <= 2; j++) {
if (arr1[i][j] == 32) {
return 0;
}
}
}
return 1;
}
//观察者
//X,玩家胜利;O,电脑胜利;E,平局;C,游戏继续;
char judge(char arr1[3][3]) {
for (int i = 0; i <= 2; i++) {
if (arr1[0][i] == arr1[1][i] && arr1[0][i] == arr1[2][i] && arr1[0][i]!=32) {
return arr1[0][i];
}
}
for (int i = 0; i <= 2; i++) {
if (arr1[i][0] == arr1[i][1] && arr1[i][0] == arr1[i][2] && arr1[i][0] != 32) {
return arr1[i][0];
}
}
if (arr1[0][0] == arr1[1][1] && arr1[0][0] == arr1[2][2] && arr1[0][0] != 32) {
return arr1[0][0];
}
if (arr1[0][2] == arr1[1][1] && arr1[0][2] == arr1[2][0] && arr1[1][1] != 32) {
return arr1[0][2];
}
if (isfull(arr1)) {
return 'E';
}
return 'C';
}
函数集:
#pragma once
#include<stdio.h>
#include<graphics.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
extern int row;
extern int col;
extern int CPcheck;
extern int times;
extern int PPcheck;
void manu_1();
void manu();
void Chessboard(char arr1[3][3]);
void playermove_X(char arr1[3][3]);
void playermove_O(char arr1[3][3]);
int generateRandomNumber();
void computermove_O(char arr1[3][3]);
bool isfull(char arr1[3][3]);
char judge(char arr1[3][3]);