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

📄 hotblood.c

📁 <B>韩国游戏《热血》</B>
💻 C
📖 第 1 页 / 共 5 页
字号:
	AEERect r;
	HotBloodApp * pme = (HotBloodApp *)pi;

	if( pme->ply[0].PlayerState == PS_DEADLY_ATTACK_BY_SPEAR && pme->ply[0].anime >= 2 ) {
		if( pme->ply[0].anime % 2 == 1 ) {
			SETAEERECT(&r, 0, pme->O_PlayerY, 120, 117);
			IDISPLAY_DrawRect(pme->a.m_pIDisplay, &r, MAKE_RGB(0, 0, 0), MAKE_RGB(0, 0, 0), IDF_RECT_FILL);
		}else {
			IIMAGE_SetOffset(pme->m_pIBackGround, 0, -(pme->BackGroundY));
			IIMAGE_SetDrawSize(pme->m_pIBackGround, 120, 117);
			IIMAGE_Draw(pme->m_pIBackGround, 0, pme->O_PlayerY);		
		}
	}

	SETAEERECT(&r, 0, 0, pme->m_cxWidth, pme->O_PlayerY);
	IDISPLAY_DrawRect(pme->a.m_pIDisplay, &r, MAKE_RGB(0, 0, 0), MAKE_RGB(0, 0, 0), IDF_RECT_FILL);
	SETAEERECT(&r, 0, pme->O_PlayerY + 117, pme->m_cxWidth, pme->m_cyHeight - pme->O_PlayerY + 117);
	IDISPLAY_DrawRect(pme->a.m_pIDisplay, &r, MAKE_RGB(0, 0, 0), MAKE_RGB(0, 0, 0), IDF_RECT_FILL);
}

static void drawEffect2(IApplet * pi)
{
	AEERect r;
	HotBloodApp * pme = (HotBloodApp *)pi;

	if( pme->ply[0].PlayerState == PS_DEADLY_ATTACK_BY_SPEAR && pme->ply[0].anime >= 2 ) {
		if( pme->ply[0].anime % 2 == 0 ) {
			switch( pme->ply[0].anime ) {
				case 4:
					IIMAGE_Draw(pme->m_pIPly[12], 33, -15 + pme->O_PlayerY);
					IIMAGE_Draw(pme->m_pIPly[12], 84, -3 + pme->O_PlayerY);
					IIMAGE_Draw(pme->m_pIPly[12], 114, -1 + pme->O_PlayerY);
					break;
				case 6:
					IIMAGE_Draw(pme->m_pIPly[12], 35, 45 + pme->O_PlayerY);
					IIMAGE_Draw(pme->m_pIPly[12], 62, -4 + pme->O_PlayerY);
					IIMAGE_Draw(pme->m_pIPly[12], 70, 47 + pme->O_PlayerY);
					IIMAGE_Draw(pme->m_pIPly[12], 80, 84 + pme->O_PlayerY);
					break;
				case 8:
					IIMAGE_Draw(pme->m_pIPly[12], -12, 50 + pme->O_PlayerY);
					IIMAGE_Draw(pme->m_pIPly[12], -14, 96 + pme->O_PlayerY);
					IIMAGE_Draw(pme->m_pIPly[12], 19, 98 + pme->O_PlayerY);
					break;
			}
			
		}
	}

	SETAEERECT(&r, 0, 0, pme->m_cxWidth, pme->O_PlayerY);
	IDISPLAY_DrawRect(pme->a.m_pIDisplay, &r, MAKE_RGB(0, 0, 0), MAKE_RGB(0, 0, 0), IDF_RECT_FILL);
	SETAEERECT(&r, 0, pme->O_PlayerY + 117, pme->m_cxWidth, pme->m_cyHeight - pme->O_PlayerY + 117);
	IDISPLAY_DrawRect(pme->a.m_pIDisplay, &r, MAKE_RGB(0, 0, 0), MAKE_RGB(0, 0, 0), IDF_RECT_FILL);
}
static void drawGame(IApplet * pi)
{
	HotBloodApp * pme = (HotBloodApp *)pi;
	
	if( pme->GameState != GS_BONUS_STAGE ) {
		drawScore(pi);
		drawEffect1(pi);
		drawPlayer(pi);
		drawEffect2(pi);
		drawEnergy(pi);
	}else {
		if( pme->stage == 1 ) {
			checkBonusStage(pi);
			drawPlayer(pi);
			drawEnergy(pi);
		}else {
			stoneManager(pi);
			checkStone(pi);
			drawObjects(pi);
			drawEnergy(pi);
		}
	}

	IDISPLAY_Update(pme->a.m_pIDisplay);
}

static void InitPlayer(IApplet * pi)
{
	int i;
	HotBloodApp * pme = (HotBloodApp *)pi;
	
	pme->ply[0].liveOK = TRUE;
	pme->ply[0].type = 0;
	if( pme->stage == 1 ) {
		if( pme->cheatMode == 0 || pme->cheatMode == 2 ) pme->ply[0].HP = CHO_ENERGY;
		else if( pme->cheatMode == 1 ) pme->ply[0].HP = CHO_CHEATED_ENERGY;
	}
	pme->ply[0].anime = 0;
	pme->ply[0].AP = 0;
	pme->ply[0].KOflag = 0;
	pme->ply[0].playerX = 5;
	pme->ply[0].playerY = pme->O_PlayerY + 72;
	pme->ply[0].yLevel = Y_LEV_9;
	pme->ply[0].currentDir = PS_RIGHT;
	pme->ply[0].shadowOK = TRUE;
	pme->ply[0].oldPlayerX = 5;
	pme->ply[0].oldPlayerY = pme->O_PlayerY + 72;

	pme->ply[0].imgNum = 0;

	pme->comboOn = FALSE;
	pme->bossDie = FALSE;
	pme->loading = FALSE;

	for( i = 1;i < 5;i++ ) {
		pme->ply[i].forDeath = FALSE;
		pme->ply[i].imgNum = 0;
		pme->ply[i].anime = 0;
		pme->ply[i].liveOK = FALSE;
		pme->ply[i].getPig = FALSE;
		pme->ply[i].energyOK = FALSE;
		pme->ply[i].KOflag = 0;
		pme->ply[i].playerX = 7;
		pme->ply[i].playerY = 72;
		pme->ply[i].AINum = 0;
		pme->ply[i].PlayerState = ES_NULL;
		pme->ply[i].shadowOK = TRUE;
		pme->ply[i].onScreen = FALSE;
		pme->ply[i].AINum1 = 0;
		pme->ply[i].preDamage = PS_NULL;
		pme->ply[i].oldPlayerX = 7;
		pme->ply[i].oldPlayerY = 72;
	}
}

static void movePlayerX(IApplet * pi, PlayerStruct * who, int move) 
{
	int i;
	AEEImageInfo imageInfo;
	AEEImageInfo imageInfo2;
	HotBloodApp * pme = (HotBloodApp *)pi;
	if( pme->GameState != GS_BONUS_STAGE ) {
		if( who->type == 0 ) {
			IIMAGE_GetInfo(pme->m_pIPly[who->imgNum], &imageInfo);
			if( who->boundaryX + move >= 0 && who->boundaryX + move <= pme->m_cxWidth ) {
				who->playerX += move;
				if( who->PlayerState != PS_JUMP ) {
					for( i = 1;i < 5;i++ ) {
						if( pme->ply[i].yLevel == pme->ply[0].yLevel && pme->ply[i].liveOK ) {
							if( move > 0 && pme->ply[0].playerX + imageInfo.cx - 5 > pme->ply[i].boundaryX &&
								pme->ply[0].playerX < pme->ply[i].playerX ) {
								who->playerX -= move;
								return;
							}
							if( move < 0 && pme->ply[0].playerX + 5 < pme->ply[i].boundaryX &&
								pme->ply[0].playerX > pme->ply[i].playerX ) {
								who->playerX -= move;
								return;
							}
						}
					}
				}
			}
		}else {
			IIMAGE_GetInfo(pme->m_pIPly[who->imgNum], &imageInfo);
			IIMAGE_GetInfo(pme->m_pIPly[pme->ply[0].imgNum], &imageInfo2);
			if( who->onScreen ) {
				if( who->playerX + 5 + move >= 0 && who->playerX + imageInfo.cx - 5 + move <= pme->m_cxWidth ) {
					who->blockOn = FALSE;
					who->playerX += move;
					if( who->type == 6 && who->PlayerState != ES_JUMP ) {
					if( pme->ply[0].yLevel == who->yLevel ) {
						if( move > 0 && pme->ply[0].playerX + 5 < who->boundaryX &&
							pme->ply[0].playerX > who->playerX ) {
							who->playerX -= move;
							return;
						}
						if( move < 0 && pme->ply[0].playerX + imageInfo2.cx - 5 > who->boundaryX &&
							pme->ply[0].playerX < who->playerX ) {
							who->playerX -= move;
							return;
						}
					}
					}
				}else who->blockOn = TRUE;
			}else {
				who->playerX += move;
			}
		}
	}else {
		if( pme->stage == 1 ) {
			if( who->type == 0 ) {
				if( who->boundaryX + move >= 0 && who->boundaryX + move <= 75 ) who->playerX += move;
			}
		}else {
			if( who->type == 0 ) {
				if( who->boundaryX + move >= 0 && who->boundaryX + move <= pme->m_cxWidth ) who->playerX += move;
			}else {
				who->playerX += move;
			}
		}
	}
}

