Example #1
0
bool Enemy::Move()
{
	FloatRect enemy = GetGlobalBounds();
	if(status == DEAD && enemy.top < 721) sprite.move(0,3*speed);
	else if(status == GO_RIGHT && (enemy.left + enemy.width)< startx + movement) GoRight();
	else if(status == GO_RIGHT && (enemy.left + enemy.width)>= startx + movement) GoLeft();
	else if(status == GO_LEFT && enemy.left > startx) GoLeft();
	else if(status == GO_LEFT && enemy.left <= startx) GoRight();
	else return false;
	return true;
}
Example #2
0
void PlayerControl( int player )
{
	int a = player, b = player;
	bool moved = false;

	if( players == 1 )
	{
		a = 0;
		b = 1;
	}

	if( hitKey[a].left || hitKey[b].left )
	{
		if( GameTickCount() >= timeMove[player] )
		{
			timeMove[player] += 12;
			if( CanGoLeft( player ) )
				GoLeft( player );
		}

		moved = true;
	}

	if( hitKey[a].right || hitKey[b].right )
	{
		if( GameTickCount() >= timeMove[player] )
		{
			timeMove[player] += 12;
			if( CanGoRight( player ) )
				GoRight( player );
		}

		moved = true;
	}

	if( !moved ) timeMove[player] = GameTickCount( );

	if( hitKey[a].rotate == 1 || hitKey[b].rotate == 1 )
	{
		if( CanRotate( player ) )
			DoRotate( player );
	}

	if( hitKey[a].drop == 1 || hitKey[b].drop == 1 )
	{
		DoDrop( player );
	}

	if( hitKey[a].drop == 0 && hitKey[b].drop == 0 )
	{
		StopDrop( player );
	}
}
Example #3
0
void AIControl( int player )
{
	if( timeAI[player] > GameTickCount() )
		return;

	timeAI[player] += moveQuick[player]? character[player].speedRush:
	                                     character[player].speedNormal;

	switch( RandomBefore( 2 ) )
	{
		case 0:
			if( destinationR[player] != blobR[player] )
			{
				if( CanRotate(player) )
				{
					DoRotate( player );
				}
			}
			break;

		case 1:
			if( destinationX[player] != blobX[player] )
			{
				if( destinationX[player] > blobX[player] )
				{
					if( CanGoRight( player ) )
						GoRight( player );
				}
				else
				{
					if( CanGoLeft( player ) )
						GoLeft( player );
				}
			}
			break;
	}

	if( destinationX[player] == blobX[player] &&
		destinationR[player] == blobR[player] &&
		RandomBefore( 100 ) < character[player].intellect )
	{
		DoDrop( player );
	}
}
Example #4
0
void Entity::SearchWay(double& next_x, double& next_y ){
		    
  for(int j=0; j<=3; ++j){
      roll_die();
  }		    
	int tmp=roll_die();
	
	if(tmp==1){
	   GoRight();
	}
	else if(tmp==2){
	   GoUp();
	}
	else if(tmp==3){
	  GoLeft();
	}
	else if(tmp==4){
	  GoDown();
	}  
}
Example #5
0
void Grapple::Refresh()
{
  if (!attached)
    return ;

  if (move_left_pressed && !move_right_pressed) {
    GoLeft();
  } else if (move_right_pressed && !move_left_pressed) {
    GoRight();
  }

  if (move_up_pressed && !move_down_pressed) {
    GoUp();
  } else if (move_down_pressed && !move_up_pressed) {
    GoDown();
  }

  ActiveCharacter().SetMovement("ninja-rope");
  ActiveCharacter().UpdatePosition();
}
Example #6
0
static PRESULT tetris_key_proc(UINT32 vkey, UINT8 key_repeat_cnt, UINT8 key_status)
{
    	UINT8   back_saved;
	PRESULT ret = PROC_LOOP;
	if (key_status == PAN_KEY_PRESSED)
	{
		switch (vkey)
		{
			case V_KEY_UP:
				ChangeShape(&x, &y, &CurrentShape, &Status);
				break;

			case V_KEY_DOWN:
				GoDown(&x, &y, &CurrentShape, &Status);
				if (key_repeat_cnt == 0)
				{
				/* speed up drop speed */
				osal_timer_set(GAME_CYCLIC_ID, 100);
				speed_up = TRUE;
				}
				break;

			case V_KEY_LEFT: 
				GoLeft(&x, &y, &CurrentShape, &Status);
				break;

			case V_KEY_RIGHT: 
				GoRight(&x, &y, &CurrentShape, &Status);
				break;

			case V_KEY_ENTER:
				if (playing == TRUE)
				{
					osal_timer_activate(GAME_CYCLIC_ID, FALSE);

					win_compopup_init(WIN_POPUP_TYPE_OK);
					win_compopup_set_frame(GET_MID_L(170), GET_MID_T(130), 170, 130);                    
					win_compopup_set_msg(NULL, NULL, RS_PAUSE);
					win_compopup_open_ext(&back_saved);

					osal_timer_activate(GAME_CYCLIC_ID, TRUE);
				}
				break;

			case V_KEY_MENU:
			case V_KEY_EXIT:
				if (playing == TRUE)
				{
					osal_timer_activate(GAME_CYCLIC_ID, FALSE);

					win_compopup_init(WIN_POPUP_TYPE_OKNO);
					//win_compopup_set_frame(GET_MID_L(250), GET_MID_T(130), 250, 130);
					win_compopup_set_frame(GET_MID_L(250), GET_MID_T(130), 320, 130);
					win_compopup_set_msg(NULL, NULL, RS_GAME_MSG_DO_YOU_QUIT);
					if (win_compopup_open_ext(&back_saved) == WIN_POP_CHOICE_YES)
					{
						playing = FALSE;

						tetris_init();
 						update_status(Speed, Erasered, TotalMark);
 						tetris_redraw_main();
 						tetris_redraw_preview();

						OSD_SetAttr((POBJECT_HEAD)&txt_start, C_ATTR_ACTIVE);
						OSD_ChangeFocus((POBJECT_HEAD)&game_con, 1, \
						C_UPDATE_FOCUS | C_DRAW_SIGN_EVN_FLG);
					}
					else
					{
						osal_timer_activate(GAME_CYCLIC_ID, TRUE);
					}
				}
				break;
			default:
				ret = PROC_PASS;
		}
	}
	else if (key_status == PAN_KEY_RELEASE)
	{
		normal_speed();
	}

	return ret;
}
Example #7
0
 Walker & LineByLineWalker::operator -- ()
 {
     GoLeft();
     return *this;
 }
