Lesson3 選択肢
アドベンチャーゲームの特徴でもある選択肢をつけてみます。
選択をしたら分岐の処理もさせないといけませんね。
追加するコードは次の通り。
3=選択肢の表示
4=YESのときは次の数値をアドレスに設定する。
5=NOのときは次の数値をアドレスに設定する。
ここでは選択肢は単純にYESNOにします。
YESのときはYもしくはy
NOのときはNもしくはnとします。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
char Data[20][80]={
"1ここはダンジョンの中です。",//0
"1分かれ道があります。",//1
"3Y=まっすぐ進む、N=右に曲がる",//2
"49",//3
"55",//4
"1分かれ道があります。",//5
"3Y=左に曲がる、N=まっすぐ進む",//6
"412",//7
"51",//8
"1分かれ道があります。",//9
"3Y=左に曲がる、N=右に曲がる",//10
"41",//11
"1分かれ道があります。",//12
"3Y=まっすぐ進む、N=右に曲がる",//13
"41",//14
"1出口だ",//15
"0",//16
};
int main()
{
int Adr=0;
int yes=0,no=0;//フラグ
int ch;
printf("スクリプト開始します。\n");
while(Data[Adr][0]!='0'){//先頭のコードを見る
switch(Data[Adr][0]){
case '1'://メッセージ
printf("%s\n",Data[Adr]+1);
getch();//入力待ち
break;
case '2'://ジャンプ
Adr=atoi(Data[Adr]+1);
continue;
break;
case '3'://選択肢表示
printf("%s\n",Data[Adr]+1);
ch=getch();//scanf("%c",&ch);
yes=no=0;//フラグクリア
if(ch=='Y' || ch=='y'){
yes=1;
}else if(ch=='N' || ch=='n'){
no=1;
}else{
continue;//もう一度やり直し
}
break;
case '4'://YES選択
if(yes==1){
Adr=atoi(Data[Adr]+1);
continue;
}
break;
case '5'://NO選択
if(no==1){
Adr=atoi(Data[Adr]+1);
continue;
}
break;
}
Adr++;
}
printf("\nスクリプト終了します。\n");
getch();//入力待ち
return 0;
}
|
少し難しくなったけどどうでしょうか。
分岐が付くだけでゲームらしくなってきたと思います。
実際には配列に入れておくのではなくテキストファイルに記述します。
テキストファイルにスクリプトを書いておけば元のプログラムをコンパイル
することなく実行できるからです。
プログラム的にはファイルから読み込んで配列に格納するので構造的には
似ているといえます。