📄 canvasframe.cpp
字号:
}
}
break;
case 9:
for(i=0;i<5;i++)
{
if(!S6[i].exist)
{
S6[i].generate();
break;
}
}
break;
}
}
ge=1;
}
void canvasFrame::generate_3()//没有弹簧
{
int i;
if(ge!=0)
{
switch(rand()%10)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
for(i=0;i<10;i++)
{
if(!S1[i].exist)
{
S1[i].generate();
break;
}
}
break;
case 6:
for(i=0;i<5;i++)
{
if(!S2[i].exist)
{
S2[i].generate();
break;
}
}
break;
case 7:
for(i=0;i<5;i++)
{
if(!S4[i].exist)
{
S4[i].generate();
break;
}
}
break;
case 8:
for(i=0;i<5;i++)
{
if(!S5[i].exist)
{
S5[i].generate();
break;
}
}
break;
case 9:
for(i=0;i<5;i++)
{
if(!S6[i].exist)
{
S6[i].generate();
break;
}
}
break;
}
}
ge=1;
}
void canvasFrame::generate_4()//没有履带
{
int i;
if(ge!=0)
{
switch(rand()%10)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
for(i=0;i<10;i++)
{
if(!S1[i].exist)
{
S1[i].generate();
break;
}
}
break;
case 6:
for(i=0;i<5;i++)
{
if(!S2[i].exist)
{
S2[i].generate();
break;
}
}
break;
case 7:
for(i=0;i<5;i++)
{
if(!S3[i].exist)
{
S3[i].generate();
break;
}
}
break;
case 8:
for(i=0;i<5;i++)
{
if(!S4[i].exist)
{
S4[i].generate();
break;
}
}
break;
case 9:
for(i=0;i<5;i++)
{
if(!S2[i].exist)
{
S2[i].generate();
break;
}
}
break;
}
}
ge=1;
}
void canvasFrame::generate_5()//没有翻滚石和弹簧
{
int i;
if(ge!=0)
{
switch(rand()%10)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
for(i=0;i<10;i++)
{
if(!S1[i].exist)
{
S1[i].generate();
break;
}
}
break;
case 7:
for(i=0;i<5;i++)
{
if(!S4[i].exist)
{
S4[i].generate();
break;
}
}
break;
case 8:
for(i=0;i<5;i++)
{
if(!S5[i].exist)
{
S5[i].generate();
break;
}
}
break;
case 9:
for(i=0;i<5;i++)
{
if(!S6[i].exist)
{
S6[i].generate();
break;
}
}
break;
}
}
ge=1;
}
void canvasFrame::generate_6()//没有翻滚石和履带
{
int i;
if(ge!=0)
{
switch(rand()%10)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
for(i=0;i<10;i++)
{
if(!S1[i].exist)
{
S1[i].generate();
break;
}
}
break;
case 7:
for(i=0;i<5;i++)
{
if(!S3[i].exist)
{
S3[i].generate();
break;
}
}
break;
case 8:
for(i=0;i<5;i++)
{
if(!S4[i].exist)
{
S4[i].generate();
break;
}
}
break;
case 9:
for(i=0;i<5;i++)
{
if(!S1[i].exist)
{
S1[i].generate();
break;
}
}
break;
}
}
ge=1;
}
void canvasFrame::generate_7()//没有弹簧和履带
{
int i;
if(ge!=0)
{
switch(rand()%10)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
for(i=0;i<10;i++)
{
if(!S1[i].exist)
{
S1[i].generate();
break;
}
}
break;
case 7:
for(i=0;i<5;i++)
{
if(!S4[i].exist)
{
S4[i].generate();
break;
}
}
break;
case 8:
for(i=0;i<5;i++)
{
if(!S2[i].exist)
{
S2[i].generate();
break;
}
}
break;
case 9:
for(i=0;i<5;i++)
{
if(!S2[i].exist)
{
S2[i].generate();
break;
}
}
break;
}
}
ge=1;
}
void canvasFrame::generate_8()//没有翻滚石弹簧和履带
{
int i;
if(ge!=0)
{
switch(rand()%10)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
for(i=0;i<10;i++)
{
if(!S1[i].exist)
{
S1[i].generate();
break;
}
}
break;
case 8:
case 9:
for(i=0;i<5;i++)
{
if(!S4[i].exist)
{
S4[i].generate();
break;
}
}
break;
}
}
ge=1;
}
void canvasFrame::pastesto()
{
int i;
for(i=0;i<10;i++)
if(S1[i].exist)
S1[i].paste();
for(i=0;i<5;i++)
if(S2[i].exist)
if((i==person1.stonum&&person1.onstone&&
person1.on_type==2||(S2[i].d!=0&&S2[i].d!=9))||
(i==person2.stonum&&person2.onstone&&person2.on_type==2||
(S2[i].d!=0&&S2[i].d!=9)))
//如果人在石头2
//上并且石头编号与判断所得编号相同
//并且翻滚石还没完成一次翻滚
S2[i].paste_1();
else
S2[i].paste_2();
for(i=0;i<5;i++)
if(S3[i].exist)
if((i==person1.stonum&&person1.onstone&&person1.on_type==3)||
(i==person2.stonum&&person2.onstone&&person2.on_type==3))
//如果人在石头3上并且石头编号与此石头编号相同
S3[i].paste_1();
else
S3[i].paste_2();
for(i=0;i<5;i++)
if(S4[i].exist)
S4[i].paste();
for(i=0;i<5;i++)
if(S5[i].exist)
S5[i].paste();
for(i=0;i<5;i++)
if(S6[i].exist)
S6[i].paste();
}
void canvasFrame::reset_sto()
{
int i;
for(i=0;i<10;i++)
S1[i].exist=false;
for(i=0;i<5;i++)
{
S2[i].exist=false;
S2[i].d=9;
}
for(i=0;i<5;i++)
S3[i].exist=false;
for(i=0;i<5;i++)
S4[i].exist=false;
for(i=0;i<5;i++)
S5[i].exist=false;
for(i=0;i<5;i++)
S6[i].exist=false;
}
void canvasFrame::judgeperson()//判断两个人间相对关系
{
person1.onperson=person1.onright=person1.onleft=person2.onperson=person2.onright=person2.onleft=false;
if(person1.y+31>person2.y&&person1.y+31<person2.y+3)
person1.onperson=true;
if(person2.y+31>person1.y&&person2.y+31<person1.y+3)
person2.onperson=true;
if(person1.x+31>person2.x&&person1.x+31<person2.x+3)
person1.onleft=true;
if(person1.x<person2.x+31&&person1.x>person2.x+31-3)
person1.onright=true;
if(person2.x+31>person1.x&&person2.x+31<person1.x+3)
person2.onleft=true;
if(person2.x<person1.x+31&&person2.x>person1.x+31-3)
person2.onright=true;
}
void PERSON::judge_onstone()
{
onstone=false;//每次都重新计算
on_type=0;
stonum=-1;
for(int k=1;k<=6;k++)
{
for(int i=0;i<10;i++)//遍历存在的石头根据坐标判断
//是否在石头上
if(S1[i].exist)//如果石头存在
if(x+31>=S1[i].x && y+31==S1[i].y&&
x<=S1[i].x+95)//并且坐标符合要求
{
onstone=true;
on_type=1;//石头类型置为1
//y=S1[i].y;
break;
}
if(on_type!=0)
break;
for(i=0;i<5;i++)
if(S2[i].exist)
if(x+31>=S2[i].x &&y+31==S2[i].y &&
x<=S2[i].x+95)
{
onstone=true;
on_type=2;
stonum=i;
break;
}
if(on_type!=0)
break;
for(i=0;i<5;i++)
if(S3[i].exist)
if(x+31>=S3[i].x && y+31==S3[i].y &&
x<=S3[i].x+95)
{
onstone=true;
on_type=3;
stonum=i;
break;
}
if(on_type!=0)break;
for(i=0;i<5;i++)
if(S4[i].exist)
if(x+31>=S4[i].x && y+31==S4[i].y &&
x<=S4[i].x+95)
{
onstone=true;
on_type=4;
break;
}
if(on_type!=0)break;
for(i=0;i<5;i++)
if(S5[i].exist)
if(x+31>=S5[i].x && y+31==S5[i].y&&
x<=S5[i].x+95)
{
onstone=true;
on_type=5;
break;
}
if(on_type!=0)break;
for(i=0;i<5;i++)
if(S6[i].exist)
if(x+31>=S6[i].x && y+31==S6[i].y &&
x<=S6[i].x+95)
{
onstone=true;
on_type=6;
break;
}
if(on_type!=0)break;
}
}
bool PERSON::should_onstone()
{
land_line=500;
int i;
for(i=0;i<10;i++)
if(S1[i].exist&&x+31>S1[i].x&&x<S1[i].x+95&&y+31<S1[i].y&&S1[i].y<land_line)
land_line=S1[i].y;
for(i=0;i<5;i++)
if(S2[i].exist&&x+31>S2[i].x&&x<S2[i].x+95&&y+31<S2[i].y&&S2[i].y<land_line)
land_line=S2[i].y;
for(i=0;i<5;i++)
if(S3[i].exist&&x+31>S3[i].x&&x<S3[i].x+95&&y+31<S3[i].y&&S3[i].y<land_line)
land_line=S3[i].y;
for(i=0;i<5;i++)
if(S4[i].exist&&x+31>S4[i].x&&x<S4[i].x+95&&y+31<S4[i].y&&S4[i].y<land_line)
land_line=S4[i].y;
for(i=0;i<5;i++)
if(S5[i].exist&&x+31>S5[i].x&&x<S5[i].x+95&&y+31<S5[i].y&&S5[i].y<land_line)
land_line=S5[i].y;
for(i=0;i<5;i++)
if(S6[i].exist&&x+31>S6[i].x&&x<S6[i].x+95&&y+31<S6[i].y&&S6[i].y<land_line)
land_line=S6[i].y;
if(land_line!=500)
return true;
else return false;
}
void PERSON1::paste()
{
x+=zhuangtai1;
x-=zhuangtai2;
if(so4||onleft)
if(x+31>person2.x)
person2.x+=(x+31-person2.x);
if(so3||onright)
if(x<person2.x+31)
person2.x-=(person2.x+31-x);
y-=zhuangtai3;
if(x<16)//有没有超出边界
x=16;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -