Beispiel #1
0
////////////////////////////////////////////////////////////////////////////////
// main
//virtual
eSysStateReturn GaMainGameState::main()
{
	BcReal Tick = SysKernel::pImpl()->getFrameTime();

	spawnKill();

	// Update entities.
	/*
	for( BcU32 Idx = 0; Idx < Entities_.size(); ++Idx )
	{
		GaGameComponent* pEntity = Entities_[ Idx ];
		pEntity->update( Tick );
	}
	//*/

	// Check for win/lose condition.
	BcReal MaxFoodHealth = 0.0f;
	BcReal TotalFoodHealth = 0.0f;
	for( BcU32 Idx = 0; Idx < Entities_.size(); ++Idx )
	{
		GaFoodComponentRef pFood( Entities_[ Idx ] );

		if( pFood != NULL )
		{
			MaxFoodHealth += 1.0f;			
			TotalFoodHealth += pFood->getHealthFraction();
		}
	}

	// Cache for rendering.
	FoodHealth_ = TotalFoodHealth / MaxFoodHealth;

	// If more than half of the food is deaded, we lose.
	if( FoodHealth_ < 0.5f )
	{
		doLose();
	}

	GaSwarmComponent* pSwarm = getEntity< GaSwarmComponent >( 0 );

	// If the swarm is dead, you win.
	if( pSwarm->isAlive() == BcFalse )
	{
		doWin();
	}

	return sysSR_CONTINUE;
}
Beispiel #2
0
BOOL doMove(HWND hwnd, BOXSTATE *man, BOXSTATE *next, BOXSTATE *dest, UINT vk)
{
	BOOL bManMove = FALSE;
	BOOL bBoxMove = FALSE;
	BOOL bWin = FALSE;
	RECT rc;

	switch (*next) {
	case FLOOR:
	case DEST:
		bManMove = TRUE;
		break;
	case BOXIN:
	case BOXOUT:
		switch (*dest) {
		case FLOOR:
		case DEST:
			bBoxMove = TRUE;
			bManMove = TRUE;
			break;
		}
	}

	if (bBoxMove == TRUE) {
		CheckUndoMenu(hwnd, TRUE);
		CopyMemory(mapu, map, sizeof(map));
		manxu = manx;
		manyu = many;
		ShowStepNumber(++nStep);
	}

	if (bBoxMove == TRUE) {
		if (*dest == DEST)
			*dest = BOXIN;
		else
			*dest = BOXOUT;
		if (*next == BOXIN)
			*next = DEST;
		else
			*next = FLOOR;
	}

	if (bManMove == TRUE) {
		if (*next == DEST)
			switch (vk) {
			case VK_UP:
				if (*man == MANBACK1 || *man == MANBACK1AT)
					*next = MANBACK2AT;
				else
					*next = MANBACK1AT;
				many--;
				break;
			case VK_DOWN:
				if (*man == MANFRONT1 || *man == MANFRONT1AT)
					*next = MANFRONT2AT;
				else
					*next = MANFRONT1AT;
				many++;
				break;
			case VK_LEFT:
				if (*man == MANLEFT1 || *man == MANLEFT1AT)
					*next = MANLEFT2AT;
				else
					*next = MANLEFT1AT;
				manx--;
				break;
			case VK_RIGHT:
				if (*man == MANRIGHT1 || *man == MANRIGHT1AT)
					*next = MANRIGHT2AT;
				else
					*next = MANRIGHT1AT;
				manx++;
				break;
			}
		else
			switch (vk) {
			case VK_UP:
				if (*man == MANBACK1 || *man == MANBACK1AT)
					*next = MANBACK2;
				else
					*next = MANBACK1;
				many--;
				break;
			case VK_DOWN:
				if (*man == MANFRONT1 || *man == MANFRONT1AT)
					*next = MANFRONT2;
				else
					*next = MANFRONT1;
				many++;
				break;
			case VK_LEFT:
				if (*man == MANLEFT1 || *man == MANLEFT1AT)
					*next = MANLEFT2;
				else
					*next = MANLEFT1;
				manx--;
				break;
			case VK_RIGHT:
				if (*man == MANRIGHT1 || *man == MANRIGHT1AT)
					*next = MANRIGHT2;
				else
					*next = MANRIGHT1;
				manx++;
				break;
			}
		switch (*man) {
		case MANFRONT1:
		case MANBACK1:
		case MANLEFT1:
		case MANRIGHT1:
		case MANFRONT2:
		case MANBACK2:
		case MANLEFT2:
		case MANRIGHT2:
			*man = FLOOR;
			break;
		case MANFRONT1AT:
		case MANBACK1AT:
		case MANLEFT1AT:
		case MANRIGHT1AT:
		case MANFRONT2AT:
		case MANBACK2AT:
		case MANLEFT2AT:
		case MANRIGHT2AT:
			*man = DEST;
			break;
		}
	} else
		switch (*man) {
		case MANFRONT1:
		case MANBACK1:
		case MANLEFT1:
		case MANRIGHT1:
		case MANFRONT2:
		case MANBACK2:
		case MANLEFT2:
		case MANRIGHT2:
			switch (vk) {
			case VK_UP:
				*man = MANBACK1;
				break;
			case VK_DOWN:
				*man = MANFRONT1;
				break;
			case VK_LEFT:
				*man = MANLEFT1;
				break;
			case VK_RIGHT:
				*man = MANRIGHT1;
				break;
			}
			break;
		case MANFRONT1AT:
		case MANBACK1AT:
		case MANLEFT1AT:
		case MANRIGHT1AT:
		case MANFRONT2AT:
		case MANBACK2AT:
		case MANLEFT2AT:
		case MANRIGHT2AT:
			switch (vk) {
			case VK_UP:
				*man = MANBACK1AT;
				break;
			case VK_DOWN:
				*man = MANFRONT1AT;
				break;
			case VK_LEFT:
				*man = MANLEFT1AT;
				break;
			case VK_RIGHT:
				*man = MANRIGHT1AT;
				break;
			}
			break;
		}

	if (bManMove == TRUE)
		if (bBoxMove == TRUE) {
			switch (vk) {
			case VK_UP:
			case VK_DOWN:
				SetRect(&rc, manx * BOXCX + sx, (many - 1) * BOXCY + sy, (manx + 1) * BOXCX + sx, (many + 2) * BOXCY + sy);
				break;
			case VK_LEFT:
			case VK_RIGHT:
				SetRect(&rc, (manx - 1) * BOXCX + sx, many * BOXCY + sy, (manx + 2) * BOXCX + sx, (many + 1) * BOXCY + sy);
				break;
			}
		} else {
			switch (vk) {
			case VK_UP:
				SetRect(&rc, manx * BOXCX + sx, many * BOXCY + sy, (manx + 1) * BOXCX + sx, (many + 2) * BOXCY + sy);
				break;
			case VK_DOWN:
				SetRect(&rc, manx * BOXCX + sx, (many - 1) * BOXCY + sy, (manx + 1) * BOXCX + sx, (many + 1) * BOXCY + sy);
				break;
			case VK_LEFT:
				SetRect(&rc, manx * BOXCX + sx, many * BOXCY + sy, (manx + 2) * BOXCX + sx, (many + 1) * BOXCY + sy);
				break;
			case VK_RIGHT:
				SetRect(&rc, (manx - 1) * BOXCX + sx, many * BOXCY + sy, (manx + 1) * BOXCX + sx, (many + 1) * BOXCY + sy);
				break;
			}
		}
	else
		SetRect(&rc, manx * BOXCX + sx, many * BOXCY + sy, (manx + 1) * BOXCX + sx, (many + 1) * BOXCY + sy);
	InvalidateRect(hwnd, &rc, TRUE);

	if (bBoxMove == TRUE)
		bWin = doWin(hwnd);
	return bWin;
}