題名の通り斜め上に進みながらの時だけ弾が発射されません。
プログラミング自体初心者なのでよろしくお願いします。
作ったプログラムは以下の通りです。
#include "DxLib.h"
int Key[256]; // キーが押されているフレーム数を格納する
// キーの入力状態を更新する
int gpUpdateKey() {
char tmpKey[256]; // 現在のキーの入力状態を格納する
GetHitKeyStateAll(tmpKey); // 全てのキーの入力状態を得る
for (int i = 0; i<256; i++) {
if (tmpKey[i] != 0) { // i番のキーコードに対応するキーが押されていたら
Key[i]++; // 加算
}
else { // 押されていなければ
Key[i] = 0; // 0にする
}
}
return 0;
}
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更と初期化と裏画面設定
/* 自機設定 */
/////////////////////////////////////////////////////////
int jiki= LoadGraph("画像/シューティング2.png"); //自機の画像ロード
int jikix = 200; //自機のx座標
int jikiy = 350; //自機のy座標
int jikidan[32]; //自機の弾の画像読み込み
LoadDivGraph("画像/シューティング.png", 32, 8, 4, 10, 15.5, jikidan);
struct PlayrShot
{
int flag;
int PlayrShotx;
int PlayrShoty;
}PlayrShot[20];
//////////////////////////////////////////////////////
/* 音楽読み込み */
/////////////////////////////////////////////////////
struct Music
{
int flag = 0;
int Sound = 0;
};
Music stage{ 0,LoadSoundMem("サウンド/stage1.wav") };//ステージの音楽読み込み
Music SE{ 0,LoadSoundMem("サウンド/shot.mp3") };
ChangeVolumeSoundMem(150, stage.Sound);//BGMの音量調整
PlaySoundMem(stage.Sound, DX_PLAYTYPE_LOOP);//ステージ音楽再生
////////////////////////////////////////////////////
int colo = GetColor(225, 225, 225);
/* ループ開始 */
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey() == 0) {
if (Key[KEY_INPUT_RIGHT] >= 1) { // 右キーが押されていたら
jikix=jikix+4; // 右へ移動
}
if (Key[KEY_INPUT_LEFT] >= 1) { // 左キーが押されていたら
jikix=jikix-4; // 左へ移動
}
if (Key[KEY_INPUT_UP] >= 1) { // 上キーが押されていたら
jikiy = jikiy - 4; // 上へ移動
}
if (Key[KEY_INPUT_DOWN] >= 1) { // 下キーが押されていたら
jikiy = jikiy + 4; // 下へ移動
}
if (jikiy < 2) { //自機画面上
jikiy = 2;
}
if (jikiy > 400) { //自機画面下
jikiy = 400;
}
if (jikix < 2) { //自機画面左端
jikix = 2;
}
if (jikix > 572) { //自機画面右端
jikix = 572;
}
if (Key[KEY_INPUT_A] == 1) { //自機の弾の処理
for (int i = 0; i < 20; i++) {
if (PlayrShot[i].flag == 0) { //自機の弾のフラグ;効果音のフラグ;弾の座標の取得
PlayrShot[i].flag = 1;
SE.flag = 1;
PlayrShot[i].PlayrShotx = jikix;
PlayrShot[i].PlayrShoty = jikiy;
break;
}
}
}
for (int i=0; i < 20; i++) {
if (PlayrShot[i].flag) {
PlayrShot[i].PlayrShoty -= 5; //弾の進み方
if (PlayrShot[i].PlayrShoty < -50) { //フラグの消去
PlayrShot[i].flag = 0;
}
}
}
/* 描画開始 */
DrawGraph(jikix, jikiy, jiki, true);//自機描画
for (int i = 0; i < 20; i++) {
if (PlayrShot[i].flag == 1){
DrawGraph(PlayrShot[i].PlayrShotx+30, PlayrShot[i].PlayrShoty+10, jikidan[5], true); //自機の弾の描画
if (SE.flag == 1) {
PlaySoundMem(SE.Sound,DX_PLAYTYPE_BACK); //弾の効果音
SE.flag = 0;
}
}
}
DrawFormatString(10, 10, colo, "座標「%d.%d」", jikix, jikiy);
if (Key[KEY_INPUT_ESCAPE] == 1) {
break;
}
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}