static void movePlayerY(IApplet * pi, PlayerStruct * who, int move)
{
	HotBloodApp * pme = (HotBloodApp *)pi;
	if( pme->GameState != GS_BONUS_STAGE ) {
		if( move > 0 ) {
			if( who->yLevel < Y_LEV_9 ) {
				who->playerY += move;
				who->yLevel++;
			}
		}else {
			if( who->yLevel > Y_LEV_1 ) {
				who->playerY += move;
				who->yLevel--;
			}
		}
	}else {
		if( pme->stage == 1 ) {
			if( move > 0 ) {
				if( who->yLevel < Y_LEV_9 ) {
					who->playerY += move;
					who->yLevel++;
				}
			}else {
				if( who->yLevel > Y_LEV_1 ) {
					who->playerY += move;
					who->yLevel--;
				}
			}
		}else {
			if( move > 0 ) {
				if( who->yLevel < Y_LEV_8 ) {
					who->playerY += move;
					who->yLevel++;
				}
			}else {
				if( who->yLevel > Y_LEV_2 ) {
					who->playerY += move;
					who->yLevel--;
				}
			}
		}
	}
}
static void stoneManager(IApplet * pi)
{
	int i;
	int sum = 0;
	HotBloodApp * pme = (HotBloodApp *)pi;

	for( i = 1;i < 4;i++ ) {
		if( pme->bonus < 30 ) {	
			if( pme->bonusCount > 10 ) {
				if( !pme->ply[i].liveOK ) {
					if( GetRandomMinMax(pi, 0, 100) < 30 ) {
						pme->ply[i].liveOK = TRUE;
						pme->bonus++;
						pme->ply[i].type = 7;
						pme->ply[i].anime = 0;
						pme->ply[i].PlayerState = ES_STONE_ROLL;
						if( GetRandomMinMax(pi, 0, 100) < 50 ) {
							pme->ply[i].currentDir = ES_RIGHT;
							pme->ply[i].playerX = -19;
							pme->ply[i].playerY = pme->O_PlayerY + 46 + 15 * (i - 1);
							switch(i) {
								case 1:
									pme->ply[i].yLevel = Y_LEV_2;
									break;
								case 2:
									pme->ply[i].yLevel = Y_LEV_5;
									break;
								case 3:
									pme->ply[i].yLevel = Y_LEV_8;
									break;
							}
						}else {
							pme->ply[i].currentDir = ES_LEFT;
							pme->ply[i].playerX = pme->m_cxWidth;
							pme->ply[i].playerY = pme->O_PlayerY + 46 + 15 * (i - 1);
							switch(i) {
								case 1:
									pme->ply[i].yLevel = Y_LEV_2;
									break;
								case 2:
									pme->ply[i].yLevel = Y_LEV_5;
									break;
								case 3:
									pme->ply[i].yLevel = Y_LEV_8;
									break;
							}
						}
					}
				}
			}else {
				pme->bonusCount++;
			}
		}else {
			if( !pme->ply[i].liveOK ) sum++;
		}
	}

	if( sum == 3 ) {	// 焊呈胶 胶抛捞瘤 场.
		if( pme->bonusCount == 0 ) {
			if( !pme->endBonus2 ) {
				pme->GameState = GS_BONUS_STAGE_END2;
				pme->endBonus2 = TRUE;
			}else {
				drawGoGo(pi);
				if( pme->howmanyPig >= 21 ) {
					pme->pigLiveOK = TRUE;
					pme->pigX = 87;
					pme->pigYLevel = Y_LEV_5;
				}else if( pme->howmanyPig >= 11 ) {
					pme->pigLiveOK = TRUE;
					pme->pigX = 87;
					pme->pigYLevel = Y_LEV_5;
				}
				checkBonusEnd(pi);
			}
		}else {
			pme->bonusCount--;
		}
	}
}

static void checkBonusEnd(IApplet * pi)
{
	int i;
	HotBloodApp * pme = (HotBloodApp *)pi;

	if( pme->ply[0].boundaryX >= pme->m_cxWidth - 5 ) {
		pme->pigLiveOK = FALSE;
		pme->stopjump = FALSE;
		//焊呈胶 胶抛捞瘤 捞固瘤 秦力.
		for( i = 0;i < 3;i++ ) {
			if( pme->m_pIBonusImg[i] != NULL ) {
				IIMAGE_Release(pme->m_pIBonusImg[i]);
				pme->m_pIBonusImg[i] = NULL;
			}
		}
		//硅版 捞固瘤 秦力.
		if( pme->m_pIBackGround != NULL ) {
			IIMAGE_Release(pme->m_pIBackGround);
			pme->m_pIBackGround = NULL;
		}
		//绊绊 捞固瘤 秦力.
		if( pme->m_pIGoGo != NULL ) {
			IIMAGE_Release(pme->m_pIGoGo);
			pme->m_pIGoGo = NULL;
		}
		//痢荐 捞固瘤 秦力.
		if( pme->m_pIScore != NULL ) {
			IIMAGE_Release(pme->m_pIScore);
			pme->m_pIScore = NULL;
		}

		pme->m_pIBackGround = ISHELL_LoadResImage(pme->a.m_pIShell, HOTBLOOD_RES_FILE, IDB_BACK3_1);

		//芒捍 捞固瘤肺靛.
		for( i = 30;i < 40;i++ ) {
			if( (pme->m_pIPly[i] = ISHELL_LoadResImage(pme->a.m_pIShell, HOTBLOOD_RES_FILE, (int16)(i + 1))) == NULL )		return;
			IIMAGE_SetParm(pme->m_pIPly[i], IPARM_ROP, AEE_RO_TRANSPARENT, 0);
		}

		//痢荐 肺爹.
		if( (pme->m_pIScore = ISHELL_LoadResImage(pme->a.m_pIShell, HOTBLOOD_RES_FILE, IDB_SCORE2)) == NULL )		return;
		IIMAGE_SetParm(pme->m_pIScore, IPARM_ROP, AEE_RO_TRANSPARENT, 0);

		pme->bossPage = 0;
		pme->stage = 3;
		InitPlayer(pi);
		InitStage(pi);
		//pme->GameState = GS_PLAY;
		pme->GameState = GS_START_ST3;
		IDISPLAY_SetColor(pme->a.m_pIDisplay, CLR_USER_BACKGROUND, MAKE_RGB(0, 0, 0));
		IDISPLAY_ClearScreen(pme->a.m_pIDisplay);
		IIMAGE_SetOffset(pme->m_pIBackGround, 0, -(pme->BackGroundY));
		IIMAGE_SetDrawSize(pme->m_pIBackGround, 120, 117);
		IIMAGE_Draw(pme->m_pIBackGround, 0, pme->O_PlayerY);		
	}
}

static void checkStone(IApplet * pi)
{
	int i;
	HotBloodApp * pme = (HotBloodApp *)pi;

	for( i = 1;i < 4;i++ ) {
		if( pme->ply[0].yLevel == pme->ply[i].yLevel ) {
			if( !pme->ply[i].liveOK ) continue;
			if( pme->ply[0].PlayerState != PS_DEFAULT_ATTACK_BY_SPEAR &&
				pme->ply[0].PlayerState != PS_KNOCK_DOWN && pme->ply[i].PlayerState != ES_STONE_RUIN
				&& pme->ply[0].PlayerState != PS_JUMP ) {
				if( pme->ply[0].boundaryX <= pme->ply[i].playerX + 24 &&
					pme->ply[0].boundaryX_R >= pme->ply[i].playerX - 5 && 
					pme->ply[i].PlayerState == ES_STONE_ROLL ) {
					pme->ply[i].anime = 0;
					pme->ply[i].PlayerState = ES_STONE_RUIN;
					pme->ply[0].anime = 0;
					pme->ply[0].PlayerState = PS_KNOCK_DOWN;
				}
			}else if( pme->ply[0].PlayerState == PS_DEFAULT_ATTACK_BY_SPEAR &&
					  pme->ply[i].PlayerState != ES_STONE_RUIN ){
				if( pme->ply[0].currentDir == PS_LEFT ) {
					if( pme->ply[0].boundaryX - 5 < pme->ply[i].playerX + 19 &&
						pme->ply[0].boundaryX_R > pme->ply[i].playerX + 19 ) {
						pme->ply[i].anime = 0;
						pme->ply[i].PlayerState = ES_STONE_RUIN;
					}
				}else {
					if( pme->ply[0].boundaryX + 5 > pme->ply[i].playerX &&
						pme->ply[0].boundaryX_R < pme->ply[i].playerX ) {
						pme->ply[i].anime = 0;
						pme->ply[i].PlayerState = ES_STONE_RUIN;
					}
				}
			}else if( pme->ply[0].PlayerState == PS_JUMP && pme->jumpAttack == 1 ) {
				if( pme->ply[0].currentDir == PS_LEFT ) {
					if( pme->ply[0].boundaryX - 5 < pme->ply[i].playerX + 19 &&
						pme->ply[0].boundaryX_R > pme->ply[i].playerX + 19 ) {
						pme->ply[i].anime = 0;
						pme->ply[i].PlayerState = ES_STONE_RUIN;
					}
				}else {
					if( pme->ply[0].boundaryX + 5 > pme->ply[i].playerX &&
						pme->ply[0].boundaryX_R < pme->ply[i].playerX ) {
						pme->ply[i].anime = 0;

⌨️ 快捷键说明

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