五子棋 人人加人机对弈

第一次写这么长,参考了别人的代码,也还不完善

#include<stdio.h>

#include<stdlib.h>
#include<iostream>
#include<memory>
#include<string.h>
#define maxn 10
using namespace  std;

int Bwin(char a[][maxn]);  //该函数判断o子是否胜利
int Wwin(char a[][maxn]); //该函数判断x子是否胜利
int Draw(char a[][maxn]);   //该函数判断是否平局
/*void qipan(char a[maxn][maxn])
{
 for(int i=0;i<maxn;i++)
 { 
   for(int j=0;j<maxn;j++)
     printf("%c",a[i][j]);
     printf("\n");
 }  
}
*/
char data[12][12];
bool istaked[12][12];

void initthearray()
{
 memset(data,' ',sizeof(data));     
 memset(istaked,false,sizeof(istaked));
}

void output()    // 打印棋盘
{
 int row,column,count1;
    printf("    1   2   3   4    5    6   7   8   9  10\n");
 for(row=0;row<21;row++)
 {
  if(row%2==0)
  {
   printf("    ");
   for(count1=0;count1<10;count1++)
    printf("--- ");
   printf("\n");
  }
  else{
   if(row==19)
    printf("10 |");
   else
       printf("%d  |",(row+1)/2);
   for (column=1;column<11;column++)
    printf("%c  |",data[(row+1)/2][column]);
   printf("\n");
  }
 }
}


void people()
{
 int x,y,i,j;  char a[maxn][maxn];
 for(i=0;i<maxn;i++)
   for(j=0;j<maxn;j++)
     a[i][j]=' ';
    //qipan(a);
    output();
    while(1)
    {
     int a1=1;
     while(1)
     {
      for(;a1;)
      {
        printf("请输入所下o的位置:");
        scanf("%d%d",&x,&y);
        if(data[x][y]=='o'||data[x][y]=='x')
        {
        printf("已有棋子请重新输入\n");
        continue;
        }
        else if(x>=maxn||y>=maxn)
        {
         printf("下在了错误的位置请重新输入\n");
         continue;
        }
        else
        {
         data[x][y]='o';
         a1=0;
        }
      }
      break;
     }
     //qipan(a);
     output();
     if(Bwin(a))
     {
      printf("o子胜利\n");
      break;
     }
     int a2=1;
     while(1)
     {
      for(;a2;)
      {
        printf("请输入所下x的位置:");
        scanf("%d%d",&x,&y);
        if(data[x][y]=='o'||data[x][y]=='x')
        {
        printf("已有棋子请重新输入\n");
        continue;
        }
        else if(x>=maxn||y>=maxn)
        {
         printf("下在了错误的位置请重新输入\n");
         continue;
        }
        else
        {
         data[x][y]='x';
         a2=0;
        }
      }
      break;
     }
     //qipan(a);
     output();
     if(Wwin(a))
     {
      printf("x子胜利\n");
      break;
     }
     if(Draw(a))
     {
      printf("平局\n");
      break;
     }
    }
  //  return 0;
}
int Bwin(char a[][maxn])
{
 int i,j;
 for(i=0;i<maxn;i++)
   for(j=0;j<maxn;j++)
     if(a[i][j]=='o'&&a[i][j+1]=='o'&&a[i][j+2]=='o'&&a[i][j+3]=='o'&&a[i][j+4]=='o')
       return 1;
 for(j=0;j<maxn;j++)
   for(i=0;i<maxn;i++)
     if(a[i][j]=='o'&&a[i+1][j]=='o'&&a[i+2][j]=='o'&&a[i+3][j]=='o'&&a[i+4][j]=='o')
     return 1;
    for(i=0;i<maxn;i++)
   for(j=0;j<maxn;j++)
   if(a[i][j]=='o'&&a[i+1][j+1]=='o'&&a[i+2][j+2]=='o'&&a[i+3][j+3]=='o'&&a[i+4][j+4]=='o')
        return 1;
    for(i=0;i<maxn;i++)
   for(j=maxn-1;j>3;j--)
   if(a[i][j]=='o'&&a[i-1][j+1]=='o'&&a[i-2][j+2]=='o'&&a[i-3][j+3]=='o'&&a[i-4][j+4]=='o')
        return 1;
    return 0;  
}
int Wwin(char a[][maxn])
{
 int i,j;
 for(i=0;i<maxn;i++)
   for(j=0;j<maxn;j++)
     if(a[i][j]=='x'&&a[i][j+1]=='x'&&a[i][j+2]=='x'&&a[i][j+3]=='x'&&a[i][j+4]=='x')
       return 1;
 for(j=0;j<maxn;j++)
   for(i=0;i<maxn;i++)
     if(a[i][j]=='x'&&a[i+1][j]=='x'&&a[i+2][j]=='x'&&a[i+3][j]=='x'&&a[i+4][j]=='x')
     return 1;
    for(i=0;i<maxn;i++)
   for(j=0;j<maxn;j++)
   if(a[i][j]=='x'&&a[i+1][j+1]=='x'&&a[i+2][j+2]=='x'&&a[i+3][j+3]=='x'&&a[i+4][j+4]=='x')
        return 1;
    for(i=0;i<maxn;i++)
   for(j=maxn-1;j>3;j--)
   if(a[i][j]=='x'&&a[i-1][j+1]=='x'&&a[i-2][j+2]=='x'&&a[i-3][j+3]=='x'&&a[i-4][j+4]=='x')
        return 1;
    return 0;  
}
int Draw(char a[][maxn])
{
 int i,j;
 for(i=0;i<maxn;i++)
   for(j=0;j<maxn;j++)
   {
    if(a[i][j]==' ')
        return 0;
   }
 return 1;
}

 

 

 

 


