今回は、前回の続きです。
詳しくは、前回のトピックを参照してください。
→ ttp://dixq.net/forum/viewtopic.php?f=3&t=12938
#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;
}
ファイルは、
# 曲のコメント
# この記号でコメント
#
コメント1
コメント
コメント
コメント
コメント
コメント
コメント2
コメント
コメント
コメント
コメント3
コメント
コメント
コメント
コメント
コメント
コメント4
コメント
コメント
コメント
コメント
コメント
コメント5
コメント
コメント
コメント
コメント
コメント
コメント6
コメント
コメント
コメント
コメント
コメント
コメント7
コメント
コメント
コメント
コメント
コメント
コメントは6行固定です。
コードが汚いのはご容赦下さい。