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

📄 gamedemo.c

📁 brew的一个Demo 供大家参考和学习之用 很不错
💻 C
📖 第 1 页 / 共 4 页
字号:
			}
			if(((pMap->m_pMapArray[xTile1+i*pMap->m_nWidth]>>8)&0x01)==0x01)
			{
				pMe->m_Game.m_MainSprite.dy = 0;
				pMe->m_Game.m_MainSprite.m_iKeyState &=~KEY_UP_MASK;
				break;
			}
			if(((pMap->m_pMapArray[xTile2+i*pMap->m_nWidth]>>8)&0x01)==0x01)
			{
				pMe->m_Game.m_MainSprite.dy = 0;
				pMe->m_Game.m_MainSprite.m_iKeyState &=~KEY_UP_MASK;
				break;
			}
		}
	}
}
boolean CheckTileCollisionHorizon(GameDemo *pMe)
{
	int i;
	int yTile1;
	int yTile2;
	int yTile3;
	AEERect mainRect;
	AEERect tileRect;
	
	mainRect.x = pMe->m_Game.m_MainSprite.m_sprite[0].x+pMe->m_Game.m_MidMap.m_nX+7;
	mainRect.y = pMe->m_Game.m_MainSprite.m_sprite[0].y+pMe->m_Game.m_MidMap.m_nY+1;
	mainRect.dx = 16;
	mainRect.dy = 31;

	tileRect.dx = 16;
	tileRect.dy = 16;

	if(pMe->m_Game.m_MainSprite.m_bIsLeft)
	{
		mainRect.x = pMe->m_Game.m_MainSprite.m_sprite[0].x+pMe->m_Game.m_MidMap.m_nX+7-MOVESPEED;
		i=(pMe->m_Game.m_MainSprite.m_sprite[0].x+pMe->m_Game.m_MidMap.m_nX+7-MOVESPEED)/pMe->m_Game.m_MidMap.m_nTileSize;
		{
			if(i<0||i>pMe->m_Game.m_MidMap.m_nWidth-1)
			{
				return FALSE;
			}
			yTile1=(pMe->m_Game.m_MainSprite.m_sprite[0].y+pMe->m_Game.m_MidMap.m_nY)/pMe->m_Game.m_MidMap.m_nTileSize;
			yTile2=(pMe->m_Game.m_MainSprite.m_sprite[0].y+pMe->m_Game.m_MidMap.m_nY)/pMe->m_Game.m_MidMap.m_nTileSize+1;
			yTile3=(pMe->m_Game.m_MainSprite.m_sprite[0].y+pMe->m_Game.m_MidMap.m_nY)/pMe->m_Game.m_MidMap.m_nTileSize+2;
			if(yTile1<0||yTile3>pMe->m_Game.m_MidMap.m_nHeight-1)
			{
				return FALSE;
			}
			if(((pMe->m_Game.m_MidMap.m_pMapArray[i+yTile1*pMe->m_Game.m_MidMap.m_nWidth]>>8)&0x04)==0x04)
			{
				tileRect.x=i*16;
				tileRect.y=yTile1*16;	
				if(IntersectRect(&mainRect,&tileRect))
				{
					return TRUE;
				}
			}
			if(((pMe->m_Game.m_MidMap.m_pMapArray[i+yTile2*pMe->m_Game.m_MidMap.m_nWidth]>>8)&0x04)==0x04)
			{
				tileRect.x=i*16;
				tileRect.y=yTile2*16;
				if(IntersectRect(&mainRect,&tileRect))
				{
					return TRUE;
				}
			}
			if(((pMe->m_Game.m_MidMap.m_pMapArray[i+yTile3*pMe->m_Game.m_MidMap.m_nWidth]>>8)&0x04)==0x04)
			{
				tileRect.x=i*16;
				tileRect.y=yTile3*16;
				if(IntersectRect(&mainRect,&tileRect))
				{
					return TRUE;
				}
			}
		}
	}
	else
	{ 
		mainRect.x = pMe->m_Game.m_MainSprite.m_sprite[0].x +pMe->m_Game.m_MidMap.m_nX+7+MOVESPEED;
		i = (pMe->m_Game.m_MainSprite.m_sprite[0].x+pMe->m_Game.m_MidMap.m_nX-7+MOVESPEED)/pMe->m_Game.m_MidMap.m_nTileSize+2;
		{
			if(i<0||i>pMe->m_Game.m_MidMap.m_nWidth-1)
			{
				return FALSE;
			}
			yTile1=(pMe->m_Game.m_MainSprite.m_sprite[0].y+pMe->m_Game.m_MidMap.m_nY)/pMe->m_Game.m_MidMap.m_nTileSize;
			yTile2=(pMe->m_Game.m_MainSprite.m_sprite[0].y+pMe->m_Game.m_MidMap.m_nY)/pMe->m_Game.m_MidMap.m_nTileSize+1;		
			yTile3=(pMe->m_Game.m_MainSprite.m_sprite[0].y+pMe->m_Game.m_MidMap.m_nY)/pMe->m_Game.m_MidMap.m_nTileSize+2;		
			if(yTile1<0||yTile3>pMe->m_Game.m_MidMap.m_nHeight-1)
			{
				return FALSE;
			}
			if(((pMe->m_Game.m_MidMap.m_pMapArray[i+yTile1*pMe->m_Game.m_MidMap.m_nWidth]>>8)&0x04)==0x04)
			{
				//判断矩形是否有交点
				tileRect.x=i*16;
				tileRect.y=yTile1*16;	
				if(IntersectRect(&mainRect,&tileRect))
				{
					return TRUE;
				}
			}
			if(((pMe->m_Game.m_MidMap.m_pMapArray[i+yTile2*pMe->m_Game.m_MidMap.m_nWidth]>>8)&0x04)==0x04)
			{
				//判断矩形是否有交点
				tileRect.x=i*16;
				tileRect.y=yTile2*16;
				if(IntersectRect(&mainRect,&tileRect))
				{
					return TRUE;
				}
			}
			if(((pMe->m_Game.m_MidMap.m_pMapArray[i+yTile3*pMe->m_Game.m_MidMap.m_nWidth]>>8)&0x04)==0x04)
			{
				//判断矩形是否有交点
				tileRect.x=i*16;
				tileRect.y=yTile3*16;
				if(IntersectRect(&mainRect,&tileRect))
				{
					return TRUE;
				}
			}
		}
	}
	return FALSE;
}

