函数头
放在头文件里
#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 //行为3
#define COL 3 //列为3
void InitBoard(char board[ROW][COL],int row,int col);//初始化棋盘的函数
void DisplayBoard(char board[ROW][COL],int row,int col);//打印棋盘函数
void PlayerMove(char board[ROW][COL],int row,int col);//玩家出棋函数
void ComputerMove(char board[ROW][COL],int row,int col);//电脑出棋函数
int IsFull(char board[ROW][COL],int row,int col);//判断棋盘是否满棋
int IsWin(char board[ROW][COL],int row,int col);
void game();
#endif //__GAME_H__
主函数
选择1进入游戏函数 开始游戏
选择零 则退出游戏
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void mune()
{
printf("\n\n\n█████████████████████\n");
printf("█████ 经典③子棋游戏 ████\n");
printf("█████████████████████\n");
printf("███████ 1.开始游戏 ██████\n");
printf("███████ 0.退出游戏 ██████\n");
printf("█████████████████████\n");
}
int main()
{
int input = 0;
do
{
srand((unsigned int)time(NULL));//生成随机数函数
mune( );//游戏菜单函数
printf("请输入数字进行选择:\n");
scanf("%d",&input);
switch(input)
{
case 1:
game( );
break;
case 0:
printf("退出游戏!");
break;
default:
printf("输入错误,请重新输入:\n");
}
}while(input);
return 0;
}
游戏函数
初始化棋盘函数————打印原始棋盘函数————电脑出棋函数—与—玩家出棋函数(循环调用每调用一次判断一次输赢)————判断输赢函数(中间嵌套判断是否棋盘已满的函数决定平局)
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void game()
{
char ret = '0';
char board[ROW][COL] = {0};//创建二维数组
InitBoard(board,ROW,COL);//调用初始化棋盘的函数
DisplayBoard(board,ROW,COL);//打印原始棋盘
//下棋过程
do
{
printf("▁▂▃电脑已出棋~该您出棋啦▃▂▁\n");
ComputerMove(board,ROW,COL);//电脑出棋
DisplayBoard(board,ROW,COL);//打印棋盘显示电脑出的棋
ret = IsWin(board,ROW,COL);//根据判断输赢函数的返回值来决定谁赢谁输
if(ret !=' ') //返回空格继续下棋返回0电脑赢,返回x玩家赢
{ //返回空格继续下棋 返回p为平局
break;
}
PlayerMove(board,ROW,COL);//到玩家出棋
DisplayBoard(board,ROW,COL);//打印棋盘
ret = IsWin(board,ROW,COL);
if(ret !=' ')
{
break;
}
}while(ret = ' ');
//不等于空格跳出后判断谁赢
ret = IsWin(board,ROW,COL);
if(ret == 'p')
{
printf("\n▁▂▃恭喜您和聪明的电脑打成平手啦▃▂▁\n");
}
else if(ret == '0')
{
printf("\n▁▂▃很遗憾~电脑取得了胜利▃▂▁\n");
}
else if(ret == 'X')
{
printf("\n▁▂▃恭喜您取得了胜利~再接再厉哦▃▂▁\n");
}
}
void InitBoard(char board[ROW][COL],int row,int col)
{
int i = 0;
int j = 0;
for(i = 0;i<row;i++)
{
for(j = 0;j<col;j++)
{
board[i][j] = ' ';
}
}
}
void DisplayBoard(char board[ROW][COL],int row,int col)
{
int i = 0;
for(i = 0;i<row;i++)
{
printf(" %c ┃ %c ┃ %c \n",board[i][0],board[i][1],board[i][2]);
if(i != row-1)
{
printf("━━━┃━━━┃━━━\n");
}
}
}
void ComputerMove(char board[ROW][COL],int row,int col)
{
while(1)
{
int x = rand() % row;
int y = rand() % col;
if(board[x][y] == ' ')
{
board[x][y] = '0';
break;
}
}
}
void PlayerMove(char board[ROW][COL],int row,int col)
{
int x = 0;
int y = 0;
while(1)
{
printf("请输入一个坐标:");
scanf("%d%d",&x,&y);
if((x >= 1)&&(x <= row)&&(y >= 1)&&(y <= col))
{
if( board[x-1][y-1] == ' ')
{
board[x-1][y-1] = 'X';
break;
}
else
{
printf("抱歉~您输入的坐标已经被电脑抢先了一步,请重新输入\n");
}
}
else
{
printf("您输入的坐标已经超出棋盘的范围啦~请重新输入哦\n");
}
}
}
int IsWin(char board[ROW][COL],int row,int col)
{
int i = 0;
int j = 0;
for(i = 0;i<row;i++)
{
if(board[i][0] == board[i][1]&&board[i][1] == board[i][2]&&board[i][0] != ' ')
{
return board[i][0];
}
}
for(j = 0;j<col;j++)
{
if(board[0][j] == board[1][j]&&board[1][j] == board[2][j]&&board[0][j] != ' ')
{
return board[0][j];
}
}
if(board[0][0] == board[1][1]&&board[1][1] == board[2][2]&&board[0][0] != ' ')
{
return board[0][0];
}
else if(board[2][0] == board[1][1]&&board[1][1] == board[0][2]&&board[2][0] != ' ')
return board[2][0];
else if(IsFull(board,row,col))
return 'p';
else
return ' ';
}
int IsFull(char board[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(board[i][j] == ' ')
return 0;
}
}
return 1;
}