シューティングゲームについて
H 2017/12/16(Sat) 21:12
既に公開されているシューティングゲームのソースを参考にして、以下のような、「弾に触れると得点が
1点加算される」ようにしたいと考えているのですが、現状では触れたとき画面上に存在するすべての弾が
消えて、その分だけ加算されるようになってしまいます。
これを希望のように動かすにはどのようなコードを書けばいいのでしょうか。
Siv3Dに出会ってまだ間もなく右も左もわからない状態です。回答してくだされば幸いです。
以下ソース
#include <Siv3D.hpp>
void Main() {
Window::SetTitle(L"Catch!");
Window::Resize(640, 480);
Array<Vec2> enemies;
bool ints = false;
//自機移動のための変数
Point pl_xy(300, 400);
//フレーム数のカウント
int framecount = 0;
//得点
int score = 0;
Font font(20);
while (System::Update()) {
framecount++;
//自機
const Rect player(pl_xy, 25, 25);
player.draw(Palette::White);
if (Input::KeyRight.pressed) {
pl_xy.x += 5;
}
if (Input::KeyLeft.pressed) {
pl_xy.x -= 5;
}
if (pl_xy.x > 615) { pl_xy.x = 615; }
if (pl_xy.x < 0) { pl_xy.x = 0; }
if (framecount % (24 - Min(framecount / 60, 18)) == 0) {
enemies.emplace_back(Random(40, 600), -40);
}
for (auto& apple : enemies) {
apple.y += 5.0;
}
for (auto& apple : enemies) {
Circle(apple,20).draw(Palette::Red);
}
Erase_if(enemies, [](const Vec2& p) {return p.y > 490; });
Erase_if(enemies, [&](const Vec2& e) {
if (std::any_of(enemies.begin(), enemies.end(), [pl_xy](const Vec2& e) { return pl_xy.distanceFrom(e) < 25.0; }))
{
++score;
return true;
}
else return e.y > 490.0;
});
font(score).draw();
}
}