詳細
以下のプログラムにしたところ、図のように、「何でもアイテム」を選択すると、デバッグなしで実行した場合、突然消えて、デバッグありで実行すると、フリーズしてしまいます。
選択するプログラムは異常がありませんでしたが、その後の攻撃・回復の演出でバグが発生しているようです。
具体的に何が悪いのですか?問題の改善方法も教えてください!
ちなみに、〇〇は、半角40文字以内です。
#問題が発生するプログラム
x,y,○○x,○○yは常に1920以下
#include "DxLib.h" #include "string.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { … SetGraphMode(1920, 1080, 32); … --- aitemu: if (omake > 10) { if (mymoney < 1000000) { goto mytarn; } mymoney = mymoney - 1000000; } else if (omake > 0) { if (mymoney < 30000) { goto mytarn; } mymoney = mymoney - 30000; } else { if (mymoney < 300) { goto mytarn; } mymoney = mymoney - 300; } --- loop = 0; x = 960; y = 905; z = 0; gazouax = 920; gazouay = 800; gazoubx = 920; gazouby = 150; m = GetRand(100); if (m > 95) { n = tekifullhp; sphit = 2; } else if (m > 80) { n = tekifullhp * 0.7; sphit = 1; } else if (m > 60) { n = tekifullhp * 0.5; } else if (m > 5) { n = tekifullhp * 0.3; } else { n = 0; } tekihp = tekihp - n; score = score + n; if (score > 999999999) { score = 999999999; } if (tekihp < 0) { tekihp = 0; } p = 255; q = 128; hp = fullhp; mp = fullmp; if (omake > 0) { muteki = muteki + 4; } else { muteki = muteki + 11; } maebar = thpbar; if (tekifullhp > 1000000) { thphozon = tekihp / 10000; fullthphozon = tekifullhp / 10000; thphozon = thphozon * 1920; hozonti = thphozon / fullthphozon; barhozon = hozonti; } else { thphozon = tekihp; fullthphozon = tekifullhp; thphozon = thphozon * 1920; hozonti = thphozon / fullthphozon; barhozon = hozonti; } barminus = thpbar - barhozon; barminus = barminus / 100; barminus = barminus + 1; maebar2 = hpbar; if (fullhp > 1000000) { hphozon = hp / 10000; fullhphozon = fullhp / 10000; hphozon = hphozon * 1920; hozonti = hphozon / fullhphozon; barhozonplus = hozonti; } else { hphozon = hp; fullhphozon = fullhp; hphozon = hphozon * 1920; hozonti = hphozon / fullhphozon; barhozonplus = hozonti; } barplus = barhozonplus - hpbar; barplus = barplus / 100; barplus = barplus + 1; maemp = mpbar; if (fullmp > 1000000) { mphozon = mp / 10000; fullmphozon = fullmp / 10000; mphozon = mphozon * 1920; hozonti = mphozon / fullmphozon; mpbarhozon = hozonti; } else { mphozon = mp / 10000; fullmphozon = fullmp / 10000; mphozon = mphozon * 1920; hozonti = mphozon / fullmphozon; mpbarhozon = hozonti; } mpplus = mpbar - mpbarhozon; mpplus = mpplus / 100; mpplus = mpplus + 1; for (loop = 0; loop < 64; loop++) { ClearDrawScreen(); DrawGraph(gazouax, gazouay, gazoua, TRUE); a = station % 5; if (a == 0) { DrawGraph(gazoubx, gazouby, gazouc, TRUE); } else if (omake > 0) { DrawGraph(gazoubx, gazouby, gazouc, TRUE); } else { DrawGraph(gazoubx, gazouby, gazoub, TRUE); } if (muteki > 0) { for (mutekiloop = 0; mutekiloop < 500; mutekiloop++) { mutekicolor = GetColor(GetRand(256), GetRand(256), GetRand(256)); DrawPixel(gazouax + GetRand(80), gazouay + GetRand(150), mutekicolor); } } gazouay = gazouay - 2; if (fullhp > 1000000) { hphozon = hp / 10000; fullhphozon = fullhp / 10000; hphozon = hphozon * 1920; hozonti = hphozon / fullhphozon; hpbar = hozonti; } else { hphozon = hp; fullhphozon = fullhp; hphozon = hphozon * 1920; hozonti = hphozon / fullhphozon; hpbar = hozonti; } if (tekifullhp > 1000000) { thphozon = tekihp / 10000; fullthphozon = tekifullhp / 10000; thphozon = thphozon * 1920; hozonti = thphozon / fullthphozon; thpbar = hozonti; } else { thphozon = tekihp; fullthphozon = tekifullhp; thphozon = thphozon * 1920; hozonti = thphozon / fullthphozon; thpbar = hozonti; } if (fullmp > 1000000) { mphozon = mp / 10000; fullmphozon = fullmp / 10000; mphozon = mphozon * 1920; hozonti = mphozon / fullmphozon; mpbar = hozonti; } else { mphozon = mp; fullmphozon = fullmp; mphozon = mphozon * 1920; hozonti = mphozon / fullmphozon; mpbar = hozonti; } DrawBox(0, 5, thpbar, 10, barcolor, TRUE); DrawBox(0, 1070, maebar2, 1075, hpc, TRUE); Rs = Rs - 3; if (Rs < 0) { Rs = 255; } wazukacolor = GetColor(128, 0, Rs); if (mpatai <= 20) { DrawBox(0, 1060, maemp, 1065, wazukacolor, TRUE); } else { DrawBox(0, 1060, maemp, 1065, mpcolor, TRUE); } DrawBox(maemp, 1060, mpbar, 1065, kaifukucolor, TRUE); DrawBox(thpbar, 5, maebar, 10, damagecolor, TRUE); DrawBox(maebar2, 1070, hpbar, 1075, kaifukucolor, TRUE); SetFontSize(24); DrawFormatString(1300, 900, scorecolor, "%sさん\nscore %d\nハイスコア %sさん\nscore %d", name, score, champion, HiScore); SetFontSize(48); WaitTimer(5); } for (loop = 0; loop < 127; loop++) { if (gazouay < 800) { gazouay = gazouay + 2; } ClearDrawScreen(); DrawGraph(gazouax, gazouay, gazoua, TRUE); a = station % 5; if (a == 0) { DrawGraph(gazoubx, gazouby, gazouc, TRUE); } else if (omake > 0) { DrawGraph(gazoubx, gazouby, gazouc, TRUE); } else { DrawGraph(gazoubx, gazouby, gazoub, TRUE); } if (muteki > 0) { for (mutekiloop = 0; mutekiloop < 500; mutekiloop++) { mutekicolor = GetColor(GetRand(256), GetRand(256), GetRand(256)); DrawPixel(gazouax + GetRand(80), gazouay + GetRand(150), mutekicolor); } } z = z + 1; maebar = maebar - barminus; if (thpbar > maebar) { maebar = thpbar; } maebar2 = maebar2 + barplus; if (hpbar < maebar2) { maebar2 = hpbar; } maemp = maemp + mpplus; if (mpbar < maemp) { maemp = mpbar; } draw = 0; color = GetColor(0, 255, 255); for (draw = 0; draw < 100; draw++) { DrawPixel(gazouax + GetRand(80), gazouay + GetRand(150), color); } color = GetColor(255, 128, 0); DrawCircle(960, 225, z, color, TRUE); p = p - 2; q = q - 1; if (n <= 0) { color = GetColor(0, p, p); DrawString(1100, 150 - 32, "アタック失敗!!", color); } else if (sphit == 1) { color = GetColor(p, 0, p); DrawFormatString(1100, 150, color, "%d", n); } else if (sphit == 2) { color = GetColor(q, q, 0); DrawFormatString(1100, 150, color, "%d", n); } else { color = GetColor(p, q, 0); DrawFormatString(1100, 150, color, "%d", n); } color = GetColor(128, 255, 0); DrawCircle(x, y, z, color, TRUE); color = GetColor(0, p, 0); DrawString(600, 760 - 32, "無敵モード発動!", GetColor(255, 201, 14)); DrawString(600, 820 - 32, "たくさん回復!!", color); DrawBox(0, 5, thpbar, 10, barcolor, TRUE); DrawBox(0, 1070, maebar2, 1075, hpc, TRUE); Rs = Rs - 3; if (Rs < 0) { Rs = 255; } wazukacolor = GetColor(255, 0, Rs); if (mpatai <= 20) { DrawBox(0, 1060, maemp, 1065, wazukacolor, TRUE); } else { DrawBox(0, 1060, maemp, 1065, mpcolor, TRUE); } DrawBox(maemp, 1060, mpbar, 1065, kaifukucolor, TRUE); DrawBox(thpbar, 5, maebar, 10, damagecolor, TRUE); DrawBox(maebar2, 1070, hpbar, 1075, kaifukucolor, TRUE); SetFontSize(24); DrawFormatString(1300, 900, scorecolor, "%sさん\nscore %d\nハイスコア %sさん\nscore %d", name, score, champion, HiScore); SetFontSize(48); WaitTimer(5); }
発生している問題・エラーメッセージ
特にエラーメッセージはなく、テストの実行をすると、たまに以下のメッセージが一番下に表示される。
予期しないエラーが検出されました。詳細については、テスト出力ペインを確認してください。
該当のソースコード
C++
DxLib
試したこと
水平線内は正常に動いたので、その後のプログラムをちょこちょこと変えた。
補足情報(FW/ツールのバージョンなど)
Visual Studio 2022 RCでプログラム
バージョンは最新
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/08 01:18