# include // OpenSiv3D v0.6.10 const int heroSize{ 100 }; const int enemySize{ 80 }; enum direction { UP, LEFT, DOWN, RIGHT, NONE }; direction GetDirection() { if ((KeyUp | KeyW).pressed()) { return UP; } else if ((KeyLeft | KeyA).pressed()) { return LEFT; } else if ((KeyDown | KeyS).pressed()) { return DOWN; } else if ((KeyRight | KeyD).pressed()) { return RIGHT; } else return NONE; } void UpdatePlayer(Point& _pos) { const int SPEED{ 3 }; direction d = GetDirection(); Point moveDir{ 0,0 }; switch (d) { case LEFT: moveDir = { -1, 0 }; break; case RIGHT: moveDir = { 1, 0 }; break; case UP: moveDir = { 0, -1 }; break; case DOWN: moveDir = { 0, 1 }; break; default: return; } //これも関数化しちゃった方がすっきりするかもねぇ _pos = _pos + SPEED * moveDir; } void SetHeroRect(Rect& _rect, Point _pos) { Point heroHosei{ heroSize / 2, heroSize / 2 }; _rect = { _pos - heroHosei, {heroSize, heroSize } }; } bool IsRectIntersectsOtherRect(Rect _rectA, Rect _rectB) { 自分で作った奴使ってね。 } void Main() { const Texture hero{ U"🕺"_emoji }; const Texture enemy{ U"🐲"_emoji }; Point heroPos{ 50,50 }; Point enemyPos{ Scene::Center() }; Point heroHosei{ heroSize / 2, heroSize / 2 }; Point enemyHosei{ enemySize / 2, enemySize / 2 }; Rect heroRect{ heroPos - heroHosei, {heroSize, heroSize} }; Rect enemyRect{ Scene::Center()-enemyHosei, {enemySize, enemySize} }; while (System::Update()) { Scene::SetBackground(Palette::Lightgray); UpdatePlayer(heroPos); SetHeroRect(heroRect, heroPos); hero.resized(heroSize).drawAt(heroPos); if (IsRectIntersectsOtherRect(heroRect, enemyRect)) { heroRect.draw({Palette::Yellow, 0.5}); heroRect.drawFrame(1, 1, Palette::Red); } else heroRect.drawFrame(1, 1, Palette::Red); enemy.resized(enemySize).drawAt(enemyPos); enemyRect.drawFrame(1, 1, Palette::Red); } }