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

📄 timer.cpp

📁 一个45度角场景RPG游戏程序的demo
💻 CPP
字号:
#include "main.h"

void CALLBACK GameTimer(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{
	static int tt=100;
	tt++;
	cursor=(cursor+1)%12;//改鼠标
//-----------------------------修改子弹状态--------------------
	for (int i=0;i<MaxBullet;i++)
	{
		if (bullet[i]->status!=-1)
		{
			int dx=bullet[i]->tx-bullet[i]->x;
			int dy=bullet[i]->ty-bullet[i]->y;
			bullet[i]->life--;
			if (bullet[i]->life==0)
				bullet[i]->status=-1;
			if ( (abs(dx)>4)||(abs(dy)>4) ) //未到目标,移动
			{
				int ddx=8*dx/(sqrt(dx*dx+dy*dy))+0.5;
				int ddy=8*dy/(sqrt(dx*dx+dy*dy))+0.5;
				bullet[i]->x+=ddx;
				bullet[i]->y+=ddy;
				bullet[i]->tx+=ddx;
				bullet[i]->ty+=ddy;
/*				for (int j=0;j<MaxBlock;j++)
					if ( (abs(block[j]->x-bullet[i]->x)<16) && (block[j]->y-bullet[i]->y<71) && (block[j]->y-bullet[i]->y>-26) )
					{
						bullet[i]->status=-1;
						break;
					}*/
			}
			//看看是否命中
			int xxx=FoundHuman(bullet[i]->x-human[main]->x+316,bullet[i]->y-human[main]->y+236);
			if (xxx!=-1)
			{
				if (human[xxx]->type!=human[bullet[i]->owner]->type)
				{
					bullet[i]->status=-1;
					human[xxx]->health-=10;
					if (xxx!=main)
					{
						human[xxx]->MainStatus=fighting;
						human[xxx]->FollowID=bullet[i]->owner;
						human[xxx]->FootStatus=0;
					}
					if (human[xxx]->health==0)
						human[xxx]->MainStatus=away;
				}
			}
		}
	}
//-----------------------------逐渐恢复发弹后人物状态----------
	for (i=0;i<MaxHuman;i++)
	{
		if (human[i]->CoolDown!=0)
			human[i]->CoolDown--;
	}
//-----------------------------将所有非主角人物随机移动--------
	if (tt>100)
	{
		for (int i=1;i<MaxHuman;i++)
			if (human[i]->MainStatus==normal)
				human[i]->moveto(rand()%960,rand()%704);
		tt=0;
	}
//-----------------------------移动作了移动标记的人------------
	for (i=0;i<MaxHuman;i++)
	{
		if ((human[i]->MainStatus!=away)&&(human[i]->FootStatus!=-1))
		{
			if (tt%3==0) //改脚的状态
				human[i]->FootStatus=(human[i]->FootStatus+1)%4;
			long dx,dy;
			if (human[i]->FollowID==-1)//无人,移往某地
			{
				dx=human[i]->MoveToX-human[i]->x;
				dy=human[i]->MoveToY-human[i]->y;
			}
			else 
			{
				human[i]->moveto(human[human[i]->FollowID]->x,human[human[i]->FollowID]->y);
				dx=(human[human[i]->FollowID]->x-human[i]->x)/12;
				//距离比较近就已可对话
				dy=(human[human[i]->FollowID]->y-human[i]->y)/12;
				if ( (human[i]->MainStatus==fighting) 
					&& ( dx*dx+dy*dy<450) ) //敌人在射程内
				{
					if (human[human[i]->FollowID]->health==0) //已死
					{
						human[i]->FootStatus=-1;
						human[i]->MainStatus=normal;
						human[i]->FollowID=-1;
					}
					else
					{
						human[i]->FootStatus=2;
						human[i]->fight(); //发弹
						dx=0;
						dy=0;
					}
				}
			}
			if ((abs(dx)>1)||(abs(dy)>1)) //如还未到目标
			{
				float newx=human[i]->x+(0.5+3*dx/(sqrt(dx*dx+dy*dy)));
				float newy=human[i]->y+(0.5+3*dy/(sqrt(dx*dx+dy*dy)));
				int tt=1;
/*				for (int j=0;j<max_block;j++) //检查障碍
				{
					if ((block[j]->x-newx)*(block[j]->x-newx)+
					(block[j]->y-newy)*(block[j]->y-newy)<480)
					{
						tt=0;
						break;
					}
				}*/
				if (tt==1)
				{
					human[i]->x=newx;
					human[i]->y=newy;
				}
			}
			else //已到目标
			{
				if (human[i]->MainStatus!=fighting) //如非战斗状态
				{
					human[i]->FootStatus=-1;
					if (human[i]->FollowID!=-1)
						human[i]->talk(human[i]->FollowID); //谈话
					human[i]->FollowID=-1;
				}
			}
		}
	}
}

⌨️ 快捷键说明

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