#!/usr/local/bin/perl # ###################################################################### ### ### ### CGIクイズシステム TakaQ Ver.2.05 ### [2/5] 出題、採点、結果 (tqquiz.cgi) ### (c) 1996-1999 Takahiro Nishida ### http://www.mytools.net/ ### ### ###################################################################### # ### 変数設定部 (詳細は上記ページをご覧下さい) ###################### # 正解時の背景 $ataribody = "BGCOLOR=pink"; # 不正解時の背景 $hazurebody = "BGCOLOR=skyblue"; # 正解時のメッセージ $atarimsg = "あたり"; # 不正解時のメッセージ $hazuremsg = "はずれ"; ### 変数設定部 (ここまで)########################################### $maxplayer = "10"; $answertype = "0"; $atarimark = "
| − | "); push(@mark,"
@mark
\n"; print "$step問中$ap問正解 (正答率$rp%)\n"; print "$mstime経過
\n"; } # 解答の表示 sub show_answer{ print "A$step "; if($res[$pstep] eq "o"){ print "$atarimsg
\n"; } else{ print "$hazuremsg
\n"; } if($SHEET{xsh}){ print "正解は $pans でした。
\n";
}
if($SHEET{xsh}||$res[$pstep] eq "o"){
print "$pcom\n";
}
}
# 問題の表示
sub show_question{
local( $genre, $qno ) = @_;
$nqfile="$basedir/data/$genre/$qno.q";
open(FILE,"$nqfile") || die &tqlib'error("$nqfile",1);
@nqbuf= \n";
print "$nqbuf[1] \n";
print " \n";
open(FILE,">$summfile") || die &tqlib'error("$summfile",0);
print FILE join("\t",@sps);
close(FILE);
}
sub sheet_error{
print " \n";
print "クイズは中断されました。 ";
print "■ 注意 ■ \n";
print "何もしていないのにこのエラーが出る場合は、管理者に連絡してください。 \n";
print "[クイズのトップへ戻る] \n";
&tqlib'copyright;
print "$SHEET{tno} 問中 $ap 問正解
\n";
print "正答率 $rp %
\n";
print "$message
\n";
&show_summtable($rp);
&record_log(1);
if($rp>=$SHEET{suc}){
$rank = &get_rank;
&record_score;
&show_form( $rank );
}
print "[タイトルへ戻る]\n";
}
# ログの保存
sub record_log{
local($id) = @_;
@status = ('started', 'finished');
local ($date) = &tqlib'get_time;
$mstime = &tqlib'change_time($ptime);
if($id){ $sco="rate:$rp%, time:$mstime"; }
open(FILE,">>$logfile") || die &tqlib'error($logfile, 0);
print FILE "[$date] No.$FORM{'acn'} $status[$id] (genre:$SHEET{dir}) $sco [host:$ENV{'REMOTE_HOST'}]\n";
close(FILE);
return;
}
# 順位の取得
sub get_rank{
$regfile="$basedir/data/$SHEET{dir}/highscore.txt";
open(FILE,"$regfile") || die &tqlib'error("$regfile",1);
@regs=
EOF
#--------------------------------------
}
# 得点別メッセージの表示
sub show_message{
local($score)=@_;
$dirmsg="$basedir/data/$SHEET{dir}/message.txt";
if(!(open(FILE,"$dirmsg")||open(FILE,"$msgfile"))){ &tqlib'error($msgfile,1); }
@msgs= \n挑戦 完答 ";
for($a=0;$a<=100;$a+=10){ print "$a% "; }
print "合格 ";
for(11,12,0..10,13){
if($_==$score){
print " ";
}else{
print " $sps[$_] ";
}
}
print "
OKボタンを複数回押すと不正扱いされてしまいます。
サーバー速度が遅くても、OKボタンを押し直したりしないでください。