今天完成小学期的第六个项目,也就是井字棋,井字棋的规矩是死的,先手有可能赢,后手最多平局。明天研究小学期的第七个项目。
附代码:
#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;
	}
}
 
                    
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号