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

📄 gamemain.cpp

📁 一个VC游戏源码,带运行程序,供大家学习之用
💻 CPP
📖 第 1 页 / 共 5 页
字号:
						int k,k_max=rand()%24+24;
						for(k=0;k<k_max;k++)
						{
							if((index=GetEtcIndex())!=-1)
							{
								etc[index].X=doraemon.X+(rand()%doraemon.width-(doraemon.width/2));
								etc[index].Y=doraemon.Y+(rand()%doraemon.height*4-(doraemon.height*4/2));
								etc[index].width=15;
								etc[index].height=5;
								etc[index].relation=CHARACTER_ANIMATE;
								etc[index].lpanimate=&etcanim[5];
								etc[index].type=MULTI_POINTER_TO_ONE_ANIMATE|(BOWL_2<<16);
								etc[index].intvalue[ACTION]=1;
								etc[index].intvalue[FRAME]=rand()%etc[index].lpanimate->step*2;
								etc[index].doublevalue[FLOAT_SPEED]=(double)(rand()%20)/3;
								etc[index].doublevalue[FLOAT_A]=-((double)(rand()%100)/200+0.05);
								etc[index].doublevalue[Z]=-(rand()%(doraemon.height*3));
								etc[index].visible=1;
							}
						}
						doraemon.visible=0;
					}
				}
			}
			if(HIWORD(etc[i].type)==ITEM_1&&etc[i].doublevalue[SPEED]==0)
			{
				if(Act(etc[i].colliderect,doraemon.colliderect)&&doraemon.visible)
				{
					etc[i].doublevalue[SPEED]=1;
					item[ITEM_CATE]+=1;
					if(item[ITEM_CATE]>9)item[ITEM_CATE]=9;
				}
			}
			if(HIWORD(etc[i].type)==ITEM_2&&etc[i].doublevalue[SPEED]==0)
			{
				if(Act(etc[i].colliderect,doraemon.colliderect)&&doraemon.visible)
				{
					etc[i].doublevalue[SPEED]=1;
					etc[i].intvalue[SCORE]=500*(rand()%4+1);
					score+=etc[i].intvalue[SCORE];
				}
			}
		}
	}

	doraemon.x=doraemon.X-X; //附加多拉A梦的对象信息
	doraemon.y=doraemon.Y-Y;
	SetCharacterPos(&doraemon,doraemon.x,doraemon.y);
	c[num]=&doraemon;
	num+=1;

	int index;
	for(i=0;i<sizeof(stage.animate)/sizeof(CHARACTER);i++)
	{
		if(stage.animate[i].visible)
		{
			//初始化角色体力攻击力等
			if(stage.animate[i].intvalue[HP_MAX]==0)
			{
				switch(HIWORD(stage.animate[i].type))
				{
				case 0: //敌方角色0
					stage.animate[i].intvalue[HP_MAX]=100;
					stage.animate[i].intvalue[HP]=100;
					stage.animate[i].intvalue[ATP]=8;
					stage.animate[i].intvalue[DEF]=3;
					stage.animate[i].intvalue[SCORE]=100;
					stage.animate[i].doublevalue[SPEED]=1.2;
					stage.animate[i].doublevalue[SPEED_SQRT]=1.2*sqrt(0.5);
					break;
				case 1:
					stage.animate[i].intvalue[HP_MAX]=500;
					stage.animate[i].intvalue[HP]=500;
					stage.animate[i].intvalue[ATP]=12;
					stage.animate[i].intvalue[DEF]=10;
					stage.animate[i].intvalue[SCORE]=800;
					stage.animate[i].doublevalue[SPEED]=0.3;
					stage.animate[i].doublevalue[SPEED_SQRT]=0.3*sqrt(0.5);
					break;
				case 2: 
					stage.animate[i].intvalue[HP_MAX]=50;
					stage.animate[i].intvalue[HP]=50;
					stage.animate[i].intvalue[ATP]=6;
					stage.animate[i].intvalue[DEF]=2;
					stage.animate[i].intvalue[SCORE]=50;
					stage.animate[i].doublevalue[SPEED]=1.5;
					stage.animate[i].doublevalue[SPEED_SQRT]=1.5*sqrt(0.5);
					break;
				default:
					stage.animate[i].intvalue[HP_MAX]=100;
					stage.animate[i].intvalue[HP]=100;
					stage.animate[i].intvalue[ATP]=8;
					stage.animate[i].intvalue[DEF]=3;
					stage.animate[i].intvalue[SCORE]=100;
					stage.animate[i].doublevalue[SPEED]=1.2;
					stage.animate[i].doublevalue[SPEED_SQRT]=1.2*sqrt(0.5);
					break;
				}
			}
			//碰撞
			int k,l;
			RECT colliderect;
			for(k=(int)(stage.animate[i].X/32);k<(stage.animate[i].X+stage.animate[i].width)/32;k++)
			{
				for(l=(int)(stage.animate[i].Y/32);l<(stage.animate[i].Y+stage.animate[i].height)/32;l++)
				{
					SetRectPos(destrect,k*32,l*32,32,32);
					SetRectPos(colliderect,(int)stage.animate[i].X,(int)stage.animate[i].Y,stage.animate[i].width,stage.animate[i].height);
					if(Act(colliderect,destrect)&&stage.collide[k][l]==TRUE)
					{
						stage.animate[i].X=stage.animate[i].Xhis;
						stage.animate[i].Y=stage.animate[i].Yhis;
						if(rand()%50==0)
						{
							stage.animate[i].Xtarget=stage.animate[i].X+(rand()%WIDTH-WIDTH/2);
							stage.animate[i].Ytarget=stage.animate[i].Y+(rand()%HEIGHT-HEIGHT/2);
						}
						SetRectPos(destrect,k*32-(int)X,l*32-(int)Y,32,32);
					}
				}
			}
			if(stage.animate[i].X<=0||stage.animate[i].X+stage.animate[i].width>=stage.maplength*32||stage.animate[i].Y<=0||stage.animate[i].Y+stage.animate[i].height>=16*32)
			{
				stage.animate[i].X=stage.animate[i].Xhis;
				stage.animate[i].Y=stage.animate[i].Yhis;
				if(rand()%50==0)
				{
					stage.animate[i].Xtarget=stage.animate[i].X+(rand()%WIDTH-WIDTH/2);
					stage.animate[i].Ytarget=stage.animate[i].Y+(rand()%HEIGHT-HEIGHT/2);
				}
			}
			if(stage.animate[i].Xstart<=0||stage.animate[i].Xstart+stage.animate[i].width>=stage.maplength*32||stage.animate[i].Ystart<=0||stage.animate[i].Ystart+stage.animate[i].height>=16*32)
			{
				stage.animate[i].visible=0;
			}
			stage.animate[i].Xhis=stage.animate[i].X;
			stage.animate[i].Yhis=stage.animate[i].Y;
			if(rand()%500==1)
			{
				stage.animate[i].Xtarget=stage.animate[i].X+(rand()%WIDTH-WIDTH/2);
				stage.animate[i].Ytarget=stage.animate[i].Y+(rand()%HEIGHT-HEIGHT/2);
			}
			if((int)stage.animate[i].X<(int)stage.animate[i].Xtarget&&(rand()%50==0))stage.animate[i].intvalue[ACTION]=1;
			if((int)stage.animate[i].X>(int)stage.animate[i].Xtarget&&(rand()%50==0))stage.animate[i].intvalue[ACTION]=2;
			if((int)stage.animate[i].Y<(int)stage.animate[i].Ytarget&&(rand()%50==0))stage.animate[i].intvalue[ACTION]=3;
			if((int)stage.animate[i].Y>(int)stage.animate[i].Ytarget&&(rand()%50==0))stage.animate[i].intvalue[ACTION]=4;
			if((int)stage.animate[i].X<(int)stage.animate[i].Xtarget&&(int)stage.animate[i].Y<(int)stage.animate[i].Ytarget&&(rand()%50==0))stage.animate[i].intvalue[ACTION]=5;
			if((int)stage.animate[i].X<(int)stage.animate[i].Xtarget&&(int)stage.animate[i].Y>(int)stage.animate[i].Ytarget&&(rand()%50==0))stage.animate[i].intvalue[ACTION]=6;
			if((int)stage.animate[i].X>(int)stage.animate[i].Xtarget&&(int)stage.animate[i].Y<(int)stage.animate[i].Ytarget&&(rand()%50==0))stage.animate[i].intvalue[ACTION]=7;
			if((int)stage.animate[i].X>(int)stage.animate[i].Xtarget&&(int)stage.animate[i].Y>(int)stage.animate[i].Ytarget&&(rand()%50==0))stage.animate[i].intvalue[ACTION]=8;

			if(abs((int)stage.animate[i].X-(int)stage.animate[i].Xtarget)<stage.animate[i].width&&abs((int)stage.animate[i].Y-(int)stage.animate[i].Ytarget)<stage.animate[i].height)
			{
				stage.animate[i].intvalue[ACTION]=0;
				if(rand()%50==0)
				{
					stage.animate[i].Xtarget=stage.animate[i].X+(rand()%WIDTH-WIDTH/2);
					stage.animate[i].Ytarget=stage.animate[i].Y+(rand()%HEIGHT-HEIGHT/2);
				}
			}
			if(abs((int)stage.animate[i].X-(int)doraemon.X)<WIDTH&&abs((int)stage.animate[i].Y-(int)doraemon.Y)<HEIGHT)
			{
				if(rand()%200==0)
				{
					stage.animate[i].Xtarget=doraemon.X;
					stage.animate[i].Ytarget=doraemon.Y;
				}
				if(rand()%200==0)stage.animate[i].intvalue[ACTION]|=(1<<16);
				if(HIWORD(stage.animate[i].type)==1&&rand()%800==0)stage.animate[i].intvalue[ACTION]|=(2<<16);
			}

			//受控体跟随
			if(stage.animate[i].intvalue[PARENT]!=-1
				&&stage.animate[stage.animate[i].intvalue[PARENT]].visible
				&&rand()%100==0)
			{
				stage.animate[i].Xtarget=stage.animate[stage.animate[i].intvalue[PARENT]].X;
				stage.animate[i].Ytarget=stage.animate[stage.animate[i].intvalue[PARENT]].Y;
			}

			//附加独立行为
			if(HIWORD(stage.animate[i].type)==1&&rand()%200==0)stage.animate[i].intvalue[ACTION]|=(1<<16);
			if(HIWORD(stage.animate[i].type)==2&&rand()%100==0)stage.animate[i].intvalue[ACTION]|=(1<<16);

			//移动行为
			switch(LOWORD(stage.animate[i].intvalue[ACTION]))
			{
			case 1:
				stage.animate[i].X+=stage.animate[i].doublevalue[SPEED];
				stage.animate[i].lpanimate=&anim[1][HIWORD(stage.animate[i].type)];
				break;
			case 2:
				stage.animate[i].X-=stage.animate[i].doublevalue[SPEED];
				stage.animate[i].lpanimate=&anim[0][HIWORD(stage.animate[i].type)];
				break;
			case 3:
				stage.animate[i].Y+=stage.animate[i].doublevalue[SPEED];
				break;
			case 4:
				stage.animate[i].Y-=stage.animate[i].doublevalue[SPEED];
				break;
			case 5:
				stage.animate[i].X+=stage.animate[i].doublevalue[SPEED_SQRT];
				stage.animate[i].Y+=stage.animate[i].doublevalue[SPEED_SQRT];
				stage.animate[i].lpanimate=&anim[1][HIWORD(stage.animate[i].type)];
				break;
			case 6:
				stage.animate[i].X+=stage.animate[i].doublevalue[SPEED_SQRT];
				stage.animate[i].Y-=stage.animate[i].doublevalue[SPEED_SQRT];
				stage.animate[i].lpanimate=&anim[1][HIWORD(stage.animate[i].type)];
				break;
			case 7:
				stage.animate[i].X-=stage.animate[i].doublevalue[SPEED_SQRT];
				stage.animate[i].Y+=stage.animate[i].doublevalue[SPEED_SQRT];
				stage.animate[i].lpanimate=&anim[0][HIWORD(stage.animate[i].type)];
				break;
			case 8:
				stage.animate[i].X-=stage.animate[i].doublevalue[SPEED_SQRT];
				stage.animate[i].Y-=stage.animate[i].doublevalue[SPEED_SQRT];
				stage.animate[i].lpanimate=&anim[0][HIWORD(stage.animate[i].type)];
				break;
			case 0:
				break;
			}

			//攻击行为
			switch(HIWORD(stage.animate[i].intvalue[ACTION]))
			{
			case 1:
				if((index=GetEtcIndex())!=-1)
				{
					switch(HIWORD(stage.animate[i].type))
					{
					case 0:
						if(stage.animate[i].lpanimate==&anim[0][HIWORD(stage.animate[i].type)])
						{
							etc[index].X=stage.animate[i].X-56;
							etc[index].Y=stage.animate[i].Y;
							etc[index].Xstart=stage.animate[i].X-56;
							etc[index].Ystart=stage.animate[i].Y;
							etc[index].width=56;
							etc[index].height=27;
							etc[index].relation=CHARACTER_ANIMATE;
							etc[index].lpanimate=&etcanim[3];
							etc[index].type=MULTI_POINTER_TO_ONE_ANIMATE|(BULLET_CAT_LEFT<<16);
							etc[index].visible=1;
							etc[index].intvalue[ACTION]=1;
							etc[index].intvalue[ATP]=stage.animate[i].intvalue[ATP]+rand()%2;
							etc[index].doublevalue[AHEAD_SPEED]=-3;
							etc[index].doublevalue[FLOAT_SPEED]=-2;
							etc[index].doublevalue[AHEAD_A]=0.01;
							etc[index].doublevalue[FLOAT_A]=0.05;
						}
						else
						{
							etc[index].X=stage.animate[i].X+stage.animate[i].width;
							etc[index].Y=stage.animate[i].Y;
							etc[index].Xstart=stage.animate[i].X+stage.animate[i].width;
							etc[index].Ystart=stage.animate[i].Y;
							etc[index].width=56;
							etc[index].height=27;
							etc[index].relation=CHARACTER_ANIMATE;
							etc[index].lpanimate=&etcanim[4];
							etc[index].type=MULTI_POINTER_TO_ONE_ANIMATE|(BULLET_CAT_RIGHT<<16);
							etc[index].visible=1;
							etc[index].intvalue[ACTION]=1;
							etc[index].intvalue[ATP]=stage.animate[i].intvalue[ATP]+rand()%2;
							etc[index].doublevalue[AHEAD_SPEED]=3;
							etc[index].doublevalue[FLOAT_SPEED]=-2;
							etc[index].doublevalue[AHEAD_A]=-0.01;
							etc[index].doublevalue[FLOAT_A]=0.05;
						}
						break;
					case 1:
						if(stage.animate[i].lpanimate==&anim[0][HIWORD(stage.animate[i].type)])
						{
							etc[index].X=stage.animate[i].X;
							etc[index].Y=stage.animate[i].Y-20+(rand()%2)*40;
							etc[index].Xstart=stage.animate[i].X;
							etc[index].Ystart=stage.animate[i].Y-20+(rand()%2)*40;
							etc[index].type=MULTI_POINTER_TO_ONE_ANIMATE|(BULLET_HACKCAT_LEFT<<16);
						}
						else
						{
							etc[index].X=stage.animate[i].X+stage.animate[i].width-48;
							etc[index].Y=stage.animate[i].Y-20+(rand()%2)*40;
							etc[index].Xstart=stage.animate[i].X+stage.animate[i].width-48;
							etc[index].Ystart=stage.animate[i].Y-20+(rand()%2)*40;
							etc[index].type=MULTI_POINTER_TO_ONE_ANIMATE|(BULLET_HACKCAT_RIGHT<<16);
						}
						etc[index].width=48;
						etc[index].height=5;
						etc[index].relation=CHARACTER_ANIMATE;
						etc[index].lpanimate=&etcanim[6];
						etc[index].visible=1;
						etc[index].intvalue[ACTION]=1;
						etc[index].intvalue[ATP]=stage.animate[i].intvalue[ATP]+rand()%2;
						etc[index].doublevalue[SPEED]=5;
						break;
					case 2:
						if(stage.animate[i].lpanimate==&anim[0][HIWORD(stage.animate[i].type)])
						{
							etc[index].X=stage.animate[i].X;
							etc[index].Y=stage.animate[i].Y;
							etc[index].Xstart=stage.animate[i].X;
							etc[index].Ystart=stage.animate[i].Y;
							etc[index].type=MULTI_POINTER_TO_ONE_ANIMATE|(BULLET_HACKCAT_SMALL_LEFT<<16);
						}
						else
						{
							etc[index].X=stage.animate[i].X+stage.animate[i].width-16;
							etc[index].Y=stage.animate[i].Y;
							etc[index].Xstart=stage.animate[i].X+stage.animate[i].width-16;
							etc[index].Ystart=stage.animate[i].Y;
							etc[index].type=MULTI_POINTER_TO_ONE_ANIMATE|(BULLET_HACKCAT_SMALL_RIGHT<<16);
						}
						etc[index].width=15;
						etc[index].height=2;
						etc[index].relation=CHARACTER_ANIMATE;
						etc[index].lpanimate=&etcanim[7];
						etc[index].visible=1;
						etc[index].intvalue[ACTION]=1;
						etc[index].intvalue[ATP]=stage.animate[i].intvalue[ATP]+rand()%2;
						etc[index].doublevalue[SPEED]=5;
					default:
						break;
					}
				}
				
				stage.animate[i].intvalue[ACTION]&=LOWORD(stage.animate[i].intvalue[ACTION]);
				break;
			case 2:
				index=GetAnimateIndex();
				if(index!=-1)
				{
					stage.animate[index].X=stage.animate[i].X;
					stage.animate[index].Y=stage.animate[i].Y;
					stage.animate[index].Xhis=stage.animate[i].X;
					stage.animate[index].Yhis=stage.animate[i].Y;
					stage.animate[index].Xstart=stage.animate[i].X;
					stage.animate[index].Ystart=stage.animate[i].Y;
					stage.animate[index].relation=CHARACTER_ANIMATE;
					stage.animate[index].lpanimate=&anim[0][2];
					stage.animate[index].width=
						stage.animate[index].lpanimate->graph[0].srcrect.right;
					stage.animate[index].height=stage.animate[index].lpanimate->graph[0].srcrect.bottom/3;
					stage.animate[index].visible=1;
					stage.animate[index].type=MULTI_POINTER_TO_ONE_ANIMATE|(2<<16);
					stage.animate[index].intvalue[PARENT]=i;

					stage.animate[i].intvalue[ACTION]&=LOWORD(stage.animate[i].intvalue[ACTION]);
					enemynum_max+=1;
					enemynum=GetAnimateUsed();
				}
				break;
			case 0:
				break;
			}

			stage.animate[i].x=stage.animate[i].X-X;
			stage.animate[i].y=stage.animate[i].Y-Y;
			SetCharacterPos(&stage.animate[i],stage.animate[i].x,stage.animate[i].y);
			destrect=stage.animate[i].lpanimate->graph[stage.animate[i].intvalue[CUR]].destrect;
			if(Act(destrect,maprect))
			{
				c[num]=&stage.animate[i];
				num+=1;
			}
			//动画
			stage.animate[i].lpanimate->frame=stage.animate[i].intvalue[FRAME];
			if(stage.animate[i].intvalue[ACTION]!=0)
			{
				PlayAnimate(stage.animate[i].lpanimate);
			}
			else
			{
				StopAnimate(stage.animate[i].lpanimate);
			}
			stage.animate[i].intvalue[FRAME]=stage.animate[i].lpanimate->frame;
			stage.animate[i].intvalue[CUR]=stage.animate[i].lpanimate->cur;
		}
	}

	for(i=0;i<num;i++) //简单排序
	{
		for(j=0;j<num;j++)
		{
			if(c[j]!=c[i])
			{
				if(c[j]->Y>=c[i]->Y)
				{
					clist[j]+=1;
				}
				else
				{
					clist[j]-=1;
				}
			}

		}
	}

	for(i=-num;i<num;i++) //
	{
		for(j=0;j<num;j++)
		{
			if(clist[j]==i&&c[j]->visible)
			{
				c[j]->x=c[j]->X-X;
				c[j]->y=c[j]->Y-Y;
				if(c[j]->relation==CHARACTER_ANIMATE)
				{
					switch(LOWORD(c[j]->type))
					{
					case MULTI_POINTER_TO_ONE_ANIMATE:
						SetCharacterPos(c[j],c[j]->x,c[j]->y);

⌨️ 快捷键说明

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