⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 canvasframe.cpp

📁 用C++实现的名为下楼小游戏
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	if(x>407-31-16)
		x=407-31-16;
	if(y<80)
	{
		y=80;
		if(blood>=1)
		{
			blood--;
		    life.i-=2;
			p_blood();
		}
		if(life.i<=0)
		{
			x=y=500;
			exist=false;
		}
	}
	if(y>480)
	{
	  y=500;
	  x=500;
	  exist=false;
	}
	if(onperson)
	{
		if(person2.onstone)
			y-=canshu;
		else if(!person2.onstone&&person2.y+person2.vy+g>person2.land_line-canshu)
			y=person2.land_line-canshu-31-31;
		else if(!person2.onstone&&person2.y+person2.vy+g<=person2.land_line-canshu)
			y=person2.y+person2.vy+g-31;
		paste_j();
	}
	else if(onstone)//判断在石头上
	{
		vy=0;
		switch(on_type)
		{
		case 1://不动的石头
			        y-=canshu;
					paste_r();
					break;
		case 2://翻滚石
                    y+=canshu-(canshu-2);
					paste_r();
					break;
		case 3://弹簧
			        y-=30;
					i1=1;
					//用于贴上弹图
					paste_j();
					break;
		case 4://钉板
			        y-=canshu;
					if(blood>=1)
					{
						blood--;
						life.i-=2;
						p_blood();
					}
					else
					paste_r();
					if(life.i<=0)
					{
						x=y=500;
						exist=false;
					}
					break;
		case 5://向右滚的石头
			        x+=5;
					y-=canshu;
					if(x>407-31-16)
						x=407-31-16;
					paste_r();
					break;
		case 6://向左滚的石
			        y-=canshu;
				    x-=5;
					if(x<16)
						x=16;
					paste_r();
					break;
		}
	}
	else 
	{
			if(i1!=1)
			{//判断是自由下落
	            vy+=g;
				y+=vy;
				if(so2&&person2.onstone)
				{
					if(y+31>person2.y-canshu)
						y=person2.y-canshu-31;
				}
				else if(so2&&!person2.onstone&&person2.y+person2.vy+g<=person2.land_line-canshu)
				{
					if(y+31>person2.y+person2.vy+g)
						y=person2.y+person2.vy+g-31;
				}
				else if(so2&&!person2.onstone&&person2.y+person2.vy+g>person2.land_line-canshu)
				{
					if(y+31>person2.land_line-canshu-31)
						y=person2.land_line-canshu-31-31;
				}
				else if(so1&&!so2)
				{
					if(y+31>land_line-canshu)
						 y=land_line-31-canshu;
				}					
				paste_j();
			}
			if(i1==1) //判断是上弹阶段,上面判断在弹簧上时置为1
			{
				y-=30;
				paste_j();
				i1=2;//重新置为2使人自由下落
			}
			blood=5;//用于顶板贴图
	}
}



	

