TC水果忍者MAIN函数部分.docx
《TC水果忍者MAIN函数部分.docx》由会员分享,可在线阅读,更多相关《TC水果忍者MAIN函数部分.docx(17页珍藏版)》请在冰豆网上搜索。
![TC水果忍者MAIN函数部分.docx](https://file1.bdocx.com/fileroot1/2022-11/20/c7417f02-6cbc-4171-8618-368b47c81bb4/c7417f02-6cbc-4171-8618-368b47c81bb41.gif)
TC水果忍者MAIN函数部分
#include
#include
#include
#include
#include
#include
#include"f_gra.c"
#include"f_math.c"
#include"f_mou.c"
#include"f_def.c"
/*--------------------------------MAIN函数在这里------------------------------*/
main()
{
inti=0,j=0,k=0,keep=1,temp,fru_tag=0,bla_tag=0,lig_tag=0,pat_tag=0,hmx=0,hmy=0,hmk=0,refresh=0,exit=0,highscore=0;
intactivate=0,hactivate=0,score=0,combo=0,perfect=0,fru_frq=2,sc2_quit=0;
inttimer_p=0,timer_c=0,px,py,cx,cy;
intkey;
intcombostr[3],scorestr[5],ref=1;
intscene=1,sce_del,sce_tri=0,sce_jump=0;/*scene:
1.开始画面2.游戏界面3.游戏简介4.高分榜5.作者名单*/
floatk1,b1,k2,b2,k3,b3,ptl1,ptl2,ptl3,ltl,x1,x2,y1,y2;
doubletana=0,sina,cosa,line;
intgdriver=VGA,gmode=VGAHI;
initgraph(&gdriver,&gmode,"C:
\\TC20\\BGI");
srand(time(NULL));
mou_on();
setbkcolor(bkc);
while(exit==0)
{
/*--------------------------------SCENE1------------------------------*/
while(scene==1)
{
setbkcolor(bkc);
if(highscore>10)
{
scorestr[0]=(highscore%10)+'0';
scorestr[1]=(highscore%100)/10+'0';
scorestr[2]=highscore/100+'0';
setcolor(RED);
outtextxy(420,230,"HIGHSCORE");
outtextxy(440,255,&scorestr[0]);
outtextxy(430,255,&scorestr[1]);
outtextxy(420,255,&scorestr[2]);
}
setcolor(BLUE);
outtextxy(275,90,"FRUITNINJA");
outtextxy(175,150,"STARTTRAINING!
");
outtextxy(190,225,"HOWTOPLAY?
");
outtextxy(205,300,"ABOUTUS");
outtextxy(220,375,"BYEBYE...");
if(ref==1)
{
fruit[2].exi=1;
fruit[2].type=2;
fruit[2].y=HIG-150;
fruit[2].x=125;
fruit[3].exi=1;
fruit[3].type=3;
fruit[3].y=HIG-225;
fruit[3].x=140;
fruit[4].exi=1;
fruit[4].type=4;
fruit[4].y=HIG-300;
fruit[4].x=155;
fruit[5].exi=1;
fruit[5].type=1;
fruit[5].y=HIG-375;
fruit[5].x=170;
ref=0;
}
mou_read();
mou_spe();
mou_act();
activate=((mou_k==1)&&((mou_x-hmx)*(mou_x-hmx)+(mou_y-hmy)*(mou_y-hmy))>act_spe);
/*当鼠标左键按下并且有运动时设定鼠标激活activate=1*/
if(activate)
/*在鼠标激活情况下激活刀刃光影的刷新*/
{
blade[bla_tag].exi=1;
blade[bla_tag].hx=hmx;
blade[bla_tag].hy=hmy;
blade[bla_tag].x=mou_x;
blade[bla_tag].y=mou_y;
tana=(mou_y-hmy)/(double)(mou_x-hmx);
line=sqrt(1+tana*tana);
sina=tana/line;
cosa=1/line;
blade[bla_tag].x+=bla_tra*cosa;
blade[bla_tag].y+=bla_tra*sina;
blade[bla_tag].hx-=bla_tra*cosa;
blade[bla_tag].hy-=bla_tra*sina;
bla_tag++;
if(bla_tag==B_AMOUNT-1)bla_tag=0;
}
if(hmk==1&&mou_k==0||(!
activate))
for(i=0;ifor(i=0;i{
if(light[i].exi==1)light[i].time--;
if(light[i].time<=0)light[i].exi=0;
}
for(i=0;i{
if(patch[i].exi==1)
{
patch[i].x+=patch[i].dx;
patch[i].y+=patch[i].dy;
patch[i].dy-=phy_g;
if(patch[i].y<0||patch[i].y>HIG||patch[i].x<0||patch[i].x>WID)patch[i].exi=0;
}
}
/*刀刃初始位置hmx,hmy末位置mou_x,mou_y切割水果判定*/
for(i=0;i{
if(activate==1&&fruit[i].exi==1)
{
x1=hmx;
y1=hmy;
x2=mou_x;
y2=mou_y;
k1=(y2-y1)/(x2-x1);
b1=y1-x1*k1;
k2=k3=-1/k1;
b2=y1-x1*k2;
b3=y2-x2*k3;
ptl1=ptl(k1,b1,fruit[i].x,fruit[i].y);
ptl2=ptl(k2,b2,fruit[i].x,fruit[i].y);
ptl3=ptl(k3,b3,fruit[i].x,fruit[i].y);
x1=10;
y1=k2*x1+b2;
ltl=ptl(k3,b3,x1,y1);
if((ptl1{
if(bla_tag==0)temp=B_AMOUNT-1;
elsetemp=bla_tag-1;
light[lig_tag].exi=1;
light[lig_tag].time=light_time;
light[lig_tag].x1=blade[temp].x+light_len*cosa;
light[lig_tag].y1=blade[temp].y+light_len*sina;
light[lig_tag].x2=blade[temp].x-light_len*cosa;
light[lig_tag].y2=blade[temp].y-light_len*sina;
lig_tag++;
if(lig_tag==L_AMOUNT-1)lig_tag=0;
fruit[i].exi=0;
temp=ran_int(pat_amt/2,pat_amt);
for(j=0;j{
for(k=0;kpatch[pat_tag].exi=1;
patch[pat_tag].type=fruit[i].type;
patch[pat_tag].x=fruit[i].x;
patch[pat_tag].y=fruit[i].y;
patch[pat_tag].dx=mou_dx/4+fruit[i].dx+ran_int(-pat_arr,pat_arr);
patch[pat_tag].dy=mou_dy/4+fruit[i].dy+ran_int(-pat_arr,pat_arr);
}
}
}
}
for(i=2;i<=5;i++)
if(fruit[i].exi==0)
{
if(i==5)
{
exit=1;
scene=-1;
}
else
{
scene=i;
ref=1;
}
}/*场景切换*/
if(ref==1)
for(j=2;j<=5;j++)fruit[j].exi=0;
cleardevice();
setcolor(bla_c);
circle(mou_x,HIG-mou_y,3);
vis_light(light);
vis_fruit(fruit);
vis_blade(blade);
vis_patch(patch);
hmx=mou_x;
hmy=mou_y;
hmk=mou_k;
hactivate=activate;
delay(DELAY);
}
/*--------------------------------SCENE2------------------------------*/
while(scene==2)
{
mou_read();
mou_spe();
mou_act();
activate=((mou_k==1)&&((mou_x-hmx)*(mou_x-hmx)+(mou_y-hmy)*(mou_y-hmy))>act_spe);
if(activate)
/*如果鼠标为激活状态生成并刷新刀刃光影*/
{
blade[bla_tag].exi=1;
blade[bla_tag].hx=hmx;
blade[bla_tag].hy=hmy;
blade[bla_tag].x=mou_x;
blade[bla_tag].y=mou_y;
tana=(mou_y-hmy)/(double)(mou_x-hmx);
line=sqrt(1+tana*tana);
sina=tana/line;
cosa=1/line;
blade[bla_tag].x+=bla_tra*cosa;
blade[bla_tag].y+=bla_tra*sina;
blade[bla_tag].hx-=bla_tra*cosa;
blade[bla_tag].hy-=bla_tra*sina;
bla_tag++;
if(bla_tag==B_AMOUNT-1)bla_tag=0;
}
if(hmk==1&&mou_k==0||(!
activate))
for(i=0;iif(ran_int(1,100)<=fru_frq)/*水果随机生成*/
{
for(i=0;i{if(fruit[i].exi==0)fru_tag=i;}
fruit[fru_tag].exi=1;
fruit[fru_tag].type=ran_int(1,fru_tottype);
fruit[fru_tag].y=0;
fruit[fru_tag].x=ran_int(1,WID);
fruit[fru_tag].dy=ran_int(fru_max_spe_y/2,fru_max_spe_y);
fruit[fru_tag].dx=ran_int(fru_max_spe_x/2,fru_max_spe_x);
if(fruit[fru_tag].x>(WID/2))fruit[fru_tag].dx=-fruit[fru_tag].dx;
fruit[fru_tag].w=ran_int(fru_max_spe_w/2,fru_max_spe_w);
}
for(i=0;i{
if(light[i].exi==1)light[i].time--;
if(light[i].time<=0)light[i].exi=0;
}
for(i=0;i{
if(patch[i].exi==1)
{
patch[i].x+=patch[i].dx;
patch[i].y+=patch[i].dy;
patch[i].dy-=phy_g;
if(patch[i].y<0||patch[i].y>HIG||patch[i].x<0||patch[i].x>WID)patch[i].exi=0;
}
}
for(i=0;i{
if(fruit[i].exi==1)
{
fruit[i].x+=fruit[i].dx;
fruit[i].y+=fruit[i].dy;
fruit[i].dy-=phy_g;
if(fruit[i].x<0||fruit[i].y<0||fruit[i].x>WID||fruit[i].y>HIG)/*水果出界处理*/
{
fruit[i].exi=0;
}
}
}
/*刀刃初始位置hmx,hmy末位置mou_x,mou_y切割水果判定*/
for(i=0;i{
if(activate==1&&fruit[i].exi==1)
{
x1=hmx;
y1=hmy;
x2=mou_x;
y2=mou_y;
k1=(y2-y1)/(x2-x1);
b1=y1-x1*k1;
k2=k3=-1/k1;
b2=y1-x1*k2;
b3=y2-x2*k3;
ptl1=ptl(k1,b1,fruit[i].x,fruit[i].y);
ptl2=ptl(k2,b2,fruit[i].x,fruit[i].y);
ptl3=ptl(k3,b3,fruit[i].x,fruit[i].y);
x1=10;
y1=k2*x1+b2;
ltl=ptl(k3,b3,x1,y1);
if((ptl1{
if(fruit[i].type==1)
{
cleardevice();
scene=5;
}
else
{
score++;
combo++;
if(bla_tag==0)temp=B_AMOUNT-1;
elsetemp=bla_tag-1;
/*切到水果生成光影效果*/
light[lig_tag].exi=1;
light[lig_tag].time=light_time;
light[lig_tag].x1=blade[temp].x+light_len*cosa;
light[lig_tag].y1=blade[temp].y+light_len*sina;
light[lig_tag].x2=blade[temp].x-light_len*cosa;
light[lig_tag].y2=blade[temp].y-light_len*sina;
lig_tag++;
if(lig_tag==L_AMOUNT-1)lig_tag=0;
fruit[i].exi=0;
temp=ran_int(pat_amt/2,pat_amt);
/*切到水果生成碎片*/
for(j=0;j{
for(k=0;kpatch[pat_tag].exi=1;
patch[pat_tag].type=fruit[i].type;
patch[pat_tag].x=fruit[i].x;
patch[pat_tag].y=fruit[i].y;
patch[pat_tag].dx=mou_dx/4+fruit[i].dx+ran_int(-pat_arr,pat_arr);
patch[pat_tag].dy=mou_dy/4+fruit[i].dy+ran_int(-pat_arr,pat_arr);
}
if(ptl1{
score+=9;
timer_p=time_perfect;
px=fruit[i].x;
py=fruit[i].y;
}
}
}
}
}
if(hactivate==1&&activate==0)
{
if(combo>=c_least)
{
combostr[0]=combo%10+'0';
combostr[1]=combo/10+'0';
combostr[2]='!
';
score+=combo;
timer_c=time_combo;
}
combo=0;
}
if(refresh==REFRESH)
{
cleardevice();
setcolor(bla_c);
circle(mou_x,HIG-mou_y,3);
vis_light(light);
vis_fruit(fruit);
vis_blade(blade);
vis_patch(patch);
if(timer_p>0)
{
setcolor(RED);
outtextxy(px,HIG-py,"Perfect!
");/*完美切割*/
setcolor(WHITE);
timer_p--;
}
if(timer_c>0)
{
setcolor(RED);
outtextxy(WID-50,20,"COMBO!
!
!
");/*连击*/
outtextxy(WID-50,50,combostr);
setcolor(WHITE);
timer_c--;
}
scorestr[0]=(score%10)+'0';
scorestr[1]=(score%100)/10+'0';
scorestr[2]=score/100+'0';
setcolor(BLUE);
outtextxy(0,20,"SCORE:
");/*分数*/
outtextxy(20,50,&scorestr[0]);
outtextxy(10,50,&scorestr[1]);
outtextxy(00,50,&scorestr[2]);
setcolor(WHITE);
fru_frq=score/50+2;
refresh=0;
}
if(mou_k==2)scene=1;
hmx=mou_x;
hmy=mou_y;
hmk=mou_k;
hactivate=activate;
delay(DELAY);
refresh++;
}
/*--------------------------------SCENE3------------------------------*/
while(scene==3)
{
/*游戏介绍部分*/
cleardevice();
cleardevice();
setcolor(BLUE);
setbkcolor(LIGHTCYAN);
vis_watermelon(50,20);
vis_apple(150,20);
vis_coconut(250,20);
vis_orange(350,20);
vis_mango(450,20);
outtextxy(100,100,"WelcometotheworldofFruitNinja!
");
delay(500);
outtextxy(100,125,"InthisworldyouareanexcellentNinja.");
delay(500);
outtextxy(100,150,"NowyouhaveanurgentMISSIONtoaccomplish!
");
delay(500);
outtextxy(100,175,"ThatIs:
");
delay(500);
outtextxy(100,200,"CuttingFruits!
!
!
!
!
");
delay(500);
setcolor(RED);
outtextxy(100,250,"RememberThis:
");
delay(500);
outtextxy(100,275,"Cutasmanyfruitsasyoucan!
");
delay(500);
outtextxy(100,300,"ButnevertouchtheREDonescausetheyareBOMBS!
");
delay(500);
setcolor(BLUE);
outtextxy(100,400,"Press'Q'tocontinue.");
vis_bomb(30,370);
while(bioskey(0)!
=4209);
scene=1;
}
/*--------------------------------SCE