用C++写的三子棋代码(基于DOS界面)

#include<iostream>
#include<stdlib.h>
using namespace std;
class Tictoc
{
public:
 Tictoc();//赋值数组t[3][3],初始化为空字符,还有显示棋盘
 void display();//核心代码
private:
 char t[3][3];
 int y[8];//标记棋子
 int R;//输出棋子的数据
 char win;//输出胜利的一方

 bool Dwinplayer();//判断胜负
 int  num(int i);//判断是否有棋子
 void num1(int i);//下子时,标记棋子
 void Tcout1();//头部输出
 void Tcout2();//棋盘函数体的输出
 void Tcout3();//尾部输出

};
Tictoc::Tictoc()
{
 for(int a=0;a<3;a++)
  for(int b=0;b<3;b++)
  {
   t[a][b]=' ';
  }
 for(int c=0;c<8;c++)
  y[c]=0;
 Tcout2();
}
void Tictoc::display()
{
 int p2;
 int p1=1;
 char c1;
 while(1)
 {
  if(p1==1)
  {
loop1:  cout<<"A请输入:";
   cin>>c1;
   p1-=1;
   switch(c1)
   {
   case 'q':
    {
     if(num(7)==1)
     { cout<<"你输入的已有棋子";goto loop1;}
     else
     { num1(7);

     t[0][0]='A';
     p2=1;
     break;}
    }
   case 'w':
    { 
     if(num(8)==1)
     { cout<<"你输入的已有棋子";goto loop1;}
     else
     { num1(8);
     t[0][1]='A';p2=1;break;}
      
    }
   case 'e':
    {
     if(num(9)==1)
     { cout<<"你输入的已有棋子";goto loop1;}
     else
     { num1(9);
     t[0][2]='A';p2=1;break;}
    }
   case 'a':
    {
     if(num(4)==1)
     { cout<<"你输入的已有棋子";goto loop1;}
     else
     { num1(4);
     t[1][0]='A';p2=1;break;}
    }
   case 's':
    {
     if(num(5)==1)
     { cout<<"你输入的已有棋子";goto loop1;}
     else
     { num1(5);
     t[1][1]='A';p2=1;break;}
    }
   case 'd':
    {
     if(num(6)==1)
     { cout<<"你输入的已有棋子";goto loop1;}
     else
     { num1(6);
     t[1][2]='A';p2=1;break;}
    }
   case 'z':
    {
     if(num(1)==1)
     { cout<<"你输入的已有棋子";goto loop1;}
     else
     { num1(1);
     t[2][0]='A';p2=1;break;}
    }
   case 'x':
    {
     if(num(2)==1)
     { cout<<"你输入的已有棋子";goto loop1;}
     else
     { num1(2);
     t[2][1]='A';p2=1;break;}
    }
   case 'c':
    {
     if(num(3)==1)
     { cout<<"你输入的已有棋子";goto loop1;}
     else
     { num1(3);
     t[2][2]='A';p2=1;break;}
    }
   }
  }
  else
  {
loop2:  cout<<"B请输入:";
   cin>>c1;
   p1=1;
   switch(c1)
   {
   case 'u':
    {
     if(num(7)==1)
     { cout<<"你输入的已有棋子";goto loop2;}
     else
     { num1(7);
     t[0][0]='B';p2=1;break;}
    }
   case 'i':
    {
     if(num(8)==1)
     { cout<<"你输入的已有棋子";goto loop2;}
     else
     { num1(8);
     t[0][1]='B';p2=1;break;}
    }
   case 'o':
    {
     if(num(9)==1)
     { cout<<"你输入的已有棋子";goto loop2;}
     else
     { num1(9);
     t[0][2]='B';p2=1;break;}
    }
   case 'h':
    {
     if(num(4)==1)
     { cout<<"你输入的已有棋子";goto loop2;}
     else
     { num1(4);
     t[1][0]='B';p2=1;break;}
    }
   case 'j':
    {
     if(num(5)==1)
     { cout<<"你输入的已有棋子";goto loop2;}
     else
     { num1(5);
     t[1][1]='B';p2=1;break;}
    }
   case 'k':
    {
     if(num(6)==1)
     { cout<<"你输入的已有棋子";goto loop2;}
     else
     { num1(6);
     t[1][2]='B';p2=1;break;}
    }
   case 'b':
    {
     if(num(1)==1)
     { cout<<"你输入的已有棋子";goto loop2;}
     else
     { num1(1);
     t[2][0]='B';p2=1;break;}
    }
   case 'n':
    {
     if(num(2)==1)
     { cout<<"你输入的已有棋子";goto loop2;}
     else
     { num1(2);
     t[2][1]='B';p2=1;break;}
    }
   case 'm':
    {
     if(num(3)==1)
     { cout<<"你输入的已有棋子";goto loop2;}
     else
     { num1(3);
     t[2][2]='B';p2=1;break;}
    }
   }

  }
  
  if(p2==1)
  {
   Tcout2();
   if(Dwinplayer())
   {
    system("color 1a");
    system("cls");
    cout<<"恭喜"<<win<<"胜利"<<endl;goto loop3;
   }
   p2=2;
   
  }

 }
loop3: int op=1;

}
int Tictoc::num(int i)
{
 int i1;
 for(int i2=0;i2<8;i2++)
 {
  if(y[i2]==i)
  {
   return i1=1;
   break;
  }
  
 }
 return i1=2;
}
void Tictoc::num1(int i)
{
 for(int i1=0;i1<8;i1++)
 {
  if(y[i1]==0)
  {
   y[i1]=i;
   R=i;
   break;
  }
 }
}

bool Tictoc::Dwinplayer()
{
 if(t[0][0] == t[0][1] && t[0][1] == t[0][2] && t[0][0] != ' ' && t[0][1] != ' ' && t[0][2] != ' ')
 {
  win = t[0][0];
  return true;
 }
 if(t[1][0] == t[1][1] && t[1][1] == t[1][2] && t[1][0] != ' ' && t[1][1] != ' ' && t[1][2] != ' ')
 {
  win = t[1][0];
  return true;
 }
 if(t[2][0] == t[2][1] && t[2][1] == t[2][2] && t[2][0] != ' ' && t[2][1] != ' ' && t[2][2] != ' ')
 {
  win = t[2][0];
  return true;
 }

 if(t[0][0] == t[1][0] && t[1][0] == t[2][0] && t[0][0] != ' ' && t[1][0] != ' ' && t[2][0] != ' ')
 {
  win = t[0][0];
  return true;
 }
 if(t[0][1] == t[1][1] && t[1][1] == t[2][1] && t[0][1] != ' ' && t[1][1] != ' ' && t[2][1] != ' ')
 {
  win = t[0][1];
  return true;
 }
 if(t[0][2] == t[1][2] && t[1][2] == t[2][2] && t[0][2] != ' ' && t[1][2] != ' ' && t[2][2] != ' ')
 {
  win = t[0][2];
  return true;
 }

 if(t[0][0] == t[1][1] && t[1][1] == t[2][2] && t[0][0] != ' ' && t[1][1] != ' ' && t[2][2] != ' ')
 {
  win = t[0][0];
  return true;
 }
 if(t[0][2] == t[1][1] && t[1][1] == t[2][0] && t[0][2] != ' ' && t[1][1] != ' ' && t[2][0] != ' ')
 {
  win = t[0][2];
  return true;
 }
 return false;
}


void Tictoc::Tcout1()
{
 cout<<"┏━"<<"━┳━"<<"━┳━"<<"━┓"<<endl;

}
void Tictoc::Tcout2()
{
 system("cls");
 Tcout1();
 switch(R)
 {
  case 7:cout<<"┃ "<<t[0][0]<<"  ┃ "<<t[0][1]<<"  ┃  "<<t[0][2]<<" ┃"<<endl;break;
  case 8:cout<<"┃ "<<t[0][0]<<"  ┃ "<<t[0][1]<<"  ┃  "<<t[0][2]<<" ┃"<<endl;break;
  case 9:cout<<"┃ "<<t[0][0]<<"  ┃ "<<t[0][1]<<"  ┃  "<<t[0][2]<<" ┃"<<endl;break;
  default:cout<<"┃  "<<t[0][0]<<" ┃  "<<t[0][1]<<" ┃  "<<t[0][2]<<" ┃"<<endl;break;
 }
 cout<<"┣━"<<"━╋━"<<"━╋━"<<"━┫"<<endl;
 switch(R)
 {
  case 4:cout<<"┃ "<<t[1][0]<<"  ┃ "<<t[1][1]<<"  ┃  "<<t[1][2]<<" ┃"<<endl;break;
  case 5:cout<<"┃ "<<t[1][0]<<"  ┃ "<<t[1][1]<<"  ┃  "<<t[1][2]<<" ┃"<<endl;break;
  case 6:cout<<"┃ "<<t[1][0]<<"  ┃ "<<t[1][1]<<"  ┃  "<<t[1][2]<<" ┃"<<endl;break;
  default:cout<<"┃  "<<t[1][0]<<" ┃  "<<t[1][1]<<" ┃  "<<t[1][2]<<" ┃"<<endl;break;
 }
 cout<<"┣━"<<"━╋━"<<"━╋━"<<"━┫"<<endl;
 switch(R)
 {
  case 1:cout<<"┃ "<<t[2][0]<<"  ┃ "<<t[2][1]<<"  ┃  "<<t[2][2]<<" ┃"<<endl;break;
  case 2:cout<<"┃ "<<t[2][0]<<"  ┃ "<<t[2][1]<<"  ┃  "<<t[2][2]<<" ┃"<<endl;break;
  case 3:cout<<"┃ "<<t[2][0]<<"  ┃ "<<t[2][1]<<"  ┃  "<<t[2][2]<<" ┃"<<endl;break;
  default:cout<<"┃  "<<t[2][0]<<" ┃  "<<t[2][1]<<" ┃  "<<t[2][2]<<" ┃"<<endl;break;
 }
 Tcout3();

}
void Tictoc::Tcout3()
{
 cout<<"┗━"<<"━┻━"<<"━┻━"<<"━┛"<<endl;
}
int main()
{
 Tictoc t1;
 t1.display();
 system("pause");
 return 0;
}

 

 

