#1
by ほし » 1年前
以下のプログラムは、サイコロのプログラム。
Zキーを押すとサイコロの画像がランダムに一枚ずつ切り替わり、再度Zキーを押すとランダムにサイコロの画像が一枚表示され(静止)、Cキーを押すと終了、というプログラムなのですが、Zキーを押すと、再度押した際の処理をしてしまいます。
また、再度Zキーを押すところをXキーを押すようにしたら、正常に動作します。
初歩的なところとは重々承知しております。回答、よろしくお願いします。
#include "DxLib.h"
#include "stdlib.h"
int Key[256]; // キーが押されているフレーム数を格納する
// キーの入力状態を更新する
int gpUpdateKey() {
char tmpKey[256]; // 現在のキーの入力状態を格納する
GetHitKeyStateAll(tmpKey); // 全てのキーの入力状態を得る
for (int i = 0; i < 256; i++) {
if (tmpKey != 0) { // i番のキーコードに対応するキーが押されていたら
Key++; // 加算
}
else { // 押されていなければ
Key = 0; // 0にする
}
}
return 0;
}
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更と初期化と裏画面設定
SetWindowSize(640, 480);
int Dice;
int Random, Random1, Random2 ;
int i1 , i2;
int Green = GetColor(0, 255, 0); // 緑の色コードを取得
int Dice1, Dice2, Dice3, Dice4, Dice5, Dice6;
Dice = 0;
Random = 0;
Random1 = 0;
Random2 = 0;
Dice1 = 0;
Dice2 = 0;
Dice3 = 0;
Dice4 = 0;
Dice5 = 0;
Dice6 = 0;
i1 = 0;
i2 = 0;
Dice1 = LoadGraph("画像/サイコロ/1.png"); // 画像をロード
Dice2 = LoadGraph("画像/サイコロ/2.png"); // 画像をロード
Dice3 = LoadGraph("画像/サイコロ/3.png"); // 画像をロード
Dice4 = LoadGraph("画像/サイコロ/4.png"); // 画像をロード
Dice5 = LoadGraph("画像/サイコロ/5.png"); // 画像をロード
Dice6 = LoadGraph("画像/サイコロ/6.png"); // 画像をロード
// while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey() == 0) {
if (i1 == 0) {
if (Key[KEY_INPUT_Z] == 1) { // Zが押された瞬間なら
Random2 = 1;
i1 = 1;
}
}
if (Random2 == 1) { //サイコロ回転開始
Random = GetRand(5);
if (Random == 0) {
DrawGraph(20, 400, Dice1, TRUE);
}
else if (Random == 1) {
DrawGraph(20, 400, Dice2, TRUE);
}
else if (Random == 2) {
DrawGraph(20, 400, Dice3, TRUE);
}
else if (Random == 3) {
DrawGraph(20, 400, Dice4, TRUE);
}
else if (Random == 4) {
DrawGraph(20, 400, Dice5, TRUE);
}
else if (Random == 5) {
DrawGraph(20, 400, Dice6, TRUE);
}
Dice = GetRand(5);
if (Key[KEY_INPUT_Z] == 1) { // Zが押された瞬間なら
Random1 = 1;
Random2 = 0;
}
}
if (Random1 == 1) { // サイコロ停止
if (Dice == 0) {
DrawGraph(20, 400, Dice1, TRUE);
if (Key[KEY_INPUT_C] == 1) {
Random1 = 0;
return 0;
}
}
else if (Dice == 1) {
DrawGraph(20, 400, Dice2, TRUE);
if (Key[KEY_INPUT_C] == 1) {
Random1 = 0;
return 0;
}
}
else if (Dice == 2) {
DrawGraph(20, 400, Dice3, TRUE);
if (Key[KEY_INPUT_C] == 1) {
Random1 = 0;
return 0;
}
}
else if (Dice == 3) {
DrawGraph(20, 400, Dice4, TRUE);
if (Key[KEY_INPUT_C] == 1) {
Random1 = 0;
return 0;
}
}
else if (Dice == 4) {
DrawGraph(20, 400, Dice5, TRUE);
if (Key[KEY_INPUT_C] == 1) {
Random1 = 0;
return 0;
}
}
else if (Dice == 5) {
DrawGraph(20, 400, Dice6, TRUE);
if (Key[KEY_INPUT_C] == 1) {
Random1 = 0;
return 0;
}
}
}
if (Key[KEY_INPUT_ESCAPE] == 1) {
break;
}
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
以下のプログラムは、サイコロのプログラム。
Zキーを押すとサイコロの画像がランダムに一枚ずつ切り替わり、再度Zキーを押すとランダムにサイコロの画像が一枚表示され(静止)、Cキーを押すと終了、というプログラムなのですが、Zキーを押すと、再度押した際の処理をしてしまいます。
また、再度Zキーを押すところをXキーを押すようにしたら、正常に動作します。
初歩的なところとは重々承知しております。回答、よろしくお願いします。
#include "DxLib.h"
#include "stdlib.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); //ウィンドウモード変更と初期化と裏画面設定
SetWindowSize(640, 480);
int Dice;
int Random, Random1, Random2 ;
int i1 , i2;
int Green = GetColor(0, 255, 0); // 緑の色コードを取得
int Dice1, Dice2, Dice3, Dice4, Dice5, Dice6;
Dice = 0;
Random = 0;
Random1 = 0;
Random2 = 0;
Dice1 = 0;
Dice2 = 0;
Dice3 = 0;
Dice4 = 0;
Dice5 = 0;
Dice6 = 0;
i1 = 0;
i2 = 0;
Dice1 = LoadGraph("画像/サイコロ/1.png"); // 画像をロード
Dice2 = LoadGraph("画像/サイコロ/2.png"); // 画像をロード
Dice3 = LoadGraph("画像/サイコロ/3.png"); // 画像をロード
Dice4 = LoadGraph("画像/サイコロ/4.png"); // 画像をロード
Dice5 = LoadGraph("画像/サイコロ/5.png"); // 画像をロード
Dice6 = LoadGraph("画像/サイコロ/6.png"); // 画像をロード
// while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey() == 0) {
if (i1 == 0) {
if (Key[KEY_INPUT_Z] == 1) { // Zが押された瞬間なら
Random2 = 1;
i1 = 1;
}
}
if (Random2 == 1) { //サイコロ回転開始
Random = GetRand(5);
if (Random == 0) {
DrawGraph(20, 400, Dice1, TRUE);
}
else if (Random == 1) {
DrawGraph(20, 400, Dice2, TRUE);
}
else if (Random == 2) {
DrawGraph(20, 400, Dice3, TRUE);
}
else if (Random == 3) {
DrawGraph(20, 400, Dice4, TRUE);
}
else if (Random == 4) {
DrawGraph(20, 400, Dice5, TRUE);
}
else if (Random == 5) {
DrawGraph(20, 400, Dice6, TRUE);
}
Dice = GetRand(5);
if (Key[KEY_INPUT_Z] == 1) { // Zが押された瞬間なら
Random1 = 1;
Random2 = 0;
}
}
if (Random1 == 1) { // サイコロ停止
if (Dice == 0) {
DrawGraph(20, 400, Dice1, TRUE);
if (Key[KEY_INPUT_C] == 1) {
Random1 = 0;
return 0;
}
}
else if (Dice == 1) {
DrawGraph(20, 400, Dice2, TRUE);
if (Key[KEY_INPUT_C] == 1) {
Random1 = 0;
return 0;
}
}
else if (Dice == 2) {
DrawGraph(20, 400, Dice3, TRUE);
if (Key[KEY_INPUT_C] == 1) {
Random1 = 0;
return 0;
}
}
else if (Dice == 3) {
DrawGraph(20, 400, Dice4, TRUE);
if (Key[KEY_INPUT_C] == 1) {
Random1 = 0;
return 0;
}
}
else if (Dice == 4) {
DrawGraph(20, 400, Dice5, TRUE);
if (Key[KEY_INPUT_C] == 1) {
Random1 = 0;
return 0;
}
}
else if (Dice == 5) {
DrawGraph(20, 400, Dice6, TRUE);
if (Key[KEY_INPUT_C] == 1) {
Random1 = 0;
return 0;
}
}
}
if (Key[KEY_INPUT_ESCAPE] == 1) {
break;
}
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}