📄 main.cpp
字号:
{
Move_And_Draw_Scanner(Player.x,Player.y,Blue_pos,Yellow_pos,Weixing_pos,Boss_pos);
}
if (keyboard_state[DIK_ESCAPE]) //检查是否退出。。。
{
SendMessage(main_window_handle,WM_DESTROY,0,0); //为什么用PostMessage不行啊??
}
//////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////
//判断是否超过边界。。
if(Player.x>580) Player.x=580;
if(Player.x<150) Player.x=150;
if(Player.y>425) Player.y=425;
if(Player.y<-10) Player.y=-10;
if(keyboard_state[DIK_U]) //按A激活一个卫星。。
{
Start_Baowu(Player.x,Player.y);
}
if(keyboard_state[DIK_Y])
{
Player.varsI[0]=100;
}
if(keyboard_state[DIK_LCONTROL] || keyboard_state[DIK_RCONTROL]) //激活玩家的攻击。
{
if(addspeed_mode==2)
{
Player.xv=7;
Player.yv=7;
}
else if(addspeed_mode==3)
{
Player.xv=8;
Player.yv=8;
}
//////////////////增加速度
if(zidan_mode==1)
{
if(control_myzidan == 0) //隔2帧发射一次
{
Start_Myzidan(Player.x+15,Player.y-5,3); //激活2个子弹
Start_Myzidan(Player.x+28,Player.y-5,3);
control_myzidan++;
}
else
{
if(control_myzidan >= 3)
{
control_myzidan=0;
}
else control_myzidan++;
}
}//end zidan_mode==1
else if(zidan_mode==2)
{
if(control_myzidan == 0) //隔2帧发射一次
{
Start_Myzidan(Player.x+17,Player.y-5,3); //激活2个子弹
Start_Myzidan(Player.x+27,Player.y-5,3);
Start_Myzidan(Player.x+6,Player.y-5,1);
Start_Myzidan(Player.x+35,Player.y-5,5);
control_myzidan++;
}
else
{
if(control_myzidan >=3)
{
control_myzidan=0;
}
else control_myzidan++;
}
}//end zidan_mode==2
else if(zidan_mode==3)
{
if(control_myzidan == 0) //隔2帧发射一次
{
Start_Myzidan(Player.x+11,Player.y-4,3);
Start_Myzidan(Player.x+22,Player.y-5,3); //激活2个子弹
Start_Myzidan(Player.x+34,Player.y-4,3);
Start_Myzidan(Player.x+2,Player.y-3,2);
Start_Myzidan(Player.x-8,Player.y-2,0);
Start_Myzidan(Player.x+43,Player.y-3,4);
Start_Myzidan(Player.x+52,Player.y-4,6);
control_myzidan++;
}
else
{
if(control_myzidan >=3)
{
control_myzidan=0;
}
else control_myzidan++;
}
}//end zidan_mode==3
//////////////////加子弹完
if(daodan_mode==1)
{
control_daodan=0;
}
if(daodan_mode==2)
{
if(control_daodan == 0)
{
Start_Daodan(Player.x+1,Player.y+20,15,-3,-8);
Start_Daodan(Player.x+37,Player.y+20,1,3,-8);
control_daodan_rate=0;
control_daodan++;
}
else
{
control_daodan++;
if(++control_daodan_rate >= 50) //一秒发射一次导弹
{
control_daodan=0;
}
}
}//end daodan_mode==2
else if(daodan_mode==3)
{
if(control_daodan == 0)
{
Start_Daodan(Player.x+6,Player.y+20,15,-3,-8);
Start_Daodan(Player.x+33,Player.y+20,1,3,-8);
Start_Daodan(Player.x-6,Player.y+30,14,-4,-7);
Start_Daodan(Player.x+46,Player.y+30,2,4,-7);
control_daodan_rate=0;
control_daodan++;
}
else
{
control_daodan++;
if(++control_daodan_rate >= 50) //一秒发射一次导弹
{
control_daodan=0;
}
}
}//end daodan_mode==3
/////////////////加导弹完
}
/////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
Move_Player(); //玩家与其他飞机和敌机子弹进行碰撞测试。 血减为0 就将玩家设为DYING将死状态。。
} //Player_state==ALIVE 玩家状态是活的检测完毕
else if(Player_state==CHONGSHENG) //玩家的状态是重生。。
{
if(Player_ship<=0)
{
Player_state=DEAD; //玩家飞船死光光了 退出。。。
Player.counter_1=0;
}
if(++Player.counter_1 > 40) //40帧后玩家reset。 //重生没有问题
{
Reset_Player();
Player.anim_index=0;
}
}//END PLAYER_STATE==CHONGSHENG
else if(Player_state==DYING) //将死状态时 持续3帧才消失 然后到重生那检测是否游戏结束
{
if(++Player.varsI[1] > 6) //Player.varsI[1]记录爆炸持续时间 3帧 //问题出在这里。。。。
{
Hide_BOB(&Player); //不可见
--Player_ship; //飞船数减一
Player_state=CHONGSHENG; //状态为重生(这里是经过DYING状态才把模式改为爆炸动画?)
}
}//END PALYER—STATE==DYING
else if(Player_state==DEAD)
{
Draw_Text_GDI("Game Over,You are..<猪>..heihei..",280,200,0,lpddsback);
Draw_Text_GDI("Push Q. Exit the game.",300,220,0,lpddsback);
Draw_Text_GDI("Push G. Go on.",320,240,0,lpddsback);
if(keyboard_state[DIK_G])
{
Reset_Player();
Player_sorce=0;
Player_ship=3;
}
else if(keyboard_state[DIK_Q])
{
SendMessage(main_window_handle,WM_DESTROY,0,0);
}
}
}//end player_win==0;//下面的else 表示player_win为1 是赢了的状态
else
{
Player.xv=0;
Player.yv=0;
Player_sorce+=5000;
Set_Animation_BOB(&Player,4);
Game_state=GAME_STATE_EXIT;
}
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
/////////这里有个函数 要检测敌机什么时候出现。。。。。
///然后各个游戏对象的AI
//然后渲染。。。。。。
///对其他游戏对象进行渲染
//最后渲染子弹那些。。。
if(part==1)
{
Show_Enemy();
}
else if(part==2)
{
Show_Enemy1();
}
Show_Blue();
Show_Yellow();
Move_Daodan(); //自动寻找最近敌机并切换相应的位图
Move_Weixing(); //改变卫星位置
Move_Yellow(); //黄色飞机模式移动
Move_Blue(); //玩家的位置自动改变他的动画模式
Move_Boss();
Move_Enemyzian();
Move_Myzidan(); //玩家子弹移动。。。
Move_Baowu(); //移动宝物
Draw_Weixing(); //渲染卫星设置为可见
Draw_Blue(); //渲染兰色飞机
Draw_Boss();
if(!Draw_Yellow()) //渲染黄色飞机
{
MessageBox(main_window_handle,"draw","draw",MB_OK);
}
//这里玩家活着的时候开始有问题。。。活着的第一帧并不是第一个被渲染的
if(Player_state==DYING)
{
Draw_Player();
}
if(Player_state==ALIVE)
{
Draw_Player();
}
Draw_Daodan(); //渲染导弹。。
Draw_Myzidan(); //渲染子弹。
Draw_Enemyzidan();
Draw_Baowu(); //渲染宝物。。。。。。。。
Check_Boss();
if(!Check_Yellow()) //检查黄色飞机是否爆炸和超过边界..
{
MessageBox(main_window_handle,"check","check",MB_OK);
}
Check_Blue(); //检查是否蓝色飞机爆炸。。。
Check_Weixing(); //检测是否卫星爆炸。
Check_Daodan(); //检测导弹是否过界或者爆炸。
Check_Enemyzidan(); //检测敌人子弹是否爆炸
Check_Myzidan(); //检测玩家子弹是否爆炸。
Check_Baowu(); //检测玩家是否吃到宝物 吃到了就搞掉它。。还有它的存活期是否已经到了。。
Check_Player(); //检查玩家中蛋。??是的话就在3帧后消失
/////////////////////////////////////////////////////////////////////////////////////////////
if(part==2)
{
if(control_show_enemy < 100)
{
Player.varsI[0]=Blood_Player;
}
}
//最后计算得分和生命直 并渲染
Get_Sorce(); //获取玩家的得分 每一位的数字存放在sorce数组中 。
Draw_Sorce(); //渲染得分。。
Get_Blood();
Draw_Blood(); //////////这里有错。
if(part==1)
{
Draw_Text_GDI("第一关.",170,450,0,lpddsback);
}
else if(part==2)
{
Draw_Text_GDI("第二关.",170,450,0,lpddsback);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(int i=0;i<MAX_NUM_BAOWU;i++)
{
if(Baowu_state[i]==ALIVE)
{
if((Baowu[i].curr_animation==0 && Baowu[i].anim_index==0) || (Baowu[i].curr_animation==1 && Baowu[i].anim_index==2) || (Baowu[i].curr_animation==2 && Baowu[i].anim_index==1))
{
Draw_Text_GDI("P",Baowu[i].x+8,Baowu[i].y+4,0,lpddsback);
}
else if((Baowu[i].curr_animation==0 && Baowu[i].anim_index==1) || (Baowu[i].curr_animation==1 && Baowu[i].anim_index==0) || (Baowu[i].curr_animation==2 && Baowu[i].anim_index==2))
{
Draw_Text_GDI("S",Baowu[i].x+8,Baowu[i].y+4,0,lpddsback);
}
else if((Baowu[i].curr_animation==0 && Baowu[i].anim_index==2) || (Baowu[i].curr_animation==1 && Baowu[i].anim_index==1) || (Baowu[i].curr_animation==2 && Baowu[i].anim_index==0))
{
Draw_Text_GDI("M",Baowu[i].x+7,Baowu[i].y+4,0,lpddsback);
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
DDraw_Flip();
Wait_Clock(33);
///////////////检测玩家是否在游戏中途退出。。。。/////////////////////////////////////////////////
}//end control_stop2
else
{
Draw_Text_GDI("暂停",300,250,0,lpddsback);
Wait_Clock(33);
}
}//END GAME_STATE_RUNNING
else if(Game_state==GAME_STATE_EXIT)
{
if(player_win)
{
if(part==1)
{
if(++control_win > 400)
{
Game_state=GAME_STATE_RESTART;
player_win=0;
check_win=0;
part=2;
}
Move_And_Draw_Background();
lpddsback->Blt(&dest_rect,lpddhelp,NULL,DDBLT_WAIT,NULL);
if(control_win > 80)
{
Player.yv-=0.1;
Player.y+=Player.yv;
}
Draw_Player();
Draw_Sorce();
Draw_Blood();
Draw_Text_GDI("顺利通过第一关.好..卡哇伊.come on..",275,200,0,lpddsback);
sprintf(buffer,"第一关得分:%d",Player_sorce);
Draw_Text_GDI(buffer,327,220,0,lpddsback);
Draw_Text_GDI("马上进入第2关.",330,240,0,lpddsback);
Draw_Text_GDI("第一关.",170,450,0,lpddsback);
DDraw_Flip();
Wait_Clock(33);
}
else if(part==2)
{
if(++control_win > 400)
{
player_win=0;
}
Move_And_Draw_Background();
lpddsback->Blt(&dest_rect,lpddhelp,NULL,DDBLT_WAIT,NULL);
if(control_win > 80)
{
Player.yv-=0.1;
Player.y+=Player.yv;
}
Draw_Player();
Draw_Sorce();
Draw_Blood();
Draw_Text_GDI("顺利通过第二关.好..猛呀...",305,200,0,lpddsback);
sprintf(buffer,"第二关得分:%d",Player_sorce);
Draw_Text_GDI(buffer,327,220,0,lpddsback);
Draw_Text_GDI("程序将自动退出.",330,240,0,lpddsback);
Draw_Text_GDI("第二关.",170,450,0,lpddsback);
DDraw_Flip();
Wait_Clock(33);
}
}
else if(part==2 && !player_win)
{
SendMessage(main_window_handle,WM_DESTROY,0,0); //为什么用PostMessage不行啊??
} //打字啊~~GAME—OVER啊 然后拜拜啊
}//end GAME_STATE_EXIT
return 1;
} //END GAME_MAIN
int Get_Sorce()
{
int temp,temp1,temp2,temp3,temp4;
temp=Player_sorce;
sorce[0]=temp/10000;
temp1=temp-sorce[0]*10000;
sorce[1]=temp1/1000;
temp2=temp1-sorce[1]*1000;
sorce[2]=temp2/100;
temp3=temp2-sorce[2]*100;
sorce[3]=temp3/10;
temp4=temp3-sorce[3]*10;
sorce[4]=temp4;
return 1;
}
/////////////////////////////////////////////////////////////////////////////
///////Get_Blood
int Get_Blood()
{
int temp,temp1,temp2;
if(Player.varsI[0] <=0)
{
Player.varsI[0]=0;
}
temp=Player.varsI[0];
blood[0]=temp/100;
temp1=temp-blood[0]*100;
blood[1]=temp1/10;
temp2=temp1-blood[1]*10;
blood[2]=temp2;
return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
int Set_Blue_Show(int number)
{
if(!show_blue1)
{
show_blue1=1;
blue_number1=number;
show_blue_time1=0;
blue_pos_x1=choose_blue_pos;
}
else if(!show_blue2)
{
show_blue2=1;
show_blue_time2=0;
blue_number2=number;
blue_pos_x2=choose_blue_pos;
}
return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
int Show_Blue()
{
if(show_blue1 || show_blue2)
{
if(show_blue1)
{
++show_blue_time1;
if(blue_number1==2)
{
if(!show_blue_time1)
{
Start_Blue(blue_pos_x1,-80);
}
else if(show_blue_time1==10)
{
Start_Blue(blue_pos_x1,-80);
}
else if(show_blue_time1 ==20)
{
Start_Blue(blue_pos_x1,-80);
show_blue_time1=0;
show_blue1=0;
}
}
else if(blue_number1==3)
{
if(!show_blue_time1)
{
Start_Blue(blue_pos_x1,-80);
}
else if(show_blue_time1==10)
{
Start_Blue(blue_pos_x1,-80);
}
else if(show_blue_time1==20)
{
Start_Blue(blue_pos_x1,-80);
}
else if(show_blue_time1 ==30)
{
Start_Blue(blue_pos_x1,-80);
show_blue_time1=0;
show_blue1=0;
}
}
else if(blue_number1==4)
{
if(!show_blue_time1)
{
Start_Blue(blue_pos_x1,-80);
}
else if(show_blue_time1==10)
{
Start_Blue(blue_pos_x1,-80);
}
else if(show_blue_time1==20)
{
Start_Blue(blue_pos_x1,-80);
}
else if(show_blue_time1 ==30)
{
Start_Blue(blue_pos_x1,-80);
}
else if(show_blue_time1 ==40)
{
Start_Blue(blue_pos_x1,-80);
show_blue_time1=0;
show_blue1=0;
}
}
else if(blue_number1==5)
{
if(!show_blue_time1)
{
Start_Blue(blue_pos_x1,-80);
}
else if(show_blue_time1==10)
{
Start_Blue(blue_pos_x1,-80);
}
else if(show_blue_time1==20)
{
Start_Blue(blue_pos_x1,-80);
}
else if(show_blue_time1==30)
{
Start_Blue(blue_pos_x1,-80);
}
else if(show_blue_time1==40)
{
Start_Blue(blue_pos_x1,-80);
}
else if(show_blue_time1 ==50)
{
Start_Blue(blue_pos_x1,-80);
show_blue_time1=0;
show_blue1=0;
}
}
}
if(show_blue2)
{
++show_blue_time2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -