#include<iostream>
#include<vector>
#include<string>
#include<windows.h>
using namespace std;
void color(int x){ //ÉèÖÃÑÕÉ«µÄº¯Êý
if(x>=0 & x<=15)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);
else{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
}
}
class qipan{
public:
int a[15][15];
qipan();
void paint1();
void play();
int AI();
int player(int,int,int);
int max1(int a1[4]);
int get1(int a1[4]);
int s;
int s1[2];
};
qipan::qipan(){ //ÆåÅÌÀàµÄ¹¹Ô캯Êý
for(int i=0;i<15;i++)
{
for(int j=0;j<15;j++)
{
a[i][j]=0;
}
}
s=0;
s1[0]=-1;
s1[1]=-1;
}
int qipan::max1(int a1[4])
{
int temp=a1[0];
for(int i=1;i<4;i++)
if(a1[i]>temp)
{
temp=a1[i];
}
return temp;
}
int qipan::get1(int a1[4])
{
int temp=a1[0];
int tp1=1;
for(int i=1;i<4;i++)
if(a1[i]>temp)
{
temp=a1[i];
tp1=i+1;
}
return tp1;
}
void qipan::paint1() //»æÖÆÆåÅ̵ĺ¯Êý
{
cout<<" ";
for(int i=0;i<15;i++)
{
if(i<=9){
cout<<i<<" ";
}
else
cout<<i<<"";
}
cout<<endl;
for(int i=0;i<15;i++)
{ if(i<=9){
cout<<i<<" ";
}
else
cout<<i<<" ";
for(int j=0;j<15;j++)
{
if(a[i][j]==0){
color(7);
cout<<"Ê®";
}
else if(a[i][j]==1){
color(12); //ÏÔʾºìÉ«Æå×Ó
cout<<"ºì";
}
else if(a[i][j]==2){
color(2); //ÏÔʾÀ¶É«Æå×Ó
cout<<"˦";
}
}
cout<<endl;
}
}
int qipan::player(int x1,int y1,int z)
{
if(a[x1][y1]!=0){
cout<<"Âä×ÓÎÞЧ";
return 1;
}
a[x1][y1]=z;
//ÅжÏͬһֱÏßÉÏλÖÃÊÇ·ñÓÐÎå×Ó
int total=0;
for(int i=y1-1;i>=0;i--)
{
if(a[x1][i]==z)
total++;
else
break;
}
for(int i=y1+1;i<15;i++){
if(a[x1][i]==z)
total++;
else
break;
}
if(total>=4)
return 5; //»ñʤ
//ÅжÏͬһÊúÏßÉÏÊÇ·ñÓÐÎå×Ó
total=0;
for(int i=x1-1;i>=0;i--){
if(a[i][y1]==z)
total++;
else
break;
}
for(int i=x1+1;i<15;i++)
{
if(a[i][y1]==z)
total++;
else
break;
}
if(total>=4)
return 5; //»ñʤ
//ÅжÏ×óбÏßÊÇ·ñÓÐÎå×Ó
total=0;
for(int i=1;i<5;i++)
{
if(x1-i<0 || y1-i<0)
break;
if(a[x1-i][y1-i]==z)
total++;
else
break;
}
for(int i=1;i<5;i++){
if(x1+i>=15 || y1+i >=15)
break;
if(a[x1+i][y1+i]==z)
total++;
else
break;
}
if(total>=4)
return 5; //»ñʤ
//ÅжÏÓÒбÏßÊÇ·ñÓÐÎå×Ó;
total=0;
for(int i=1;i<5;i++)
{
if(x1-i<0 || y1+i>=15)
break;
if(a[x1-i][y1+i]==z)
total++;
else
break;
}
for(int i=1;i<5;i++)
{
if(x1+i>=15 || y1-i<0)
break;
if(a[x1+i][y1-i]==z)
total++;
else
break;
}
if(total>=4)
return 5; //»ñʤ
return 2; //Âä×ÓÓÐЧ£¬µ«Î´»ñʤ
}
int qipan::AI(){
int t1=0;
// ÅжÏ×Ô¼ºÓÐûÓÐËÄ×ÓµÄÇé¿ö
for(int i=0;i<15;i++)
{
for(int j=0;j<15;j++)
{
int total1=0;
int total2=0;
int total3=0;
int total4=0;
if(a[i][j]!=0)
continue;
for(int a1=1;a1<5;a1++) //ÅжÏˮƽÏß
{
if(j-a1<0)
break;
if(a[i][j-a1]==2)
total1++;
else
break;
}
for(int a1=1;a1<5;a1++)
{
if(j+a1>=15)
break;
if(a[i][j+a1]==2)
total1++;
else
break;
}
for(int a1=1;a1<5;a1++) //ÅжÏÊúÖ±²¿·Ö
{
if(i-a1<0)
break;
if(a[i-a1][j]==2)
total2++;
else
break;
}
for(int a1=1;a1<5;a1++)
{
if(i+a1>=15)
break;
if(a[i+a1][j]==2)
total2++;
else
break;
}
for(int a1=1;a1<5;a1++) //ÅжÏ×óбÏß
{
if(i-a1<0 || j-a1<0)
break;
if(a[i-a1][j-a1]==2)
total3++;
else
break;
}
for(int a1=1;a1<5;a1++)
{
if(i+a1>=15 || j+a1>=15)
break;
if(a[i+a1][j+a1]==2)
total3++;
else
break;
}
for(int a1=1;a1<5;a1++) //ÅжÏÓÒбÏß
{
if(i-a1<0 || j+a1>=15)
break;
if(a[i-a1][j+a1]==2)
total4++;
else
break;
}
for(int a1=1;a1<5;a1++)
{
if(i+a1>=15 || j-a1<0)
break;
if(a[i+a1][j-a1]==2)
total4++;
else
break;
}
int a1[4]={total1,total2,total3,total4};
int temp=max1(a1);
if(temp>=4)
{
a[i][j]=2;
// cout<<"AIÒÑ»ñʤ";
return -1;
}
}
}
for(int i=0;i<15;i++) //Åж϶ÔÊÖÊÇ·ñÓдóÓÚÈý×ÓµÄÇé¿ö
{
for(int j=0;j<15;j++)
{
int total1=0;
int total2=0;
int total3=0;
int total4=0;
if(a[i][j]==1 || a[i][j]==2)
continue;
for(int a1=1;a1<5;a1++) //ÅжÏˮƽÏß
{if(j-a1<0)
break;
if(a[i][j-a1]==1)
total1++;
else
break;
}
for(int a1=1;a1<5;a1++)
{
if(j+a1>=15)
break;
if(a[i][j+a1]==1)
total1++;
else
break;
}
for(int a1=1;a1<5;a1++) //ÅжÏÊúÖ±Ïß
{
if(i-a1<0)
break;
if(a[i-a1][j]==1)
total2++;
else
break;
}
for(int a1=1;a1<5;a1++)
{
if(i+a1>=15)
break;
if(a[i+a1][j]==1)
total2++;
else
break;
}
for(int a1=1;a1<5;a1++) //ÅжÏ×óбÏß
{
if(i-a1<0 || j-a1<0)
break;
if(a[i-a1][j-a1]==1)
total3++;
else
break;
}
for(int a1=1;a1<5;a1++)
{
if(i+a1>=15 || j+a1>=15)
break;
if(a[i+a1][j+a1]==1)
total3++;
else
break;
}
for(int a1=1;a1<5;a1++) //ÅжÏÓÒбÏß
{
if(i-a1<0 || j+a1>=15)
break;
if(a[i-a1][j+a1]==1)
total4++;
else
break;
}
for(int a1=1;a1<5;a1++)
{
if(i+a1>=15 || j-a1<0)
break;
if(a[i+a1][j-a1]==1)
total4++;
else
break;
}
int a1[4]={total1,total2,total3,total4};
int temp=max1(a1);
int tp1=get1(a1); //»ñÈ¡Äĸö·½ÏòÉÏÁ¬×Ó×î¶à£¬1±íʾˮƽÏߣ¬2´ú±íÊúÖ±Ïߣ¬3´ú±í×óбÏߣ¬4´ú±íÓÒбÏß
if(temp==3) //¶ÔÊÖÒѾÈý×Ó£¬´ËʱҪ·ÖÇé¿ö,Óб߽çµÄÈý×Ó²»Óö£¬Ã»Óб߽çµÄÈý×ÓÐèÒª¶Â
{
if(tp1==1) //ˮƽÏßÓÐÈý×Ó
{
int a1;
int tpx1=0;
for(a1=1;a1<=3;a1++)
{
// tpx1=0;
if(j-a1<0)
break;
if(a[i][j-a1]==1)
tpx1++;
else
break;
}
if(tpx1==3)
{
if(j-a1==0)
{
}
else if(j-a1-1>=0)
{
if(a[i][j-a1-1]==0)
{
a[i][j]=2;
return 0;
}
}
}
else if(tpx1==2)
{
a[i][j]=2;
return 0;
}
else if(tpx1==1)
{
a[i][j]=2;
return 0;
}
else if(tpx1==0)
{
if(j+a1==14)
{
}
else if(j+a1<14)
{
if(a[i][j+a1+1]==0)
{
a[i][j]=2;
return 0;
}
}
}
} //ˮƽÏßÈý×ÓÇé¿öÅжϽáÊø
else if(tp1==2) //ÊúÖ±ÏßÓÐÈý×ÓµÄÇé¿ö
{
int a1;
int tpx1=0;
for(a1=1;a1<=3;a1++)
{
// tpx1=0;
if(i-a1<0)
break;
if(a[i-a1][j]==1)
tpx1++;
else
break;
}
if(tpx1==3)
{
if(i-a1==0)
{
}
else if(i-a1-1>=0)
{
if(a[i-a1-1][j]==0)
{
a[i][j]=2;
return 0;
}
}
}
else if(tpx1==2)
{
a[i][j]=2;
return 0;
}
else if(tpx1==1)
{
a[i][j]=2;
return 0;
}
else if(tpx1==0)
{
if(i+a1==14)
{
}
else if(i+a1<14)
{
if(a[i+a1+1][j]==0)
{
a[i][j]=2;
return 0;
}
}
}
} //ÊúÖ±ÏßÓÐÈý×ÓÇé¿öÅжϽáÊø
else if(tp1==3) //×óбÏßÓÐÈý×ÓµÄÇé¿ö
{
int a1;
int tpx1=0;
for(a1=1;a1<=3;a1++)
{
// tpx1=0;
if(i-a1<0 || j-a1<0)
break;
if(a[i-a1][j-a1]==1)
tpx1++;
else
break;
}
if(tpx1==3)
{
if(i-a1==0 || j-a1==0)
{
}
else if(i-a1-1>=0 and j-a1-1>=0)
{
if(a[i-a1-1][j-a1-1]==0)
{
a[i][j]=2;
return 0;
}
}
}
else if(tpx1==2)
{
a[i][j]=2;
return 0;
}
else if(tpx1==1)
{
a[i][j]=2;
return 0;
}
else if(tpx1==0)
{
if(i+a1==14 || j+a1==14)
{
}
else if(i+a1<14 and j+a1<14)
{
if(a[i+a1+1][j+a1+1]==0)
{
a[i][j]=2;
return 0;
}
}
}
} //×óбÏßÈý×ÓÇé¿öÅжϽáÊø
else if(tp1==4) //ÅжÏÓÒбÏßÓÐÈý×ÓµÄÇé¿ö
{
int a1;
int tpx1=0;
for(a1=1;a1<=3;a1++)
{
// tpx1=0;
if(i-a1<0 || j+a1 >14)
break;
if(a[i-a1][j+a1]==1)
tpx1++;
else
break;
}
if(tpx1==3)
{
if(i-a1==0 || j+a1==14)
{
}
else if(i-a1-1>=0 and j+a1+1<=14)
{
if(a[i-a1-1][j+a1+1]==0)
{
a[i][j]=2;
return 0;
}
}
}
else if(tpx1==2)
{
a[i][j]=2;
return 0;
}
else if(tpx1==1)
{
a[i][j]=2;
return 0;
}
else if(tpx1==0)
{
if(i+a1==14 || j-a1==0)
{
}
else if(i+a1<14 and j-a1>0)
{
if(a[i+a1+1][j-a1-1]==0)
{
a[i][j]=2;
return 0;
}
}
}
} //ÓÒбÏßÈý×ÓÇé¿öÅжϽáÊø
} //¶ÔÊÖÓÐÈý×ÓµÄÇé¿ö (ifµÄÀ¨ºÅ)
else if(temp==4 || temp==5) //¶ÔÊÖÓÐËÄ×Ó»òÎå×Ó£¬Ò»¶¨Òª¶Â
{
a[i][j]=2;
return 0;
}
}
}
//Åж϶ÔÊÖÁ¬×ÓÇé¿ö½áÊø£¬¿ªÊ¼Á¬×Ô¼ºÎå×Ó
for(int i=0;i<15;i++)
{
for(int j=0;j<15;j++)
{
if(a[i][j]==2)
t1++;
}
}
if(t1==0)
{
a[7][7]=2;
return 0;
}
for(int i=0;i<15;i++)
{
for(int j=0;j<15;j++)
{
int total1=0;
int total2=0;
int total3=0;
int total4=0;
if(a[i][j]!=0)
continue;
for(int a1=1;a1<5;a1++) //ÅжÏˮƽÏß
{
if(j-a1<0)
break;
if(a[i][j-a1]==2)
total1++;
else
break;
}
for(int a1=1;a1<5;a1++)
{
if(j+a1>=15)
break;
if(a[i][j+a1]==2)
total1++;
else
break;
}
for(int a1=1;a1<5;a1++) //ÅжÏÊúÖ±²¿·Ö
{
if(i-a1<0)
break;
if(a[i-a1][j]==2)
total2++;
else
break;
}
for(int a1=1;a1<5;a1++)
{
if(i+a1>=15)
break;
if(a[i+a1][j]==2)
total2++;
else
break;
}
for(int a1=1;a1<5;a1++) //ÅжÏ×óбÏß
{
if(i-a1<0 || j-a1<0)
break;
if(a[i-a1][j-a1]==2)
total3++;
else
break;
}
for(int a1=1;a1<5;a1++)
{
if(i+a1>=15 || j+a1>=15)
break;
if(a[i+a1][j+a1]==2)
total3++;
else
break;
}
for(int a1=1;a1<5;a1++) //ÅжÏÓÒбÏß
{
if(i-a1<0 || j+a1>=15)
break;
if(a[i-a1][j+a1]==2)
total4++;
else
break;
}
for(int a1=1;a1<5;a1++)
{
if(i+a1>=15 || j-a1<0)
break;
if(a[i+a1][j-a1]==2)
total4++;
else
break;
}
int a1[4]={total1,total2,total3,total4};
int temp=max1(a1);
if(temp>=4)
{
a[i][j]=2;
// cout<<"AIÒÑ»ñʤ";
return -1;
}
if(temp>s)
{
s=temp;
s1[0]=i;
s1[1]=j;
}
}
}
s=0;
a[s1[0]][s1[1]]=2;
s1[0]=-1;
s1[1]=-1;
return 0;
}
void qipan::play()
{
while(1)
{ int x1,y1;
int temp= AI();
paint1();
cout<<endl;
if(temp==-1)
{
cout<<"AIÒÑ»ñʤ";
Sleep(20000);
return ;
}
cout<<"AIÒѾÂä×Ó"<<endl;
cout<<"Çëºì·½Âä×Ó"<<endl;
cin>>x1>>y1;
temp=player(x1,y1,1);
cout<<endl;
if(temp==1){
while(temp==1){
paint1();
cout<<"ºì·½Âä×ÓÎÞЧ,ÇëÖØÐÂÂä×Ó";
cin>>x1>>y1;
temp=player(x1,y1,1);
cout<<endl;
}
}
if(temp==5){
paint1();
cout<<"¹§Ï²ºì·½»ñʤ"<<endl;
Sleep(20000);
return ;
}
paint1();
cout<<endl;
}
}
int main()
{
qipan a;
a.paint1();
a.play();
}
其中左边数字表示落子的x坐标,上面的数字表示落子的y坐标,比如要落子在0,0位置,直接输入0 0即可(其中数字之间要有空格隔开)。
AI部分的实现其实很简单,就是先判断对手是否已经有三子或者四子,有的话,需要堵截。
然后寻找棋盘上己方棋子最多的位置,在该位置落子,因为在该位置落子,赢的概率大。
emm,实现的很简单,不过最少初步实现了AI功能,虽然这个AI并不太聪明,哈哈。就这样吧,拜拜~