Пример #1
0
void Ship::move() {
	if (comeBack) comeBackControl();
	else moveControl();
	if (muteki) {
		mutekiCnt++;
		if (mutekiCnt > 200) muteki = false;
	}

	//fire
	if ((Input::KeyZ.pressed || gm->getController()->buttonX.pressed) && cnt % 3 == 0) {
		auto shots = gm->getShots();
		shots->create(pos + Vec2(-10.0, 0.0), { 0.0, -30.0 });
		shots->create(pos + Vec2(10.0, 0.0), { 0.0, -30.0 });
		if (slowMove) {
			shots->create(pos + Vec2(-15.0, 0.0), { 0.0, -30.0 });
			shots->create(pos + Vec2(15.0, 0.0), { 0.0, -30.0 });
		} else {
			shots->create(pos + Vec2(-10.0, 0.0), { -5.0, -30.0 });
			shots->create(pos + Vec2(10.0, 0.0), { 5.0, -30.0 });
		}
		SoundAsset(L"shoot").playMulti();
	}
	if (Input::KeySemicolon.clicked) life++;
	if (Input::KeyMinus.clicked) life--;
	cnt++;
}
Пример #2
0
// 毎フレーム updateAndDraw() で呼ばれる
void Rule::update()
{

	Graphics::SetBackground(HSV(System::FrameCount(),0.6,0.9));


	for (int i = 0; i < 40; i++){
		switch (i % 4){
		case 0:
			cir[i].rightmove();
			break;
		case 1:
			cir[i].leftmove();
			break;
		case 2:
			cir[i].sinmove();
			break;
		case 3:
			cir[i].sinmove2();
			break;
		default:
			break;
		}
		cir[i].update();
		if (cir[i].getE())click.drawCenter(L"click", { cir[i].getX(), cir[i].getY() }, Palette::White);
	}

	button_m.update();
	
	if (button_m.isClicked()){
		SoundAsset(bgm_m).stop();
		changeScene(L"Start");
	}

	static int frameCounter = 0;
	if(frameCounter >= 60 * 90) {
		frameCounter = 0;
		SoundAsset(bgm_m).pause(1000);
		changeScene(L"Start", 1000);
		return;
	} else {
		++frameCounter;
	}
}
Пример #3
0
void Ship::destory() {
	if (muteki) return;
	pos = { Window::Width() / 2, Window::Height() + rad };
	life--;
	SoundAsset(L"damage").playMulti();
	gm->getBullets()->clear();
	comeBack = true;
	comeBackCnt = 0;
	muteki = true;
	mutekiCnt = 0;
	if (life < 0) gm->startGameOver();
}
Пример #4
0
// クラスの初期化時に一度だけ呼ばれる(省略可)
void Rule::init()
{
	button_m.show();
	title = Font(70);
	subtitle = Font(40);
	text = Font(20);
	mainimage = Texture(L"Asset/Image/ruletext.png");
	game1_m = Texture(L"Asset/Image/ScreenShot_Game1.png");
	game2_m = Texture(L"Asset/Image/ScreenShot_Game2.png");
	game3_m = Texture(L"Asset/Image/Game3Scene.png");

	for (int i = 0; i < 40; i++){
		cir[i] = Cir(Random(0,Window::Width()),Random(0,Window::Height()), 30, (2 * (i+1))%5+1);
	}
	font = Font(20);
	click = Font(10);

	SoundAsset(bgm_m).play();
}
Пример #5
0
void Main()
{
	ResourceLoader resources;

	auto sampler = SamplerState(SamplerState::Default2D);
	sampler.filter = TextureFilter::MinMagMipPoint;
	Graphics2D::SetSamplerState(sampler);

	Window::Resize(320 * 2, 240 * 2);
	Window::SetTitle(L"まちへかえろう(仮)");

	Array<HurdleObject> hurdles;
	Array<BuildingLayer> buildingLayers;
	Array<BuildingLayer2> buildingLayers2;

	Map::instance().init(40, 15);

	for (int i = 0; i < 40; i++)
	{
		Map::instance().set(i, 14, 5);
		Map::instance().set(i, 13, 5);
		Map::instance().set(i, 12, 4);
		Map::instance().set(i, 11, 3);
		Map::instance().set(i, 10, 3);
		Map::instance().set(i, 9, 2);
		Map::instance().set(i, 8, 1);
	}
	auto viewLeft = 0.0;
	auto mycharDead = false;
	ScreenState currentState = ScreenState::InTitle, prevState = currentState;
	bool prevSpacePressed = false;

	auto TitleTimer = TimerMillisec();

	ScriptEngine asEngine;
	asEngine.RegisterMethod(L"int getAt(double x, double y)", &Map::getAt, Map::instance());
	asEngine.RegisterProperty(L"double _viewX", &viewLeft);
	asEngine.RegisterProperty(L"bool _isGameOvered", &mycharDead);
	asEngine.RegisterFunction(L"void playJumpSound()", PlayJumpSound);
	auto context_mychar = asEngine.CreateContextFromScript(L"res/scripts/Mychar.as");

	Record::instance().init();

	int fc = 0;
	while (System::Update())
	{
		bool spacePressedInFrame = !prevSpacePressed && Input::KeySpace.pressed;
		prevSpacePressed = Input::KeySpace.pressed;

		asEngine.setFrameCount(fc);

		switch (currentState)
		{
		case ScreenState::InTitle:
			if (!TitleTimer.isActive) TitleTimer.start();
			renderBackgrounds(viewLeft, resources);
			renderBuildingLayers(buildingLayers, buildingLayers2, resources);
			renderMap(viewLeft, resources);
			renderTitle(TitleTimer.elapsed(), resources);
			renderCurrentMax();

			if (spacePressedInFrame)
			{
				// GameInit
				SoundAsset(SoundResourceLoader::decide).play();
				viewLeft = 0.0;
				mycharDead = false;
				context_mychar.Reenter();
				buildingLayers.clear();
				buildingLayers2.clear();
				hurdles.clear();
				currentState = ScreenState::Gaming;
			}
			break;
		case ScreenState::Gaming:
			// appear hurdles at random
			if (RandomBool(0.02))
			{
				if (hurdles.empty() || hurdles.back().getPos().x - (viewLeft + 320.0f) < -48.0f)
				{
					// allocate space least 48 logical-pixels
					hurdles.emplace_back(HurdleObject(Vec2(viewLeft + 320.0f, 8.0f * 16.0f + 8.0f)));
				}
			}
			// appear building at random
			if (RandomBool(0.02 / 30.0))
			{
				if (buildingLayers.empty() || buildingLayers.back().getPos().x < 0.0f)
				{
					buildingLayers.emplace_back(BuildingLayer(Vec2(320.0f, -60.0f)));
				}
			}
			if (RandomBool(0.01 / 30.0))
			{
				if (buildingLayers2.empty() || buildingLayers2.back().getPos().x < 0.0f)
				{
					buildingLayers2.emplace_back(BuildingLayer2(Vec2(320.0f, -60.0f)));
				}
			}

			asEngine.setFrameCount(fc);
			context_mychar.Execute();

			renderBackgrounds(viewLeft, resources);
			renderBuildingLayers(buildingLayers, buildingLayers2, resources);
			renderMap(viewLeft, resources);
			if (renderHurdlesAndHitTest(viewLeft, context_mychar.GetGlobalDoubleVec2(L"x", L"y"), hurdles, resources))
			{
				if (!mycharDead) SoundAsset(SoundResourceLoader::died).play();
				mycharDead = true;
			}
			renderPlayer(viewLeft, context_mychar.GetGlobalDouble(L"angle"), context_mychar.GetGlobalDoubleVec2(L"x", L"y"), resources);
			renderInfo(toScore(context_mychar.GetGlobalDouble(L"x")));

			// Host Processes
			if (mycharDead && context_mychar.GetGlobalDouble(L"x") < viewLeft - 120.0f)
			{
				// update record
				Record::instance().recordScore(toScore(context_mychar.GetGlobalDouble(L"x")));
				currentState = ScreenState::Result;
			}
			break;
		case ScreenState::Result:
			renderBackgrounds(viewLeft, resources);
			renderBuildingLayers(buildingLayers, buildingLayers2, resources);
			renderMap(viewLeft, resources);
			renderHurdlesAndHitTest(viewLeft, context_mychar.GetGlobalDoubleVec2(L"x", L"y"), hurdles, resources);
			renderResult(toScore(context_mychar.GetGlobalDouble(L"x")), Record::instance().isUpdated(), fc);

			if (spacePressedInFrame)
			{
				// GameInit
				SoundAsset(SoundResourceLoader::decide).play();
				TitleTimer.reset();
				currentState = ScreenState::InTitle;
			}
			break;
		}
		if (prevState != currentState)
		{
			fc = 0;
		}
		prevState = currentState;

		// Common Postprocesses
		fc++;
		viewLeft += 2.5f;
	}

	Map::instance().clean();
}
Пример #6
0
void PlayJumpSound()
{
	SoundAsset(L"jump").playMulti();
}
	bool AwakePlayerAttack(GameBase* gb, const T& collision, const Optional<ShimiColors>& col, int value)
	{		
		const bool enemyHit = AnyOf(gb->m_EM.m_enemies, [gb, &collision](const std::shared_ptr<Enemy>& e)
		{
			const bool f = collision.intersects(Circle(e->m_pos, 30));

			if (f)
			{
				if (!e->m_isDead)
				{
					EffectManager::I()->effect.add<VanishingEnemy>(e->m_pos.asPoint(), 25.0, 0.5, e->m_shimiColor);
					SoundAsset(L"EnemyVanish").playMulti();
				}

				e->m_isDead = true;


				if (e->m_itemID && !gb->m_idb.isgot(e->m_itemID.value()))
				{
					

					const int index = e->m_itemID.value();

					const int itemVal = gb->m_idb.m_list[index].m_value;
					const ShimiColors itemCol = gb->m_idb.m_list[index].m_color;

					gb->m_mv.addShotExp(gb->m_idb.m_list[index]);

					EffectManager::I()->effect.add<ItemGet>(gb, e->m_pos, itemCol, itemVal);

					gb->m_idb.got(index);
				}

			}

			return f;
		});

		const bool bossHit = AnyOf(gb->m_bosses, [gb, &collision, &col, &value](const std::shared_ptr<Boss>& b)
		{
			const HitState hit = b->damage(collision, col, value);// collision.intersects(Circle(e.m_enemy->m_pos, 30));

			switch (hit)
			{
			case HitState::Damage:
				SoundAsset(L"BossDamage").playMulti();
				break;
			case HitState::NoDamage:
				SoundAsset(L"BossNoDamage").play();
				break;
			default:
				break;
			}

			return hit != HitState::Avoid;
		});

		const bool obsHit = AnyOf(gb->m_obstacles, [&collision, &col](const std::shared_ptr<ObstacleBase>& obs)
		{
			const bool isColled = obs->m_pols.intersects(collision);

			const bool isCrashed = obs->shotByColor(col) && isColled;

			if (isCrashed && !obs->m_isDead)
			{
				SoundAsset(L"BreakObstacle").playMulti();

				obs->m_isDead = true;

				EffectManager::I()->effect.add<Vanishing>(obs->m_pols.boundingRect.center, 100, ToColor(col.value()));

				
			}

			return isCrashed;
		});

		return enemyHit || bossHit || obsHit;
		
	}