返答遅れてしまって申し訳ないです。
>conioさん
>少年Xさん
回答どうもありがとうございます。とても参考になりました。
>softyaさん
>kazuoniさん
確かにシンプルなプログラムから作って理解していくのが正統法で、確実な勉強法だと思います。
今現在のプログラムを理解するというのは駄目でしょうか?(すみません今回あまり時間がないのです・・・)
どうもこのプログラムはポインタについて勉強しないと理解できなさそうだと思ったので、一応、基礎的な部分だけですが勉強してきました。
そこで改めて書いてみたのが以下のプログラムなのですが、エラーが幾つか発生してしまっています。
改善方法だけでもアドバイスいただければ幸いです。
_________________________________________________
void MenuDraw(int x[/url],int y[/url] , char title[/url] , char **str , int *menu ){
int num=0,i=0;
int dx=0,len=0;
char **str2 = str;
//情報の取得
while ( *str2 ){
if( len < GetDrawFormatStringWidthToHandle( font[0] , *str2 ) ){
len = GetDrawFormatStringWidthToHandle( font[0] , *str2 );//文字列の長さ所得
}
++num;
*str2++;
if( i++ > 50 ) break; //無限ループ防止
}
//選択制御
if( CheckStatePad(configpad.up) == 1 && *menu > 0 )
--*menu;//選択を一つ上に
else if( CheckStatePad(configpad.up) == 1 )
*menu = num-1;//上端なら、一番下の選択(num-1)へ
if( CheckStatePad(configpad.down) == 1 && *menu < num-1 )
++*menu;//選択を一つ下に
else if( CheckStatePad(configpad.down) == 1 )
*menu = 0; //下端なら、一番上の選択(0)へ
SetDrawBlendMode( DX_BLENDMODE_ALPHA , 100 ) ;//四角描画用にアルファブレンド
DrawBox( &x[num],&y[num],&x[num]+10+len,&y[num]+ 18,color[0],TRUE) ; //選択位置の表示
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ;//描画もどす
i=0;
while ( *str ){
DrawFormatStringToHandle(&x[num],&y[num],color[0],font[0],"%s",*str++);
if( i++ > 50 ) break; //無限ループ防止
}
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void menu_game(){//タイトル画面
char *str[10]={
{"GAME START"},
{"SPELL PRACTICE"},
{"REPLAY"},
{"GALLERLY"},
{"RESULT"},
{"OPTION"},
{"QUIT"}
};
int x[10]={
200,250,200,200,200,200,200
};
int y[10]={
100,130,160,190,220,250,280
};
int* xP=x;
int* yP=y;
static int menu;
MenuDraw( &xP , &yP , "" , str , &menu);
if( CheckStatePad(configpad.shot) == 1 ){
switch(menu){
case 0:
func_state = 90; //難易度選択へ
break;
case 1:
func_state = 20; //SPELL PRACTICEへ
break;
case 2:
func_state = 30; //REPLAYへ
break;
case 3:
func_state = 40; //GALLERLYへ
break;
case 4:
func_state = 50; //RESULTへ
break;
case 5:
func_state = 60; //OPTIONへ
break;
case 6:
DxLib_End();
break;
default:
printfDx("不明なメニューが選択されました\n");
break;
}
menu=0;
}
}
_________________________________________________
*エラー内容*
DrawBox( &x[num],&y[num],&x[num]+10+len,&y[num]+ 18,color[0],TRUE) ;
と
DrawFormatStringToHandle(&x[num],&y[num],color[0],font[0],"%s",*str++);
の部分で、
1 番目の引数を 'int *__w64 ' から 'int' に変換できません。(新しい機能 ; ヘルプを参照)
というエラー
MenuDraw( &xP , &yP , "" , str , &menu);
の部分で、
1 番目の引数を 'int **__w64 ' から 'int [/url]' に変換できません。(新しい機能 ; ヘルプを参照)
というエラー
以上3つのエラーです。
調べてみたところ、
'int *__w64 ' から 'int' に変換できません
というエラーは、データにアドレスを代入しているためにおこるらしいのですが・・・
ポインタについて勉強不足なゆえ、改善方法が分かりません;
ご教授お願いします。