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;
}
        


少し難しくなったけどどうでしょうか。
分岐が付くだけでゲームらしくなってきたと思います。
実際には配列に入れておくのではなくテキストファイルに記述します。
テキストファイルにスクリプトを書いておけば元のプログラムをコンパイル
することなく実行できるからです。
プログラム的にはファイルから読み込んで配列に格納するので構造的には
似ているといえます。

[戻る][次へ]

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル