Music Room の作り方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Rittai_3D
記事: 525
登録日時: 11年前

Music Room の作り方

#1

投稿記事 by Rittai_3D » 11年前

またまたお世話になります。3Dです。今回は、MusicRoom(言葉の通り音楽を再生するところ)を作っています。
新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]の"選択画面を作ってみよう"を利用して自分なりに書いてみました。
main.cpp

コード:


#include "DxLib.h"
#include <stdio.h>
#include <stdlib.h>

static 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;	//座標
	int color;	//文字の色
	char music_name[128];//ぶんかちょうは6曲しかない
}music_t;

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
	ChangeWindowMode(TRUE),DxLib_Init(),SetDrawScreen(DX_SCREEN_BACK);

	int Font01 = CreateFontToHandle("平成ゴシック",16,16,DX_FONTTYPE_ANTIALIASING_EDGE_8X8,-1,1,0,-1);//フォント
	int img_back01 = LoadGraph("title03a.png");		//背景その1
	int img_back02 = LoadGraph("title03b.png");		//背景その2

	int WHITE = GetColor(130,105,105);		//色
	int YELLOW= GetColor(240,210,210);		//GetColorの引数が白、黄色じゃないのは無視してください

	int fp = FileRead_open("music.txt");	//ファイルを開く
	int i=0;
	char buf[128];

	if(fp == NULL){		//ファイルが無ければ
		MessageBox(NULL,TEXT("ファイルが存在しません"),TEXT("警告"),MB_OK|MB_ICONERROR);
		return -1;	//戻り値 -1
	}

	for(i=0;i<4;i++)//最初の4行は飛ばす
		while(FileRead_getc(fp)!='\n');

	music_t music[6] = { // 構造体にこの順番で入れていく
		{ 60, 130, YELLOW, "No.1 天狗の手帖 ~ Mysterious Note"},
		{ 65, 150, WHITE , "No.2 風の循環 ~ Wind Tour"		},
		{ 65, 170, WHITE , "No.3 天狗が見ている ~ Black Eyes"	},
		{ 65, 190, WHITE , "No.4 東の国の眠らない夜"			},
		{ 65, 210, WHITE , "No.5 レトロスペクティブ京都"		},
		{ 65, 230, WHITE , "No.6 風神少女"						},
	};

	int SelectNum=0;		//現在選択中の

	while(!ProcessMessage() && !ClearDrawScreen() && !gpUpdateKey() && !CheckHitKey(KEY_INPUT_ESCAPE)){

		if( Key[ KEY_INPUT_DOWN ] == 1 || (Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30)){		// キーが押された処理
			SelectNum = ( SelectNum + 1 ) % 6;	// 現在の選択項目を一つ下にずらす(ループする)
		}
		if(Key[ KEY_INPUT_UP ] == 1 || (Key[KEY_INPUT_UP]%5==0 && Key[KEY_INPUT_UP]>30)){
			SelectNum = (SelectNum +5 ) % 6;	//上にずらす
		}
		if(Key[ KEY_INPUT_UP ] == 1 || Key[ KEY_INPUT_DOWN ] == 1 ||(Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30) ||
			(Key[KEY_INPUT_UP]%5==0 && Key[KEY_INPUT_UP]>30)){

			for( int i=0; i<6; i++ ){			// メニュー項目数である5個ループ処理
				if( i == SelectNum ){			// 今処理しているのが、選択番号と同じ要素なら
					music[i].color = YELLOW;	// 色を帰る
					music[i].x     = 60;		// 座標を買える
				} else {						// 今処理しているのが、選択番号以外なら
					music[i].color = WHITE;		// 色を変える
					music[i].x     = 65;		// 座標を替える
				}
			}
		}
		// 描画フェーズ
		DrawGraph(  0,0,img_back01,TRUE);	// 画像を描写
		DrawGraph(512,0,img_back02,TRUE);	// 同上

		for(i=0; i<6; i++ ){ // 項目を描画
			DrawStringToHandle(music[i].x,music[i].y,music[i].music_name,music[i].color,Font01);
		}
		if(strchr(buf,'#')==NULL){
			DrawFormatString(65,320+18*i,YELLOW,"%s",buf);
			i++;
		}
		ScreenFlip();
	}
	FileRead_close(fp);
	// 終了処理
	DxLib_End();
	return 0;
}
ここに、曲のコメントを表示させるプログラムを書きたいのですが、うまく行きません。
music.txt
コメントは6行づつで区切ります。

コード:


# 曲のコメント
# この記号でコメント
# 

 コメント1
 コメント
 コメント
 コメント
 コメント
 コメント

 コメント2
 コメント
 コメント
 コメント
 コメント
 コメント

 コメント3
 コメント
 コメント
 コメント
 コメント
 コメント

 コメント4
 コメント
 コメント
 コメント
 コメント
 コメント

 コメント5
 コメント
 コメント
 コメント
 コメント
 コメント

 コメント6
 コメント
 コメント
 コメント
 コメント
 コメント

たとえば、"No.1 天狗の手帖 ~ Mysterious Note"を選択し、さらにzキーが押されたら(65,320)に"コメント1"を表示し、
音楽を再生する(まだその部分はまだ作っていません)プログラムを書きたいのですが、「フフフフフフフフフフフフフフフ」と表示されます。

また、"No.2 風の循環 ~ Wind Tour"を選択し、zキーが押されたら"コメント2"を表示...としたいのですが、
プログラムの書き方が全く分かりません。どの様に書けばよいかお教え願います.

分かりづらいと思いますので、参考画像を添付しておきます。

これまた汚いコードですが、宜しくお願いします。

P.S

>>soft屋様

前回はインデントの方法を教えてくださり有難うございました。
これでかなり楽になりました。

[追記]
すいません。開発環境を書いていませんでした。

Windows XP
VC2008EE
添付ファイル
th005.png
初心者です

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

Re: Music Room の作り方

#2

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

(1) 作り方1
読み込みはwhileループに入る前に行なってください。
とりあえず、それだけ出来たらデバッガで動作を確認します。
これが上手く行ったら次に進みます。

(2)作り方2。上と逆なな作り方。
コメントを読み込むのではなく構造体配列の初期値でコメントを設定して表示するものを先に作ります。
これが上手く動いたら、読み込む処理を追加します。

ゲームプログラミングの館の「メニュー画面の作り方」でコンフィグ画面との切り替えなどが参考になるでしょう。
【訂正】 画像を今頃理解しました。下に表示するんですね。それなら表示フラグだけで良いと思います。
とりあえず、うまく動かなくても良いので(1)か(2)で作れるだけ作ってみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
せんちゃ
記事: 50
登録日時: 13年前
住所: 江別市東野幌町
連絡を取る:

Re: Music Room の作り方

#3

投稿記事 by せんちゃ » 11年前

まずbufが初期化されていません。
fopenでbufにデータを入れたいのだと思いますが、
そもそもデータを入れる処理が入ってないので当然コメントは表示されません。
あと日本語(ワイド文字)は1文字2バイトなので1バイトの配列128だと1行20文字で最大6行と見積もると
20×6=120文字×2バイトなので多分足りません。

コード:

        for(i=0; i<6; i++ ){ // 項目を描画
            DrawStringToHandle(music[i].x,music[i].y,music[i].music_name,music[i].color,Font01);
        }
        if(strchr(buf,'#')==NULL){
            DrawFormatString(65,320+18*i,YELLOW,"%s",buf);
            i++;
        }
の処理ですと曲名が同じ場所に6回描画されてしまいます。
正しくは

コード:

        for(i=0; i<6; i++ ){ // 項目を描画
            DrawFormatString(65,320+18*i,YELLOW,"%s",buf);
        }
でしょうか。
・1行最大表示数
・最大表示行
でまず分割したほうがわかりやすいです。
つまりchar buf[128]は1行のサイズにして、6行分さらに領域を取り
char buf[6][128]
とするのが適切です。

あとは各楽曲のコメントを必要に応じてこの中に入れてあげる仕組みを作りましょう。

FileReadを使わないで一旦ソースにコメントを定数で持ってみてはどうでしょうかね
改行コードとかはDrawFormatStringでは反映されないので、多分期待したとおりの描画はされないですし。
ヽ(*゚д゚)ノ カイバー

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#4

投稿記事 by Rittai_3D » 11年前

すぐに返信出来なくてすいません。課題と部活で昨日は出来ませんでした。

>>softya様

返信ありがとうございます。
読み込みは

コード:

while(FileRead_gets(buf,256,fp)!=NULL)
と書いて見たのですが、何故かフリーズしてしまいました。
読み込みはこれであってますか?

>>せんちゃ様

返信ありがとうございます。

コードに

コード:

char buf[6][256]={
        {"コメント1"},
//スマホからなので以下省略
}
として

コード:

for(i=0;i<6;i++){
    DrawFormatStringToHandle(65,320+18*i,WHITE,Font01,"%s",buf[i]);
}
としたら上手くいきました!

ここで質問なんですけど、曲のコメントは一曲6行あり、それを6曲分書かなければ
いけないのですが、

コード:

char buf1[6][128]={};
char buf2[6][128]={};
.
.
.
char buf6[6][128]={};
こうしないといけないのですか?
初心者です

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

Re: Music Room の作り方

#5

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

>と書いて見たのですが、何故かフリーズしてしまいました。
>読み込みはこれであってますか?

bufのサイズを超えているのでアウトです。
こういう場合は、
FileRead_gets(buf,sizeof(buf),fp)!=NULL
としてミスを防ぎます。sizeof()が自動的にサイズ計算して値を入れてくれますので。

>ここで質問なんですけど、曲のコメントは一曲6行あり、それを6曲分書かなければ
>いけないのですが、

コメントもmusic_t構造体に含むべきだと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#6

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。
まだ初心者の自分にとってファイルから読み込みは難しいと思いました。
一旦、せんちゃ様のおっしゃったように、ソースにコメントを直書きしたいと思います。

そこで質問なんですが、

コード:

for(i=0;i<6;i++){
    music[i].cmt_buf[i][256]={
          {"コメント"},
//スマホからなので4つ省略
          {"コメント"},
     };
}
とすると、
構文エラーが出ます。どうすればいいのでしょうか?
初心者です

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

Re: Music Room の作り方

#7

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

それは、初期値の設定方法ではない文法的にデタラメな行為だからです。

コード:

    music_t music[6] = { // 構造体にこの順番で入れていく
        { 60, 130, YELLOW, "No.1 天狗の手帖 ~ Mysterious Note"},
        { 65, 150, WHITE , "No.2 風の循環 ~ Wind Tour"      },
        { 65, 170, WHITE , "No.3 天狗が見ている ~ Black Eyes"    },
        { 65, 190, WHITE , "No.4 東の国の眠らない夜"           },
        { 65, 210, WHITE , "No.5 レトロスペクティブ京都"     },
        { 65, 230, WHITE , "No.6 風神少女"                      },
    };
ここにコメントを書き加えます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#8

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

という事は、

コード:

    music_t music[6] = { // 構造体にこの順番で入れていく
        { 60, 130, YELLOW, "No.1 天狗の手帖 ~ Mysterious Note",{"コメント"}   /*略*/},
    };
と書くのですか?
自分としては、もっとスマートな書き方をしたいですが...
初心者です

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

Re: Music Room の作り方

#9

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

3D_3D さんが書きました:>>softya様

返信ありがとうございます。

という事は、

コード:

    music_t music[6] = { // 構造体にこの順番で入れていく
        { 60, 130, YELLOW, "No.1 天狗の手帖 ~ Mysterious Note",{"コメント"}   /*略*/},
    };
と書くのですか?
自分としては、もっとスマートな書き方をしたいですが...
スマートですか? 改行の問題だと思うんですけどね。

コード:

    music_t music[6] = { // 構造体にこの順番で入れていく
        { 60, 130, YELLOW, "No.1 天狗の手帖 ~ Mysterious Note",
        	{
				"コメント1-1",
				"コメント1-2",
				"コメント1-3",
				"コメント1-4",
				"コメント1-5",
				"コメント1-6",
        	}
        },
    };
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#10

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

先ほどの書き込みは、恥ずかしいので無視して下さい。

今、実行してみたところ、エラーは無かったのですが、コメントが一行しか表示されませんでした。

コード:

typedef struct{
     int x,y;
     int color;
     char music_name[128];
     char cmt_buf[6][256];
}music_t;
と新たにcmt_bufを追加しました。何故一行しか表示されないのでしょうか?
初心者です

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

Re: Music Room の作り方

#11

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

表示されないのは、表示側の処理の問題ではないでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#12

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

表示側もちゃんと

コード:

DrawFormatStringToHandle(80,350+18*i,YELLOW,Font01,"%s",music[i].cmt_buf[i]);
に直しました。
初心者です

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#13

投稿記事 by Rittai_3D » 11年前

すいません。何回かコンパイルしてたら表示されました。

さっきのは一体...?

もし、試して下さった人が居ましたら、お礼申し上げます。
初心者です

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#14

投稿記事 by Rittai_3D » 11年前

次の質問です。
「"No.1 天狗の手帖 ~ Mysterious Note"を選択し、さらにzキーが押されたら(65,320)に"コメント1"を表示」

を実装したいのですが、考え方がよくわかりません。ヒントを下さい。
初心者です

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

Re: Music Room の作り方

#15

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

3D_3D さんが書きました:すいません。何回かコンパイルしてたら表示されました。
さっきのは一体...?
もし、試して下さった人が居ましたら、お礼申し上げます。
ソースコードが無いので試せないのでは?
3D_3D さんが書きました: 次の質問です。
「"No.1 天狗の手帖 ~ Mysterious Note"を選択し、さらにzキーが押されたら(65,320)に"コメント1"を表示」

を実装したいのですが、考え方がよくわかりません。ヒントを下さい。
キーを押す毎にループ回数を増やせば良いのでは無いでしょうか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#16

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

自分なりに作って見たのですが、これだと各コメントの(曲番号)行だけが表示されてしまします。

コード:

 for( int i=0; i<6; i++ ){           // メニュー項目数である5個ループ処理
     if( i == SelectNum ){           // 今処理しているのが、選択番号と同じ要素なら
              music[i].color = YELLOW;    // 色を帰る
              music[i].x     = 60;        // 座標を買える
              SelectFlag      =i
            } else {                        // 今処理しているのが、選択番号以外なら
                 music[i].color = WHITE;     // 色を変える
                  music[i].x     = 65;        // 座標を替える
                }
        }
}
で、コメントを表示の所で

コード:

for(i=0;i<6:i++){
     if(SelectFlag == i){
        DrawFormatStringToHandle(80,350+18*i,YELLOW,Font01,"%s",music[i].cmt_buf[i]);
     }
}
としてみました。

ループの回数を増やすというのは、これであってますか?
初心者です

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#17

投稿記事 by Rittai_3D » 11年前

すいません。自己解決しました。

コード:

for(i=0;i<6;I++){//曲の数
     for(int j=0;j<6;j++){//コメントの行数
          DrawFormatStringToHandle(80,350+18*j,YELLOW,Font01,"%s",music[i].cmt_buf[j]);
     }
}
で選択してしる曲のコメントが出ましたが、zキーの処理がわかりません。

if(Key[KEY_INPUT_Z]==1)とするとキーが押された時に一瞬だけ出て消えてしまいます。
初心者です

アバター
せんちゃ
記事: 50
登録日時: 13年前
住所: 江別市東野幌町
連絡を取る:

Re: Music Room の作り方

#18

投稿記事 by せんちゃ » 11年前

コード:

if(Key[KEY_INPUT_Z]==1)
のネストの中に

コード:

for(i=0;i<6;I++){//曲の数
     for(int j=0;j<6;j++){//コメントの行数
          DrawFormatStringToHandle(80,350+18*j,YELLOW,Font01,"%s",music[i].cmt_buf[j]);
     }
}
を入れてたりしませんか。
なんか私も昔そんなミスをしたことがあるのでなんとなく予想してみます
ヽ(*゚д゚)ノ カイバー

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

Re: Music Room の作り方

#19

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

最新の全コードを提示してくださいね。

で、自己解決したコードも何か変です。
ヒントとして、選択している番号と何処までコメントを表示しているかの番号変数が絶対必要です。

それとせんちゃさんの言われる通り、if(Key[KEY_INPUT_Z]==1)の場所と処理が悪いと思います。
if(Key[KEY_INPUT_Z]==1)が操作するのは、「何処までコメントを表示しているかの番号変数」だけです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#20

投稿記事 by Rittai_3D » 11年前

>>せんちゃ様

返信ありがとうございます。

ただいま学校(休み時間)なので、帰宅したら確認したいと思います。

恐らくそうなってると思います。早起きしてプログラミングしていたので、寝ぼけてやらかした可能性が…
初心者です

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#21

投稿記事 by Rittai_3D » 11年前

>>softya様

コード:

#include "DxLib.h"
#include <stdio.h>
#include <stdlib.h>

static 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;	//座標
	int color;	//文字の色
	char music_name[128];//ぶんかちょうは6曲しかない
	char cmt_buf[6][256];//コメント
}music_t;

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
	ChangeWindowMode(TRUE),SetAlwaysRunFlag(TRUE),DxLib_Init(),SetDrawScreen(DX_SCREEN_BACK);

	int Font01 = CreateFontToHandle("平成ゴシック",16,16,DX_FONTTYPE_ANTIALIASING_EDGE_8X8,-1,1,0,-1);//フォンント
	int Font02 = CreateFontToHandle("平成ゴシック",14,10,DX_FONTTYPE_ANTIALIASING_EDGE_8X8,-1,1,0,-1);//フォンント
	int img_back01 = LoadGraph("title03a.png");		//背景その1
	int img_back02 = LoadGraph("title03b.png");		//背景その2

	int WHITE = GetColor(130,105,105);		//色
	int YELLOW= GetColor(240,210,210);		//GetColorの引数が白、黄色じゃないのは無視してください

	int i=0;

	music_t music[6] = { // 構造体にこの順番で入れていく
		{ 60, 130, YELLOW, "No.1 天狗の手帖 ~ Mysterious Note",
			{
				"タイトル、メニュー画面のテーマです。",
				"いつもの曲です。",
				"今回は少し暗くレトロな感じが出るようにして、妖怪らしさが出る",
				"ようにしました。",
				"ザーというノイズは妖怪のミステリアスな部分です。決してモニタ",
				"とスピーカーが逝かれたわけでは無いのでご安心を。",
			}
		},
		{ 65, 150, WHITE , "No.2 風の循環 ~ Wind Tour"		,
			{
				"撮影曲1です。",
				"今回のゲームは、通常のボス戦のような曲ではなく、もっと日常感",
				"を出したかった為、こんな感じに",
				"随分と落ち着いた感じですが、実際文は余裕です。自分から被写体",
				"をおちょくりに出かけている様なもんですし。",
				"",
			}
		},
		{ 65, 170, WHITE , "No.3 天狗が見ている ~ Black Eyes"	,
			{
				"撮影曲2です。",
				"怖いような可愛らしいような奇妙なノリを持たせました。",
				"人を攫ったり喰ったりが当たり前の妖怪なのに、どこか陽気で人当",
				"たりも良さそうな所が、幻想の天狗のイメージ。",
				"この曲には、その怖さと陽気さ、暢気さを混ぜた感じになっている",
				"かと思います。",
			}
		},
		{ 65, 190, WHITE , "No.4 東の国の眠らない夜"			,
			{
				"撮影曲3です。中盤以降に使う曲として用意しました。",
				"",
				"ボスも文も楽しんでいる感じを出しつつ、ボスに威圧感を持たせる",
				"のは難しい物です。",
				"この曲はそれを意識して、軽快で明るいながらもボスが強そうに",
				"見える様に格好つけて書きました。特にピアノ。",

			}
		},
		{ 65, 210, WHITE , "No.5 レトロスペクティブ京都"		,
			{	
				"撮影曲4のテーマです。後半に使う曲として用意しました。",
				"",
				"レトロな日本をイメージしたところ、私の中ではこんな感じに。",
				"雪の降る京の都。人気の少ない夜の道。",
				"でも、この曲のレトロさは私のレトロさでして……。",
				"この曲を聴いていると何となく昔を思い出してしまう。",
			}
		},
		{ 65, 230, WHITE , "No.6 風神少女"						,
			{
				"撮影曲5のテーマです。",
				"この曲は文花帖のテーマ曲なので入れないわけにはいかないと思い",
				"入っております。",
				"本編では殆ど使われておりませんが:-)",
				"",
				"",
			}
		},
	};

	int SelectNum=0;		//現在選択中
	int SelectFlag = 0;		//現在表示している曲のコメント

	while(!ProcessMessage() && !ClearDrawScreen() && !gpUpdateKey() && !CheckHitKey(KEY_INPUT_ESCAPE)){

		if( Key[ KEY_INPUT_DOWN ] == 1 || (Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30)){		// キーが押された処理
			SelectNum = ( SelectNum + 1 ) % 6;	// 現在の選択項目を一つ下にずらす(ループする)
		}
		if(Key[ KEY_INPUT_UP ] == 1 || (Key[KEY_INPUT_UP]%5==0 && Key[KEY_INPUT_UP]>30)){
			SelectNum = (SelectNum +5 ) % 6;	//上にずらす
		}
		if(Key[ KEY_INPUT_UP ] == 1 || Key[ KEY_INPUT_DOWN ] == 1 ||(Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30) ||(Key[KEY_INPUT_UP]%5==0 && Key[KEY_INPUT_UP]>30)){
			for( i=0; i<6; i++ ){				// 項目数である6個ループ処理
				if( i == SelectNum ){			// 今処理しているのが、選択番号と同じ要素なら
					music[i].color  = YELLOW;	// 色を帰る
					music[i].x      = 60;		// 座標を買える
					SelectFlag      = i;
				} else {						// 今処理しているのが、選択番号以外なら
					music[i].color  = WHITE;	// 色を変える
					music[i].x      = 65;		// 座標を替え
				}
			}
		}
		// 描画フェーズ

		DrawGraph(  0,0,img_back01,TRUE);	// 画像を描写
		DrawGraph(512,0,img_back02,TRUE);	// 同上

		for(i=0; i<6; i++ ){ // 項目を描画
			DrawStringToHandle(music[i].x,music[i].y,music[i].music_name,music[i].color,Font01);
		}

		for(i=0;i<6;i++){//コメントの総数
			for(int j=0;j<6;j++){//コメントの行数
				if(SelectFlag == i){
					DrawFormatStringToHandle(80,350+18*j,YELLOW,Font02,"%s",music[i].cmt_buf[j]);
				}
			}
		}
		ScreenFlip();
	}
	DxLib_End();
	return 0;
}
Font02を新しく作りました。

朝の書き込みに漏れがありました。申し訳ありません。
初心者です

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

Re: Music Room の作り方

#22

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

これは

コード:

		for(i=0;i<6;i++){//コメントの総数
			for(int j=0;j<6;j++){//コメントの行数
				if(SelectFlag == i){
					DrawFormatStringToHandle(80,350+18*j,YELLOW,Font02,"%s",music[i].cmt_buf[j]);
				}
			}
		}
これと同じ動作をします。

コード:

		for(int j=0;j<6;j++){//コメントの行数
			DrawFormatStringToHandle(80,350+18*j,YELLOW,Font02,"%s",music[SelectFlag].cmt_buf[j]);
		}
さらに変数の値がSelectNumとSelectFlagでは同じと言う意味では、

コード:

		for(int j=0;j<6;j++){//コメントの行数
			DrawFormatStringToHandle(80,350+18*j,YELLOW,Font02,"%s",music[SelectNum].cmt_buf[j]);
		}
と同じです。つまり、無駄に変数と処理が増えているだけです。[/s]

失礼。選択の決定を兼ねているんですね。
では、SelectFlagでフラグと番号を兼ねるのを止めて、それぞれ別の変数に分けてください。
あとZ処理も書き加えてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#23

投稿記事 by Rittai_3D » 11年前

>>softya様

返信遅れてすいません。なかなか時間が取れなくて…

Zキーの処理をどこに書いていいかわかりません。メインループのfor文(上下キーの部分)のところなのか、その下の描画フェースなのか、それともそれ以外か…

あと、フラグと番号はそれぞれ SelectFlag と SelectMusicで分けました。

質問が多いですが、ここはSelectFalgはなんのために使うのでしょうか?
自分なりに考えたものは、"現在表示しているコメントが表示されているかの判断"となっています。

理解力がなくてすいません。宜しくお願いします。
初心者です

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

Re: Music Room の作り方

#24

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

> Zキーの処理をどこに書いていいかわかりません。メインループのfor文(上下キーの部分)のところなのか、その下の描画フェースなのか、それともそれ以外か…

毎フレーム通過する所に書けばよいでしょう。理由を考えてみてください。

> あと、フラグと番号はそれぞれ SelectFlag と SelectMusicで分けました。
> 質問が多いですが、ここはSelectFalgはなんのために使うのでしょうか?
> 自分なりに考えたものは、"現在表示しているコメントが表示されているかの判断"となっています。

SelectFalgは未選択と選択状態を分けるためです。
なので"現在表示しているコメントが表示されているかの判断"であってますね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#25

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

毎フレーム通過するところに書かないと、一回だけしか実行しないから、ですか?

for文の中に書いて見たのですが、上手く動作しないのでまた虱潰しにやっていきます。

フラグはあってたんですね。良かったです。
初心者です

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

Re: Music Room の作り方

#26

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

3D_3D さんが書きました:>>softya様

返信ありがとうございます。
毎フレーム通過するところに書かないと、一回だけしか実行しないから、ですか?
for文の中に書いて見たのですが、上手く動作しないのでまた虱潰しにやっていきます。
フラグはあってたんですね。良かったです。
闇雲にやっても理解に繋がりませんよ。
なぜ、for文の中である必要があると思うのか論理的に説明出来ますか?
その様子だとプログラムの流れがよく理解できていないのでは?と考えてしまいます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#27

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

for文は、"項目数の分だけループして、もし、forの中のiと選択している項目が同じなら、座標と色とフラグ変え、コメントを表示"と考えているので、その部分でキーの処理を書けばうまくいくのでは?と思ったからです。しかし、予想が外れてしまい、闇雲にやればいつかはできるのでは?と考えてしまったためです。


課題が沢山あり、なかなか返信が出来ないかもしれませんが、宜しくお願いします。
初心者です

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

Re: Music Room の作り方

#28

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

3D_3D さんが書きました:>>softya様
for文は、"項目数の分だけループして、もし、forの中のiと選択している項目が同じなら、座標と色とフラグ変え、コメントを表示"と考えているので、その部分でキーの処理を書けばうまくいくのでは?と思ったからです。しかし、予想が外れてしまい、闇雲にやればいつかはできるのでは?と考えてしまったためです。
課題が沢山あり、なかなか返信が出来ないかもしれませんが、宜しくお願いします。
その瞬間だけ起これば良いことと、継続的に起こり続ける必要のあることが同一に扱っていると思います。
「座標と色とフラグ変え」とありますが次フレーム以降も継続的なのものと、その瞬間のフレームだけに起これば良いこと分けてみてください。
あと「forの中のiと選択している項目が同じ」は、果たして「座標と色とフラグ変え」と本当にループの中でしか出来ないことなのでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#29

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

瞬間 :キーが押されたかどうかの判断、フラグが立ってるかどうかの判断

継続的 : 色を変更する、座標を変える

であってますか?
それと、

>あと「forの中のiと選択している項目が同じ」は、果たして「座標と色とフラグ変え」と本当にループ>の中でしか出来ないことなのでしょうか?

はどういう意味なのでしょうか?自分の理解力が低いので、よくわかりません。
初心者です

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

Re: Music Room の作り方

#30

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

3D_3D さんが書きました: 瞬間 :キーが押されたかどうかの判断、フラグが立ってるかどうかの判断
継続的 : 色を変更する、座標を変える
合っていると思います。フラグが立ってるかどうかの判断はどう使うか微妙ですが。
ところで聞き忘れたのですが、何の色変えて、何の座標を変えるんでしょう?

3D_3D さんが書きました: >あと「forの中のiと選択している項目が同じ」は、果たして「座標と色とフラグ変え」と本当にループ>の中でしか出来ないことなのでしょうか?
はどういう意味なのでしょうか?自分の理解力が低いので、よくわかりません。
forループの中で使うならiが必要だと言う頃ですよね?
iうを必要とする項目はどれでしょうか?と言う質問です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#31

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。


>ところで聞き忘れたのですが、何の色変えて、何の座標を変えるんでしょう?

曲名のx座標と選択中の曲名を描写している文字の色ですね。

>forループの中で使うならiが必要だと言う頃ですよね?
>iを必要とする項目はどれでしょうか?と言う質問です。

たしか、
「上・下キーが押されたときのループ」
「曲名を表示するループ」
「曲のコメントのループ」

ですかね。一番上のやつはわかりづらいと思いますが

コード:

      if(Key[ KEY_INPUT_UP ] == 1 || Key[ KEY_INPUT_DOWN ] == 1 ||(Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30) ||(Key[KEY_INPUT_UP]%5==0 && Key[KEY_INPUT_UP]>30)){
            for( i=0; i<6; i++ ){               // 項目数である6個ループ処理
                if( i == SelectNum ){           // 今処理しているのが、選択番号と同じ要素なら
                    music[i].color  = YELLOW;   // 色を帰る
                    music[i].x      = 60;       // 座標を買える
                    SelectFlag      = i;
                } else {                        // 今処理しているのが、選択番号以外なら
                    music[i].color  = WHITE;    // 色を変える
                    music[i].x      = 65;       // 座標を替え
                }
            }
        }
の部分です。

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

Re: Music Room の作り方

#32

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

3D_3D さんが書きました:>>softya様

返信ありがとうございます。


>ところで聞き忘れたのですが、何の色変えて、何の座標を変えるんでしょう?

曲名のx座標と選択中の曲名を描写している文字の色ですね。
それはZキーと無関係ではないのでしょうか?
いまはZキーの処理の話では?
3D_3D さんが書きました: >forループの中で使うならiが必要だと言う頃ですよね?
>iを必要とする項目はどれでしょうか?と言う質問です。

たしか、
「上・下キーが押されたときのループ」
「曲名を表示するループ」
「曲のコメントのループ」

ですかね。一番上のやつはわかりづらいと思いますが

コード:

      if(Key[ KEY_INPUT_UP ] == 1 || Key[ KEY_INPUT_DOWN ] == 1 ||(Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30) ||(Key[KEY_INPUT_UP]%5==0 && Key[KEY_INPUT_UP]>30)){
            for( i=0; i<6; i++ ){               // 項目数である6個ループ処理
                if( i == SelectNum ){           // 今処理しているのが、選択番号と同じ要素なら
                    music[i].color  = YELLOW;   // 色を帰る
                    music[i].x      = 60;       // 座標を買える
                    SelectFlag      = i;
                } else {                        // 今処理しているのが、選択番号以外なら
                    music[i].color  = WHITE;    // 色を変える
                    music[i].x      = 65;       // 座標を替え
                }
            }
        }
の部分です。
SelectFlag = i;
はZキーで確定するのでは?
それとSelectFlag= i;ではなくなったはずですが。
SelectXXXなのでは? → SelectMusic?

あと気をつけて欲しいのは、継続的な値をなるべく使うようにしてください。
if( i == SelectNum ){ // 今処理しているのが、選択番号と同じ要素なら
であるならば、 SelectMusic=SelectNum ;となるべきですし、forループ内である必要もないはずです。
→ より複雑な条件の中で設定された値の変化を追うことは困難を伴うので絶対に避けてください。つまりバグが増えます。
  原則として出来るだけifやforなど条件が積み重ならない所で継続的な値を利用することを心がけます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#33

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

>それとSelectFlag= i;ではなくなったはずですが。
>SelectXXXなのでは? → SelectMusic?

前回投稿したソースから引っ張って来たので消し忘れです。すいません。

パソコンのコードはちゃんと分けてます。

以後、投稿する時には、細かいミスが無いかどうか今まで以上に調べます
初心者です

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#34

投稿記事 by Rittai_3D » 11年前

>>softya様

課題が全然終わらなくて来れませんでした。すいません。

>>>ところで聞き忘れたのですが、何の色変えて、何の座標を変えるんでしょう?
>>曲名のx座標と選択中の曲名を描写している文字の色ですね。
>それはZキーと無関係ではないのでしょうか?
>いまはZキーの処理の話では?

zキーが押されたら選択中の曲のコメントを表示する。
また、zキーが押されなくても、選択中の曲名は座標と文字の色を変える。
だだし、一度もzキーが押されなかったら最初の曲のコメントを表示する。

というのが自分の中で考えてる処理なので(わかりづらいと思いますが)zキーが押されたら、曲名の座標を変え、コメントを表示。というのではないです。
初心者です

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

Re: Music Room の作り方

#35

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

(1) zキーが押されたら選択中の曲のコメントを表示する。 → Zキー関連。未完成
(2) また、zキーが押されなくても、選択中の曲名は座標と文字の色を変える。 → 既に出来ている?
(3) だだし、一度もzキーが押されなかったら最初の曲のコメントを表示する。 → Zキー関係なし。未完成
って事ですよね?
であれば、まず(3)を作ってつづいて(2) と独立した形で(1)を作ります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#36

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

(3)については、ほとんど出来ていると思っていますが、上下キーが押されたらコメントが変わってしまう事が問題です。今は、解決方法が見つかりそうで見つからない状況です。

(2)は完全に出来ていると思います。質問する前に、ここの部分は完成していたので…
初心者です

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

Re: Music Room の作り方

#37

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

(3)は(1)と連動しますが、(1)のZが押された時に変化、あるいは初期化状態でコメント表示する曲の番号を保持する変数が必要です。
変化を保持すると言う観点でプログラムの流れを見てください。

【補足】
よく分からなかったら、(1)(2)(3)で、それぞれ使う変数を参照だけのものと更新するものに分けて書きだしてみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#38

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

新たにSelectNowMusicという、コメントを表示する曲の番号を保持する変数を作りました

更新:SelectFlag,SelectNowMusic
参照:SelectNum,SelectMusic

はこれであってますか?自信がないですけど…
初心者です

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

Re: Music Room の作り方

#39

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

参照と更新する変数を(1)(2)(3)でそれぞれ分けて書いてくださいね。そこが結構重要です。
それと怪しい感じがするので、変数毎に参照、更新するときの条件とか処理を書いてみてください。
これは、設計法の訓練でもあります。

参考例。
(2) SelectNum 上下キーで更新される。 ← 足らない条件があれば書き加えてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#40

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

うーん、案外難しい…。

あまり考えずにプログラムを書いていたので…

(2)SelectNum 上下キーで更新 //softya様が書いたものであってます

(2)SelectFlag 上下キーで更新(本当はzキーで更新したいけど、まだ未実装)

(1)SelectMusic zキーで更新

(3)SelectNowMusic SelectMusicのデータを参照する

こんな感じでしょうか?
初心者です

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

Re: Music Room の作り方

#41

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

データの動きを考えずにプログラムを書いているとめちゃくちゃになりますので、ここでしっかり考えましょう。

(2)SelectNum 上下キーで更新 //softya様が書いたものであってます ← どう変化するか書いてください。以下も同じです。
(2)SelectFlag 上下キーで更新(本当はzキーで更新したいけど、まだ未実装) ← 現状ではなく将来的な動作で書いてください。それとSelectFlag の参照が見当たりません。
(1)SelectMusic zキーで更新 ← なにから更新されるのですか? 無条件ですか?
(3)SelectNowMusic SelectMusicのデータを参照する ← 良く分かりません。必要なんでしょうか? SelectNowMusic の参照が見当たらないんですが?

動作に足らない変数はないでしょうか?よく考えてみてください。
コメントって1行じゃないですよね?

再整理 (1)(2)(3)の各機能
(1) Zキー押下処理 zキーが押されたら選択中の曲のコメントを表示する。 → Zキー関連。未完成
(2) 上下キー処理 また、zキーが押されなくても、選択中の曲名は座標と文字の色を変える。 → 既に出来ている?
(3) コメント表示処理 だだし、一度もzキーが押されなかったら最初の曲のコメントを表示する。 → Zキー関係なし。未完成
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#42

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

今後は、しっかりデータの動きを考えて書きたいと思います。

>コメントって1行じゃないですよね?

はい。6行あります。

>(2)SelectNum 上下キーで更新 //softya様が書いたものであってます ← どう変化するか書いてくだ>さい。以下も同じです。
>(2)SelectFlag 上下キーで更新(本当はzキーで更新したいけど、まだ未実装) ← 現状ではなく将来的>な動作で書いてください。それとSelectFlag の参照が見当たりません。
>(1)SelectMusic zキーで更新 ← なにから更新されるのですか? 無条件ですか?
>(3)SelectNowMusic SelectMusicのデータを参照する ← 良く分かりません。必要なんでしょうか?>SelectNowMusic の参照が見当たらないんですが?

(2)SelectNum 上・下キーで更新。上下どちらが押されたら選択中のx座標と文字の色を変える。

(1)SelectFlag zキーで更新。選択中かそれ以外の判別を行う。

(3)SelectMusic zキーで更新。もしzキーが押されたら、押された時の曲番号を保存しておく。

(3)SelectNowMusic SelectMusicで保存された曲番号を参照する。

(3)CheckFlag フラグが立っていたら、曲番号とSelectNowMusicを参照する。

こういうことですか?
初心者です

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

Re: Music Room の作り方

#43

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

さっきより良くなりましたが、まだまだ抜けが有るようです。

あと(0) 初期化 を追加しときましょう。それぞれの変数の最初の状態を書いてください。

(2)SelectNum 上・下キーで更新。上下どちらが押されたら選択中のx座標と文字の色を変える。

(1)SelectFlag zキーで更新。選択中かそれ以外の判別を行う。 ← こう書きましょうか。 条件:SelectFlagが(a)だった場合 更新内容:SelectFlag を(b)にする。

(3)SelectMusic zキーで更新。もしzキーが押されたら、押された時の曲番号を保存しておく。 ← Zキーで更新なら(1)ではないでしょうか? 更新内容:SelectMusicに(d)を代入

(3)SelectNowMusic SelectMusicで保存された曲番号を参照する。 ← SelectMusicとSelectNowMusicの2つに分ける必要性は? ないと困りますか?

(3)CheckFlag フラグが立っていたら、曲番号とSelectNowMusicを参照する。 ← CheckFlag が新登場です。どこで更新される変数ですか? それと SelectNowMusicの値と曲番号は違うんですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#44

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

初期化は、全て0としています。

SelectNowMusicとCheckFlagは思いつきで追加しました。

何故かうまくいくとおもってまして…

一応、CheckFlagはフラグが立っていたら更新する様にしています。
初心者です

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

Re: Music Room の作り方

#45

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

3D_3D さんが書きました:>
SelectNowMusicとCheckFlagは思いつきで追加しました。
何故かうまくいくとおもってまして…
一応、CheckFlagはフラグが立っていたら更新する様にしています。
私はSelectNowMusicの必要性を感じませんので、納得の行く理由で私を説得してください。
CheckFlagに関しては、「フラグが立っていたら」とは何のフラグでしょう?
フラフが立っていたら、あらためて立てるフラグにどのような効果があるか解説してもらったほうが良いかもしれません。

【追記】
じゃぁ、分からなかったらこうしましょう。
変数名とその役割を書いてください。

SelectNum カーソルで選択されている曲の番号。
SelectFlag ?
SelectMusic ?
SelectNowMusic ?
CheckFlag ?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#46

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

>私はSelectNowMusicの必要性を感じませんので、納得の行く理由で私を説得してください。
>CheckFlagに関しては、「フラグが立っていたら」とは何のフラグでしょう?
>フラフが立っていたら、あらためて立てるフラグにどのような効果があるか解説してもらったほうが
>良いかもしれません。

CheckFlagはSelectFlagがたっているかどうかの判断をするようにと考えました。
SelectNowMusicは "zキーが押される、且つSelectFlagが立っている時のSelectMusicの値を保持しようと
考えて加えました

>じゃぁ、分からなかったらこうしましょう。
>変数名とその役割を書いてください。

SelectNum カーソルで選択されている曲の番号。
SelectFlag 現在表示しているコメントのフラグ
SelectMusic 現在表示しているコメント
SelectNowMusic zキーが押されたときのSelectNumの値を保持する
CheckFlag SelectFlagが立っているかの判断

です。風邪をひいたのか、頭が痛くて吐き気がしているので、打ち間違えしているかもしれませんが、よろしくお願いします。
初心者です

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

Re: Music Room の作り方

#47

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

調子の悪い時に無理する必要はありませんので、休養してから回答してくださいね。

> CheckFlagはSelectFlagがたっているかどうかの判断をするようにと考えました。

判断するだけならCheckFlagは必要ないですね。if文でSelectFlagを判定するだけです。
>SelectFlag 現在表示しているコメントのフラグ
とありますが、0/1以外の値を入れるつもりでしょうか?

>SelectMusic 現在表示しているコメント
現在表示しているコメントの番号?ならばSelectMusic は変数名として間違っていませんか? ふさわしい名前を考えてみてください。

>SelectNowMusic zキーが押されたときのSelectNumの値を保持する
コメントを表示する曲の番号を保持するんですね? であればSelectedMusicNo(選択済みの曲の番号) などの名前のほうがふさわしいです。

>SelectNowMusicは "zキーが押される、且つSelectFlagが立っている時のSelectMusicの値を保持しようと
考えて加えました

SelectFlagが立っていない時って状況があるんでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#48

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

体調がだいぶ良くなったので返信させていただきます。

>判断するだけならCheckFlagは必要ないですね。if文でSelectFlagを判定するだけです。
>SelectFlag 現在表示しているコメントのフラグ
>とありますが、0/1以外の値を入れるつもりでしょうか?

いいえ、入れる気は有りません。あの時は上にもあります通り、何故かうまくいくと思っていたので...

>SelectMusic 現在表示しているコメント
>現在表示しているコメントの番号?ならばSelectMusic は変数名として間違っていませんか? ふさわし>い名前を考えてみてください

SelectMusicCmtに変更しておきます。たしかに、分かりづらいですね。

>SelectNowMusic zキーが押されたときのSelectNumの値を保持する
>コメントを表示する曲の番号を保持するんですね? であればSelectedMusicNo(選択済みの曲の番号) な>どの名前のほうがふさわしいです。

なるほど…変数名はその時に思いついた物をそのまま書いています。
一応、画像を読み込む時はimg_~、音楽を読み込む時はse_~,bgm_~としていますが、それ以外は思いつきです。

>SelectNowMusicは "zキーが押される、且つSelectFlagが立っている時のSelectMusicの値を保持しよう>>と
>考えて加えました
>SelectFlagが立っていない時って状況があるんでしょうか?

選択されてない時はSelectFlag=0にしています。
初心者です

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

Re: Music Room の作り方

#49

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

> 選択されてない時はSelectFlag=0にしています。

どういう条件で選択されていないとなるのでしょうか?
それと選択されていない時と選択された時は何が変わるんでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#50

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

>どういう条件で選択されていないとなるのでしょうか?
>それと選択されていない時と選択された時は何が変わるんでしょうか?

◯番が選択中で、zキーが押されたらSelectFlagを1にします。

コメントの表示が◯番から●番に変更されます。
初心者です

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

Re: Music Room の作り方

#51

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

3D_3D さんが書きました:>>softya様

返信ありがとうございます。

>どういう条件で選択されていないとなるのでしょうか?
>それと選択されていない時と選択された時は何が変わるんでしょうか?

◯番が選択中で、zキーが押されたらSelectFlagを1にします。

コメントの表示が◯番から●番に変更されます。
その動作にSelectFlagが必要なんでしょうか?
コメントの表示する曲番号はSelectedMusicNoが保持しているですよね?

>コメントの表示が◯番から●番に変更されます。
ここだけソースを書いてみてください。どんなプログラムになりますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#52

投稿記事 by Rittai_3D » 11年前

>>softya様

返信有り難うございます。

>その動作にSelectFlagが必要なんでしょうか?
>コメントの表示する曲番号はSelectedMusicNoが保持しているですよね?

あっ!すいません。新しく作ったへんすうの事を忘れてました^^;

>コメントの表示が◯番から●番に変更されます。
>ここだけソースを書いてみてください。どんなプログラムになりますか?

親との約束で、10:00以降のPCは禁止されてて、手元にスマホしかないので、明日の朝にソースを書き込んでもいいですか?

(本当はスマホも禁止されているので...)
初心者です

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

Re: Music Room の作り方

#53

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

3D_3D さんが書きました:>>softya様

返信有り難うございます。

>その動作にSelectFlagが必要なんでしょうか?
>コメントの表示する曲番号はSelectedMusicNoが保持しているですよね?

あっ!すいません。新しく作ったへんすうの事を忘れてました^^;

>コメントの表示が◯番から●番に変更されます。
>ここだけソースを書いてみてください。どんなプログラムになりますか?

親との約束で、10:00以降のPCは禁止されてて、手元にスマホしかないので、明日の朝にソースを書き込んでもいいですか?

(本当はスマホも禁止されているので...)
いつでも良いですよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#54

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

寝坊して、書き込めませんでした。すいません。

こんな感じでしょうか?

コード:

for(int i=0;i<6;i++){
     if(Key[KEY_INPUT_Z]!=0){
          SelectedMusicNo = i;
     }
}
スマホからなのでインデントずれていたらすいません。
初心者です

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

Re: Music Room の作り方

#55

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

3D_3D さんが書きました:>>softya様

返信ありがとうございます。

寝坊して、書き込めませんでした。すいません。

こんな感じでしょうか?

コード:

for(int i=0;i<6;i++){
     if(Key[KEY_INPUT_Z]!=0){
          SelectedMusicNo = i;
     }
}
スマホからなのでインデントずれていたらすいません。
これだと必ず5が入るのでは?
それとSelectFlagが何処かへ消えました、書かれていない条件が増えています。

それと今までの話の流れとずれてます。ちゃんと話の流れをまとめる癖を付けましょう。
話を纏める技術力は、すごくプログラミングに密接しているですよ。

今までの話の流れ
>>>>>3D_3Dさん SelectNowMusicは "zキーが押される、且つSelectFlagが立っている時のSelectMusicの値を保持しようと考えて加えました

>>>>私 SelectFlagが立っていない時って状況があるんでしょうか?

>>>3D_3Dさん 選択されてない時はSelectFlag=0にしています。

>>私 どういう条件で選択されていないとなるのでしょうか?
>>私 それと選択されていない時と選択された時は何が変わるんでしょうか?

>3D_3Dさん ◯番が選択中で、zキーが押されたらSelectFlagを1にします。
>3D_3Dさん コメントの表示が◯番から●番に変更されます。

私 ここだけソースを書いてみてください。どんなプログラムになりますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#56

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

>それと今までの話の流れとずれてます。ちゃんと話の流れをまとめる癖を付けましょう。
>話を纏める技術力は、すごくプログラミングに密接しているですよ。

なるほど。自分は国語力が皆無なので、話を纏める技術力が欲しいです。百字要約とか苦手で…

また、プログラミング力も酷いので、上達したいですが、どうしていいかわかりません。

>これだと必ず5が入るのでは?
>それとSelectFlagが何処かへ消えました、書かれていない条件が増えています。

どのように書いていいのがわからず、「こんな感じかな?」と考えたのですが…

自分のプログラミング力の無さに自分で呆れています…
初心者です

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

Re: Music Room の作り方

#57

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

どう纏めるかは自分で工夫してもらうしか無いのですが、頭だけ考えて纏まらないなら紙のメモやテキストファイルも併用しましよう。
この作業はプログラミングに大事なものなので、これが出来ればプログラミングの設計力も向上します。

> 百字要約とか苦手で…

それと違うと思うんですけどね。
苦手意識が邪魔しているかも。

>どのように書いていいのがわからず、「こんな感じかな?」と考えたのですが…
>自分のプログラミング力の無さに自分で呆れています…

C言語の基礎が疎かなのが原因かも知れません。
もっと基礎がためをしてみてはどうでしょうか?

と言うことで練習問題です。
「課題一覧 - アナステイシア」
http://anastasia.dip.jp/index.php?url=t ... =kadailist
「C言語 練習プログラム集」 テキストで作るゲームです。
http://akabas.net/(S(mlrkxl451pmm1z45zl ... CTask.aspx
「C言語 練習問題集」
http://akabas.net/(S(taliry45fkng1j55hx ... eSupport=1
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

Re: Music Room の作り方

#58

投稿記事 by ISLe » 11年前

3D_3D さんが書きました:なるほど。自分は国語力が皆無なので、話を纏める技術力が欲しいです。百字要約とか苦手で…
要約が苦手なら、すべて書き写せば良いのではないでしょうか。
ブラウザに表示されているテキストならコピペもできます。

日常会話ができて、「『あいうえお』を書いて見せてください」に答えられる国語力があればプログラミングには十分だと思います。
文字が文に、段落に、投稿に単位が変わるだけです。

文字種が違っても、少なくともわたしは腹を立てません。
しかし文字(文字数ではない)が足らなかったら腹を立てます。
それは理解しているかどうかではなく軽視していると受け取れるからです。


ほんとうにダメなのは「書けます」と言うだけで「書いて見せない」ことですけどね。
日本語が通じない、意志も感じられない、回答する気も失せるというものです。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#59

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

>それと違うと思うんですけどね。
>苦手意識が邪魔しているかも。

苦手意識が邪魔をしている…なるほど。

確かに、苦手だからやらない、というのは日常生活で結構ありますね。

まずは、苦手意識を無くして取り組むようにしたいです。下手でも、やることに意義があると思いました。

>C言語の基礎が疎かなのが原因かも知れません。
>もっと基礎がためをしてみてはどうでしょうか?

>と言うことで練習問題です。
>「課題一覧 - アナステイシア」
>ttp://anastasia.dip.jp/index.php?url=t ... =kadailist
>「C言語 練習プログラム集」 テキストで作るゲームです。
>ttp://akabas.net/(S(mlrkxl451pmm1z45zl4pbwa2))/lib/CTask.aspx
>「C言語 練習問題集」
>ttp://akabas.net/(S(taliry45fkng1j55hxqqv045))/lib/CExercise.aspx?AspxAutoDetectCookieSupport=1

ありがとうございます。数問わからない問題があったので、基礎が抜けていると思いました。
もう1度、入門サイトや本で基礎を確認します。わざわざサイトのリンクまで貼って下さりありがとうございます。
初心者です

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#60

投稿記事 by Rittai_3D » 11年前

>>ISLe様

返信ありがとうございます。

>日常会話ができて、「『あいうえお』を書いて見せてください」に答えられる国語力があればプログ
>ラミングには十分だと思います。

本当ですか!?自分はてっきりハイレベルな力が必要だと思ってました。

ISLe様の回答でほっとしました。ありがとうございます。

>ほんとうにダメなのは「書けます」と言うだけで「書いて見せない」ことですけどね。
>日本語が通じない、意志も感じられない、回答する気も失せるというものです。

つまり、丸投げということですよね。誰かに何かを教える時も、丸投げは答える気も失せますね。

うまく言えませんけど、意思が大切ということですね。日本語下手ですいません。
初心者です

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

Re: Music Room の作り方

#61

投稿記事 by ISLe » 11年前

レベルは経験値で上がるものです。
掲示板のやり取りなど相手のことをよく知らないでいきなりレベルを問うことはできないとわたしは考えます。

経験しても経験値が上がらないひとも少なからずいます。
そういうふうにはならないでください。
3D_3D さんが書きました:つまり、丸投げということですよね。誰かに何かを教える時も、丸投げは答える気も失せますね。

うまく言えませんけど、意思が大切ということですね。日本語下手ですいません。
「書いて見せてください」と言われて書いて見せないのは丸投げとは違う気がしますけど。
強い意志を示すには、言われなくても書いて見せるくらいでないといけないと思います。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#62

投稿記事 by Rittai_3D » 11年前

>>ISLe様

返信ありがとうございます。

課題の量が多過ぎて見ている暇がありませんでした。やっと返信できます。

>レベルは経験値で上がるものです。
>掲示板のやり取りなど相手のことをよく知らないでいきなりレベルを問うことはできないとわたしは
>考えます。

やはり、知識だけでなく、経験も必要なんですね。
コードを書けば書くほどレベルが上がる、かっこいいな~と自分では思います。

>経験しても経験値が上がらないひとも少なからずいます。
>そういうふうにはならないでください。

つまり、理解せずに、ただ写すだけということでしょうか?
ただ写すだけというのは、自分的に嫌なので、自分なりに解釈しているつもりです。
初心者です

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#63

投稿記事 by Rittai_3D » 11年前

解決しました!

なんでこんな簡単なことに気付かなかったのか・・・

恥ずかしいです・・・

コードを張っておきます。

コード:

#include "DxLib.h"
#include <stdio.h>
#include <stdlib.h>

#define MUSIC_NUM 6

static 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;	//座標
	int color;	//文字の色
	char music_name[128];//ぶんかちょうは6曲しかない
	char cmt_buf[6][256];//コメント
}music_t;

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
	ChangeWindowMode(TRUE),SetAlwaysRunFlag(TRUE),DxLib_Init(),SetDrawScreen(DX_SCREEN_BACK);

	int Font01 = CreateFontToHandle("平成ゴシック",16,16,DX_FONTTYPE_ANTIALIASING_EDGE_8X8,-1,1,0,-1);//フォンント
	int Font02 = CreateFontToHandle("平成ゴシック",14,10,DX_FONTTYPE_ANTIALIASING_EDGE_8X8,-1,1,0,-1);//フォンント

	int img_back01 = LoadGraph("title03a.png");		//背景その1
	int img_back02 = LoadGraph("title03b.png");		//背景その2

	int WHITE = GetColor(130,105,105);		//色
	int YELLOW= GetColor(240,210,210);		//GetColorの引数が白、黄色じゃないのは無視してください

	music_t music[MUSIC_NUM] = { // 構造体にこの順番で入れていく
		{ 60, 130, YELLOW, "No.1 天狗の手帖 ~ Mysterious Note",
			{
				"タイトル、メニュー画面のテーマです。",
				"いつもの曲です。",
				"今回は少し暗くレトロな感じが出るようにして、妖怪らしさが出る",
				"ようにしました。",
				"ザーというノイズは妖怪のミステリアスな部分です。決してモニタ",
				"とスピーカーが逝かれたわけでは無いのでご安心を。",
			}
		},
		{ 65, 150, WHITE , "No.2 風の循環 ~ Wind Tour",
			{
				"撮影曲1です。",
				"今回のゲームは、通常のボス戦のような曲ではなく、もっと日常感",
				"を出したかった為、こんな感じに",
				"随分と落ち着いた感じですが、実際文は余裕です。自分から被写体",
				"をおちょくりに出かけている様なもんですし。",
				"",
			}
		},
		{ 65, 170, WHITE , "No.3 天狗が見ている ~ Black Eyes",
			{
				"撮影曲2です。",
				"怖いような可愛らしいような奇妙なノリを持たせました。",
				"人を攫ったり喰ったりが当たり前の妖怪なのに、どこか陽気で人当",
				"たりも良さそうな所が、幻想の天狗のイメージ。",
				"この曲には、その怖さと陽気さ、暢気さを混ぜた感じになっている",
				"かと思います。",
			}
		},
		{ 65, 190, WHITE , "No.4 東の国の眠らない夜",
			{
				"撮影曲3です。中盤以降に使う曲として用意しました。",
				"",
				"ボスも文も楽しんでいる感じを出しつつ、ボスに威圧感を持たせる",
				"のは難しい物です。",
				"この曲はそれを意識して、軽快で明るいながらもボスが強そうに",
				"見える様に格好つけて書きました。特にピアノ。",

			}
		},
		{ 65, 210, WHITE , "No.5 レトロスペクティブ京都",
			{
				"撮影曲4のテーマです。後半に使う曲として用意しました。",
				"",
				"レトロな日本をイメージしたところ、私の中ではこんな感じに。",
				"雪の降る京の都。人気の少ない夜の道。",
				"でも、この曲のレトロさは私のレトロさでして……。",
				"この曲を聴いていると何となく昔を思い出してしまう。",
			}
		},
		{ 65, 230, WHITE , "No.6 風神少女",
			{
				"撮影曲5のテーマです。",
				"この曲は文花帖のテーマ曲なので入れないわけにはいかないと思い",
				"入っております。",
				"本編では殆ど使われておりませんが:-)",
				"",
				"",
			}
		},
	};

	int SelectNum      = 0;		//現在選択中
	int SelectFlag     = 0;		//現在表示している曲のコメントのフラグ
	int SelectMusicCmt = 0;		//現在表示している曲のコメント
	int SelectedMusicNo= 0;		//コメントを表示する曲の番号を保持

	while(!ProcessMessage() && !ClearDrawScreen() && !gpUpdateKey() && !CheckHitKey(KEY_INPUT_ESCAPE)){

		if( Key[ KEY_INPUT_DOWN ] == 1 || (Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30)){// キーが押された処理
			SelectNum = ( SelectNum + 1 ) % MUSIC_NUM;	// 現在の選択項目を一つ下にずらす(ループする)
		}

		if( Key[ KEY_INPUT_UP ] == 1 || (Key[KEY_INPUT_UP]%5==0 && Key[KEY_INPUT_UP]>30)){
			SelectNum = (SelectNum + (MUSIC_NUM-1) ) % MUSIC_NUM;	//上にずらす
		}

		if(Key[ KEY_INPUT_UP ] == 1 || Key[ KEY_INPUT_DOWN ] == 1 ||(Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30) ||(Key[KEY_INPUT_UP]%5==0 && Key[KEY_INPUT_UP]>30)){
			for(int i=0 ; i<MUSIC_NUM ; i++ ){	// 項目数である6個ループ処理
				if( i == SelectNum ){			// 今処理しているのが、選択番号と同じ要素なら
					music[i].color = YELLOW;	// 色を帰る
					music[i].x     = 60;		// 座標を買える
				} else {						// 今処理しているのが、選択番号以外なら
					music[i].color = WHITE;		// 色を変える
					music[i].x     = 65;		// 座標を替え
				}
			}
		}

	if(Key[KEY_INPUT_Z] == 1 || Key[KEY_INPUT_RETURN] == 1){
			for(int i=0; i<MUSIC_NUM ; i++ ){
				if(i == SelectNum){
					SelectedMusicNo = i;
				}
			}
		}

		// 描画フェーズ
		DrawGraph(  0,0,img_back01,TRUE);	// 画像を描写
		DrawGraph(512,0,img_back02,TRUE);	// 同上

		for(int i=0; i<6; i++ ){ // 項目を描画
			DrawStringToHandle(music[i].x,music[i].y,music[i].music_name,music[i].color,Font01);
		}

		for(int j=0;j<6;j++){// コメントの行数
			DrawFormatStringToHandle(80,350+18*j,YELLOW,Font02,"%s",music[SelectedMusicNo].cmt_buf[j]);
		}

		ScreenFlip();
	}
	DxLib_End();
	return 0;
}
初心者です

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

Re: Music Room の作り方

#64

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

動いてよかったです。
ただ、SelectFlag はやっぱり使っていませんよね。残ってますよ。

それと何度か忠告したと思いますが無駄ループです。

コード:

    if(Key[KEY_INPUT_Z] == 1 || Key[KEY_INPUT_RETURN] == 1){
            for(int i=0; i<MUSIC_NUM ; i++ ){
                if(i == SelectNum){
                    SelectedMusicNo = i;
                }
            }
        }
ループしなくても同じ結果にできますよ。SelectNumはループで変化しないのでループにする必然が無いんです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Rittai_3D
記事: 525
登録日時: 11年前

Re: Music Room の作り方

#65

投稿記事 by Rittai_3D » 11年前

>>softya様

返信ありがとうございます。

上下キーの真似をして作ってたので、無駄ループが入ってしまったと思います。

以下のようにしたら、出来ました!

コード:


if(Key[KEY_INPUT_Z]==1){
     SelectedMusicNo = SelectNum;
}

しかも、こっちの方が簡単て…

ありがとうございます。勉強になりました!

それと、テキストファイルからコメントを読み込んで、表示するプログラムも同じように作れますか?

是非教えてください。
初心者です

閉鎖

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