五子棋(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;
                     
         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); 
        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并不太聪明,哈哈。就这样吧,拜拜~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
五子棋是一种非常经典的棋类游戏,以下是一个简单的五子棋C语言代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define ROW 15 #define COL 15 void show_board(char board[][COL]); int judge_win(char board[][COL], int row, int col); int main(){ char board[ROW][COL]; memset(board, ' ', sizeof(board)); //初始化棋盘为空格 int row, col; char symbol = 'X'; //X先手,O后手 while(1){ show_board(board); printf("请 %c 方输入下棋的位置(e.g. 3,4):", symbol); scanf("%d,%d", &row, &col); if(row >= 1 && row <= ROW && col >= 1 && col <= COL && board[row-1][col-1] == ' '){ board[row-1][col-1] = symbol; if(judge_win(board, row-1, col-1)){ show_board(board); printf("%c 方胜利!\n", symbol); break; } symbol = (symbol == 'X' ? 'O' : 'X'); //交换下棋方 } else{ printf("输入有误,请重新输入!\n"); } } return 0; } //显示棋盘 void show_board(char board[][COL]){ printf(" "); for(int i=1; i<=COL; i++){ printf("%d ", i); } printf("\n"); for(int i=0; i<ROW; i++){ printf("%d ", i+1); for(int j=0; j<COL; j++){ printf("%c ", board[i][j]); } printf("\n"); } } //判断胜利 int judge_win(char board[][COL], int row, int col){ int i, j, count; //判断横向五子连珠 count=1; for(i=col-1; i>=0 && board[row][i]==board[row][col]; i--,count++); for(i=col+1; i<COL && board[row][i]==board[row][col]; i++,count++); if(count >= 5) return 1; //判断纵向五子连珠 count=1; for(i=row-1; i>=0 && board[i][col]==board[row][col]; i--,count++); for(i=row+1; i<ROW && board[i][col]==board[row][col]; i++,count++); if(count >= 5) return 1; //判断右上斜向五子连珠 count=1; for(i=row-1, j=col+1; i>=0 && j<COL && board[i][j]==board[row][col]; i--,j++,count++); for(i=row+1, j=col-1; i<ROW && j>=0 && board[i][j]==board[row][col]; i++,j--,count++); if(count >= 5) return 1; //判断右下斜向五子连珠 count=1; for(i=row-1, j=col-1; i>=0 && j>=0 && board[i][j]==board[row][col]; i--,j--,count++); for(i=row+1, j=col+1; i<ROW && j<COL && board[i][j]==board[row][col]; i++,j++,count++); if(count >= 5) return 1; return 0; } ``` 运行后,会显示一个15x15的棋盘,玩家可以输入坐标下棋,程序会判断胜负并交换下棋方。注意,这只是一个简单的示例,还有很多需要完善的地方,例如输入错误时的处理、和AI对战等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值