横3マス分、縦4マス分に区切り、任意の場所をクリックするとその場所に応じてそれぞれセーブされる仕組みです。
現在12マス分すべて反応しますが、セーブは1番左上のみされる状況です。他の所はクリック判定されていますが更新はされません。予想ですがセーブ場所決定をするfor文が原因かと思います。
//セーブ画面作成
for (y = SAVE_PAGE * 4; y < SAVE_PAGE * 4 + 4; y++) {
for (z = 0; z < 3; z++) {
SetDrawBlendMode(DX_BLENDMODE_ALPHA, 128);
DrawGraph(10 + (z % 3) * 416, 30 + (y % 4) * 169, SAVE_BG_D, TRUE);
SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);
}
}
//画面上でのセーブ場所決定
for (y = SAVE_PAGE * 4; y < SAVE_PAGE * 4 + 4; y++) {//セーブ場所決定 X座標 横方向
x = 0;
for (z = 0; z < 3; z++) {//セーブ場所決定 Y座標 縦方向
DrawFormatStringToHandle(10 + ((z % 3) * 416), 30 + ((y % 4) * 169), GetColor(0, 0, 0), FontHandle_L, "%d/%d/%d/%d/%d/%d", Date[x].Year, Date[x].Mon, Date[x].Day, Date[x].Hour, Date[x].Min, Date[x].Sec);//日付け表示
if (Mouse_X > 10 + ((z % 3) * 416) && Mouse_X < 426 + ((z % 3) * 416) && Mouse_Y>30 + ((y % 4) * 169) && Mouse_Y < 199 + ((y % 4) * 169)) {//クリック判定設定
DrawFormatStringToHandle(9 + ((z % 3) * 416), 29 + ((y % 4) * 169), GetColor(255, 255, 255), FontHandle_L, "%d/%d/%d/%d/%d/%d", Date[x].Year, Date[x].Mon, Date[x].Day, Date[x].Hour, Date[x].Min, Date[x].Sec);//日付け表示
if (Mouse_CL != 0) {
x = (3 * (y % 4)) + (z % 3);//セーブするファイルナンバー
Game_Save(x = (3 * (y % 4)) + (z % 3)); }//セーブ処理
}
else
{
DrawFormatStringToHandle(9 + ((z % 3) * 416), 29 + ((y % 4) * 169), GetColor(192, 192, 192), FontHandle_L, "%d/%d/%d/%d/%d/%d", Date[x].Year, Date[x].Mon, Date[x].Day, Date[x].Hour, Date[x].Min, Date[x].Sec);//日付け表示
}
}
}
/*
yで縦何行目かの指定、zで横何行目かの指定をしています。
z0のy3なら11のセーブ場所にセーブされる。
↓ ↓ ↓
Z0 Z1 Z2
0 1 2 Y0←
3 4 5 Y1←
6 7 8 Y2←
9 10 11 Y3←
セーブ処理のGame_Save(x = (3 * (y % 4)) + (z % 3)); が11になり、それでファイルを決定している。
*/
質問は、なぜ1番左上のみセーブされるか、どこに問題があるか。
また、このコードの場合for文ではなく別のコードの方がいいのか。
それが知りたいです。
ぶっきらぼうな書き方になってしまいすみません。よろしくお願いします。