因为我在其他地方都有发表这篇文章,亦遇到别人说的我的代码有BUG,所以我也去看看,问题别人也直接说了,现在改好了请大家鉴赏!

#include<iostream>
 #include<stdlib.h>
 #include<iomanip>
 
using namespace std;
 
void years_and_month(int y,int m);//将日历显示出来的无返回值函数
 int year_leap(int n);//判断闰年的函数,所以是有返回值
 
int main()
 {
  int year,month;
 
 while(1)
  {
  system("color a");//改变字体颜色
  cout<<"请输入年和月:";
  cin>>year>>month;
  if (cin.fail())
 break;
  else
   if(month>1&&month<12)
  years_and_month(year,month);
   else
    cout<<"error"<<endl;
  system("pause");
  system("cls");
 
  }
  return 0;
 }
 void years_and_month(int y,int m)
 {
  long int year_days=0;//从公元第一年开始
  int  year_starts=1,per_year_starts;
  int months[]={31,28,31,30,31,30,31,31,30,31,30,31,29};
  while(year_starts<y)//从这里开始统计
  {
   if(year_leap(year_starts))//调用函数years_leap,判断years_starts是否为闰年
    per_year_starts=366;
   else
    per_year_starts=365;
   year_starts++;
   year_days=year_days+per_year_starts;
  }
  for(int i=0;i<m-1;i++)
   year_days=months[i]+year_days;
  
   switch(m)
  {
   case 1:
    cout<<"January\n";break;
   case 2:
    cout<<"February\n";break;
   case 3:
    cout<<"March\n";break;
   case 4:
    cout<<"April\n";break;
   case 5:
    cout<<"May\n";break;
   case 6:
    cout<<"June\n";break;
   case 7:
    cout<<"July\n";break;
   case 8:
    cout<<"August\n";break;
   case 9:
    cout<<"September\n";break;
   case 10:
    cout<<"October\n";break;
   case 11:
    cout<<"November\n";break;
   case 12:
    cout<<"December\n";break;
  }
  cout<<" Mon Tue Wed Thu Fri Sat Sun\n";
  int t,day;
  t=year_days%7;//从公元开始统计下来的天数除以7,用来控制每一个星期空几天
  if(t!=0)
   for(int i=0;i<t;i++)
    cout<<"    ";//先空4个格
   day=1;//每个月的第一天的号数
   if(year_leap(y)&&m==2)//当到2月份的时候,要判断输入的年是否为闰年
    while(day<months[12])
    {
     if(day>1)
      if(year_days%7==0)//控制一个星期为7天的时候,自动换行
       cout<<endl;
     cout<<setw(4)<<day;//制造日历的间隔
     year_days++;//保持上面换行能够成功
     day++;
    }
   else
    while(day<=months[m-1])//用事先temp在for语句里面的值控制每个月的天数
    {
     if(day>1)
      if(year_days%7==0)
       cout<<endl;
     cout<<setw(4)<<day;
     year_days++;
     day++;
    }cout<<endl;
 
 
}
 
int year_leap(int n)
 {
  if((n%4==0&&n%100!=0)||n%400==0)
   return 1;
  else
   return 0;
 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值