主函数(main.c)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<Windows.h>
#include "game.h"
int b=0;
void begin_interface()
{
printf("************************************************\n");
printf("**************** 第%d轮游戏 ***************\n",b);
printf("************************************************\n");
}
void game()//游戏的整个实现
{
char board[ROW][COL]={0};//定义棋盘数组
char ret =0;
IntBoard(board,ROW,COL);//初始化棋盘
DisplayBoard(board,ROW,COL);//打印棋盘
while(1)
{
Playermover(board,ROW,COL);//玩家下棋
DisplayBoard(board,ROW,COL);//打印棋盘
ret=IsWin(board,ROW,COL);//判断输赢
if(ret != 'C')//判断是否继续
{
break;
}
//玩家赢--*
//电脑赢--#
//平局----Q
//继续----C
ComputerMove(board,ROW,COL);//电脑下棋
DisplayBoard(board,ROW,COL);
ret=IsWin(board,ROW,COL);//判断输赢
if(ret != 'C')
{
break;
}
}
if(ret == '*')
{
printf("玩家胜利\n");
}
if(ret == '#')
{
printf("电脑胜利\n");
}
if(ret == 'Q')
{
printf("平局\n");
}
}
void test()
{
int i=1;
srand((unsigned)time(NULL));//设置随机起点
for(;i;)
{
int choice=0;int c=0;
printf("请选择游戏模式:");
scanf("%d",&choice);
/*if(a==1 ||a==2)
c=a;
else
c=3;*/
switch(choice)//只能输入数字
{
case 1:
b++;
begin_interface();
game();
//printf("游戏开始。\n");
break;
case 2:
i=0;
printf("游戏结束。\n");
break;
default:
printf("输入错误,请重新输入...........\n");//这里输入的如果不是数字,代码崩溃
break;
}
}
}
int main()
{
test();
return 0;
}
2.头文件(game.h)
#define ROW 3
#define COL 3
#include<stdio.h>
#include<string.h>
#include<Windows.h>
#include<stdlib.h>//srand,rand
#include<time.h>//时间time
#ifndef _GAME_H_
#define _GAME_H_
void IntBoard(char board[ROW][COL],int row,int col);
void DisplayBoard(char board[ROW][COL],int row,int col);
void Playermover(char board[ROW][COL],int row,int col);
void ComputerMove(char board[ROW][COL],int row,int col);
char IsWin(char board[ROW][COL],int row,int col);//判断输赢
#endif
3.主要函数.c文件(game.c)
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
#include <stdio.h>
void IntBoard(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;int j=0;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)//打印一行" | | "
{
printf(" %c ",board[i][j]);
if(j<col-1)
{
printf("|");
}
}
printf("\n");//换行
if(i<row-1)//打印分割行
{
for(j=0;j<col;j++)
{
printf("___");
if(j<col-1)
{
printf("|");
}
}
}
printf("\n");
}
}
void Playermover(char board[ROW][COL],int row,int col)//下棋函数
{
int x=0;int y=0;
printf("请玩家走棋:\n");
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]='*';
break;//输入坐标后,跳出循环
}
else
{
printf("该坐标被占用,请重新输入坐标。");
}
}
else
{
printf("坐标非法,请重新输入");
}
}
}
void ComputerMove(char board[ROW][COL],int row,int col)
{
int x=0;int y=0;
printf("请等待电脑走棋.........\n");
while(1)
{
x=rand()%row;
y=rand()%col;//x,y除余永远不可能为3,只能为0,1,2,所以减1,电脑就永远取不到2
if(board[x][y]== ' ')//这里board[][],要为board[x][y]
{
board[x][y]='#';
break;//输入坐标后,跳出循环
}
}
}
//返回1 表示棋盘满了
//返回0,表示棋盘没满
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;
}
char IsWin(char board[ROW][COL],int row,int col)
{
int i=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][1];
}
}
for(i=0;i<col;i++)//竖三列
{
if(board[0][i]==board[1][i] && board[1][i]==board[2][i] && board[0][i] !=' ')//不要出错,慢慢来
{
return board[0][i];
}
}
//两个对角线
if(board[0][0]==board[1][1] && board[1][1]==board[2][2] && board[1][1] !=' ')
{
return board[1][1];
}
if(board[0][2]==board[1][1] && board[1][1]==board[2][0] && board[1][1] !=' ')
{
return board[1][1];
}
//判断是否平局
if(1==IsFull(board,ROW,COL))
{
return 'Q';
}
return 'C';
}
4.结果
