c++ 实现井字棋

来源:互联网 发布:linux kernel启动流程 编辑:程序博客网 时间:2024/06/18 06:07

#include<iostream.h>
void dy(char a[][3]);                      // X  方赋值函数
void dy1(char a[][3]);                    //  O   方赋值函数
void winner();                              
void pd(char a[][3]);                      //判断函数
int p=0,h=0;                    //p为平局计数变量,h=1 为胜利标志

int main()
{
 char a[3][3],ans;              //ans 为再玩一次的标记
 do
 {
     char k='0';                    
     h=0;
     p=0;
     for(int i=0;i<3;i++)
         for(int j=0;j<3;j++)
              {a[i][j]=++k;}               //给3*3表格赋上数字
     for(int m=0;m<3;m++)
           {for(int n=0;n<3;n++)
              {cout<<a[m][n]<<"  ";}       //输出表格
          cout<<endl;
          cout<<endl;}
          while(::h!=1)
        {
             dy(a);          
           cout<<endl;
           cout<<endl;
           for(int m=0;m<3;m++)
                {for(int n=0;n<3;n++)
                    {cout<<a[m][n]<<"  ";}
                          cout<<endl;
                         cout<<endl;}
                         pd(a);
                  if((::p!=9)&&::h!=1)                    //平局都是第一个人走第9步
                    {
                       dy1(a);
                       cout<<endl;
                       cout<<endl;
                    for(int m=0;m<3;m++)
                     {
                          for(int n=0;n<3;n++)
                          {cout<<a[m][n]<<"  ";}
                                cout<<endl;
                                 cout<<endl;
                      }
                         pd(a);
                    }
              else if(::h!=1)
                 {
                     cout<<"平局"<<endl;
                     break;
                     }
                    }
              cout<<"想再来一次吗?(y/n)"<<endl;
               cin>>ans;
               cout<<endl;

               }while(ans=='y'||ans=='Y');
              return 0;
              }


   void dy(char a[][3])
 {
  int x;
  cout<<" X 方选择数字:"<<endl;
  cin>>x;
  if(x<1||x>9)
  {
   cout<<"再输一次"<<endl;
   cin>>x;}
        if(1<=x&&x<=3)
  {a[0][x-1]='x';
  ::p++;
  }
  else if(4<=x&&x<=6)
  {a[1][x-4]='x';
  ::p++;
  }
  else if(7<=x&&x<=9)
  {a[2][x-7]='x';
  ::p++;
  }
 }


  void dy1(char a[][3])
 {
  int y;
  cout<<"  O 方选择数字:"<<endl;
  cin>>y;
  if(y<1||y>9)
  {
   cout<<"再输一次"<<endl;
   cin>>y;}
        if(1<=y&&y<=3)
   {a[0][y-1]='o';
          ::p++;
   }
  else if(4<=y&&y<=6)
  {a[1][y-4]='o';
  ::p++;
  }
  else if(7<=y&&y<=9)
  {a[2][y-7]='o';
  ::p++;
  }

 }


  void winner()
  {
   
   cout<<"你赢了"<<endl;
   ::h=1;

  }


  void pd(char a[][3])
  {
  
   if(a[0][0]==a[1][0]&&a[1][0]==a[2][0])
   {winner();}
   else if(a[0][0]==a[0][1]&&a[0][1]==a[0][2])
    {winner();}
   else if(a[2][0]==a[2][1]&&a[2][1]==a[2][2])
    {winner();}
   else if(a[0][2]==a[1][2]&&a[1][2]==a[2][2])
    {winner();}
   else if(a[1][0]==a[1][4]&&a[1][4]==a[1][2])
    {winner();}
   else if(a[0][1]==a[1][1]&&a[1][1]==a[2][1])
    {winner();}
   else if(a[0][0]==a[1][1]&&a[1][1]==a[2][2])
    {winner();}
   else if(a[0][2]==a[1][1]&&a[1][1]==a[2][0])
    {winner();}
  }



各个实现函数好定义,在汇合的时候就头疼了,还是太年轻   -。-

程序中也没考虑有棋不能下的方面。。。。感觉定义一个类更简洁点,欢迎补充讨论~

0 0
原创粉丝点击