需要讲解的已在代码中注释,请耐心看
1.game.h:游戏的头文件
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 3
#define LIST 3
void Init_chess(char arr[ROW][LIST], int row, int list);棋子的初始化
void Init_borad(char arr[ROW][LIST], int row, int list);棋盘的初始化和下棋的位置
void Player_borad(char arr[ROW][LIST], int row, int list);玩家下棋的位置
void computur_borad(char arr[ROW][LIST], int row, int list);//电脑下棋的位置
char play_borad(char arr[ROW][LIST], int row, int list);//判断谁赢了还是平局
2.tase.c:测试游戏代码块
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void mune()
{
printf("**********************\n");
printf("********1.play********\n");
printf("********0.exit********\n");
printf("**********************\n");
}
void game()
{
char set = 0;
char arr[ROW][LIST] = { 0 };
Init_chess(arr, ROW, LIST);//棋子的初始化
Init_borad(arr, ROW, LIST);//棋盘的初始化和下棋的位置
while (1)
{
Player_borad(arr, ROW, LIST);//玩家下棋的位置
Init_borad(arr, ROW, LIST);//显示下棋的位置
set = play_borad(arr, ROW, LIST);//判断谁赢了还是平局
if (set != 'C')//判断输赢
{
break;
}
computur_borad(arr, ROW, LIST);//电脑下棋的位置
Init_borad(arr, ROW, LIST);//显示下棋的位置
if (set != 'C')//判断输赢
{
break;
}
}
if (set == '*')
{
printf("玩家赢了\n");
}
else if (set == '#')
{
printf("电脑赢了\n");
}
else if(set=='Q')
printf("平局\n");
}
void income()
{
srand(time(NULL));//对随机值的初始化rand
int input = 0;
do
{
scanf("%d", &input);
if (input == 1)
{
printf("游戏开始\n");
game();//进入游戏
break;
}
if (input == 0)
{
printf("退出游戏\n");
}
else
printf("选择错误,请重新选择\n");
} while (input);
}
int main()
{
mune();//游戏的菜单
income();//从此进入游戏
return 0;
}
3.game.c:游戏需要实现的代码块
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void Init_chess(char arr[ROW][LIST], int row, int list)
{
for (int i = 0; i < row; i++)
{
int j = 0;
for (j = 0; j < list; j++)
{
arr[i][j] = ' ';//一开始的棋盘上没下棋视为空格
}
}
}
void Init_borad(char arr[ROW][LIST],int row, int list)
{
for (int i = 0; i < row; i++)
{
int j = 0;
for (j = 0; j < list; j++)
{
printf(" %c ", arr[i][j]);
if (j < list - 1)//限制最右边的|不被显示
printf("|");
}
printf("\n");
if (i < row - 1)
{
for (j = 0; j < list; j++)
{
printf("---");
if(j<list-1)//限制最下边的---|不被显示
printf("|");
}
}
printf("\n");
}
}
void Player_borad(char arr[ROW][LIST], int row, int list)
{
while (1)
{
int r = 0;
int l = 0;
printf("玩家下棋\n");
printf("请输入你要下棋子的坐标>:");
scanf("%d %d", &r, &l);
if (r >= 1 && r <= row && l >= 1 && l <= list)//限制棋子下棋的位置,使棋子出现在棋盘上
{
if (arr[r - 1][l - 1] == ' ')
{
arr[r - 1][l - 1] = '*';
break;
}
else
printf("此处一下棋,请重新选择");
}
else
printf("超出范围,请重新选择\n");
}
}
void computur_borad(char arr[ROW][LIST], int row, int list)
{
int x = rand() % row;//rand生成随机数的函数
int y = rand() % list;
printf("电脑下棋\n");
while (1)
{
if (arr[x][y] == ' ')
{
arr[x][y] = '#';
break;
}
}
}
int Is_full(char arr[ROW][LIST], int row, int list)//判断棋盘是否下满
{
for (int i = 0; i < row; i++)
{
int j = 0;
for (j = 0; j < list; j++)
{
arr[i][j] == ' ';
return 0;
}
}
return 1;
}
char play_borad(char arr[ROW][LIST], int row, int list)
{
for (int 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 (int j = 0; j < list; 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[3][0] && arr[0][2] != ' ')
return arr[1][1];
//判断平局
if (Is_full(arr, ROW, LIST) == 1)
{
return 'Q';
}
return 'C';
}
4.运行结果显示