質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

解決済

1回答

3175閲覧

シューティングゲームの弾が発射されない

退会済みユーザー

退会済みユーザー

総合スコア0

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

0クリップ

投稿2018/01/11 15:21

###前提・実現したいこと
シューティングゲームの基本的な部分を作成しようとしています。

###発生している問題・エラーメッセージ
左矢印、右矢印キーで自機が左右に移動し、Zキーが押されると弾が発射される仕組みなのですが、なぜか発射されません。

###該当のソースコード
#include "DxLib.h"

#define MAX_SHOT 4

class Player
{
int x;
int y;

public:
Player(int x, int y) : x(x), y(y) {}

int get_x() const {return x;} void set_x(int x) {this->x = x;} int get_y() const {return y; } void set_y(int y) {this->y = y;}

};

class Shot
{
int x;
int y;
bool flag;

public:
Shot() : flag(false) {}

int get_x() const {return x;} void set_x(int x) {this->x = x;} int get_y() const {return y;} void set_y(int y) {this->y = y;} bool get_flag() const {return flag;} void set_flag(bool flag) {this->flag = flag;}

};

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR IpCmdLine, int nCmdShow)
{
Player player(320, 400);
Shot shot[MAX_SHOT];
int Key = 0;
int OldKey;

SetGraphMode(640, 480, 16); if(DxLib_Init() == -1) return -1; ChangeWindowMode(TRUE); SetDrawScreen(DX_SCREEN_BACK); while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) { ClearDrawScreen(); OldKey = Key; Key = GetJoypadInputState(DX_INPUT_KEY_PAD1); if(Key & PAD_INPUT_RIGHT) player.set_x(player.get_x() + 3); if(Key & PAD_INPUT_LEFT) player.set_x(player.get_x() - 3); for(int i = 0; i < MAX_SHOT; i++) { if(!shot[i].get_flag()) continue; shot[i].set_y(shot[i].get_y() - 8); if(shot[i].get_y() < -32) shot[i].set_flag(false); } if((Key & ~OldKey) & PAD_INPUT_A) { int i; for(i = 0; i < MAX_SHOT; i++) if(shot[i].get_flag()) break; if(i != MAX_SHOT) { shot[i].set_x(player.get_x() + 16); shot[i].set_y(player.get_y()); shot[i].set_flag(true); } } DrawBox(player.get_x(), player.get_y(), player.get_x() + 48, player.get_y() + 48, GetColor(255, 0, 0), TRUE); for(int i = 0; i < MAX_SHOT; i++) if(shot[i].get_flag()) DrawBox(shot[i].get_x(), shot[i].get_y(), shot[i].get_x() + 16, shot[i].get_y() + 16, GetColor(255, 255, 255), TRUE); ScreenFlip(); } DxLib_End(); return 0;

}

###試したこと
デバッグをしたのですが"if(i != MAX_SHOT)"あたりでなぜかZキーが押されていても処理が飛んでいる気がします。おそらくどこかで初歩的なミスをしていると思うのですがどこを間違えたのかわかりません。

###補足情報(言語/FW/ツール等のバージョンなど)
visualc++ 2017をvisual studioを使って作成しています。コメントがまだなくコードが読みづらくて申し訳ありませんが回答お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

if(shot[i].get_flag())をif(!shot[i].get_flag())に変更したら通りました。ただの勘違いだったようです。

投稿2018/01/11 15:45

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問