お願いします

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
学生@島根

お願いします

#1

投稿記事 by 学生@島根 » 7年前

3.4章のメニュー画面を作ったのですがゲーム終了の
項目を選んでエンターを押したらゲームを終わるようにしたいのですが
どういう文を書けばいいですか?お願いします

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: お願いします

#2

投稿記事 by softya(ソフト屋) » 7年前

質問に関しては、ファーラムルールにありますテンプレートをお使いください。
http://dixq.net/board/board.html

【補足】なぜ聞くかというとC言語の知識が十分にあり、3.4章までをしっかり理解できているなら悩むほどのことでは無いからです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

初級者
記事: 200
登録日時: 9年前

Re: お願いします

#3

投稿記事 by 初級者 » 7年前

老婆心ながら…。

一つの文の中で「~ですが、~ですが、~」という風に
「ですが」を連発するのは悪文の典型的な例です。
私だったら、こう書きます(あまり信用しないでくださいね)。

3.4章のメニュー画面を作っています。
ゲーム終了の項目を選んでエンターを押したら
ゲームを終わるようにしたい場合、どういう文を書けばいいですか?


それから、質問のタイトルは、内容を的確に反映したものにする方が
読んでもらいやすくなると思います。
新聞記事の見出しって、そうなってますよね。
「お願いします」とか「教えてください」なんていうのはダメ。

学生@島根

Re: お願いします

#4

投稿記事 by 学生@島根 » 7年前

ご指導ありがとうございました

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

Re: お願いします

#5

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

解決マークが付いていますが本当に解決しましたか?
答えは

コード:

		if(SelectNum == 4 && Key[KEY_INPUT_RETURN] == 1){
			break;
		}
を書くだけです。
ゲーム終了の項目はSelectNumが4ですよね?
エンターが押された瞬間はKey[KEY_INPUT_RETURN]が1になりますから、この条件の時にメインループから抜ければいいです。
全体のプログラムソースは以下のようになります。

コード:

#include "DxLib.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;
}

// メニュー項目の表示に必要な構造体を用意する
typedef struct{
	int x, y;       // 座標格納用変数
	char name[128]; // 項目名格納用変数
} MenuElement_t ;

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定

	// メニュー項目要素を5つ作る
	MenuElement_t MenuElement[5]={
		{  80, 100, "ゲームスタート" }, // タグの中身の順番で格納される。xに80が、yに100が、nameに"ゲームスタート"が
		{ 100, 150, "おまけ" },
		{ 100, 200, "ヘルプ" },
		{ 100, 250, "コンフィグ" },
		{ 100, 300, "ゲーム終了" },
	};
	int SelectNum = 0; // 現在の選択番号

	// while(裏画面を表画面に反映, メッセージ処理, 画面クリア, キー更新)
	while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){

		// 計算フェーズ 

		if( Key[ KEY_INPUT_DOWN ] == 1 ){ // 下キーが押された瞬間だけ処理

			SelectNum = ( SelectNum + 1 ) % 5; // 現在の選択項目を一つ下にずらす(ループする)
		}

		if( Key[ KEY_INPUT_UP ] == 1 ){ // 上キーが押された瞬間だけ処理

			SelectNum = ( SelectNum + 4 ) % 5; // 現在の選択項目を一つ上にずらす(逆ループする)
		}

		if( Key[ KEY_INPUT_DOWN ] == 1 || Key[ KEY_INPUT_UP ] == 1 ){ // 下キーか、上キーが押された瞬間
			for( int i=0; i<5; i++ ){              // メニュー項目数である5個ループ処理
				if( i == SelectNum ){          // 今処理しているのが、選択番号と同じ要素なら
					MenuElement[i].x = 80; // 座標を80にする
				} else {                       // 今処理しているのが、選択番号以外なら
					MenuElement[i].x = 100;// 座標を100にする
				}
			}
		}

		// 描画フェーズ

		for( int i=0; i<5; i++ ){ // メニュー項目を描画
			DrawFormatString( MenuElement[i].x, MenuElement[i].y, GetColor(255,255,255), MenuElement[i].name );
		}

		if(SelectNum == 4 && Key[KEY_INPUT_RETURN] == 1){
			break;
		}

	}

	DxLib_End(); // DXライブラリ終了処理
	return 0;
}

閉鎖

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