#include<time.h>//时间种子
#include<iostream>
#include<cctype>//判断是否为数字的函数头文件
using namespace std;
int pd=0,j=0;//判断是否继续
char shu[9];//圈圈叉叉
void youxi();//游戏
void shuchu();//输出
void shuru();//输入
void diannao();//电脑人
void panduan();//判断是否圈插成功
int main()
{
do{
system("cls");//清屏
pd=0,j=0;//重新赋值判断条件
for(int i=0;i<9;i++)//赋值
shu[i]=i+1+'0';//把整型转换成字符型
youxi();
}while(pd);//判断是否继续游戏
}
void youxi()//游戏
{
int i=0;//i表示经过几个回合,j表示返回值,判断是否成功
do{
i++;
shuchu();
shuru();
if(i!=5)
diannao();
system("cls");//清屏
if(i>2)//经过3个回合才判断是否成功
panduan();
if(j==1)//判断返回值是否成功
break;
}while(i<5);//只能经过5个回合,因为5个回合就填了10个空,减少了电脑人的填写
cout<<"\t\t\t\t"<<shu[0]<<'|'<<shu[1]<<'|'<<shu[2]<<'\n'
<<"\t\t\t\t"<<"-----\n"
<<"\t\t\t\t"<<shu[3]<<'|'<<shu[4]<<'|'<<shu[5]<<'\n'
<<"\t\t\t\t"<<"-----\n"
<<"\t\t\t\t"<<shu[6]<<'|'<<shu[7]<<'|'<<shu[8]<<'\n'
<<endl;//输出最后的结果
cout<<"\t输入1继续,输入0退出:";
cin>>pd;//输入是否继续游戏
while(pd!=1&&pd!=0)//判断输入是否正确
{
cin.clear();
char ch;
cin.get(ch);
while(ch!='\n')
cin.get(ch);
cout<<"输入错误!请重新输入:";
cin>>pd;
}
}
void shuchu()//输出
{
cout<<"\t\t\t"<<"欢迎来到胡胡圈圈叉叉游戏!!\n"
<<"\t\t\t (o为电脑,*为玩家)\n\n"
<<endl;
cout<<"\t\t\t\t"<<shu[0]<<'|'<<shu[1]<<'|'<<shu[2]<<'\n'
<<"\t\t\t\t"<<"-----\n"
<<"\t\t\t\t"<<shu[3]<<'|'<<shu[4]<<'|'<<shu[5]<<'\n'
<<"\t\t\t\t"<<"-----\n"
<<"\t\t\t\t"<<shu[6]<<'|'<<shu[7]<<'|'<<shu[8]<<'\n'
<<endl;
cout<<"\t请输入上图中相应的序号:";
}
void shuru()//输入
{
int s;
cin>>s;//用户输入
do{
if(s==-1)//判断是否重复输入
{
cout<<"错误!已存在!请重新输入:";
cin>>s;
}
while(s>9||s<1)//判断输入是否正确
{
cin.clear();
char ch;
cin.get(ch);
while(ch!='\n')
cin.get(ch);
cout<<"输入错误!请重新输入:";
cin>>s;
}
switch(s)//判断是否重复
{
case 1:{if(shu[0]=='*'||shu[0]=='o') s=-1;
else shu[0]='*';} break;
case 2:{if(shu[1]=='*'||shu[1]=='o') s=-1;
else shu[1]='*';} break;
case 3:{if(shu[2]=='*'||shu[2]=='o') s=-1;
else shu[2]='*';} break;
case 4:{if(shu[3]=='*'||shu[3]=='o') s=-1;
else shu[3]='*';} break;
case 5:{if(shu[4]=='*'||shu[4]=='o') s=-1;
else shu[4]='*';} break;
case 6:{if(shu[5]=='*'||shu[5]=='o') s=-1;
else shu[5]='*';} break;
case 7:{if(shu[6]=='*'||shu[6]=='o') s=-1;
else shu[6]='*';} break;
case 8:{if(shu[7]=='*'||shu[7]=='o') s=-1;
else shu[7]='*';} break;
case 9:{if(shu[8]=='*'||shu[8]=='o') s=-1;
else shu[8]='*';} break;
}
}while(s==-1);//判断是否重复,重复就重新开始
}
void diannao()//电脑人
{
int h;
do{
do{
srand(time(0));
h=rand()%10;
}while(h<1);//生成随机0-9,但判断h不能为0
switch(h)//判断是否重复
{
case 1:{if(shu[0]=='*'||shu[0]=='o') h=-1;
else shu[0]='o';} break;
case 2:{if(shu[1]=='*'||shu[1]=='o') h=-1;
else shu[1]='o';} break;
case 3:{if(shu[2]=='*'||shu[2]=='o') h=-1;
else shu[2]='o';} break;
case 4:{if(shu[3]=='*'||shu[3]=='o') h=-1;
else shu[3]='o';} break;
case 5:{if(shu[4]=='*'||shu[4]=='o') h=-1;
else shu[4]='o';} break;
case 6:{if(shu[5]=='*'||shu[5]=='o') h=-1;
else shu[5]='o';} break;
case 7:{if(shu[6]=='*'||shu[6]=='o') h=-1;
else shu[6]='o';} break;
case 8:{if(shu[7]=='*'||shu[7]=='o') h=-1;
else shu[7]='o';} break;
case 9:{if(shu[8]=='*'||shu[8]=='o') h=-1;
else shu[8]='o';} break;
}
}while(h==-1);//重复就重新开始
}
void panduan()//判断是否成功
{
if(shu[0]=='*'&&shu[1]=='*'&&shu[2]=='*'
||shu[3]=='*'&&shu[4]=='*'&&shu[5]=='*'
||shu[6]=='*'&&shu[7]=='*'&&shu[8]=='*'
||shu[0]=='*'&&shu[3]=='*'&&shu[6]=='*'
||shu[1]=='*'&&shu[4]=='*'&&shu[7]=='*'
||shu[2]=='*'&&shu[5]=='*'&&shu[8]=='*'
||shu[0]=='*'&&shu[4]=='*'&&shu[8]=='*'
||shu[2]=='*'&&shu[4]=='*'&&shu[6]=='*')
{cout<<"\t\t\t 恭喜!你赢了!!\n\n";j=1;}//判断是否为玩家赢
else
if(shu[0]=='o'&&shu[1]=='o'&&shu[2]=='o'
||shu[3]=='o'&&shu[4]=='o'&&shu[5]=='o'
||shu[6]=='o'&&shu[7]=='o'&&shu[8]=='o'
||shu[0]=='o'&&shu[3]=='o'&&shu[6]=='o'
||shu[1]=='o'&&shu[4]=='o'&&shu[7]=='o'
||shu[2]=='o'&&shu[5]=='o'&&shu[8]=='o'
||shu[0]=='o'&&shu[4]=='o'&&shu[8]=='o'
||shu[2]=='o'&&shu[4]=='o'&&shu[6]=='o')
{cout<<"\t\t\t 不好意思!你输了!!\n\n";j=1;}//判断是否为电脑人赢
}
【C++】井字棋
最新推荐文章于 2025-03-22 15:59:20 发布