#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;
}