boolean IntersectRect(AEERect *pRect1,AEERect *pRect2)
{
	if((pRect1->x + pRect1->dx > pRect2->x)&&(pRect1->y + pRect1->dy > pRect2->y)
		&&(pRect2->x + pRect2->dx > pRect1->x)&&(pRect2->y + pRect2->dy > pRect1->y))
	{
		return TRUE;
	}
	return FALSE;
}

void EnemyAction(GameDemo *pMe,AEESpriteCmd *pSprites,int index,int num)
{
	int i;
	for(i=index;i<index+num;i++)
	{
		if(pSprites[i].unLayer!=SPRITE_LAYER_HIDDEN)
		{        
			if(pMe->m_Game.m_MoveSpriteProp[i].isLeft)
			{
				pSprites[i].x-=4;
				if(pMe->m_Game.m_MoveSpriteProp[i].originX-(pMe->m_Game.m_MidMap.m_nX+pSprites[i].x)>pMe->m_Game.m_MoveSpriteProp[i].interval)
				{
					pMe->m_Game.m_MoveSpriteProp[i].isLeft=FALSE;
					pMe->m_Game.m_MoveSpriteProp[i].offset=3;
				}
			}
			else
			{
				pSprites[i].x+=4;
				if((pSprites[i].x+pMe->m_Game.m_MidMap.m_nX)-pMe->m_Game.m_MoveSpriteProp[i].originX>pMe->m_Game.m_MoveSpriteProp[i].interval)
				{
					pMe->m_Game.m_MoveSpriteProp[i].isLeft=TRUE;
					pMe->m_Game.m_MoveSpriteProp[i].offset=0;
				}
			}
			pSprites[i].unSpriteIndex++;
			if(pSprites[i].unSpriteIndex>2+pMe->m_Game.m_MoveSpriteProp[i].offset)
			{
				pSprites[i].unSpriteIndex=pMe->m_Game.m_MoveSpriteProp[i].offset;
			}
		}
	}
}

void CheckBulletEnemyCollision(GameDemo *pMe)
{
	//子弹与敌人的碰撞
	int i,j;
	AEERect rect1;
	AEERect rect2;
	rect1.dx = 8;
	rect1.dy = 8;
	rect2.dx = 20;
	rect2.dy = 20;

	for(i=0;i<3;i++)
	{
		if(pMe->m_Game.m_StaticSprites[i].unLayer!=SPRITE_LAYER_HIDDEN)
		{
			rect1.x = pMe->m_Game.m_StaticSprites[i].x;
			rect1.y = pMe->m_Game.m_StaticSprites[i].y;
			for(j=6;j<8;j++)
			{
				if(pMe->m_Game.m_MoveSprites[j].unLayer!=SPRITE_LAYER_HIDDEN)
				{
					rect2.x = pMe->m_Game.m_MoveSprites[j].x;
					rect2.y = pMe->m_Game.m_MoveSprites[j].y;
					if(IntersectRect(&rect1,&rect2))
					{
						pMe->m_Game.m_StaticSprites[i].unLayer = SPRITE_LAYER_HIDDEN;
						pMe->m_Game.m_MoveSprites[j].unLayer = SPRITE_LAYER_HIDDEN;
						PlayGameMedia(pMe);
						break;

					}
				}
			}
		}
	}
}
void CheckMainSpriteEnemyCollision(GameDemo *pMe)
{
	//敌人与主角的碰撞
	int i;
	AEERect rect1;
	AEERect rect2;
	rect1.dx = 20;
	rect1.dy = 32;
	rect2.dx = 20;
	rect2.dy = 32;
	rect1.x = pMe->m_Game.m_MainSprite.m_sprite[0].x;
	rect1.y = pMe->m_Game.m_MainSprite.m_sprite[0].y;
	for(i=6;i<8;i++)
	{
		if(pMe->m_Game.m_MoveSprites[i].unLayer!=SPRITE_LAYER_HIDDEN)
		{
			rect2.x = pMe->m_Game.m_MoveSprites[i].x;
			rect2.y = pMe->m_Game.m_MoveSprites[i].y;
			if(IntersectRect(&rect1,&rect2))
			{
				PlayGameMedia(pMe);
				MainGameDataInit(pMe);
				break;
			}
		}
	}
}

