2020 7 12

今天完成小学期的第六个项目,也就是井字棋,井字棋的规矩是死的,先手有可能赢,后手最多平局。明天研究小学期的第七个项目。

附代码:

#include <iostream>
#include <time.h>
#pragma once
using namespace std;
int win=0;
class game
{
public:
char a,b,A[9];
void choose();
void display();
void aplay();
void bplay1();
void bplay2(int p);
void end();
game(){A[0]='*';A[1]='*';A[2]='*';A[3]='*';A[4]='*';A[5]='*';A[6]='*';A[7]='*';A[8]='*';}
};
void game::choose()
{
char n;
cout<<"选择旗子: A、X B、O"<<endl;
for(int i=0;i<100;i++)
{
int temp=0;
cin>>n;
if(n=='A') {a='X';b='O';temp=1;}
else if(n=='B') {a='O';b='X';temp=1;}
else cout<<"请重新输入!"<<endl;
if(temp==1) break;
}
}
void game::display()
{
for(int i=1;i<=9;i++)
{
if(i==1||i==4||i==7)
{
cout<<"——————"<<endl;
}
if(i==2||i==5||i==8)
{
for(int j=i-2;j<i+1;j++)
{
cout<<A[j]<<" ";
}
}
if(i==3||i==6||i==9)
{
cout<<endl;
}
}
}
void game::aplay()
{
int n;
cout<<"输入你想要下棋的位置(按照九宫格第一行1,2,3,第二行4,5,6,第三行7,8,9的序号):"<<endl;
for(int i=0;i<100;i++)
{
int temp=0;
cin>>n;
if(A[n-1]=='*') {A[n-1]=a;temp=1;}
if(temp==1) break;
else cout<<"这个位置已经填了,请重新选择!"<<endl;
}
}
void game::bplay1()
{
cout<<"轮到电脑下:"<<endl;
if(A [4]=='*') A[4]=b;
else if(A[0]=='*'&&A[1]=='*'&&A[2]=='*'&&A[3]=='*'&&A[4]==a&&A[5]=='*'&&A[6]=='*'&&A[7]=='*'&&A[8]=='*') A[0]=b;
else if(A[0]==b&&A[4]==a&&A[8]==a&&A[1]=='*'&&A[2]=='*'&&A[3]=='*'&&A[5]=='*'&&A[6]=='*'&&A[7]=='*') A[2]=b;
else
{
int temp1=0;
for(int i=0,j=0;i<9;i=i+3,j++)
{
if(A[i]==a&&A[i+1]==a&&A[i+2]=='*')
{A[i+2]=b;temp1=1;}
else if(A[i]==a&&A[i+2]==a&&A[i+1]=='*')
{A[i+1]=b;temp1=1;}
else if(A[i+1]==a&&A[i+2]==a&&A[i]=='*')
{A[i]=b;temp1=1;}
}
for(int i=0;i<3;i++)
{
if(A[i]==a&&A[i+3]==a&&A[i+6]=='*')
{A[i+6]=b;temp1=1;}
else if(A[i]==a&&A[i+6]==a&&A[i+3]=='*')
{A[i+3]=b;temp1=1;}
else if(A[i+3]==a&&A[i+6]==a&&A[i]=='*')
{A[i]=b;temp1=1;}
}
if(temp1==0)
{
for(int i=0;i<9;i++)
{
if(A[i]=='*')
{
A[i]=b;
break;
}
}
}
}
}
void game::bplay2(int p)
{
cout<<"轮到电脑下:"<<endl;
if(p==1) A[4]=b;
else if(p==2)
{
if(A[0]==a||A[2]==a||A[6]==a||A[8]==a)
{
if(A[0]==a) A[8]=b;
else if(A[2]==a) A[6]=b;
else if(A[6]==a) A[2]=b;
else A[0]=b;
}
if(A[1]==a||A[3]==a||A[5]==a||A[7]==a)
{
if(A[1]==a) A[0]=b;
else if(A[3]==a) A[0]=b;
else if(A[5]==a) A[8]=b;
else A[8]=b;
}
}
else if(p==3)
{
if(A[0]==a&&A[1]==a) A[2]=b;
else if(A[0]==a&&A[2]==a) A[1]=b;
else if(A[0]==a&&A[3]==a) A[6]=b;
else if(A[0]==a&&A[6]==a) A[3]=b;
else if(A[0]==a&&A[1]==a) A[2]=b;
else if(A[6]==a&&A[3]==a) A[0]=b;
else if(A[2]==a&&A[1]==a) A[0]=b;
else if(A[2]==a&&A[5]==a) A[8]=b;
else if(A[6]==a&&A[7]==a) A[8]=b;
else if(A[8]==a&&A[7]==a) A[6]=b;
else if(A[8]==a&&A[6]==a) A[7]=b;
else if(A[8]==a&&A[5]==a) A[2]=b;
else if(A[8]==a&&A[2]==a) A[5]=b;
else if(A[7]==a) A[5]=b;
else if(A[5]==a) A[7]=b;
}
}
void game::end()
{
for(int i=0;i<3;i++)
{
if(A[i]==b&&A[i+3]==b&&A[i+6]=='*'||A[i]==b&&A[i+3]=='*'&&A[i+6]==b||A[i]=='*'&&A[1+3]==b&&A[i+6]==b) {cout<<"恭喜你,你输了!"<<endl;win=1;exit(0);}
}
for(int i=0;i<9;i=i+3)
{
if(A[i]==b&&A[i+1]==b&&A[i+1]=='*'||A[i]==b&&A[i+1]=='*'&&A[i+3]==b||A[i]=='*'&&A[i]==b&&A[i+3]==b) {cout<<"恭喜你,你输了!"<<endl;win=1;exit(0);}
}
if(A[0]==b&&A[4]==b&&A[8]=='*'||A[0]==b&&A[4]=='*'&&A[8]==b||A[0]=='*'&&A[4]==b&&A[8]==b) {cout<<"恭喜你,你输了!"<<endl;win=1;exit(0);}
if(A[2]==b&&A[4]==b&&A[6]=='*'||A[2]==b&&A[4]=='*'&&A[6]==b||A[2]=='*'&&A[4]==b&&A[6]==b) {cout<<"恭喜你,你输了!"<<endl;win=1;exit(0);}
}
int main()
{
char q;
cout<<"井字棋游戏,先手还是后手: A 、先手 B、后手"<<endl;
cin>>q;
game b;
if(q=='A')
{
b.choose ();
b.display ();
b.aplay ();
b.display ();
b.bplay1 ();
b.display ();
b.aplay ();
b.display ();
b.bplay1 ();
b.display ();
b.aplay ();
b.display ();
b.bplay1 ();
b.display ();
b.aplay ();
b.display ();
b.bplay1 ();
b.display ();
b.aplay ();
b.display ();
cout<<"平局"<<endl;
}
else
{
b.choose ();
b.display ();
b.bplay2 (1);
b.display ();
b.aplay ();
b.display ();
b.bplay2 (2);
b.display ();
b.aplay ();
b.display ();
b.bplay2 (3);
b.display ();
b.aplay ();
b.display ();
b.end ();
if(win==0) cout<<"平局"<<endl;
}
}

原文地址:https://www.cnblogs.com/fuxw4971/p/13337206.html