五子棋c++实践代码:

#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并不太聪明,哈哈。就这样吧,拜拜~

  • 29
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值