void SaveCurrentData(GameDemo *pMe)
{
	IFileMgr *pIFileMgr;
	IFile *pIFile;
	ISHELL_CreateInstance(pMe->pIShell,AEECLSID_FILEMGR,(void**)&pIFileMgr);
	if(IFILEMGR_Test(pIFileMgr,"save.dat")==SUCCESS)
	{
		pIFile = IFILEMGR_OpenFile(pIFileMgr,"save.dat",_OFM_READWRITE);
	}
	else
	{
		pIFile = IFILEMGR_OpenFile(pIFileMgr,"save.dat",_OFM_CREATE);
	}
	if(IFILE_Write(pIFile,pMe->m_Game.m_MoveSprites,sizeof(pMe->m_Game.m_MoveSprites))!=sizeof(pMe->m_Game.m_MoveSprites))
	{
		IFILE_Release(pIFile);
		IFILEMGR_Remove(pIFileMgr,"save.dat");
		IFILEMGR_Release(pIFileMgr);
		return;
	}
	if(IFILE_Write(pIFile,pMe->m_Game.m_StaticSprites,sizeof(pMe->m_Game.m_StaticSprites))!=sizeof(pMe->m_Game.m_StaticSprites))
	{
		IFILE_Release(pIFile);
		IFILEMGR_Remove(pIFileMgr,"save.dat");
		IFILEMGR_Release(pIFileMgr);
		return;
	}
	if(IFILE_Write(pIFile,pMe->m_Game.m_MoveSpriteProp,sizeof(pMe->m_Game.m_MoveSpriteProp))!=sizeof(pMe->m_Game.m_MoveSpriteProp))
	{
		IFILE_Release(pIFile);
		IFILEMGR_Remove(pIFileMgr,"save.dat");
		IFILEMGR_Release(pIFileMgr);
		return;
	}
	if(IFILE_Write(pIFile,pMe->m_Game.m_StaticSpriteProp,sizeof(pMe->m_Game.m_StaticSpriteProp))!=sizeof(pMe->m_Game.m_StaticSpriteProp))
	{
		IFILE_Release(pIFile);
		IFILEMGR_Remove(pIFileMgr,"save.dat");
		IFILEMGR_Release(pIFileMgr);
		return;
	}
	if(IFILE_Write(pIFile,&pMe->m_Game.m_MidMap.m_nX,sizeof(pMe->m_Game.m_MidMap.m_nX))!=sizeof(pMe->m_Game.m_MidMap.m_nX))
	{
		IFILE_Release(pIFile);
		IFILEMGR_Remove(pIFileMgr,"save.dat");
		IFILEMGR_Release(pIFileMgr);
		return;
	}
	if(IFILE_Write(pIFile,&pMe->m_Game.m_MidMap.m_nY,sizeof(pMe->m_Game.m_MidMap.m_nY))!=sizeof(pMe->m_Game.m_MidMap.m_nY))
	{
		IFILE_Release(pIFile);
		IFILEMGR_Remove(pIFileMgr,"save.dat");
		IFILEMGR_Release(pIFileMgr);
		return;
	}
	if(IFILE_Write(pIFile,&pMe->m_Game.m_MainSprite.dy,sizeof(pMe->m_Game.m_MainSprite.dy))!=sizeof(pMe->m_Game.m_MainSprite.dy))
	{
		IFILE_Release(pIFile);
		IFILEMGR_Remove(pIFileMgr,"save.dat");
		IFILEMGR_Release(pIFileMgr);
		return;
	}
	if(IFILE_Write(pIFile,&pMe->m_Game.m_MainSprite.m_bIsLeft,sizeof(pMe->m_Game.m_MainSprite.m_bIsLeft))!=sizeof(pMe->m_Game.m_MainSprite.m_bIsLeft))
	{
		IFILE_Release(pIFile);
		IFILEMGR_Remove(pIFileMgr,"save.dat");
		IFILEMGR_Release(pIFileMgr);
		return;
	}

	if(IFILE_Write(pIFile,pMe->m_Game.m_MainSprite.m_sprite,sizeof(pMe->m_Game.m_MainSprite.m_sprite))!=sizeof(pMe->m_Game.m_MainSprite.m_sprite))
	{
		IFILE_Release(pIFile);
		IFILEMGR_Remove(pIFileMgr,"save.dat");
		IFILEMGR_Release(pIFileMgr);
		return;
	}
	if(IFILE_Write(pIFile,&pMe->m_Game.m_MainSprite.offset,sizeof(pMe->m_Game.m_MainSprite.offset))!=sizeof(pMe->m_Game.m_MainSprite.offset))
	{
		IFILE_Release(pIFile);
		IFILEMGR_Remove(pIFileMgr,"save.dat");
		IFILEMGR_Release(pIFileMgr);
		return;
	}
	IFILE_Release(pIFile);
	IFILEMGR_Release(pIFileMgr);
}
void LoadSaveData(GameDemo *pMe)
{
	IFileMgr *pIFileMgr;
	IFile *pIFile;
	ISHELL_CreateInstance(pMe->pIShell,AEECLSID_FILEMGR,(void**)&pIFileMgr);
	if(IFILEMGR_Test(pIFileMgr,"save.dat")==SUCCESS)
	{
		pIFile = IFILEMGR_OpenFile(pIFileMgr,"save.dat",_OFM_READWRITE);
	}
	else
	{
		IFILEMGR_Release(pIFileMgr);
		return ;
	}
	IFILE_Read(pIFile,pMe->m_Game.m_MoveSprites,sizeof(pMe->m_Game.m_MoveSprites));
	IFILE_Read(pIFile,pMe->m_Game.m_StaticSprites,sizeof(pMe->m_Game.m_StaticSprites));
	IFILE_Read(pIFile,pMe->m_Game.m_MoveSpriteProp,sizeof(pMe->m_Game.m_MoveSpriteProp));
	IFILE_Read(pIFile,pMe->m_Game.m_StaticSpriteProp,sizeof(pMe->m_Game.m_StaticSpriteProp));
	IFILE_Read(pIFile,&pMe->m_Game.m_MidMap.m_nX,sizeof(pMe->m_Game.m_MidMap.m_nX));
	IFILE_Read(pIFile,&pMe->m_Game.m_MidMap.m_nY,sizeof(pMe->m_Game.m_MidMap.m_nY));

	IFILE_Read(pIFile,&pMe->m_Game.m_MainSprite.dy,sizeof(pMe->m_Game.m_MainSprite.dy));
	IFILE_Read(pIFile,&pMe->m_Game.m_MainSprite.m_bIsLeft,sizeof(pMe->m_Game.m_MainSprite.m_bIsLeft));
	IFILE_Read(pIFile,pMe->m_Game.m_MainSprite.m_sprite,sizeof(pMe->m_Game.m_MainSprite.m_sprite));
	IFILE_Read(pIFile,&pMe->m_Game.m_MainSprite.offset,sizeof(pMe->m_Game.m_MainSprite.offset));

	IFILE_Release(pIFile);
	IFILEMGR_Release(pIFileMgr);
}