int isover()     // 判断是否结束
{
 int row,column,key,flag=0;
 char station;
 for(row=1;row<11;row++)
 {
  for (column=1;column<11;column++)
  {
   if(istaked[row][column]==false)
    flag=1;
  }
 }
 if (flag==0)
 {
  return(-1);
 }
 for(row=1;row<11;row++)
 {
  for (column=1;column<11;column++)
  {
   station=data[row][column];
   if(station==' ')
    continue;
   if(station=='*')
    key=1;
   if(station=='o')
    key=2;
   if(data[row][column+1]==station&&data[row][column+2]==station&&data[row][column+3]==station&&data[row][column+4]==station)
    return(key);
   if(data[row+1][column]==station&&data[row+2][column]==station&&data[row+3][column]==station&&data[row+4][column]==station)
    return(key);
   if(data[row+1][column+1]==station&&data[row+2][column+2]==station&&data[row+3][column+3]==station&&data[row+4][column+4]==station)
                return(key);
   if(data[row+1][column-1]==station&&data[row+2][column-2]==station&&data[row+3][column-3]==station&&data[row+4][column-4]==station)
    return(key);
  }
 }

 return(0);
}
void getposition()    // 判断此处是否可落子
{
 int row,column;
    scanf("%d%d",&row,&column);
 while(istaked[row][column]==true)
 {
  printf("这个位置已经放置了棋子,请重新放置!");
        scanf("%d%d",&row,&column);
 }
 while (row<1||row>10||column<1||column>10)
 {
  printf("对不起!不能在棋盘外放置棋子!");
        scanf("%d%d",&row,&column);
 }
 data[row][column]='*';
 istaked[row][column]=true;
}

