自機にHPの概念を追加したくて以下のプログラムを書きました。3回弾に当たると死亡するような感じにしたかったんですけどプログラムを実行すると2回で死んだり1回で死んだりして、困っています。何が原因でしょうか。かぼちゃは敵です。
#include <math.h>
#include "DxLib.h"
#include "drawgra.h"
#include <time.h>
int jiki_handle;
int jiki_x = 100;
int jiki_y = 240;
int tama_handle;
int tama_sonzai = 0;
int tama_x;
int tama_y;
int teki_handle;
int teki_x = 500;
int teki_y = 200;
int tekitama_handle;
int tekitama_sonzai = 0;
int tekitama_x;
int tekitama_y;
int shouhai = 0;
int bakuhatu;
int haikei_hosizora;
int HP = 0;
void jiki_hyouji(int key)
{
if (key == PAD_INPUT_RIGHT) {
jiki_x = jiki_x + 4;
if (jiki_x > 639) {
jiki_x = 639;
}
}
if (key == PAD_INPUT_LEFT) {
jiki_x = jiki_x - 4;
if (jiki_x < 0) {
jiki_x = 0;
}
}
if (key == PAD_INPUT_DOWN) {
jiki_y = jiki_y + 4;
if (jiki_y > 479) {
jiki_y = 479;
}
}
if (key == PAD_INPUT_UP) {
jiki_y = jiki_y - 4;
if (jiki_y < 0) {
jiki_y = 0;
}
}
DrawGra(jiki_x, jiki_y, jiki_handle, TRUE);
}
void tama_hyouji(int key)
{
if (key == PAD_INPUT_A){
if (tama_sonzai == 0) {
tama_sonzai = 1;
tama_x = jiki_x;
tama_y = jiki_y;
}
}
if (tama_sonzai == 1) {
tama_x = tama_x + 8;
if (tama_x > 639) {
tama_sonzai = 0;
}
DrawGra(tama_x, tama_y, tama_handle, TRUE);
}
}
void tama_z(int key)
{
if (key == PAD_INPUT_B) {
if (tama_sonzai == 0) {
tama_sonzai = 1;
tama_x = jiki_x;
tama_y = jiki_y;
}
}
if (tama_sonzai == 1) {
tama_x = tama_x + 16;
if (tama_x > 639) {
tama_sonzai = 0;
}
DrawGra(tama_x, tama_y, tama_handle, TRUE);
}
}
int count;
int teki_houkou;
void teki_hyouji(void)
{
count = count + 1;
if (count > 30) {
teki_houkou = GetRand(3);
count = 0;
}
//0.5秒ごとにランダムに上下移動するかぼちゃ
if (teki_houkou == 0) {
teki_y = teki_y + 3;
}
if (teki_houkou == 1) {
teki_y = teki_y + 3;
}
if (teki_houkou == 2) {
teki_y = teki_y - 3;
}
if (teki_houkou == 3) {
teki_y = teki_y - 3;
}
if (teki_y > 479) {
teki_y = 0;
}
if (teki_y < 0) {
teki_y = 479;
}
//かぼちゃが画面外に出ないように反対側へ移動
DrawGra(teki_x, teki_y, teki_handle, TRUE);
}
void tekitama_hyouji(void)
{
int ransuu;
ransuu = GetRand(4);
if (tekitama_sonzai == 0) {
if (ransuu == 4) {
tekitama_sonzai = 1;
tekitama_x = teki_x;
tekitama_y = teki_y;
}
}
if (tekitama_sonzai == 1) {
tekitama_x = tekitama_x - 8;
if (tekitama_x < 0){
tekitama_sonzai = 0;
}
if (tekitama_y < 0) {//ボールが上にいくと下から帰ってくるようにした
tekitama_y = 439;
}
DrawGra(tekitama_x, tekitama_y, tekitama_handle, TRUE);
}
}
void atari_hantei_tama_to_teki(void)
{
if (shouhai != 0) {
return;
}
if (tama_sonzai == 1) {
if ((tama_x < teki_x + 20) && (tama_x > teki_x -20) && (tama_y < teki_y + 20) && (tama_y > teki_y - 20)) {
shouhai = 1;
tama_sonzai = 0;
}
}
}
void atari_hantei_jiki_to_teki(void)
{
if (shouhai != 0) {
return;
}
if ((jiki_x < teki_x + 5) && (jiki_x > teki_x - 5) && (jiki_y < teki_y + 5) && (jiki_y > teki_y - 5)) {
shouhai = 1;
}
}
void atari_hantei_jiki_to_tekitama(void)
{
if (shouhai != 0) {
return;
}
if ((tekitama_x < jiki_x + 20) && (tekitama_x > jiki_x - 20) && (tekitama_y < jiki_y + 20) && (
tekitama_y > jiki_y - 20)) {
tekitama_sonzai = 0;
HP = HP + 1;
}
if (HP == 3) {
shouhai = -1;
}
}
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC)
{
int key;
int iro_shiro;
int iro_aka;
ChangeWindowMode(TRUE);
DxLib_Init();
SetDrawScreen(DX_SCREEN_BACK);
jiki_handle = LoadGraph("jiki.bmp");
tama_handle = LoadGraph("tama.bmp");
teki_handle = LoadGraph("kabocha.bmp");
tekitama_handle = LoadGraph("tekitama.bmp");
bakuhatu = LoadGraph("bakuhatu.bmp");
haikei_hosizora = LoadGraph("hosizora1.bmp");
iro_shiro = GetColor(255, 255, 255);
iro_aka = GetColor(255, 0, 0);
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) {
ClearDrawScreen();
DrawGra(320, 240, haikei_hosizora, TRUE);
key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
jiki_hyouji(key);
if (key == PAD_INPUT_B) {
tama_z(key);
}
tama_hyouji(key);
teki_hyouji();
tekitama_hyouji();
atari_hantei_tama_to_teki();
if (shouhai == 1) {
DrawGra(teki_x, teki_y, bakuhatu, TRUE);
DeleteGraph(teki_handle);
SetFontSize(64);
DrawString(100, 200, "You Win!", iro_shiro);
DeleteGraph(tekitama_handle);
}
atari_hantei_jiki_to_teki();
atari_hantei_jiki_to_tekitama();
if (shouhai == -1) {
SetFontSize(64);
DrawGra(jiki_x, jiki_y, bakuhatu, TRUE);
DeleteGraph(jiki_handle);
DrawString(100, 200, "Game Over...", iro_aka);
}
ScreenFlip();
}
DxLib_End();
return 0;
}