void PERSON1::paste_j()
{
	if(zhuangtai1==0&&zhuangtai2==0)//贴弹跳图
	{
	    c++;
		if(c==2)c=0;
		xp=31*c;
		cp=31*(c+1);
        DDBuf->BltFast(x , y ,
				DDPla[3], CRect(0,xp,31,cp),
				DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
	}
	if(zhuangtai1>0)//贴右跑图
	{
      	d++;
		if(d==4)
			d=0;
		
		xp=31*d;
		cp=31*(d+1);
        DDBuf->BltFast(x ,y ,
				DDPla[4], CRect(xp,0,cp,31),
				DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
	}
	if(zhuangtai2>0)//贴左跑图
	{	
		d++;
		if(d==4)d=0;
		xp=31*d;
		cp=31*(d+1);
        DDBuf->BltFast(x , y ,
				DDPla[5], CRect(xp,0,cp,31),
				DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
	}
}

void PERSON1::paste_r()
{
	if(zhuangtai1==0 && zhuangtai2==0)//贴正面图
		DDBuf->BltFast( x , y ,
			DDPla[2], CRect(0,0,31,31),
			DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
	if(zhuangtai1>0)//贴右跑图
	{
		d++;
		if(d==4)d=0;
		xp=31*d;
		cp=31*(d+1);
        DDBuf->BltFast(x , y ,
				DDPla[4], CRect(xp,0,cp,31),
				DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
	}
	if(zhuangtai2>0)//贴左跑图
	{
		d++;
		if(d==4)d=0;
		xp=31*d;
		cp=31*(d+1);
        DDBuf->BltFast(x , y ,
				DDPla[5], CRect(xp,0,cp,31),
				DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
	}
}

void PERSON1::p_blood()
{
	blood--;
	if(zhuangtai1==0 && zhuangtai2==0)//贴正面图
		DDBuf->BltFast( x , y ,
			DDPla[32], CRect(0,0,31,31),
			DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
	if(zhuangtai1>0)//贴右跑图
	{
		d++;
		if(d==4)d=0;
		xp=31*d;
		cp=31*(d+1);
        DDBuf->BltFast(x , y ,
				DDPla[30], CRect(xp,0,cp,31),
				DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
	}
	if(zhuangtai2>0)//贴左跑图
	{
		d++;
		if(d==4)d=0;
		xp=31*d;
		cp=31*(d+1);
        DDBuf->BltFast(x , y ,
				DDPla[31], CRect(xp,0,cp,31),
				DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
	}
}

void PERSON1::set()
{
	vy=0;
	x=156+15;
	y=480-15-32;
	life.x=30;
	life.y=20;
	life.i=12;
	exist=true;
}

bool PERSON1::should_onperson()
{
	person_line=500;
	if(x+31>person2.x&&x<person2.x+31&&y+31<person2.y)
		person_line=person2.y;
	if(person_line!=500)
		return true ;
	else return false;
}

bool PERSON1::should_onright()
{
	right_line=-1;
	if(x>person2.x+31&&y<person2.y+31&&y+31>person2.y)
		right_line=person2.x+31;
	if(right_line!=-1)
		return true;
	else return false;
}

bool PERSON1::should_onleft()
{
	left_line=408;
	if(x+31<person2.x&&y<person2.y+31&&y+31>person2.y)
		left_line=person2.x;
	if(left_line!=408)
		return true;
	else return false;
}


void PERSON1::judge_onperson()
{
	onperson=false;
	if(y+31==person2.y&&x+31>person2.x&&x<person2.x+31)
		onperson=true;
}


void PERSON1::judge_onright()
{
	onright=false ;
	if(x==person2.x+31&&y<person2.y+31&&y+31>person2.y)
		onright=true;
}


void PERSON1::judge_onleft()
{
	onleft=false;
	if(x+31==person2.x&&y<person2.y+31&&y+31>person2.y)
		onleft=true;
}


void PERSON2::paste()
{
	x+=zhuangtai1;
	x-=zhuangtai2;
	if(so4||onleft)
		if(x+31>person1.x)
			person1.x+=(x+31-person1.x);
    if(so3||onright)
		if(x<person1.x+31)
			person1.x-=(person1.x+31-x);
	y-=zhuangtai3;
	if(x<16)//有没有超出边界
		x=16;
	if(x>407-31-16)
		x=407-31-16;
	if(y<80)
	{
		y=80;
		if(blood>=1)
		{
			blood--;
		    life.i-=2;
			p_blood();
		}
		if(life.i<=0)
		{
			x=y=500;
			exist=false;
		}
	}
	if(y>480)
	{
	  x=y=500;
	  exist=false;
	}
	if(onperson)
	{
		if(person1.onstone)
			y-=canshu;
		else if(!person1.onstone&&person1.y==person1.land_line-canshu)
			y=person1.land_line-canshu-31-31;
        else y=person1.y-31;
		paste_j();
	}
	else if(onstone)//判断在石头上
	{
		vy=0;
		switch(on_type)
		{
		case 1://不动的石头
			        y-=canshu;
					paste_r();
					break;
		case 2://翻滚石
                    y+=canshu-(canshu-2);
					paste_r();
					break;
		case 3://弹簧
			        y-=30;
					i1=1;
					//用于贴上弹图
					paste_j();
					break;
		case 4://钉板
			        y-=canshu;
					if(blood>=1)
					{
						blood--;
						life.i-=2;
						p_blood();
					}
					else
					paste_r();
					if(life.i<=0)
					{
						x=y=500;
						exist=false;
					}
					break;
		case 5://向右滚的石头
			        x+=5;
					y-=canshu;
					if(x>407-16-31)
						x=407-16-31;
					paste_r();
					break;
		case 6://向左滚的石
			        y-=canshu;
				    x-=5;
					if(x<16)
						x=16;
					paste_r();
					break;
		}
	}
	else 
	{
			if(i1!=1)
			{//判断是自由下落
			    vy+=g;
				y+=vy;
                if(so2)
				{
					if(y+31>person1.y)
						y=person1.y-31;
				}
				if(so1&&!so2)
				{
					 if(y+31>land_line-canshu)
						  y=land_line-31-canshu;
				}
				paste_j();
			}
			if(i1==1) //判断是上弹阶段,上面判断在弹簧上时置为1
			{
				y-=30;
				paste_j();
				i1=2;//重新置为2使人自由下落
			}
			blood=5;//用于顶板贴图
	}
}


	

void PERSON2::paste_j()
{
	if(zhuangtai1==0&&zhuangtai2==0)//贴弹跳图
	{
	    c++;
		if(c==2)c=0;
		xp=31*c;
		cp=31*(c+1);
        DDBuf->BltFast(x , y ,
				DDPla[26], CRect(0,xp,31,cp),
			DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
	}
	if(zhuangtai1>0)//贴右跑图
	{
      	d++;
		if(d==4)
			d=0;
		
		xp=31*d;
		cp=31*(d+1);
        DDBuf->BltFast(x ,y ,
				DDPla[27], CRect(xp,0,cp,31),
				DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
	}
	if(zhuangtai2>0)//贴左跑图
	{	
		d++;
		if(d==4)d=0;
		xp=31*d;
		cp=31*(d+1);
        DDBuf->BltFast(x , y ,
				DDPla[28], CRect(xp,0,cp,31),
				DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
	}
}

void PERSON2::paste_r()
{
	if(zhuangtai1==0 && zhuangtai2==0)//贴正面图
		DDBuf->BltFast( x , y ,
			DDPla[33], CRect(0,0,31,31),
			DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
	if(zhuangtai1>0)//贴右跑图
	{
		d++;
		if(d==4)d=0;
		xp=31*d;
		cp=31*(d+1);
        DDBuf->BltFast(x , y ,
				DDPla[27], CRect(xp,0,cp,31),
				DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
	}
	if(zhuangtai2>0)//贴左跑图
	{
		d++;
		if(d==4)d=0;
		xp=31*d;
		cp=31*(d+1);
        DDBuf->BltFast(x , y ,
				DDPla[28], CRect(xp,0,cp,31),
				DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
	}
}

void PERSON2::p_blood()
{
	blood--;
	if(zhuangtai1==0 && zhuangtai2==0)//贴正面图
		DDBuf->BltFast( x , y ,
			DDPla[32], CRect(0,0,31,31),
			DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
	if(zhuangtai1>0)//贴右跑图
	{
		d++;
		if(d==4)d=0;
		xp=31*d;
		cp=31*(d+1);
        DDBuf->BltFast(x , y ,
				DDPla[30], CRect(xp,0,cp,31),
				DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
	}
	if(zhuangtai2>0)//贴左跑图
	{
		d++;
		if(d==4)d=0;
		xp=31*d;
		cp=31*(d+1);
        DDBuf->BltFast(x , y ,
				DDPla[31], CRect(xp,0,cp,31),
				DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
	}
}

void PERSON2::set()
{
	x=156+15+31;
	y=480-15-32;
	life.x=281;
	life.y=20;
	life.i=12;
	exist=true;
}

bool PERSON2::should_onperson()
{
	person_line=500;
	if(x+31>person1.x&&x<person1.x+31&&y+31<person1.y)
		person_line=person1.y;
	if(person_line!=500)
		return true ;
	else return false;
}

void PERSON2::judge_onperson()
{
	onperson=false;
	if(y+31==person1.y&&x+31>person1.x&&x<person1.x+31)
		onperson=true;
}

bool PERSON2::should_onright()
{
	right_line=-1;
	if(x>person1.x+31&&y<person1.y+31&&y+31>person1.y)
		right_line=person1.x+31;
	if(right_line!=-1)
		return true;
	else return false;
}

bool PERSON2::should_onleft()
{
	left_line=408;
	if(x+31<person1.x&&y<person1.y+31&&y+31>person1.y)
		left_line=person1.x;
	if(left_line!=408)
		return true;
	else return false;
}


void PERSON2::judge_onright()
{
	onright=false ;
	if(x==person1.x+31&&y<person1.y+31&&y+31>person1.y)
		onright=true;
}

void PERSON2::judge_onleft()
{
	onleft=false;
	if(x+31==person1.x&&y<person1.y+31&&y+31>person1.y)
		onleft=true;
}


canvasFrame::canvasFrame()
{
    Create(NULL,"绘图窗口",WS_POPUP); 
	hdc = ::CreateCompatibleDC(NULL);
	::ShowCursor(false);
	//CreateDDPla(640,480,"load.bmp",9);
	//DDBuf->BltFast( 0 , 0 , DDPla[9], CRect(0,0,640,480) , DDBLTFAST_WAIT);
	//DDSur->Flip( NULL , DDFLIP_WAIT ); //显示加载中图案
	CreateDDPla(640,480,"bg.bmp",0);//将图片寸到幕后内存区
	CreateDDPla(407,400,"smbg.bmp",1);
	CreateDDPla(31,31,"p_z.bmp",2);
	CreateDDPla(31,62,"p_j.bmp",3);
	CreateDDPla(124,31,"p_r_r.bmp",4);
	CreateDDPla(124,31,"p_r_l.bmp",5);
	CreateDDPla(247,55,"1PER.bmp",6);
	CreateDDPla(248,55,"2PER.bmp",7);
	CreateDDPla(95,15,"s_1.bmp",8);
	CreateDDPla(95,15,"s_2_1.bmp",9);
	CreateDDPla(95,270,"s_2_2.bmp",10);
	CreateDDPla(95,15,"s_3_1.bmp",11);
	CreateDDPla(95,15,"s_3_2.bmp",12);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -