選択について質問です。

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

選択について質問です。

#1

投稿記事 by ZEROXE@ » 11年前

どうもこんにちは前回1回だけこの掲示板に質問させてもらったものです。
掲示板の質問リストどうりに質問させてもらいます。
1.自分はゲームが作りたい
2.作ってるプログラミングはこれになります。
(※プログラム中に出てくる名前は変えてあります。)
ヘッダファイルの詳細は数が多いのでここでは省いておきます。

コード:

#include "DxLib.h"
#include "紹介.h"
#include "OP.h"
#include "Start.h"
#include "Load.h"
#include "Extra.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){
	SetMainWindowText("名前(仮)");
	ChangeWindowMode(TRUE),DxLib_Init();
//______________________________________________________________________________________________________________
	//紹介画像表示
    company_P();
	//動画再生 ※後からムービーを飛ばせるようにすること
	movie();
//______________________________________________________________________________________________________________
	        // メニュー項目要素を5つ作る
	int XT,XY,SizeXA,SizeYB,Cbd,CCR;
	GetScreenState( &SizeXA , &SizeYB , &Cbd);
	CCR = strlen("エクストラ");
	int StrWidth = GetDrawStringWidth( "エクストラ" , CCR ) ;
	XT=SizeXA-StrWidth-80;
	XY=100;
	
        MenuElement_t MenuElement[5]={
                {  XT, XY, "始めから" }, // タグの中身の順番で格納される。
                { XT+20, XY+(50*1), "続きから" },
                { XT+20, XY+(50*2), "エクストラ" },
                { XT+20, XY+(50*3), "しす☆てむ" },
                { XT+20, XY+(50*4), "終了" },
        };
        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 = XT; // 座標を80にする
				} else {                       // 今処理しているのが、選択番号以外なら
					MenuElement[i].x = XT+20;// 座標を100にする
				}
			}
		}

		if(Key[ KEY_INPUT_RETURN ]==1){
			switch(SelectNum){
			case 0:
			Start();
			case 1:
			Load();
			break;

			case 2:
			Extra();
			break;

			case 3:
			goto System;
			break;

			case 4:
			goto END;
			}
		}
		// 描画フェーズ

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

goto PP;
//______________________________________________________________________________________________________________
System:
	
//______________________________________________________________________________________________________________PP:;


	//終了カッコ
	}
//______________________________________________________________________________________________________________
	END:
	DxLib_End(); // DXライブラリ終了処理
	return 0;
}
※このプログラムは、エラーなく起動します。
3.DxLibを使っているんですが、ゲームプログラミングの館の選択肢選択の部分のプログラムを使ってます。
少しいじってみてもできなかったので質問させていただきました。
そこで質問なんですが、方向キーを押した時に文字が横にずれるのではなく文字の色を変えたいのですが
どう改良したらいいのでしょうか?
それからon,offこのように2つの場合どうしたらいいでしょうか?(on offの横に表示できるといいのですが)
ご回答よろしくお願いします。
(分からない部分は上のコードの中にはありませんが参考程度に)

4.C言語、C++言語両方ともコンソールしかできないんですが、ここからソフトやゲームなどを作るためには
 どんな事を勉強すればいいのですか?
 ゲームなどの専門学校などに入るとプログラムが組めるようにはなるのでしょうか?
 
5.C++の知識は、ローベルC++入門講座100pくらい読み進めたくらいの知識+やさしいC++―まずは「C言語」からはじめよう!!を読破しました。
 これくらいのプログラムの知識です。

 OS Windows 7 64bit・Microsoft VBA C++ Express・DxLib

色々質問させていただきました、どうか回答のほうお願いいたしますm(_ _)m

ZEROXE@

Re: 選択について質問です。

#2

投稿記事 by ZEROXE@ » 11年前

少し記述ミスがあったので訂正します。
Microsoft Visual C++ 2010 Expressです。

アバター
little
記事: 44
登録日時: 12年前
連絡を取る:

Re: 選択について質問です。

#3

投稿記事 by little » 11年前

コード:

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

これをこうすることで可能だとは思います。

コード:

// 描画フェーズ
		for ( int i=0; i<5; i++ ){ // メニュー項目を描画
			if ( i == SelectNum ) DrawFormatString( MenuElement[i].x, MenuElement[i].y, GetColor(255,0,0), MenuElement[i].name ); // GetColor調整で選択中文字色調整
			else DrawFormatString( MenuElement[i].x, MenuElement[i].y, GetColor(255,255,255), MenuElement[i].name );
		}
百聞は~

ZERO@

Re: 選択について質問です。

#4

投稿記事 by ZERO@ » 11年前

little s回答ありがとうございます。
色のほうは、どうやらできました。
ありがとうございます。
では、もうひとつの方なんですが、これは5つ項目がありますが、この項目を2つに減らす場合はどう改造したらよいのでしょうか?
プログラムの

コード:

 MenuElement_t MenuElement[5]={
                {  XT, XY, "始めから" }, // タグの中身の順番で格納される。
                { XT+20, XY+(50*1), "続きから" },
                { XT+20, XY+(50*2), "エクストラ" },
                { XT+20, XY+(50*3), "しす☆てむ" },
                { XT+20, XY+(50*4), "終了" },
        };
この部分の改良はできるんですが、下のほうの改良が上手くいきません。
どうかご回答のほうよろしくお願いしますm(_ _)m

アバター
little
記事: 44
登録日時: 12年前
連絡を取る:

Re: 選択について質問です。

#5

投稿記事 by little » 11年前

コード:

// 計算フェーズ 
 
                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 ){		// 下キーが押された瞬間だけ処理
			SelectNum = ( SelectNum + 1 ) % 2;	// 現在の選択項目を一つ下にずらす(ループする)
		}

		if ( Key[ KEY_INPUT_UP ] == 1 ){		// 上キーが押された瞬間だけ処理
			SelectNum = ( SelectNum + 1 ) % 2;	// 現在の選択項目を一つ上にずらす(逆ループする)
		}
自分はこのカーソル処理は扱ったことはないですが、文字の表示等はこの処理に応じて変更する形になると思います。
百聞は~

ZEROXE@

Re: 選択について質問です。

#6

投稿記事 by ZEROXE@ » 11年前

コード:

        // メニュー項目要素を5つ作る
        MenuElement_t MenuElement[2]={
                {  80, 100, "on" }, // タグの中身の順番で格納される。
                { 100, 150, "off" },
        };
        int SelectNum = 0; // 現在の選択番号

		        // while(裏画面を表画面に反映, メッセージ処理, 画面クリア, キー更新)
        while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){
        // 計算フェーズ 
        if ( Key[ KEY_INPUT_DOWN ] == 1 ){      // 下キーが押された瞬間だけ処理
            SelectNum = ( SelectNum + 1 ) % 2;  // 現在の選択項目を一つ下にずらす(ループする)
        }
 
        if ( Key[ KEY_INPUT_UP ] == 1 ){        // 上キーが押された瞬間だけ処理
            SelectNum = ( SelectNum + 1 ) % 2;  // 現在の選択項目を一つ上にずらす(逆ループする)
        }
		
		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<2; i++ ){ // メニュー項目を描画
			DrawFormatString( MenuElement[i].x, MenuElement[i].y, GetColor(255,255,255), MenuElement[i].name );
		}
		}
2つの項目で動作しますが、エラー文が出てきました。
ビルドの段階ではエラーが出ていないので入力ミスではないようですが。
プログラムを実行し、そして×ボタンで終了したところエラーがでてきました。
↓はエラー文の内容になります。
Debug Error!
Program:~~File:
Run-Time Check Faiure #2 - Stack around the variable 'MenuElement' was corrupted. (Press Retry to debug the application)
と出てきたんですが、どういうエラー内容でしょうか
返答のほうよろしくお願いいたしますm(_ _)m

アバター
little
記事: 44
登録日時: 12年前
連絡を取る:

Re: 選択について質問です。

#7

投稿記事 by little » 11年前

コード:

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<2; i++ ){ // メニュー項目を描画
            DrawFormatString( MenuElement[i].x, MenuElement[i].y, GetColor(255,255,255), MenuElement[i].name );
        }
修正方法はこれと同じです。
百聞は~

ZEROXE@

Re: 選択について質問です。

#8

投稿記事 by ZEROXE@ » 11年前

little s回答ありがとうございます。
今のでエラーが直りましたありがとうございます。
問題のほう解決しました。
最後にプログラムの勉強についての仕方ですが、
little sはどのように勉強をしてきたんでしょうか?
また独学ですか?
そこのところを教えていただけないでしょうか?
無理でしたら言っていただけるとありがたいです。

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

Re: 選択について質問です。

#9

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

ZEROXE@さんにお願いします。
ZEROXE@さんの周りでは普通なのかも知れませんが名前 sという言い回しが一般的とは思えません。
ここには10代から50代まで幅広い年代の人が訪れますので一般的な言い回しを心がけてもらえると嬉しいです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ZEROXE@

Re: 選択について質問です。

#10

投稿記事 by ZEROXE@ » 11年前

softya(ソフト屋)さん、これは失礼しました。
確かにそうですね、名前の後ろにsとつけるのはネット用語であり知らない人もいるでしょうし、
相手に対しても失礼ですね。
こちらの配慮が足りませんでした、今後この掲示板を利用する時に気をつけたいと思います。
ご注意のほうありがとうございましたm(_ _)m ←このような顔文字のほうも控えたほうがよろしいでしょうか?
そこらへんご回答のほうよろしくお願いします。

アバター
little
記事: 44
登録日時: 12年前
連絡を取る:

Re: 選択について質問です。

#11

投稿記事 by little » 11年前

自分は長くなるので勉強中の人ということで…。
ゲームをひたすら作りたい場合、プログラムというよりとりあえず作ってみるという事が重要だと私は思います。

とりあえずさっきのようなエラーを出さないために、enumを少し調べてみるといいかもしれません。
前スレで書かれている、関数も必須ですので覚えたほうがいいと思います。

何作るのかは分かりませんが頑張ってください。
百聞は~

ZEROXE@

Re: 選択について質問です。

#12

投稿記事 by ZEROXE@ » 11年前

littleさん色々とご回答の方ありがとうございました。
質問の方全て解決、ご協力の方大変感謝しています。
enumという物を調べてみようと思います。
関数の方は、前よりは使えるようにはなったのでもっと使えるように
頑張って行きたいと思います。
後、色々とアドバイスありがとうございました。

ZEROXE@

Re: 選択について質問です。

#13

投稿記事 by ZEROXE@ » 11年前

副管理人さんからの回答が特にないようなのでこれでこの質問の方を引き上げたいと思います。
回答してくださったlittleさん、ご注意いただきましたsoftya(ソフト屋)さんありがとうございました。
では、これにて解決したいと思います。
ありがとうございました。

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

Re: 選択について質問です。

#14

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

ZEROXE@ さんが書きました:副管理人さんからの回答が特にないようなのでこれでこの質問の方を引き上げたいと思います。
回答してくださったlittleさん、ご注意いただきましたsoftya(ソフト屋)さんありがとうございました。
では、これにて解決したいと思います。
ありがとうございました。
どこでも使われる一般的な絵文字ぐらいならOKですよ。
2chのAAみたいなのは避けたほうが良いと思いますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ZEROXE@

Re: 選択について質問です。

#15

投稿記事 by ZEROXE@ » 11年前

一般的な絵文字は良いのですね。
相手に対して失礼のない程度に使いたいと思います。
softya(ソフト屋)さん回答ありがとうございました。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: 選択について質問です。

#16

投稿記事 by ISLe » 11年前

ZEROXE@ さんが書きました:確かにそうですね、名前の後ろにsとつけるのはネット用語であり知らない人もいるでしょうし、
わたしは草の根ネット時代から数えると20年以上、インターネットだけでも15年以上、ネットに接してきましたが、それは初めて知りました。
後学のためにどこの常識なのか教えていただけないでしょうか。

#typoだと思ってました。typoからはじまったのかもしれませんが。

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

Re: 選択について質問です。

#17

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

ISLe さんが書きました:
ZEROXE@ さんが書きました:確かにそうですね、名前の後ろにsとつけるのはネット用語であり知らない人もいるでしょうし、
わたしは草の根ネット時代から数えると20年以上、インターネットだけでも15年以上、ネットに接してきましたが、それは初めて知りました。
後学のためにどこの常識なのか教えていただけないでしょうか。

#typoだと思ってました。typoからはじまったのかもしれませんが。
私もよく知らないのですがネトゲのチャットで使う s=さん などの略称のようです。
どこのネトゲで使われているかは謎です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: 選択について質問です。

#18

投稿記事 by ISLe » 11年前

softya(ソフト屋) さんが書きました:私もよく知らないのですがネトゲのチャットで使う s=さん などの略称のようです。
どこのネトゲで使われているかは謎です。
なるほどネトゲですか。
そう言えばPSO2やってるときに見たような気もします。
タイプ途中で送信してしまったのかと思ってしまいますが。

typoではなく、タイプするのが面倒くさいということですね。
敬称を付けるのが面倒くさい、と。
それが許される仲であれば呼び捨てで良いのではないですかね。
むかしはチャットで(メモリやディスクスペースを圧迫しないように)敬称略が常識と言われていたこともありましたが。

閉鎖

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