Example #8
0
void AutoControl( int player )
{
	if( autoPattern )
	{
		switch( autoPattern->command )
		{
			case kMessage:
				StartBalloon( autoPattern->message );
				autoPattern++;
				break;

			case kIdleTicks:
				if( !tutorialTime )
				{
					tutorialTime = GameTickCount() + autoPattern->d1;
				}
				else
				{
					if( GameTickCount() >= tutorialTime )
					{
						tutorialTime = 0;
						autoPattern++;
					}
				}
				break;

			case kRetrieve:
				if( role[player] == kWaitForRetrieval )
				{
					nextA[player] = abs( autoPattern->d1 );
					nextB[player] = abs( autoPattern->d2 );
					nextM[player] = (autoPattern->d1 < 0);
					nextG[player] = (autoPattern->d1 == kBombBottom) && (autoPattern->d2 == kBombTop);

					if( !nextG[player] )
					{
						nextA[player] = pieceMap[ nextA[player] ];
						nextB[player] = pieceMap[ nextB[player] ];
					}

					role[player]  = kRetrieveBlobs;
					autoPattern++;
				}
				break;

			case kPosition:
				if( (role[player] != kFalling) || (blobX[player] == autoPattern->d1) )
				{
					autoPattern++;
				}
				else if( GameTickCount() >= timeMove[player] )
				{
					timeMove[player] = GameTickCount() + 12;

					if( blobX[player] > autoPattern->d1 )
					{
						if( CanGoLeft( player ) )
							GoLeft( player );
					}
					else
					{
						if( CanGoRight( player ) )
							GoRight( player );
					}
				}
				break;

			case kSpin:
				if( role[player] != kFalling )
				{
					autoPattern++;
				}
				else if( CanRotate( player ) )
				{
					DoRotate( player );
					autoPattern++;
				}
				break;

			case kBlockUntilLand:
				if( role[player] != kFalling )
				{
					autoPattern++;
				}
				break;

			case kBlockUntilDrop:
				if( !dropping[player] ) DoDrop( player );

				if( role[player] != kFalling )
				{
					autoPattern++;
				}
				break;

			case kPunish:
				if( role[player] == kWaitForRetrieval )
				{
					lockGrays[player] = autoPattern->d1;
					SetupGrays( player );
					blobTime[player] = GameTickCount( );
					role[player] = kDropGrays;

					autoPattern++;
				}
				break;

			case kComplete:
				EndTutorial( );
				break;

			case kBlockUntilComplete:
				if( role[player] == kWaitForRetrieval )
				{
					autoPattern++;
				}
				break;
		}
	}
}
Example #9
0
void DoRotate( int player )
{
	MBoolean possible;
	
	EraseSpriteBlobs( player );
	
	blobR[player] = ( blobR[player] + 1 ) % 4;
	possible = CanMoveDirection( player, 0, halfway[player]? 1: 0 );
	StartTweak( player, 0, 1, 0 ); // only rotates clockwise
	
	if( !possible )
	{
		if( blobR[player] == downRotate )
		{
			if( halfway[player] )
				halfway[player] = false;
			else
				blobY[player]--;
				
			if( ++blobSpin[player] >= 4 )
			{
				blobTime[player] = animTime[player] = GameTickCount( );
				role[player] = kLockdownBlobs;
				anim[player] = 0;
				PlayStereoFrequency( player, kPlace, player );
			}
		}
		
		if( blobR[player] == leftRotate )
		{
			if( CanGoRight(player) )
				GoRight( player );
			else
			{
				blobR[player]++;
				StartTweak( player, 0, 2, 0 );
			}
		}
		
		if( blobR[player] == rightRotate  )
		{
			if( CanGoLeft(player) )
				GoLeft( player );
			else
			{
				blobR[player]++;
				StartTweak( player, 0, 2, 0 );
				
				if( !CanMoveDirection( player, 0, halfway[player]? 1: 0 ) )
				{
					if( halfway[player] )
						halfway[player] = false;
					else
						blobY[player]--;

					if( ++blobSpin[player] >= 4 )
					{
						blobTime[player] = animTime[player] = GameTickCount( );
						role[player] = kLockdownBlobs;
						anim[player] = 0;
						PlayStereoFrequency( player, kPlace, player );
					}
				}
			}
		}
	}
	
	DrawSpriteBlobs( player, kNoSuction );
	
	PlayStereo( player, kRotate );
}
Example #10
0
/**
* delete node for key
* @param adress after node.
* @return (true if node has been deleted) else return false
*/
bool BinaryTree::delNode(float value)
{
	if (isEmpty())
	{
		return false;
	}
	node **localRoot = nullptr;
	node *afterRoot=nullptr;
	try
	{
		localRoot = findParentBykey(value);
		if (*localRoot == nullptr)
		{
			throw true;
		}
	}
	catch (int)
	{
		return false;
	}


	if ((*localRoot)->right == nullptr)
	{
		if ((*localRoot)->left != nullptr)
		{
			*localRoot = (*localRoot)->left;
			return true;
		}
		else
		{
			afterRoot = *localRoot;
			*localRoot = nullptr;
			delete afterRoot;
			return true;
			
		}
	}
	else
	{
		if ((*localRoot)->right->left == nullptr)
		{
			afterRoot = *localRoot;
			*localRoot = (*localRoot)->right;
			(*localRoot)->left = afterRoot->left;
			delete afterRoot;
			return true;
		}
		else
		{
			afterRoot = *localRoot;
			*localRoot = GoLeft((*localRoot)->right);
			(*localRoot)->left = afterRoot->left;
			(*localRoot)->right = afterRoot->right;
			delete afterRoot;
			return true;
		}
	}
	
	
	return false;
}
Example #11
0
int Dungeon::Reaction()
{
	if (!menuflag)
	{
		//マップの踏破
		if (!(savedata->map_open_flag[floors - 1][pos_z][pos_x]))
		{
			savedata->map_open_flag[floors - 1][pos_z][pos_x] = 1;
		}

		if (!state)
		{

			if (Key_Input::buff_time[KEY_INPUT_LEFT]) //stateで管理しているため%X==1が必要ない
			{
				player->addWalkCount(1);
				state = 4;
			}
			else if (Key_Input::buff_time[KEY_INPUT_RIGHT])
			{
				player->addWalkCount(1);
				state = 2;
			}
			else if (Key_Input::buff_time[KEY_INPUT_DOWN])
			{
				player->addWalkCount(1);
				state = 3;
			}
			else if (Key_Input::buff_time[KEY_INPUT_A])
			{
				for (int i = 0; !i; i++) //隣が壁なら移動しない
				{
					if (muki == 0 && (map_data[pos_z][pos_x] & 8))
					{
						break;
					}
					if (muki == 1 && (map_data[pos_z][pos_x] & 1))
					{
						break;
					}
					if (muki == 2 && (map_data[pos_z][pos_x] & 2))
					{
						break;
					}
					if (muki == 3 && (map_data[pos_z][pos_x] & 4))
					{
						break;
					}
					state = 6;
				}
			}
			else if (Key_Input::buff_time[KEY_INPUT_D])
			{
				for (int i = 0; !i; i++) //隣が壁なら移動しない
				{
					if (muki == 0 && (map_data[pos_z][pos_x] & 2))
					{
						break;
					}
					if (muki == 1 && (map_data[pos_z][pos_x] & 4))
					{
						break;
					}
					if (muki == 2 && (map_data[pos_z][pos_x] & 8))
					{
						break;
					}
					if (muki == 3 && (map_data[pos_z][pos_x] & 1))
					{
						break;
					}
					state = 5;
				}
			}
			else if (Key_Input::buff_time[KEY_INPUT_UP])
			{
				player->addWalkCount(1);
				for (int i = 0; !i; i++)
				{
					if (muki == 0 && (map_data[pos_z][pos_x] & 1))
					{
						break;
					}
					if (muki == 1 && (map_data[pos_z][pos_x] & 2))
					{
						break;
					}
					if (muki == 2 && (map_data[pos_z][pos_x] & 4))
					{
						break;
					}
					if (muki == 3 && (map_data[pos_z][pos_x] & 8))
					{
						break;
					}
					state = 1;
				}
			}
			else if (Key_Input::buff_time[KEY_INPUT_X] == 1)
			{
				menuflag = 1;
				//minimap_flag = !minimap_flag; //現状は表示/非表示のみ
			}
		}

		if (state)
		{
			switch (state)
			{
			case 1: //前進
				GoForward();
				break;

				//右転回
			case 2:
				if (time < 50)
				{
					time += option->revolve_speed;
					Return_right();
				}
				else
				{
					time = 0;
					state = 0;
					revflag++;
				}
				break;

			case 3: //下向き。2倍速で2回右転回
				ReturnBack();
				break;

				//左転回
			case 4:
				ReturnLeft();
				break;

				//Dボタン押し下時
			case 5:
				GoRight();
				break;

				//Aボタン押し下時
			case 6:
				GoLeft();
				break;

				//後退
			case 8:
				GoBack();
				break;

			default:
				break;

			}
			//歩き終わった場合のチェック
			if (!state)
			{
				if (!revflag)
				{
					state = 0;
				}
				else
				{
					revflag = 0;
				}
			}
		}
	}
	else
	{
		menu->Reaction();
	}
	return 0;
}