//创建两原文档和一个头文件
//第一个原文档运行主函数名字随便起
#include "game.h"
#define _CRT_SECURE_NO_WARNINGS 1
void menu()
{
printf("*********************\n");
printf("***1 play - 0 exit***\n");
printf("*********************\n");
printf("请输入:");
}
void game1()
{
char zyq[ROW][COL]={0};
Initboard(zyq,ROW,COL);//将二维数组所有的数设置为空格
Display(zyq,ROW,COL);//显示下棋的棋盘
srand ((unsigned int)time(NULL));//调用rand函数生成随机数时需要调用srand函数生成时间戳
printf("请输入你要下的横纵坐标(如:1 1):");
while(1)
{
//进入游戏玩家开始下棋
char ret=0;
Playmove(zyq,ROW,COL);//玩家开始下棋
Display(zyq,ROW,COL);//显示玩家下棋后的棋盘
ret=IsWin(zyq,ROW,COL);//通过返回值判断玩家是否胜利
if(ret=='*')//返回*玩家赢跳出循环
{
printf("玩家赢\n");
break;
}
if(ret=='1')//返回1平局
{
printf("平局\n");
break;
}
//电脑走
Computermove(zyq,ROW,COL);//电脑开始下棋
Display(zyq,ROW,COL);//显示电脑下棋后的棋盘
ret=IsWin(zyq,ROW,COL);//通过返回值判断玩家是否胜利
if(ret=='#')//返回#电脑赢跳出循环
{
printf("电脑赢,你真笨!!!\n");
break;
}
if(ret=='d')//返回1平局
{
printf("平局\n");
break;
}
}
}
int main()
{
int input=0;
menu();//生成菜单进行提示
do
{
scanf("%d",&input);//输入选择
switch(input)
{
case 1://输入1进入游戏
printf("进入游戏\n");
game1();
printf("要想继续请再次输入1:");
break;
case 0://输入0推出游戏
printf("退出游戏\n");
break;
default://输入其他不合法重新输入
printf("输入错误,请重新输入\n");
break;
}
}
while(input);//当输入的值为0时可推出循环,不为0循环继续
return 0;
}
//第二个原文档名字为game.c
#include "game.h"
#define _CRT_SECURE_NO_WARNINGS 1
void Initboard(char zyq[ROW][COL],int row,int col)
{
int i=0;
int j=0;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
zyq[i][j]=' ';//将二维数组全部数据设置为空格
}
}
}
//显示棋盘
void Display(char zyq[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 ",zyq[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 Playmove(char zyq[ROW][COL],int row,int col)
{
int x=0;
int y=0;
while(1)
{
printf("玩家走:");
scanf("%d %d",&x,&y);//输入玩家要下的位置
if(zyq[x-1][y-1]==' '&&x>=1&&x<=3&&y>=1&&y<=3)//判断玩家下的位置是否合法x,y范围是否在1到3之间,且该位置的数组是否为空格
{
zyq[x-1][y-1]='*';//当是空格且合法时玩家下棋的标志为*
break;
}
else
{
printf("输入错误 请重新输入\n");//不合法提示
}
}
}
//电脑走
void Computermove(char zyq[ROW][COL],int row,int col)
{
int x=0;
int y=0;
printf("电脑走\n");
while(1)
{
x=rand()%row;//利用rand函数生成随机数%row则生成x的范围为0~row-1
y=rand()%col;//与上同理
if(zyq[x][y]==' ')//判断这个位置是否为空格当时空格可进行落子
{
zyq[x][y]='#';//电脑下棋标志为#
break;
}
}
}
//*玩家赢
//#电脑赢
//c继续
//d平局
char IsWin(char zyq[ROW][COL],int row,int col)
{
int i=0;
int j=0;
char d=0;
char c=1;
for(i=0;i<3;i++)//判断横着是否有三个一样的并且不时空格
{
if(zyq[i][0]==zyq[i][1]&&zyq[i][1]==zyq[i][2]&&zyq[i][2]!=' ')
{
return zyq[i][0];
break;
}
}
for(j=0;j<3;j++)//判断竖着是否有三个一样的并且不时空格
{
if(zyq[0][j]==zyq[1][j]&&zyq[1][j]==zyq[2][j]&&zyq[2][j]!=' ')
{
return zyq[0][j];
break;
}
}
if(zyq[0][0]==zyq[1][1]&&zyq[1][1]==zyq[2][2]&&zyq[2][2]!=' ')//判断斜着是否有三个一样的并且不时空格
{
return zyq[0][0];
}
if(zyq[0][2]==zyq[1][1]&&zyq[1][1]==zyq[2][0]&&zyq[2][0]!=' ')//判断斜着是否有三个一样的并且不时空格
{
return zyq[0][2];
}
if(zyq[0][0]==zyq[0][1]&&zyq[0][1]==zyq[0][2]&&zyq[0][1]==zyq[1][0]&&zyq[0][1]==zyq[1][1]&&zyq[0][1]==zyq[1][2]&&zyq[0][1]==zyq[2][0]&&zyq[0][1]==zyq[2][1]&&zyq[0][1]==zyq[2][2]&&zyq[0][1]!=' ')//判断是否为平局
{
return d;
}
return c;
}
//头文件为game.h
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define _CRT_SECURE_NO_WARNINGS 1
#define ROW 3
#define COL 3
void Initboard(char zyq[ROW][COL],int row,int col);
void Display(char zyq[ROW][COL],int row,int col);
void Playmove(char zyq[ROW][COL],int row,int col);
void Computermove(char zyq[ROW][COL],int row,int col);
char IsWin(char zyq[ROW][COL],int row,int col);