ページ 11

Enterを押して会話を進めるには

Posted: 2014年11月03日(月) 17:56
by JON
短い文章を表示するプログラムを書いているのですが、Enterを押して次に進める方法がよくわかりません。
以下コードになります

コード:

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	int image[10];
	int back[10];
	int mat[20];
	int font;
	int white = GetColor(255, 255, 255);


	SetGraphMode(800, 600, 32);
	ChangeWindowMode(TRUE);
	if (DxLib_Init() == -1) 
		return -1;

	back[0] =  LoadGraph("./image/back1.jpg");
	image[0] = LoadGraph("./image/witch.png");
	mat[0] =  LoadGraph("./image/box1.png");
	font = CreateFontToHandle("メイリオ", 28, 1, DX_FONTTYPE_ANTIALIASING_EDGE);

	SetDrawScreen(DX_SCREEN_BACK);
	
	while (ProcessMessage() == 0 && ClearDrawScreen() == 0  && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
	{
		DrawGraph(0, 0, back[0], TRUE);
		DrawGraph(10, 410, mat[0], TRUE);

//この部分
		DrawStringToHandle(30, 450, "会話1", white, font);
		DrawStringToHandle(30, 490, "会話2", white, font);
		DrawStringToHandle(30, 530, "会話3", white, font);
		
				
		ScreenFlip();
	}

	DxLib_End();

	return 0;
}
会話1と会話2の間にWaitKey();を入れればいいのかと思いましたが、入れてみたところうまく動作しませんでした。

どのようにすればEnterキーを押して次の文章が表示できるようになるのでしょうか?

Re: Enterを押して会話を進めるには

Posted: 2014年11月03日(月) 18:06
by みけCAT
Enterキーを押した時に表示する文章を切り替えるようにすればいいと思います。
こんな感じでしょうか?

コード:

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	int image[10];
	int back[10];
	int mat[20];
	int font;
	int white = GetColor(255, 255, 255);
	bool enterFlag = 0;
	int hatugenCount = false;

	const char* hatugen[5][3] = {
		{"会話1", "会話2", "会話3"},
		{"会話4", "会話5", "会話6"},
		{"会話7", "会話8", "会話9"},
		{"独り言1", "独り言2", "独り言3"},
		{"独り言4", "独り言5", "独り言6"}
	};

	SetGraphMode(800, 600, 32);
	ChangeWindowMode(TRUE);
	if (DxLib_Init() == -1) 
		return -1;

	back[0] =  LoadGraph("./image/back1.jpg");
	image[0] = LoadGraph("./image/witch.png");
	mat[0] =  LoadGraph("./image/box1.png");
	font = CreateFontToHandle("メイリオ", 28, 1, DX_FONTTYPE_ANTIALIASING_EDGE);

	SetDrawScreen(DX_SCREEN_BACK);
	
	while (ProcessMessage() == 0 && ClearDrawScreen() == 0   &&  CheckHitKey(KEY_INPUT_ESCAPE) == 0)
	{
		DrawGraph(0, 0, back[0], TRUE);
		DrawGraph(10, 410, mat[0], TRUE);

//この部分
		if(CheckHitKey(KEY_INPUT_RETURN)) {
			if(!enterFlag && hatugenCount < 4) hatugenCount++;
			enterFlag = true;
		} else {
			enterFlag = false;
		}

		for (int i = 0; i < 3; i++) {
			DrawStringToHandle(30, 450 + 40 * i, hatugen[hatugenCount][i], white, font);
		}
		
				
		ScreenFlip();
	}

	DxLib_End();

	return 0;
}
それとも、こんな感じでしょうか?

コード:

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	int image[10];
	int back[10];
	int mat[20];
	int font;
	int white = GetColor(255, 255, 255);
	bool enterFlag = false;
	int kaiwaCount = 0;

	const char* kaiwa[3] = {
		"会話1",
		"会話2",
		"会話3"
	};

	SetGraphMode(800, 600, 32);
	ChangeWindowMode(TRUE);
	if (DxLib_Init() == -1) 
		return -1;

	back[0] =  LoadGraph("./image/back1.jpg");
	image[0] = LoadGraph("./image/witch.png");
	mat[0] =  LoadGraph("./image/box1.png");
	font = CreateFontToHandle("メイリオ", 28, 1, DX_FONTTYPE_ANTIALIASING_EDGE);

	SetDrawScreen(DX_SCREEN_BACK);
	
	while (ProcessMessage() == 0 && ClearDrawScreen() == 0   &&  CheckHitKey(KEY_INPUT_ESCAPE) == 0)
	{
		DrawGraph(0, 0, back[0], TRUE);
		DrawGraph(10, 410, mat[0], TRUE);

//この部分
		if(CheckHitKey(KEY_INPUT_RETURN)) {
			if(!enterFlag && kaiwaCount < 2) kaiwaCount++;
			enterFlag = true;
		} else {
			enterFlag = false;
		}

		DrawStringToHandle(30, 450 + 40 * kaiwaCount, kaiwa[kaiwaCount], white, font);
		
				
		ScreenFlip();
	}

	DxLib_End();

	return 0;
}

Re: Enterを押して会話を進めるには

Posted: 2014年11月03日(月) 20:58
by JON
前者のコードが目当ての動作に近く、大変参考になりました。
もっと柔軟に考えていかなければならないと痛感しました(汗

わかりやすい返信ありがとうございました。