#!/usr/local/bin/perl # ゲームブック・HTML出力用CGI # 製作:Ntaki(ntaki@indigo.plala.or.jp) # 最終更新日 2000年9月16日 # このプログラムは、Ntakiが著作権を有しています。一応。 # 無償での複製・再配布に関しては自由に行って構いません。事前連絡も不要です。 # たとえこのプログラムを改変して「僕が一から作ったんです」と名乗った人がいても #Ntakiは一向に構いません。 # ただし、このプログラム、またこのプログラムに手を加えたものを、(いないとは #思うが)有償で配布してはいけません。たとえ有償配布の許可申請を行っても、 #Ntakiは一切許可しません。このプログラムは、いかなる人も無料で入手可能な状態で #なければなりません。 # また改変しない場合、最初からこの行までのコメントは削除しないでください。 # 出来れば。 # このプログラム内で用いている関数「init_form」については、 #『Perlで作るCGI入門 基礎編』 結城浩著 ソフトバンク(株)刊 ISBN 4-7973-0507-X #の例題プログラムにある関数を借用させていただきました。 require "jcode.pl"; &init_form('euc'); # データファイル群 # 各章のデータファイル群を格納しているフォルダ(ディレクトリ) $dir{sentence} = 'sentence'; # フォームから章とフラグの情報を取得 $data{chapter_name} = $form{chapter}; $data{scene} = $form{scene}; $data{item} = $form{item}; if ($data{chapter_name} eq ''){ # デフォルトのシーン $data{chapter_name} = $form{chap_name}; $data{scene} = 0; $data{item} = ''; &init_manage; } else{ &init_manage; # 選択されたボタンを調べる $data{selected} = &check_choice; # 次に表示するシーンidを調べる $data{scene} = &pick_scene($data{scene}, $data{selected}); if ($data{scene} eq ''){ &html_begin('エラー発生'); print '
'; print "パスワード:「$data{chapter_name}」, 選択肢:「$data{selected}」, 次のシーン:「$data{scene}」
"; &html_end; exit(1); } } # 出力する場面を検索する &pick_scene($data{scene}); &html_begin('ゲームブックCGI'); &out_scene; &html_end; ################# # 初期処理(章ID取得、章ファイルオープン) sub init_manage { # 章のデータファイルを開く if (!open(DATA, "$dir{sentence}/$data{chapter_name}.file")){ &html_begin('エラー発生'); print 'エラー発生
',"\n";
print "cannot open $dir{sentence}/$data{chapter_name}.file ファイルが存在しないか、開けません。\n";
&html_end;
exit(0);
}
}
# 選択された番号を調べる
sub check_choice
{
local($i, $tmp);
for($i=1;;$i++){
$tmp = join('', 'choice_', $i);
if ($form{$tmp} ne ''){
last;
}
}
return($i);
}
#################
# 出力する場面を検索する
sub pick_scene
{
local($tmp, $check, $count, @items);
$check = join('', '*', $_[0], '*'); # 欲しいシーンidの行を探す
seek(DATA, 0, 0);
while($tmp = ){
chop($tmp);
if ($tmp eq ' ',"\n";
# 本文
print '';
print "$text_body\n";
print '';
# 選択肢
print ' $error_string";
}
# HTML記述部分(ヘッダ、フッタ)
sub html_begin{
print "Content-type: text/html\n\n";
print '