static void MediaNotify(void *pUser,AEEMediaCmdNotify *pCmdNotify)
{
	GameDemo *pMe = (GameDemo*)pUser;
	if(pMe->m_bIsContinue)
	{
		if( pCmdNotify->nCmd == MM_CMD_PLAY)
		{
			if(pCmdNotify->nStatus == MM_STATUS_DONE)
			{
				IMEDIA_Play(pMe->m_pIMedia);
			}
		}
	}
}

void PlayBgMedia(GameDemo *pMe)
{
	if(pMe->m_bVolOn)
	{
		AEEMediaData pmd;
		if(pMe->m_pIMedia)
		{
			IMEDIA_Stop(pMe->m_pIMedia);
			IMEDIA_RegisterNotify(pMe->m_pIMedia,NULL,NULL);
			IMEDIA_Release(pMe->m_pIMedia);
		}
		ISHELL_CreateInstance(pMe->pIShell,AEECLSID_MEDIAMIDI,(void**)&pMe->m_pIMedia);
		pmd.clsData = MMD_FILE_NAME;
		pmd.pData = (void*)"begin.mid";
		pmd.dwSize=0;
		IMEDIA_SetMediaData(pMe->m_pIMedia, &pmd);
		IMEDIA_RegisterNotify(pMe->m_pIMedia,MediaNotify,pMe);
		pMe->m_bIsContinue = TRUE;
		IMEDIA_Play(pMe->m_pIMedia);
	}
}

void PlayGameMedia(GameDemo *pMe)
{
	if(pMe->m_bVolOn)
	{
		AEEMediaData pmd;
		if(pMe->m_pIMedia)
		{
			IMEDIA_Stop(pMe->m_pIMedia);
			IMEDIA_RegisterNotify(pMe->m_pIMedia,NULL,NULL);
			IMEDIA_Release(pMe->m_pIMedia);
		}
		ISHELL_CreateInstance(pMe->pIShell,AEECLSID_MEDIAMMF,(void**)&pMe->m_pIMedia);
		pmd.clsData = MMD_FILE_NAME;
		pmd.pData = (void*)"beat.mmf";
		pmd.dwSize=0;
		IMEDIA_SetMediaData(pMe->m_pIMedia, &pmd);
		IMEDIA_RegisterNotify(pMe->m_pIMedia,MediaNotify,pMe);
		pMe->m_bIsContinue = FALSE;
		IMEDIA_Play(pMe->m_pIMedia);
	}
}

⌨️ 快捷键说明

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