文字が表示されない&インクリメントできない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
LEMO
記事: 23
登録日時: 7年前
住所: 関東地方ですね

文字が表示されない&インクリメントできない

#1

投稿記事 by LEMO » 6年前

続いての質問申し訳ないです
自分でいろいろ試してみて、ランダムな数を取得することができ、喜んでいたのもつかの間
いろいろ作り始めたら問題が起きました

まだランダムに数を作成し、作成された数のキーを押したら「正解!」
違うキーだと「不正解!」とでる。
そして、数字以外のキーが押されたら「文字を入力してください!」とでる。
っていう程度までしかできてません

自分では最善を尽くしてみたのですが
どうもうまく行きません
正解のキーを押したらメインループから出て、ゲーム終了
違うキーを押したら繰り返しでもう一度  ←これはただ不正解という文字を書いて終わりで大丈夫です
ということにしたいのですが
不正解と表示する時count3という変数を作り、ループするたびにcount3をインクリメントしていき
不正解、という文字を下に書いていきたいのですが、そもそも一度も表示されてくれません

他にもアルファベットを入力したら 「数字を入力してください!」というのを表示させたいのですが
それもできません。

Q1
 正解の数ではない数字をおした(つまり不正解のキー)時、不正解という文字の表示を繰り返した分だけ表示させたいのですがどうすればいいでしょうか?

Q2
 数字以外のキーを押された時、「数字を入力してください!」と表示させたいのですが、どこにどういう処理をかけばいいでしょうか?
&&は||に読み替えてください! ANDじゃなくてORです!

コード:

#include "DxLib.h"
#include "stdio.h"


int Green = GetColor(0, 255, 0);

int count = 1;
int count2 = 1;
int target2;
char ans;
int check = 1;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	// DXライブラリ初期化
	if (DxLib_Init() == -1) return 0;
	ChangeWindowMode(TRUE);
	char KeyBuf[256];
	target2 = GetRand(10);
	int count3 = 1;
	DrawFormatString(0, 48, Green, "今回生成された数%dはです", target2);


	while (TRUE) {/*メインループ*/


		do
		{/*判定While*/
			ProcessMessage();
			count2++;
			if (CheckHitKey(KEY_INPUT_ESCAPE))
			{
				break;
			};
			DrawFormatString(0, 176, Green, "文字を入力してください\n");
			GetHitKeyStateAll(KeyBuf);

			if (KeyBuf[KEY_INPUT_1] == 1)
			{
				ans = 1;
				break;
			}
			else if (KeyBuf[KEY_INPUT_2] == 1)
			{
				ans = 2;
				break;
			}
			else if (KeyBuf[KEY_INPUT_3] == 1)
			{
				ans = 3;
				break;
			}
			else if (KeyBuf[KEY_INPUT_4] == 1)
			{
				ans = 4;
				break;
			}
			else if (KeyBuf[KEY_INPUT_5] == 1)
			{
				ans = 5;
				break;
			}
			else if (KeyBuf[KEY_INPUT_6] == 1)
			{
				ans = 6;
				break;
			}
			else if (KeyBuf[KEY_INPUT_7] == 1)
			{
				ans = 7;
				break;

			}
			else if (KeyBuf[KEY_INPUT_8] == 1)
			{
				ans = 8;
				break;
			}
			else if (KeyBuf[KEY_INPUT_9] == 1)
			{
				ans = 9;
				break;
			}
			else if
				(KeyBuf[KEY_INPUT_A] == 1 &&
					KeyBuf[KEY_INPUT_B] == 1 &&
					KeyBuf[KEY_INPUT_C] == 1 &&
					KeyBuf[KEY_INPUT_D] == 1 &&
					KeyBuf[KEY_INPUT_E] == 1 &&
					KeyBuf[KEY_INPUT_F] == 1 &&
					KeyBuf[KEY_INPUT_G] == 1 &&
					KeyBuf[KEY_INPUT_H] == 1 &&
					KeyBuf[KEY_INPUT_I] == 1 &&
					KeyBuf[KEY_INPUT_J] == 1 &&
					KeyBuf[KEY_INPUT_K] == 1 &&
					KeyBuf[KEY_INPUT_L] == 1 &&
					KeyBuf[KEY_INPUT_M] == 1 &&
					KeyBuf[KEY_INPUT_N] == 1 &&
					KeyBuf[KEY_INPUT_O] == 1 &&
					KeyBuf[KEY_INPUT_P] == 1 &&
					KeyBuf[KEY_INPUT_Q] == 1 &&
					KeyBuf[KEY_INPUT_R] == 1 &&
					KeyBuf[KEY_INPUT_S] == 1 &&
					KeyBuf[KEY_INPUT_T] == 1 &&
					KeyBuf[KEY_INPUT_U] == 1 &&
					KeyBuf[KEY_INPUT_V] == 1 &&
					KeyBuf[KEY_INPUT_W] == 1 &&
					KeyBuf[KEY_INPUT_X] == 1 &&
					KeyBuf[KEY_INPUT_Y] == 1 &&
					KeyBuf[KEY_INPUT_Z] == 1)
			{
				DrawFormatString(0, 160 + 16, Green, "数字を入力してください!");
				break;
			}

		} while (target2 != ans);

		if (ans == target2)
		{
			DrawFormatString(0, 144 + 16 * 3, Green, "正解です!");
			break;
		}
		else
		{
			
			DrawFormatString(0, 144 + 48 * count3, Green, "不正解!");
			count3++;
		}





	};/*メインループ*/


	WaitKey();

	// DXライブラリの使用終了
	DxLib_End();

	return 0;
}

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: 文字が表示されない&インクリメントできない

#2

投稿記事 by Dixq (管理人) » 6年前

まずDXライブラリでゲームを作る基本的な骨格もできていない状態です。
ゲームプログラミングの館を一読して、基本をまず理解しましょう。
http://dixq.net/g/
1.9章
http://dixq.net/g/01_09.html
のコードを流用してそれを基本とし、
h.11章
http://dixq.net/g/h_11.html
のようなコードにならないように注意しましょう。

また、できないことが複数ある時は、できる最小限のコードにしてから、少しずつやりたいことを増やすのが定石です。
コードが長すぎて把握できない状態であれば短くしましょう。
現在if else if文が長すぎてとても理解しにくいコードになってしまっています。
まずは最小限のコードを書いてちゃんと動くところから徐々に始めてみましょう。

LEMO
記事: 23
登録日時: 7年前
住所: 関東地方ですね

Re: 文字が表示されない&インクリメントできない

#3

投稿記事 by LEMO » 6年前

そのとおりでした、まだまだゲームを作る段階までいってませんでした
もう一度本を読み、サイトを熟読して
そこからまた再スタートしてみます!

ご回答ありがとうございます!

返信

“C言語何でも質問掲示板” へ戻る