void AIsolve()   //  一个简单的算法
{
 int row,column;
 char pict;
 
    for (row=1;row<11;row++)
 {
  for (column=1;column<11;column++)
  {
   pict=data[row][column];
   if(pict==' '||pict=='*')
    continue;                          

  // 看有没有成四,选择第五子的位置
   if (data[row][column+1]==pict&&data[row][column+2]==pict&&data[row][column+3]==pict)   //横向成四,选择放在首或尾
   {
    if (istaked[row][column-1]==false&&column>1)
    {
     data[row][column-1]='o';
     istaked[row][column-1]=true;
     printf("电脑放置棋子的位置是: \n",row,column-1);
                    return;
    }
    if (istaked[row][column+4]==false&&column<7)
    {
     data[row][column+4]='o';
     istaked[row][column+4]=true;
     printf("电脑放置棋子的位置是: \n",row,column+4);
                    return;
    }
   }

   if (data[row+1][column]==pict&&data[row+2][column]==pict&&data[row+3][column]==pict) // 竖向成三四
   {
    if (istaked[row-1][column]==false&&row>1)  //  注意,也许有点问题
    {
     data[row-1][column]='o';
     istaked[row-1][column]=true;
     printf("电脑放置棋子的位置是: \n",row-1,column);
     return;
    }
    if (istaked[row+4][column]==false&&row<7)
    {
     data[row+4][column]='o';
     istaked[row+4][column]=true;
     printf("电脑放置棋子的位置是: \n",row+4,column);
                    return;
    }    
   }

   if (data[row+1][column+1]==pict&&data[row+2][column+2]==pict&&data[row+3][column+3]==pict)
   {                                                //   斜向右成三四
    if (istaked[row-1][column-1]==false&&column>1&&row>1)
    {
     data[row-1][column-1]='o';
     istaked[row-1][column-1]=true;
     printf("电脑放置棋子的位置是: \n",row-1,column-1);
     return;
    }
    if (istaked[row+4][column+4]==false&&column<7&&row<7)
    {
     data[row+4][column+4]='o';
     istaked[row+4][column+4]=true;
     printf("电脑放置棋子的位置是: \n",row+4,column+4);
     return;
    }
   }

   if (data[row+1][column-1]==pict&&data[row+2][column-2]==pict&&data[row+3][column-3]==pict)
   {                                               //斜向左成三四
    if (istaked[row-1][column+1]==false&&column<10&&row>1)
    {
     data[row-1][column+1]='o';
     istaked[row-1][column+1]=true;
     printf("电脑放置棋子的位置是: \n",row-1,column+1);
     return;
    }
    if (istaked[row+4][column-4]==false&&column>4&&row<7)
    {
     data[row+4][column-4]='o';
     istaked[row+4][column-4]=true;
     printf("电脑放置棋子的位置是: \n",row+4,column-4);
     return;
    }
   }
  }
 }

//The second step to find if there is any continuous three
 //first for the computer itself
 for (row=1;row<11;row++)
 {
  for (column=1;column<11;column++)
  {
   pict=data[row][column];
   if(pict==' '||pict=='*')
    continue;                         
   
   //判断有没有三个相连,选择第四子的位置
   if (data[row][column+1]==pict&&data[row][column+2]==pict)      //  横向两三
   {
    if (istaked[row][column-1]==false&&column>2&&data[row][column-2]==pict)
    {
     data[row][column-1]='o';
     istaked[row][column-1]=true;
     printf("电脑放置棋子的位置是: \n",row,column-1);
     return;
    }
    if (istaked[row][column+3]==false&&column<7&&data[row][column+4]==pict)
    {
     data[row][column+3]='o';
     istaked[row][column+3]=true;
     printf("电脑放置棋子的位置是: \n",row,column+3);
     return;
    }
   }
   if (data[row+1][column]==pict&&data[row+2][column]==pict)       //竖向两三
   {
    if (istaked[row-1][column]==false&&row>2&&data[row-2][column]==pict)
    {
     data[row-1][column]='o';
     istaked[row-1][column]=true;
     printf("电脑放置棋子的位置是: \n",row-1,column);
     return;
    }
    if (istaked[row+3][column]==false&&row<7&&data[row+4][column]==pict)
    {
     data[row+3][column]='o';
     istaked[row+3][column]=true;
     cout<<"电脑放置棋子的位置是:"<<row+3<<' '<<column<<endl;
     printf("电脑放置棋子的位置是: \n",row+3,column);
     return;
    }    
   }
   if (data[row+1][column+1]==pict&&data[row+2][column+2]==pict)   // 斜向右三子
   {
    if (istaked[row-1][column-1]==false&&column>2&&row>2&&data[row-2][column-2]==pict)
    {
     data[row-1][column-1]='o';
     istaked[row-1][column-1]=true;
     printf("电脑放置棋子的位置是: \n",row-1,column-1);
     return;
    }
    if (istaked[row+3][column+3]==false&&column<7&&row<7&&data[row+4][column+4]==pict)
    {
     data[row+3][column+3]='o';
     istaked[row+3][column+3]=true;
     printf("电脑放置棋子的位置是: \n",row+3,column+3);
     return;
    }
   }
   if (data[row+1][column-1]==pict&&data[row+2][column-2]==pict)     //斜向左三子
   {
    if (istaked[row-1][column+1]==false&&column<9&&row>2&&data[row-2][column+2]==pict)
    {
     data[row-1][column+1]='o';
     istaked[row-1][column+1]=true;
     printf("电脑放置棋子的位置是: \n",row-1,column+1);
     return;
    }
    if (istaked[row+3][column-3]==false&&column>4&&row<7&&data[row+4][column-4]==pict)
    {
     data[row+3][column-3]='o';
     istaked[row+3][column-3]=true;
     printf("电脑放置棋子的位置是: \n",row+3,column-3);
     return;
    }
   }
   //now only three continuous
   if (data[row][column+1]==pict&&data[row][column+2]==pict)                //看一下这四个if 和上面的不同
   {
    if (istaked[row][column-1]==false&&column>1)
    {
     data[row][column-1]='o';
     istaked[row][column-1]=true;
     printf("电脑放置棋子的位置是: \n",row,column-1);
     return;
    }
    if (istaked[row][column+3]==false&&column<8)
    {
     data[row][column+3]='o';
     istaked[row][column+3]=true;
     printf("电脑放置棋子的位置是: \n",row,column+3);
     return;
    }
   }

   //to detect if there is only three in a column continuous
   if (data[row+1][column]==pict&&data[row+2][column]==pict)   
   { 
    if (istaked[row-1][column]==false&&row>1)
    {
     data[row-1][column]='o';
     istaked[row-1][column]=true;
     printf("电脑放置棋子的位置是: \n",row-1,column);
     return;
    }
    if (istaked[row+3][column]==false&&row<8)
    {
     data[row+3][column]='o';
     istaked[row+3][column]=true;
     printf("电脑放置棋子的位置是: \n",row+3,column);
     return;
    }    
   }

   if (data[row+1][column+1]==pict&&data[row+2][column+2]==pict)
   {
    if (istaked[row-1][column-1]==false&&column>1&&row>1)
    {
     data[row-1][column-1]='o';
     istaked[row-1][column-1]=true;
     printf("电脑放置棋子的位置是: \n",row-1,column-1);
     return;
    }
    if (istaked[row+3][column+3]==false&&column<8&&row<8)
    {
     data[row+3][column+3]='o';
     istaked[row+3][column+3]=true;
     printf("电脑放置棋子的位置是: \n",row+3,column+3);
     return;
    }
   }

   if (data[row+1][column-1]==pict&&data[row+2][column-2]==pict)
   {
    if (istaked[row-1][column+1]==false&&column<10&&row>1)
    {
     data[row-1][column+1]='o';
     istaked[row-1][column+1]=true;
     printf("电脑放置棋子的位置是: \n",row-1,column+1);
     return;
    }
    if (istaked[row+3][column-3]==false&&column>3&&row<8)
    {
     data[row+3][column-3]='o';
     istaked[row+3][column-3]=true;
     printf("电脑放置棋子的位置是: \n",row+3,column-3);
     return;
    }
   }
  }
 }
//The third stage is to detect if there is any two continuous
 //the first is for the computer
 for (row=1;row<11;row++)                     //判断两个子 选择第三子的位置
 {
  for (column=1;column<11;column++)
  {
   pict=data[row][column];
   if(pict==' '||pict=='*')
    continue;                          

   if (data[row][column+1]==pict)                          //横
   {
    if (istaked[row][column-1]==false&&column>2&&data[row][column-2]==pict)
    {
     data[row][column-1]='o';
     istaked[row][column-1]=true;
     printf("电脑放置棋子的位置是: \n",row,column-1);
     return;
    }
    if (istaked[row][column+2]==false&&column<8&&data[row][column+3]==pict)
    {
     data[row][column+2]='o';
     istaked[row][column+2]=true;
     printf("电脑放置棋子的位置是: \n",row,column+2);
     return;
    }
   }
   if (data[row+1][column]==pict)                       //竖
   {
    if (istaked[row-1][column]==false&&row>2&&data[row-2][column]==pict)
    {
     data[row-1][column]='o';
     istaked[row-1][column]=true;
     printf("电脑放置棋子的位置是: \n",row-1,column);
     return;
    }
    if (istaked[row+2][column]==false&&row<8&&data[row+3][column]==pict)
    {
     data[row+2][column]='o';
     istaked[row+2][column]=true;
     printf("电脑放置棋子的位置是: \n",row+2,column);
     return;
    }     
   }
   if (data[row+1][column+1]==pict)                     //斜右
   {
    if (istaked[row-1][column-1]==false&&column>2&&row>2&&data[row-2][column-2]==pict)
    {
     data[row-1][column-1]='o';
     istaked[row-1][column-1]=true;
     printf("电脑放置棋子的位置是: \n",row-1,column-1);
     return;
    }
    if (istaked[row+2][column+2]==false&&column<8&&row<8&&data[row+3][column+3]==pict)
    {
     data[row+2][column+2]='o';
     istaked[row+2][column+2]=true;
     printf("电脑放置棋子的位置是: \n",row+2,column+2);
     return;
    }
   }
   if (data[row+1][column-1]==pict)                             //斜左
   {
    if (istaked[row-1][column+1]==false&&column<9&&row>2&&data[row-2][column+2]==pict)
    {
     data[row-1][column+1]='o';
     istaked[row-1][column+1]=true;
     printf("电脑放置棋子的位置是: \n",row-1,column+1);
     return;
    }
    if (istaked[row+2][column-2]==false&&column>3&&row<8&&data[row+3][column-3]==pict)
    {
     data[row+2][column-2]='o';
     istaked[row+2][column-2]=true;
     printf("电脑放置棋子的位置是: \n",row+2,column-2);
     return;
    }
   }

                                               //再看这四个,着实不明白,为什么判断条件不同,要重复两次
   if (data[row][column+1]==pict)                    //横       
   {
    if (istaked[row][column-1]==false&&column>1)
    {                                  
     data[row][column-1]='o';
     istaked[row][column-1]=true;
     printf("电脑放置棋子的位置是: \n",row,column-1);
     return;
    }
    if (istaked[row][column+2]==false&&column<9)
    {
     data[row][column+2]='o';
     istaked[row][column+2]=true;
     printf("电脑放置棋子的位置是: \n",row,column+2);
     return;
    }
   }
   if (data[row+1][column]==pict)                  //竖
   { 
    if (istaked[row-1][column]==false&&row>1)
    {
     data[row-1][column]='o';
     istaked[row-1][column]=true;
     printf("电脑放置棋子的位置是: \n",row-1,column);
     return;
    }
    if (istaked[row+2][column]==false&&row<9)
    {
     data[row+2][column]='o';
     istaked[row+2][column]=true;
     printf("电脑放置棋子的位置是: \n",row+2,column);
     return;
    }    
   }
   if (data[row+1][column+1]==pict)                  //斜右
   {
    if (istaked[row-1][column-1]==false&&column>1&&row>1)
    {
     data[row-1][column-1]='o';
     istaked[row-1][column-1]=true;
     printf("电脑放置棋子的位置是: \n",row-1,column-1);
     return;
    }
    if (istaked[row+2][column+2]==false&&column<9&&row<9)
    {
     data[row+2][column+2]='o';
     istaked[row+2][column+2]=true;
     printf("电脑放置棋子的位置是: \n",row+2,column+2);
     return;
    }
   }
   if (data[row+1][column-1]==pict)                        //斜左
   {
    if (istaked[row-1][column+1]==false&&column<10&&row>1)
    {
     data[row-1][column+1]='o';
     istaked[row-1][column+1]=true;
     printf("电脑放置棋子的位置是: \n",row-1,column+1);
     return;
    }
    if (istaked[row+2][column-2]==false&&column>2&&row<9)
    {
     data[row+2][column-2]='o';
     istaked[row+2][column-2]=true;
     printf("电脑放置棋子的位置是: \n",row+2,column-2);
     return;
    }
   }
  }
 } 
   // 单独一个子
 for (row=1;row<11;row++)
 {
  for (column=1;column<11;column++)
  {
   pict=data[row][column];
   if(pict==' '||pict=='o')
    continue;

   if (data[row][column-2]==pict&&column>2&&istaked[row][column-1]==false)   //横左
   {
    data[row][column-1]='o';
    istaked[row][column-1]=true;
    printf("电脑放置棋子的位置是: \n",row,column-1);
    return;
   }
   if (data[row][column+2]==pict&&column<9&&istaked[row][column+1]==false)    //横右
   {
    data[row][column+1]='o';
    istaked[row][column+1]=true;
    printf("电脑放置棋子的位置是: \n",row,column+1);
    return;
   }
   if (data[row-2][column]==pict&&row>2&&istaked[row-1][column]==false)        //竖上
   {
    data[row-1][column]='o';
    istaked[row-1][column]=true;
    printf("电脑放置棋子的位置是: \n",row-1,column);
    return;
   }
   if (data[row+2][column]==pict&&row<9&&istaked[row+1][column]==false)         //竖下
   {
    data[row+1][column]='o';
    istaked[row+1][column]=true;
    printf("电脑放置棋子的位置是: \n",row+1,column);
    return;
   }
   if (data[row-2][column-2]==pict&&row>2&&column>2&&istaked[row-1][column-1]==false)   // 斜左上
   {
    data[row-1][column-1]='o';
    istaked[row-1][column-1]=true;
    printf("电脑放置棋子的位置是: \n",row-1,column-1);
    return;
   }
   if (data[row+2][column+2]==pict&&row<9&&column<9&&istaked[row+1][column+1]==false)     //斜右下
   {
    data[row+1][column+1]='o';
    istaked[row+1][column+1]=true;
    printf("电脑放置棋子的位置是: \n",row+1,column+1);
    return;
   }
   if (column>1&&istaked[row][column-1]==false)                                   //横左
   {
    data[row][column-1]='o';
    istaked[row][column-1]=true;
    printf("电脑放置棋子的位置是: \n",row,column-1);
    return;
   }
   if (column<10&&istaked[row][column+1]==false)                                  //横右
   {
    data[row][column+1]='o';
    istaked[row][column+1]=true;
    printf("电脑放置棋子的位置是: \n",row,column+1);
    return;
   }
   if (row>1&&istaked[row-1][column]==false)                                          //竖上
   {
    data[row-1][column]='o';
    istaked[row-1][column]=true;
    printf("电脑放置棋子的位置是: \n",row-1,column);
    return;
   }
   if (row<10&&istaked[row+1][column]==false)                                        //竖下
   {
    data[row+1][column]='o';
    istaked[row+1][column]=true;
    printf("电脑放置棋子的位置是: \n",row+1,column);
    return;
   }
   if (row>1&&column>1&&istaked[row-1][column-1]==false)                             // 斜左上
   {
    data[row-1][column-1]='o';
    istaked[row-1][column-1]=true;
    printf("电脑放置棋子的位置是: \n",row-1,column-1);
    return;
   }
   if (row<10&&column<10&&istaked[row+1][column+1]==false)                             //斜右下
   {
    data[row+1][column+1]='o';
    istaked[row+1][column+1]=true;
    printf("电脑放置棋子的位置是: \n",row+1,column+1);
    return;
   }
  }
 }
 //最后一个没有子的位置
   for (row=1;row<11;row++)
 {
  for (column=1;column<11;column++)
  {
   if (istaked[row][column]==false)
   {
    data[row][column]='o';
    istaked[row][column]=true;
    printf("电脑放置棋子的位置是: \n",row,column);
    return;
   }
  }
 }

}

 

 

 

 

 

 

 

 

 


int main()
{
 int decide; int a;
 initthearray();
 output();
 printf("人人对弈请按1,人机对弈请按2\n");
    scanf("%d",&a);
    if(a==1)
    {
      people();
    }
    else{
 while (1)
  {
  cout<<"请按(横 竖)坐标放置棋子:";
  getposition();

  decide=isover();
  switch (decide)
  {
  case -1:                 // -1时棋盘全部占满
   output();
   printf("游戏结束 平局.\n");
   return 0;
  case 0:
   break;
  case 1:
   output();
   printf("恭喜你!你赢了!\n");
   return 0;
  case 2:
   output();
   printf("笨蛋!你输了!.\n");
   return 0;

  default:break;
  }
    AIsolve();
             //  调用算法,选择下一步的位置    
        output();
     }
 getchar();
    system("pause");
    }
   
   
 return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值