예제 #1
0
void bgm_play() {
	int i;
	if (bgm_state==0) {
		for (i=0;i<BGM_MAX;i++) {
			if (CheckSoundMem(bgm_handle[i])==1) StopSoundMem(bgm_handle[i]) ;
		}
	} else if (bgm_state==1) {
		for (i=0;i<BGM_MAX;i++) {
			if (CheckSoundMem(bgm_handle[i])==1) StopSoundMem(bgm_handle[i]) ;
		}
		PlaySoundMem( bgm_handle[bgm_num] , DX_PLAYTYPE_LOOP ) ;
		bgm_state++;
	} else {
		bgm_state++;
	}
}
예제 #2
0
파일: Music.cpp 프로젝트: ykprogram/rpg
//音楽を流さなくてもこの関数を読み込み推奨
void PlayBGM( int Number ){
	//処理を一回だけ読み込む(なお指定されたnumberの音楽がなければこの処理は前の音楽が流れ続ける)
	if(CheckSoundMem(Music[Number].Music)==0){
		for(int i=0; i<AllBGM; i++ )StopSoundMem( Music[i].Music ) ;
		PlaySoundMem( Music[Number].Music, DX_PLAYTYPE_LOOP ) ;
	}
}
예제 #3
0
void music_play(){
	int i;
	for(i=0;i<SE_MAX;i++){
		if(se_flag[i]==1){
			if(CheckSoundMem(sound_se[i])!=0){
				if(i==8)continue;
				StopSoundMem(sound_se[i]);
			}
			PlaySoundMem(sound_se[i],DX_PLAYTYPE_BACK);
		}
	}
}
예제 #4
0
/* ================================================ */
void SoundManager::PlayBGM( const char *tagBGM, const uint32_t &volume )
{
	uint32_t handle = GetHandleId(tagBGM);
	if(handle == INVALID_VALUE){
		DEBUG_PRINT("【再生しようとしたBGMはロードされていない?】\n");
		return;
	}

	//! 再生中でないか確認
	if(!CheckSoundMem(handle)){
		for(uint32_t i = 0; i < m_vBGM.size(); ++i){
			//! 他のBGMはすべて止める
			StopSoundMem(m_vBGM.at(i).m_soundId);
		}
		SetVolumeSoundMem( volume, handle);
		PlaySoundMem(handle, DX_PLAYTYPE_LOOP);
		m_fadeTag = INVALID_VALUE;
	}
}
예제 #5
0
void SoundManager::StopBGM(bool isFade)
{
	uint32_t playBGMId = INVALID_VALUE;
	for(uint32_t i = 0; i < m_vBGM.size(); ++i){
		if(CheckSoundMem(m_vBGM.at(i).m_soundId)){
			//! BGMは一曲しかならない前提なので再生曲を見つけたら抜ける
			playBGMId = m_vBGM.at(i).m_soundId;
			break;
		}
	}

	if(isFade){
		//! フェードがありならUpdateで処理を行う
		m_fadeTag = playBGMId;
	}
	else{
		StopSoundMem(playBGMId);
	}
}
예제 #6
0
void Player::update(double *shotX, double *shotY, int *weaponNum, int *status , bool *_wasAttacked){


	//キーのチェック
	frame++;

	if (!wasAttackedFlag){	//ダメージ判定中は動けないようにしておく。

		if (CheckHitKey(KEY_INPUT_LEFT) == 1 && _x > 0){
			direction = Left;
			_x -= 4;
			_gCount++;
			if (_gCount >= 10){
				if (_gNum == 3)
					_gNum = 4;
				else
					_gNum = 3;
				_gCount = 0;
			}
		}
		if (CheckHitKey(KEY_INPUT_RIGHT) == 1 && _x < 421){
			direction = Right;
			_x += 4;
			_gCount++;
			if (_gCount >= 10){
				if (_gNum == 0)
					_gNum = 1;
				else
					_gNum = 0;
				_gCount = 0;
			}
		}

		int i = 0;	//一応一発まで設置可能にしておく。

		changing_weapon(i);
		*weaponNum = weapon_n;

		if (CheckHitKey(KEY_INPUT_Z) == 1 && _weapon[i].sf_p == false && GetNowCount() - T_weapons > 300){//設置!
			if (_gNum <= 2)
				_gNum = 2;
			else
				_gNum = 5;

			placing(i, weapon);
			T_weapons = GetNowCount();
		}

		if (CheckHitKey(KEY_INPUT_UP) == 1 && GetNowCount() - T_changing > 500){
			if (weapon_n == 2){
				weapon_n = 0;
			}
			else{
				weapon_n++;
			}
			flag_changed = true;
			T_changing = GetNowCount();
		}


		_weapon[i].weapon_B->setWeaponStatus(*status);

		if (_weapon[i].sf_p == true){
			_weapon[i].weapon_B->update();
			*shotX = _weapon[i].weapon_B->getX();
			*shotY = _weapon[i].weapon_B->getY();
			_weapon[i].weapon_B->checkForPlayer(_weapon[i].sf_p);	//お試し程度で実装
			_pipe[i].pipe->checkForPlayer(_weapon[i].sf_p);
		}
		*status = _weapon[i].weapon_B->getWeaponStatus();
	}


	if (*_wasAttacked){
		if (!CheckSoundMem(DamegeSound)){
			PlaySoundMem(DamegeSound, DX_PLAYTYPE_BACK);
		}
		*_wasAttacked = false;
		wasAttackedFlag = true;
	}

	if (wasAttackedFlag){
		if (wasAttackedFrame >= 50){
			wasAttackedFrame = 0;
			wasAttackedFlag = false;
			_live--;
			_x = 0;
			_y = 518;
		}
		else{
			++wasAttackedFrame;
		}
	}
}
예제 #7
0
GameResult * GameRoad::update(void)
{
    int c = 0;	//該当ブロックカウント
    int i;

    RO_LEVEL *lv = &levels[now_level];
    GetHitKeyStateAll( Key ) ;

    switch(cond) {
    case RO_GAMEOVER:
        // キー待ち後遷移
        if(Key[KEY_INPUT_Y] == 1) {
            init(rd_g_res);
        }
        if(Key[KEY_INPUT_N] == 1) { // 終了
            ro_g_res.end_status(0);
            return &ro_g_res;
        }
        break;
    case RO_END:
        ro_g_res.end_status(1);
        return &ro_g_res; // 平常終了

    // 初期化
    case RO_INI: {

        DataLoad();
        cond = RO_GAME_S;

        for(i=0; i<RO_Y_CNT; i++) {
            for(int j=0; j<RO_X_CNT; j++) {
                roads[i][j] = 0;
                roads_se[i][j] = 0;
            }
        }
        PlaySoundMem(se_num[RO_SE_START] , DX_PLAYTYPE_BACK);
        break;
    }
    // ゲーム開始
    case RO_GAME_S:

        if(CheckSoundMem(se_num[RO_SE_START]) != 1) {
            cond = RO_GAME;
            PlaySoundMem(se_num[bgms[stage]] , DX_PLAYTYPE_LOOP);
        }
        break;
    // ゲーム中
    case RO_GAME:
        if(clearCheck() > -1) {
            cond = RO_CLEAR;
            BGMStop();
            break;
        }

        time++;
        // レベルチェック
        lv++;
        if(lv->road != -1 && lv->road <= all_road) {
            now_level++;
            lv++;
        } else {
            lv--;
        }

        move_time++;

        if(move_time >= 6) {
            move_time = 0;
            // 落下
            c = 0;
            if(block.ok == 1) {
                block.x -= lv->speed;
            }
        }

        // 新規ブロック生成
        newBlock();

        // 方向キー
        // 先へ
        if(Key[KEY_INPUT_LEFT] > 0) {
            move_time++;
        }
        // 停滞
        if(Key[KEY_INPUT_RIGHT] > 0) {
            move_time--;
        }
        // 位置移動(上)
        if(Key[KEY_INPUT_UP] == 1) {
            if(!(once_btn & 1)) {
                block.k--;
                if(block.k < 0) {
                    block.k = 0;
                }
                once_btn |= 1;
            }
        } else {
            once_btn &= ~1;
        }

        // 位置移動(下)
        if(Key[KEY_INPUT_DOWN] == 1) {
            if(!(once_btn & 2)) {
                block.k++;
                if(block.k > RO_Y_CNT-1) {
                    block.k = RO_Y_CNT-1;
                }
                once_btn |= 2;
            }

        } else {
            once_btn &= ~2;
        }
        // 向き変更キー
        if(Key[KEY_INPUT_RETURN] == 1 || Key[KEY_INPUT_Z] == 1) {
            if(!(once_btn & 4)) {
                block.col++;
                if(block.col > 2) {
                    block.col = 0;
                }
            }
            once_btn |= 4;
        } else {
            once_btn &= ~4;
        }

        roadSetCheck();

        break;

    // game clear
    case RO_CLEAR:
        if(ch_mode == 1) {
            chMoveSet();
            chMove();
        } else {
            PlaySoundMem(se_num[RO_SE_CLEAR] , DX_PLAYTYPE_BACK);
        }
        ch_mode = 1;
        break;

    }

    return 0;
}
예제 #8
0
void Enemy::PlaySE(int dist){
	if(CheckSoundMem(dist)==1){StopSoundMem(dist);}
	PlaySoundMem(dist,DX_PLAYTYPE_BACK);
}
void Select()
{
	DrawBox(0, 0, Screen_X, Screen_Y, Status.White, TRUE);

	DrawGraph(Gp.Select_X, Gp.Select_Y, Graph.Select, TRUE);
	DrawExtendGraph(Gp.CentrJacket_X, Gp.CentrJacket_Y, Gp.CentrJacket_X + 500, Gp.CentrJacket_Y + 500, Music[Global.TargetMusic].Jacket, TRUE);

	if (CheckSoundMem(Music[Global.TargetMusic].MusicData) != 1){
		PlaySoundMem(Music[Global.TargetMusic].MusicData, DX_PLAYTYPE_LOOP);
	}

	if (Global.TargetMusic > 0){
		DrawExtendGraph(Gp.LeftJacket_X, Gp.LeftJacket_Y, Gp.LeftJacket_X + 350,
			Gp.LeftJacket_Y + 350, Music[Global.TargetMusic - 1].Jacket, TRUE);
	}
	else{
		DrawExtendGraph(Gp.LeftJacket_X, Gp.LeftJacket_Y, Gp.LeftJacket_X + 350,
			Gp.LeftJacket_Y + 350, Music[Global.MusicCnt - 1].Jacket, TRUE);
	}
	if (Global.TargetMusic < Global.MusicCnt - 1){
		DrawExtendGraph(Gp.RightJacket_X, Gp.RightJacket_Y, Gp.RightJacket_X + 350,
			Gp.RightJacket_Y + 350, Music[Global.TargetMusic + 1].Jacket, TRUE);
	}
	else{
		DrawExtendGraph(Gp.RightJacket_X, Gp.RightJacket_Y, Gp.RightJacket_X + 350,
			Gp.RightJacket_Y + 350, Music[0].Jacket, TRUE);
	}

	if (Global.Key[KEY_INPUT_V] == 1 || Global.Key[KEY_INPUT_F] == 1 ||
		Global.Key[KEY_INPUT_R] == 1 || Global.Key[KEY_INPUT_4] == 1){
		PlaySoundMem(Sound.Push, DX_PLAYTYPE_BACK);
		StopSoundMem(Music[Global.TargetMusic].MusicData);
		if (Global.TargetMusic > 0){
			Global.TargetMusic--;
		}
		else{
			Global.TargetMusic = Global.MusicCnt - 1;
		}
		PlaySoundMem(Music[Global.TargetMusic].MusicData, DX_PLAYTYPE_LOOP);
	}
	if (Global.Key[KEY_INPUT_N] == 1 || Global.Key[KEY_INPUT_J] == 1 ||
		Global.Key[KEY_INPUT_I] == 1 || Global.Key[KEY_INPUT_9] == 1){
		PlaySoundMem(Sound.Push, DX_PLAYTYPE_BACK);
		StopSoundMem(Music[Global.TargetMusic].MusicData);
		if (Global.TargetMusic < Global.MusicCnt - 1){
			Global.TargetMusic++;
		}
		else{
			Global.TargetMusic = 0;
		}
		PlaySoundMem(Music[Global.TargetMusic].MusicData, DX_PLAYTYPE_LOOP);
	}

	Global.SelectCounter++;

	if (Global.Key[KEY_INPUT_F1] == 1 || Global.Key[KEY_INPUT_B] == 1){
		PlaySoundMem(Sound.Push, DX_PLAYTYPE_NORMAL);
		Flag.Select = 2;
		Global.SelectCounter = 0;
		Global.TargetDiff = 1;
		Global.Key[KEY_INPUT_F1] = 0;
		Global.Key[KEY_INPUT_B] = 0;
	}
}
예제 #10
0
파일: StageDig.cpp 프로젝트: rurudo/moguru
void StageDig::Update(void)
{
	// モグルのドリルで敵にダメージ
	UnitManager &unitManager = UnitManager::GetInstance();
	VECTOR position;
	position.x = 7.5f;
	position.y = 5.0f;
	UnitBase* unit = unitManager.GetNearUnit( position, 1.0f, true );
	if( unit != NULL )
	{
		VECTOR damageType;
		unit->AddDamage(1000, UnitBase::DAMAGETYPE_NORMAL, damageType, NULL );
	}
	// ブロック削り判定
	BlockManager &blockManager = BlockManager::GetInstance();
	BlockBase* base = blockManager.GetBlock( position.x, position.y );
	// 指定地点が空なら
	if( base == NULL || base->m_ID == BLOCK_WATER || base->m_ID == BLOCK_FIRE)
	{
		float speed = 0.06f;
		if( base )
		{
			if(base->m_ID == BLOCK_WATER )
			{
				speed = 0.03f;
			}
			else if( base->m_ID == BLOCK_FIRE && GameInput::GetInstance().GetFrame() % 10 == 0)
			{
				DataManager::GetInstance().m_MogllStatus.life -= EquipmentFunction_05(1);
			}
		}
		float fallValue = EquipmentFunction_40( speed );
		blockManager.AddDepth( fallValue );
		DataManager &data = DataManager::GetInstance();
		// 記録更新したら代入
		int depth = static_cast<int>(blockManager.GetDepth() + data.m_MogllStatus.position.y * 600.0f / 40.0f);
		if( data.m_SaveData.stageDepth[ data.m_SceneInt["StageNo"] ] < depth )
		{
			data.m_SaveData.stageDepth[ data.m_SceneInt["StageNo"] ] = depth;
		}
		//UnitManager::GetInstance().MoveUp( fallValue );
	}
	else if( EquipmentFunction_35( GameInput::GetInstance().GetFrame() ) )
	{
		DataManager &data = DataManager::GetInstance();
		// ブロックの削りダメージ
		int damage = 1;
		int mogllDamage = EquipmentFunction_11( data.m_SystemData.block[ base->m_ID - 1 ].damage );
		m_DigPoint += mogllDamage;
		if( m_DigPoint >= 100 )
		{
			data.m_MogllStatus.life -= m_DigPoint / 100;
			m_DigPoint = m_DigPoint % 100;
		}
		base->m_Life -= damage;
	}
	//--------------------------------------------------------------	笹井
	//今いるブロックをチェック
	base = blockManager.GetBlock( position.x, position.y );
	if(base)
	{
		if(base->m_ID == BLOCK_WATER )
		{
			m_SEWaterCnt--;
			if( m_SEWaterCnt <= 0 &&
				CheckSoundMem(DataManager::GetInstance().Get( DataManager::SoundSE57 )) == 0)
			{
				PlaySoundMem( DataManager::GetInstance().Get( DataManager::SoundSE57 ), DX_PLAYTYPE_BACK);
				m_SEWaterCnt = 90;
			}
		}
		else if( base->m_ID == BLOCK_FIRE)
		{
			if(CheckSoundMem(DataManager::GetInstance().Get( DataManager::SoundSE56 )) == 0)
				PlaySoundMem( DataManager::GetInstance().Get( DataManager::SoundSE56 ), DX_PLAYTYPE_BACK);
		}
		if(base->m_ID != BLOCK_WATER )
			m_SEWaterCnt = 0;
	}
}