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

📄 gamemain.cpp

📁 一个VC游戏源码,带运行程序,供大家学习之用
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			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(!test)
			{
				stage.animate[i].intvalue[ACTION]=0;
				stage.animate[i].lpanimate=&anim[0][HIWORD(stage.animate[i].type)];
			}
			switch(stage.animate[i].intvalue[ACTION])
			{
			case 1:
				stage.animate[i].X+=normalspeed;
				stage.animate[i].lpanimate=&anim[1][HIWORD(stage.animate[i].type)];
				break;
			case 2:
				stage.animate[i].X-=normalspeed;
				stage.animate[i].lpanimate=&anim[0][HIWORD(stage.animate[i].type)];
				break;
			case 3:
				stage.animate[i].Y+=normalspeed;
				break;
			case 4:
				stage.animate[i].Y-=normalspeed;
				break;
			case 5:
				stage.animate[i].X+=sqrtspeed;
				stage.animate[i].Y+=sqrtspeed;
				stage.animate[i].lpanimate=&anim[1][HIWORD(stage.animate[i].type)];
				break;
			case 6:
				stage.animate[i].X+=sqrtspeed;
				stage.animate[i].Y-=sqrtspeed;
				stage.animate[i].lpanimate=&anim[1][HIWORD(stage.animate[i].type)];
				break;
			case 7:
				stage.animate[i].X-=sqrtspeed;
				stage.animate[i].Y+=sqrtspeed;
				stage.animate[i].lpanimate=&anim[0][HIWORD(stage.animate[i].type)];
				break;
			case 8:
				stage.animate[i].X-=sqrtspeed;
				stage.animate[i].Y-=sqrtspeed;
				stage.animate[i].lpanimate=&anim[0][HIWORD(stage.animate[i].type)];
				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;
				if(i==selanimate)DrawRect(destrect);
				if(Act(destrect,mouserect)&&ctrlobject==OBJ_ANIMATE&&Act(mouserect,maprect))
				{
					if((hasgetindex==1&&stage.animate[hoverindex].Y<stage.animate[i].Y)||hasgetindex==0) //用于点选最前端目标
					{
						hoverindex=i;
						hoverrect=destrect;
						hasgetindex=1;
					}
				}
			}
		}
	}

	if(mouse_rd&&Act(mouserect,maprect)&&hoverindex!=-1&&ctrlobject==OBJ_ANIMATE)
	{
		stage.animate[hoverindex].visible=0;
		animateused=GetAnimateUsed();
		selanimate=-1;
	}
	if(mouse_rd&&Act(mouserect,maprect)&&hoverindex==-1)selanimate=-1;
	if(Act(mouserect,maprect)&&ctrlobject==OBJ_ANIMATE)
	{
		if(mouse_ld)selanimate=hoverindex;
		if(mouse_ld&&selanimate==-1)
		{
			int setindex=GetAnimateIndex();
			if(setindex!=-1)
			{
				stage.animate[setindex].X=mouse_x+X;
				stage.animate[setindex].Y=mouse_y+Y;
				stage.animate[setindex].Xhis=mouse_x+X;
				stage.animate[setindex].Yhis=mouse_y+Y;
				stage.animate[setindex].Xstart=mouse_x+X;
				stage.animate[setindex].Ystart=mouse_y+Y;
				stage.animate[setindex].relation=CHARACTER_ANIMATE;
				stage.animate[setindex].lpanimate=&anim[0][selanim];
				stage.animate[setindex].width=
					stage.animate[setindex].lpanimate->graph[0].srcrect.right;
				stage.animate[setindex].height=stage.animate[setindex].lpanimate->graph[0].srcrect.bottom/3;
				stage.animate[setindex].visible=1;
				stage.animate[setindex].type=MULTI_POINTER_TO_ONE_ANIMATE|(selanim<<16);
				selanimate=setindex;
				animateused=GetAnimateUsed();
			}
		}
	}



	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]->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:
						if(c[j]->intvalue[ACTION]!=0)
						{
							c[j]->lpanimate->frame=c[j]->intvalue[FRAME];
							PlayAnimate(c[j]->lpanimate);
							c[j]->intvalue[FRAME]=c[j]->lpanimate->frame;
						}
						else
						{
							c[j]->lpanimate->frame=c[j]->intvalue[FRAME];
							StopAnimate(c[j]->lpanimate);
							c[j]->intvalue[FRAME]=c[j]->lpanimate->frame;
						}
						SetCharacterPos(c[j],c[j]->x,c[j]->y);
						GraphToBack(&c[j]->lpanimate->graph[c[j]->lpanimate->cur],c[j]->lpanimate->keycolor);
						break;
					case 0:
						SetCharacterPos(c[j],c[j]->x,c[j]->y);
						GraphToBack(&c[j]->lpanimate->graph[c[j]->lpanimate->cur],c[j]->lpanimate->keycolor);
						break;
					}
				}
				else
				{
					SetCharacterPos(c[j],c[j]->x,c[j]->y);
					GraphToBack(c[j]->lpgraph,c[j]->keycolor);
				}
				if(viewcollrect)DrawRect(c[j]->colliderect);
			}
		}
	}
	if(hoverindex!=-1)DrawRect(hoverrect);

	/////////////////////////////////////////////////////////////////////////////////////////////

	//痛苦过后是无穷无尽的痛苦.

	//是否应该给这些有点象窗口控件的东西分别创建结构和函数?

	//理智告诉我,无论如何,这些东西都要告诉它们高度,宽度,显示的字体,点的时候干什么,点完了还干什么.

	//想知道自己该干什么只需要一个全局变量就可以了,唉,至少我还认得它们的时候还知道去哪里找它们.

	//要是日后还要去函数堆,结构堆,声明,创建里重新认出它们来,肯定要很多时间.

	//其实,它们写起来真的很短.

	/////////////////////////////////////////////////////////////////////////////////////////////

	//画地图标尺
	if(viewlattice)
	{
		for(i=Xmin;i<=Xmax;i++)
		{
			_stprintf(strbuf,"%d",i);
			DrawString(Xstart+(i-Xmin)*32+2,2,strbuf,0);
		}
		for(i=Ymin;i<=Ymax;i++)
		{
			_stprintf(strbuf,"%d",i);
			DrawString(2,Ystart+(i-Ymin)*32+2,strbuf,0);
		}
	}

	HDC hdc;
	lpsurback->GetDC(&hdc);
	Rectangle(hdc,0,416,640,480); //画出了工作区
	Rectangle(hdc,512,0,640,417);
	lpsurback->ReleaseDC(hdc);

	if(viewcollide)DrawString(520,100,"VIEWCOLLIDE",0); //显示地图碰撞符号的按钮
	if(!viewcollide)DrawString(520,100,"VIEWCOLLIDE",RGB(212,212,212));
	SetRectPos(tmprect,520,100,105,12); //设定按钮焦点x,y,width,height
	if(Act(tmprect,mouserect)&&mouse_ld)viewcollide=(viewcollide?0:1); //响应鼠标事件,按下时翻转状态值.
	if(Act(tmprect,mouserect))DrawRect(tmprect); //响应鼠标事件,悬停时绘制焦点区

	if(viewlattice)DrawString(520,120,"VIEWLATTICE",0);
	if(!viewlattice)DrawString(520,120,"VIEWLATTICE",RGB(212,212,212));
	SetRectPos(tmprect,520,120,105,12);
	if(Act(tmprect,mouserect)&&mouse_ld)viewlattice=(viewlattice?0:1);
	if(Act(tmprect,mouserect))DrawRect(tmprect);

	if(viewcollrect)DrawString(520,140,"VIEWCOLLRECT",0);
	if(!viewcollrect)DrawString(520,140,"VIEWCOLLRECT",RGB(212,212,212));
	SetRectPos(tmprect,520,140,105,12);
	if(Act(tmprect,mouserect)&&mouse_ld)viewcollrect=(viewcollrect?0:1);
	if(Act(tmprect,mouserect))DrawRect(tmprect);

	if(ctrlobject==OBJ_TILE)DrawString(520,160,"┌CTRL-TILE",0);
	if(!(ctrlobject==OBJ_TILE))DrawString(520,160,"┌CTRL-TILE",RGB(212,212,212));
	SetRectPos(tmprect,520,160,105,12);
	if(Act(tmprect,mouserect)&&mouse_ld)ctrlobject=OBJ_TILE;
	if(Act(tmprect,mouserect))DrawRect(tmprect);

	if(ctrlobject==OBJ_SCENERY)DrawString(520,180,"├CTRL-SCENERY",0);
	if(!(ctrlobject==OBJ_SCENERY))DrawString(520,180,"├CTRL-SCENERY",RGB(212,212,212));
	SetRectPos(tmprect,520,180,105,12);
	if(Act(tmprect,mouserect)&&mouse_ld)ctrlobject=OBJ_SCENERY;
	if(Act(tmprect,mouserect))DrawRect(tmprect);

	if(ctrlobject==OBJ_ANIMATE)DrawString(520,200,"└CTRL-ANIMATE",0);
	if(!(ctrlobject==OBJ_ANIMATE))DrawString(520,200,"└CTRL-ANIMATE",RGB(212,212,212));
	SetRectPos(tmprect,520,200,105,12);
	if(Act(tmprect,mouserect)&&mouse_ld)ctrlobject=OBJ_ANIMATE;
	if(Act(tmprect,mouserect))DrawRect(tmprect);

	DrawString(520,220,"CLEANTILES",0);
	SetRectPos(tmprect,520,220,105,12);
	if(Act(tmprect,mouserect)&&mouse_ld)
	{
		memset(stage.map,seltile,sizeof(stage.map));
	}
	if(Act(tmprect,mouserect)&&mouse_l)
	{
		DrawString(520,220,"CLEANTILES",RGB(212,212,212));
	}
	if(Act(tmprect,mouserect))DrawRect(tmprect);

	DrawString(520,240,"CLEANCOLLIDES",0);
	SetRectPos(tmprect,520,240,105,12);
	if(Act(tmprect,mouserect)&&mouse_ld)
	{
		memset(stage.collide,0,sizeof(stage.collide));
	}
	if(Act(tmprect,mouserect)&&mouse_l)
	{
		DrawString(520,240,"CLEANCOLLIDES",RGB(212,212,212));
	}
	if(Act(tmprect,mouserect))DrawRect(tmprect);

	DrawString(520,260,"CLEANSCENERYS",0);
	SetRectPos(tmprect,520,260,105,12);
	if(Act(tmprect,mouserect)&&mouse_ld)
	{
		memset(stage.scenery,0,sizeof(stage.scenery));
	}
	if(Act(tmprect,mouserect)&&mouse_l)
	{
		DrawString(520,260,"CLEANSCENERYS",RGB(212,212,212));
	}
	if(Act(tmprect,mouserect))DrawRect(tmprect);

	DrawString(520,280,"CLEANANIMATES",0);
	SetRectPos(tmprect,520,280,105,12);
	if(Act(tmprect,mouserect)&&mouse_ld)
	{
		memset(stage.animate,0,sizeof(stage.animate));
	}
	if(Act(tmprect,mouserect)&&mouse_l)
	{
		DrawString(520,280,"CLEANANIMATES",RGB(212,212,212));
	}
	if(Act(tmprect,mouserect))DrawRect(tmprect);

	if(!test)DrawString(520,300,"SAVE",0);
	SetRectPos(tmprect,520,300,105,12);
	if((!test)&&Act(tmprect,mouserect)&&mouse_ld)
	{
		HFILE hfile;
		OFSTRUCT ofdata;
		_stprintf(strbuf,"stage\\stage%d.dat",stagenum);
		hfile=OpenFile(strbuf,&ofdata,OF_CREATE|OF_WRITE);
		if(hfile!=HFILE_ERROR)
		{
			_lwrite(hfile,(LPCSTR)&stage,sizeof(STAGE));
			_lclose(hfile);
		}

	}
	if((!test)&&Act(tmprect,mouserect)&&mouse_l)
	{
		DrawString(520,300,"SAVE",RGB(212,212,212));
	}
	if((!test)&&Act(tmprect,mouserect))DrawRect(tmprect);

	if(!test)DrawString(520,320,"LOAD",0);
	SetRectPos(tmprect,520,320,105,12);
	if(((!test)&&Act(tmprect,mouserect)&&mouse_ld)||stagenum==-1)
	{
		if(stagenum==-1)stagenum=0;
		memset(&stage,0,sizeof(STAGE));
		stage.maplength=normallength;
		HFILE hfile;
		OFSTRUCT ofdata;
		_stprintf(strbuf,"stage\\stage%d.dat",stagenum);
		hfile=OpenFile(strbuf,&ofdata,OF_READ|OF_SHARE_COMPAT);
		if(hfile!=HFILE_ERROR)
		{
			_lread(hfile,(LPVOID)&stage,sizeof(STAGE));
			_lclose(hfile);
			selscenery=-1;
			sceneryused=GetSceneryUsed();
			selanimate=-1;
			animateused=GetAnimateUsed();
		}
	}
	if((!test)&&Act(tmprect,mouserect)&&mouse_l)
	{
		DrawString(520,320,"LOAD",RGB(212,212,212));
	}
	if((!test)&&Act(tmprect,mouserect))DrawRect(tmprect);

	if(!test)DrawString(520,340,"DELETE",0);
	SetRectPos(tmprect,520,340,105,12);
	if((!test)&&Act(tmprect,mouserect)&&mouse_ld)
	{
		memset(&stage,0,sizeof(STAGE));
		stage.maplength=normallength;
		HFILE hfile;
		OFSTRUCT ofdata;
		_stprintf(strbuf,"stage\\stage%d.dat",stagenum);
		hfile=OpenFile(strbuf,&ofdata,OF_EXIST);
		if(hfile!=HFILE_ERROR)
		{
			DeleteFile(strbuf);
			selscenery=-1;
			sceneryused=GetSceneryUsed();
			selanimate=-1;
			animateused=GetAnimateUsed();
		}

	}
	if((!test)&&Act(tmprect,mouserect)&&mouse_l)
	{
		DrawString(520,340,"DELETE",RGB(212,212,212));
	}
	if((!test)&&Act(tmprect,mouserect))DrawRect(tmprect);

	if(!test)DrawString(520,360,"<",0);
	SetRect(&tmprect,520,360,520+12,360+12);
	if((!test)&&Act(tmprect,mouserect)&&stagenum>0)DrawRect(tmprect);
	if((!test)&&Act(tmprect,mouserect)&&stagenum>0&&mouse_ld)stagenum-=1;
	_stprintf(strbuf,"stage\\stage%d.dat",stagenum);
	OFSTRUCT ofdata;
	if(OpenFile(strbuf,&ofdata,OF_EXIST)!=HFILE_ERROR)
	{
		_stprintf(strbuf,"stage%d.dat",stagenum);
		DrawString(530,360,strbuf,0);
	}
	else
	{
		_stprintf(strbuf,"stage%d.dat",stagenum);
		DrawString(530,360,strbuf,RGB(212,212,212));
	}
	if(!test)DrawString(620,360,">",0);
	SetRect(&tmprect,620,360,620+12,360+12);
	if((!test)&&Act(tmprect,mouserect)&&stagenum<maxstage)DrawRect(tmprect);
	if((!test)&&Act(tmprect,mouserect)&&stagenum<maxstage&&mouse_ld)stagenum+=1;

	if(test)DrawString(520,380,"TEST",0);
	if(!test)DrawString(520,380,"TEST",RGB(212,212,212));
	SetRectPos(tmprect,520,380,105,12);
	if(Act(tmprect,mouserect)&&mouse_ld)test=(test?0:1);
	if(Act(tmprect,mouserect))DrawRect(tmprect);

	if(!test)DrawString(520,400,"<",0);
	SetRect(&tmprect,520,400,520+12,400+12);
	if((!

⌨️ 快捷键说明

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