#!/usr/bin/perl $version='2.24'; #------------------------------------------------ #ファイル名:index.cgi # #説明:クイズのページのメニューページとなるページです。 #------------------------------------------------ require 'jcode.pl'; require 'function.cgi'; &main; #************************************************ # ヘッダ表示処理 # #_HTML_と_HTML_とのあいだに #クイズのページのヘッダー部分のHTMLを記入してください。 #普通のHTML表記でかまいません。 # #************************************************ sub header_html { if($SYS{top_back_color} eq ''){$SYS{top_back_color}='#ddddff';} if($SYS{main_title} eq ''){$SYS{main_title}='無題';} if($SYS{top_wall} ne ''){$wall_paper = " background='$SYS{top_wall}'"} if($SYS{top_text_color} ne ''){$text=" text='$SYS{top_text_color}'";} if($SYS{top_link_color} ne ''){$link=" link='$SYS{top_link_color}'";} if($SYS{top_vlink_color} ne ''){$vlink=" vlink='$SYS{top_vlink_color}'";} $SYS{header}=~ s/\$title/$SYS{main_title}/g; $SYS{header}=~ s/\$top/\[<a href="$SYS{top_url}">$_top<\/a>\] /g; $SYS{header}=~ s/\$quiz_op/\[<a href="$quiz_op_cgi">管理人室<\/a>\] /g; $SYS{header}=~ s/\$imode/\[<a href="$index_cgi?j=1">$_imode<\/a>\] /g; $header_html=<<"_HTML_"; <html> <head> <STYLE Type="text/css">$style</STYLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=$charset"> _HTML_ if($SYS{nocache} ne '0'){ $header_html.=<<"_HTML_"; <META http-equiv="Pragma" content="no-cache"> <META http-equiv="Cache-Control" content="no-cache"> <META http-equiv="Expires" content="Thu, 01 Dec 1994 16:00:00 GMT"> _HTML_ } $header_html.=<<"_HTML_"; <title>$SYS{main_title}</title> </head> <BODY$text$link$vlink bgcolor="$SYS{top_back_color}"$wall_paper> $SYS{header}<br><br> _HTML_ $header_i_html=<<"_HTML_"; <html><head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=$charset"> _HTML_ if($SYS{nocache} ne '0'){ $header_i_html.=<<"_HTML_"; <META http-equiv="Pragma" content="no-cache"> <META http-equiv="Cache-Control" content="no-cache"> <META http-equiv="Expires" content="Thu, 01 Dec 1994 16:00:00 GMT"> _HTML_ } $header_i_html.=<<"_HTML_"; <title>$SYS{main_title}</title></head> <body$text$link$vlink bgcolor="$SYS{top_back_color}"$wall_paper> _HTML_ } ########################以下の部分はプログラム本体です。変更する場合は慎重におねがいします。############################# #************************************************ # メインプログラム #************************************************ sub main{ &setup; if(&ch_sys_lock){&busy_html;} elsif(&ch_guard_ip){&guard_html;} else{ my($buf)=&buf_read; &sys_read; &all_design_read; &all_genre_read; $DSN{com_color}=$SYS{top_info_color}; &get_cookie; if(!$buf){ if($FORM{type} eq 'cont'){ &contribute; &footer_html; &output; }elsif(($FORM{ck} eq 1)||($FORM{ck} eq 0)){ $COOKIE{ck}=$FORM{ck}; &set_cookie; }elsif($FORM{ck} eq 2){ undef %COOKIE; $COOKIE{ck}=1; &set_cookie; }elsif(($FORM{bgm} eq 1)||($FORM{bgm} eq 0)){ $COOKIE{bgm}=$FORM{bgm}; &set_cookie; } } &header_html; &top_html; &top_i_html; &footer_html; $footer_i_html=<<"_HTML_"; <br><a href=$index_cgi?&j=1>一覧</a><br> </body></html> _HTML_ } if($imode eq 'mb'){&output_i;} else{&output;} } #************************************************ # ジャンル表示 #************************************************ sub top_html{ local($i); $i=0;@out=(); $all_play_num=0;$all_play_win=0;$all_mindai=0;$play_rate=0; if($#GENRE_DIR_AVAILABLE <0){&error(681);return;} $main_html=""; #####個人成績・効果音ボタン $main_html.=&personal_button_html(); $all_flag=0; if($SYS{easy} eq 1 || $SYS{easy} eq 0){ foreach $dir(@GENRE_DIR_ALL){ if($GENRE_LST{$dir}{mondai_cgi} ne '.'){&cal_genre_pal($dir);} } } #####一覧形式表示の場合 if($SYS{easy} ne 0 && $SYS{easy} ne 1 && $SYS{easy} ne 2){ &listup_html(); #####表形式表示の場合 }else{ foreach $dir(@GENRE_DIR_AVAILABLE){ &lineup_html($dir); } $main_html.=<<"_HTML_"; <table border=0> <tr><td>$_try</td><td>:</td><td>チャレンジコード不要</td></tr> <tr><td>$_try☆</td><td>:</td><td>チャレンジコード要</td></tr> <tr><td>$_try★</td><td>:</td><td>チャレンジコード登録済</td></tr> </table> _HTML_ } #####メニューページのメッセージの表示(総問題数計算のためcal_genre_palの後に呼ぶ) if($SYS{top_message} ne ''){ local($all_qnum,$qnum,$dir); $all_qnum=0; foreach $dir(keys (%ALL_QUIZ_NUM)){ $all_qnum=$all_qnum + $ALL_QUIZ_NUM{$dir}; } $SYS{top_message} =~ s/\$all_mondai_num/$all_qnum/g; if($SYS{top_table} ne ''){ $main_html=<<"_HTML_"; <table width="$SYS{tblw}" border=0 cellpadding=0 cellspacing=0 bgcolor="$SYS{top_border_color}"><tr><td> <table $top_tbl_opt><tr><td$nowrap bgcolor="$SYS{top_info_color}"> <small>$walign1$SYS{top_message}$walign2</small> </td></tr></table></td></tr></table><br><hr> $main_html _HTML_ }else{$main_html="<small>$SYS{top_message}</small><hr>$main_html";} } } #************************************************ # ジャンル表示(携帯用) #************************************************ sub top_i_html{ #####携帯用出力 if($FORM{d} eq ''){ $main_i_html="□$SYS{main_title}□<br><br>"; foreach(@GENRE_DIR_AVAILABLE){ if($GENRE_LST{$_}{1}{bundle} eq 1 && $GENRE_LST{$_}{2}{bundle} eq 1 ){next;} my($challenge_code); if($GENRE_LST{$_}{challenge_code} ne ''){ if($COOKIE{"CCD_$dir"} ne 1){ $challenge_code="☆"; }else{ $challenge_code="★"; } } $main_i_html.="<a href=$index_cgi?d=$_&j=1>$GENRE_LST{$_}{title}</a>$challenge_code<br>"; } }elsif($FORM{m} eq ''){ $main_i_html="○$GENRE_LST{$FORM{d}}{title}○<br><br>"; if($GENRE_LST{$FORM{d}}{1}{bundle} ne 1){ $main_i_html.="<a href=$quiz_cgi?d=$FORM{d}\&m=1&j=1>$GENRE_LST{$FORM{d}}{1}{mode_name}</a><br>"; } if(($GENRE_LST{$FORM{d}}{2}{mode_name} ne '') && ($GENRE_LST{$FORM{d}}{2}{bundle} ne 1)){ $main_i_html.= "<a href=$quiz_cgi?d=$FORM{d}\&m=2&j=1>$GENRE_LST{$FORM{d}}{2}{mode_name}</a><br>"; } if(($GENRE_LST{$FORM{d}}{1}{num_limit} ne '0') && ($GENRE_LST{$FORM{d}}{1}{day_limit} ne '0') && ($GENRE_LST{$FORM{d}}{1}{bundle} ne 1)){ $main_i_html.= "<br><a href=$quiz_cgi?d=$FORM{d}\&m=1&j=1&h=1>$GENRE_LST{$FORM{d}}{1}{mode_name}高成績者</a><br>"; } if(($GENRE_LST{$FORM{d}}{2}{mode_name} ne '') && ($GENRE_LST{$FORM{d}}{1}{num_limit} ne '0') && ($GENRE_LST{$FORM{d}}{1}{day_limit} ne '0') && ($GENRE_LST{$FORM{d}}{2}{bundle} ne 1)){ $main_i_html.= "<a href=$quiz_cgi?d=$FORM{d}\&m=2&j=1&h=1>$GENRE_LST{$FORM{d}}{2}{mode_name}高成績者</a><br>"; } } } #************************************************ # ジャンルの設定などを計算し、%GENRE_CALに格納 #************************************************ sub cal_genre_pal{ $dir=$_[0]; if($GENRE_LST{$dir}{mente} ne 1){next;} &refresh_quiz; &quiz_read($dir); $mondai=$#mondai+1; $ALL_QUIZ_NUM{$dir}=$mondai; ($mass1,$clear1,$clear_per1,$ave1,$high1,$quiz_max1,$play_max1,$lose_max1)=&cal($dir,$GENRE_LST{$dir}{1}{scorehst_cgi},$GENRE_LST{$dir}{1}{high_cgi},$GENRE_LST{$dir}{1}{play_max},$GENRE_LST{$dir}{1}{lose_max},$GENRE_LST{$dir}{1}{high_border},$GENRE_LST{$dir}{1}{quiz_max},$mondai); ($mass2,$clear2,$clear_per2,$ave2,$high2,$quiz_max2,$play_max2,$lose_max2)=&cal($dir,$GENRE_LST{$dir}{2}{scorehst_cgi},$GENRE_LST{$dir}{2}{high_cgi},$GENRE_LST{$dir}{2}{play_max},$GENRE_LST{$dir}{2}{lose_max},$GENRE_LST{$dir}{2}{high_border},$GENRE_LST{$dir}{2}{quiz_max},$mondai); $play_num=0;$play_win=0;$play_rate=0; if($play_max1>$play_max2){$play_max=$play_max1;} else{$play_max=$play_max2;} if($SYS{easy} eq 0){ for($quiz_index=0;$quiz_index<$play_max;$quiz_index++){ if(open(DB,"$dir/$quiz_header$quiz_index\.cgi")){ @new= <DB>;close(DB); @qu=(0,0,0,0,0); @qu = split(/\t/, $new[0]); @qu2= split(/\t/, $new[1]); foreach $qu(@qu){$play_num{$dir}[$quiz_index]=$play_num{$dir}[$quiz_index]+$qu;$i++;} if(@qu2[1]>$play_num{$dir}[$quiz_index]){$play_num{$dir}[$quiz_index]=@qu2[1];} $play_win{$dir}[$quiz_index]=$play_win{$dir}[$quiz_index]+$qu[0]; } } } $GENRE_CAL{$dir}=join("\t",$mondai,$mass1,$clear1,$clear_per1,$ave1,$high1,$quiz_max1,$play_max1,$lose_max1,$mass2,$clear2,$clear_per2,$ave2,$high2,$quiz_max2,$play_max2,$lose_max2); } #************************************************ # ジャンルの設定などを計算し、%GENRE_CALに格納 #************************************************ sub lineup_html{ $dir=$_[0]; @dir=(); undef %quiz_num; if($GENRE_LST{$dir}{mondai_cgi} eq '.'){ foreach(@GENRE_DIR_ALL){if($GENRE_LST{$_}{mondai_cgi} ne '.'){push(@dir,$_);}} }elsif($GENRE_LST{$dir}{mondai_cgi} =~ /\//){ @mondai_dat=split(/\t/,$GENRE_LST{$dir}{mondai_cgi}); foreach(@mondai_dat){ local($d,$val)=split(/\//,$_); push(@dir,$d); if($val eq 'all'){$val ='';} $quiz_num{$d}=$val; } }else{@dir=($dir);} ($all_play_num,$all_play_win,$all_mondai)=(); foreach(@dir){ ($mondai,$mass1,$clear1,$clear_per1,$ave1,$high1,$quiz_max1,$play_max1,$lose_max1,$mass2,$clear2,$clear_per2,$ave2,$high2,$quiz_max2,$play_max2,$lose_max2)=split(/\t/,$GENRE_CAL{$_}); if(($mondai > $quiz_num{$_})&&($quiz_num{$_} ne '')){$mondai = $quiz_num{$_};} $all_mondai=$all_mondai+$mondai; for($i=0;$i<$mondai;$i++){ $all_play_num=$all_play_num+$play_num{$_}[$i]; $all_play_win=$all_play_win+$play_win{$_}[$i]; } } ($mass1,$clear1,$clear_per1,$ave1,$high1,$quiz_max1,$play_max1,$lose_max1)=&cal($dir,$GENRE_LST{$dir}{1}{scorehst_cgi},$GENRE_LST{$dir}{1}{high_cgi},$GENRE_LST{$dir}{1}{play_max},$GENRE_LST{$dir}{1}{lose_max},$GENRE_LST{$dir}{1}{high_border},$GENRE_LST{$dir}{1}{quiz_max},$all_mondai); ($mass2,$clear2,$clear_per2,$ave2,$high2,$quiz_max2,$play_max2,$lose_max2)=&cal($dir,$GENRE_LST{$dir}{2}{scorehst_cgi},$GENRE_LST{$dir}{2}{high_cgi},$GENRE_LST{$dir}{2}{play_max},$GENRE_LST{$dir}{2}{lose_max},$GENRE_LST{$dir}{2}{high_border},$GENRE_LST{$dir}{2}{quiz_max},$all_mondai); $COOKIE{"S1$dir"}=$COOKIE{"S1$dir"}+0;$COOKIE{"S2$dir"}=$COOKIE{"S2$dir"}+0; $COOKIE{"E1$dir"}=$COOKIE{"E1$dir"}+0;$COOKIE{"E2$dir"}=$COOKIE{"E2$dir"}+0; $COOKIE{"H1$dir"}=$COOKIE{"H1$dir"}+0;$COOKIE{"H2$dir"}=$COOKIE{"H2$dir"}+0; $COOKIE{"A1$dir"}=$COOKIE{"A1$dir"}+0;$COOKIE{"A2$dir"}=$COOKIE{"A2$dir"}+0; $cook_a1=&point($COOKIE{"A1$dir"},1); $cook_a2=&point($COOKIE{"A2$dir"},1); $iplay_max1=$COOKIE{"W1$dir"}+$COOKIE{"L1$dir"}; $iplay_max2=$COOKIE{"W2$dir"}+$COOKIE{"L2$dir"}; if($iplay_max1 > 0){$iave1=&point($COOKIE{"W1$dir"}/$iplay_max1*100,1);}else{$iave1='0.0';} if($iplay_max2 > 0){$iave2=&point($COOKIE{"W2$dir"}/$iplay_max2*100,1);}else{$iave2='0.0';} if(!mygrep($dir,@GENRE_DIR_ORIGN) || $GENRE_LST{$dir}{cont} ne 1){ $add_link=''; }else{ $add_link="[<a href=$quiz_cgi?d=$dir\&add=1>$_add</a>]"; } if($GENRE_LST{$dir}{challenge_code} ne ''){ if($COOKIE{"CCD_$dir"} ne 1){ $challenge_code="☆"; }else{ $challenge_code="★"; } }else{ $challenge_code=""; } if($all_play_num eq ''){$all_play_num=0;} if($all_play_win eq ''){$all_play_win=0;} if($all_play_num > 0){$play_rate=&point($all_play_win*100/$all_play_num,1);} else{$play_rate=&point(0,1);} if(($quiz_max1 eq 0)&&($SYS{easy} eq 0 || $SYS{easy} eq 1)){$chalenge1="\[$_underconst\]";} else{$chalenge1="\[<a href=$quiz_cgi?d=$dir\&m=1>$_try$challenge_code</a>\]";} if(($quiz_max2 eq 0)&&($SYS{easy} eq 0 || $SYS{easy} eq 1)){$chalenge2="\[$_underconst\]";} else{$chalenge2="\[<a href=$quiz_cgi?d=$dir\&m=2>$_try$challenge_code</a>\]";} #####ジャンル2が存在せず、ジャンルコメントが存在しない場合の場合分け if($GENRE_LST{$dir}{2}{mode_name} eq '' && $GENRE_LST{$dir}{top_comment} eq ''){ $top_colspan=' colspan=2'; }else{ $top_colspan=' colspan=4'; } $main_html.=<<"_HTML_"; <table width="$SYS{tblw}" border=0 cellpadding=0 cellspacing=0 bgcolor="$SYS{top_border_color}"><tr><td> <table $top_tbl_opt> <tr><td$top_colspan bgcolor="$SYS{top_genre_color}"> <table border=0 width="100%" cellpadding=0 cellspacing=0> <tr><td$nowrap><b><span>$GENRE_LST{$dir}{title}</span></b></td> _HTML_ if($SYS{easy} eq 0){$main_html.="<td nowrap><small>総出題数 : $all_play_num 問 正答率 : $play_rate %</small></td>";} $main_html.="<td align=right><small>$add_link\[<a href=$quiz_cgi?d=$dir\&s=1>$_score</a>\]</small></td>"; #####モード2が存在する場合 if($GENRE_LST{$dir}{2}{mode_name} ne ''){ $main_html.=<<"_HTML_"; </tr></table></td></tr> ${if($GENRE_LST{$dir}{top_comment} ne ''){$ret="<tr><td colspan=4 bgcolor='$SYS{top_com_color}'$nowrap>$walign1<small>$GENRE_LST{$dir}{top_comment}</small>$walign2</td></tr>";}else{$ret='';}}$ret <tr><td colspan=2 bgcolor="$SYS{top_table_color}"$nowrap>$walign1<small>$GENRE_LST{$dir}{1}{mode_name}</small>$walign2</td><td colspan=2 bgcolor="$SYS{top_table_color}"$nowrap>$walign1<small>$GENRE_LST{$dir}{2}{mode_name}</small>$walign2</td></tr> <tr><td colspan=2 bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>$chalenge1\[<a href=$quiz_cgi?h=1&d=$dir&m=1>$_high</a>][<a href=$quiz_cgi?d=$dir&g=1&m=1>$_graph</a>]</small>$walign2</td> <td colspan=2 bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>$chalenge2\[<a href=$quiz_cgi?h=1&d=$dir&m=2>$_high</a>][<a href=$quiz_cgi?d=$dir&g=1&m=2>$_graph</a>]</small>$walign2</td></tr> _HTML_ #####トップページが簡易バージョンでない場合 if($SYS{easy} eq 0 || $SYS{easy} eq 1){ $main_html.=<<"_HTML_"; <tr><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>問題数 : $quiz_max1 問</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>挑戦者 : $mass1 人</small>$walign2</td> <td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>問題数 : $quiz_max2 問</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>挑戦者 : $mass2 人</small>$walign2</td></tr> <tr><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>出題数 : $play_max1 問</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>合格者 : $clear1 人</small>$walign2</td> <td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>出題数 : $play_max2 問</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>合格者 : $clear2 人</small>$walign2</td></tr> <tr><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>終了条件 : $lose_max1 問</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>合格率 : $clear_per1 %</small>$walign2</td> <td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>終了条件 : $lose_max2 問</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>合格率 : $clear_per2 %</small>$walign2</td></tr> <tr><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>合格基準 : $GENRE_LST{$dir}{1}{high_border} %</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>平均点 : $ave1 問</small>$walign2</td> <td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>合格基準 : $GENRE_LST{$dir}{2}{high_border} %</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>平均点 : $ave2 問</small>$walign2</td></tr> <tr>$high1$high2</tr> _HTML_ } #####個人成績を表示の表示 if($COOKIE{ck} > 0){ $main_html.=<<"_HTML_"; <tr><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>個人挑戦 : $COOKIE{"S1$dir"}回</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>個人完走 : $COOKIE{"E1$dir"}回</small>$walign2</td> <td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>個人挑戦 : $COOKIE{"S2$dir"}回</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>個人完走 : $COOKIE{"E2$dir"}回</small>$walign2</td></tr> <tr><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>個人出題 : $iplay_max1問</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>個人最高 : $COOKIE{"H1$dir"}問</small>$walign2</td> <td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>個人出題 : $iplay_max2問</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>個人最高 : $COOKIE{"H2$dir"}問</small>$walign2</td></tr> <tr><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>個人正解率 : $iave1%</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>個人平均 : $cook_a1問</small>$walign2</td> <td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>個人正解率 : $iave2%</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>個人平均 : $cook_a2問</small>$walign2</td></tr> _HTML_ } $main_html.='</table></td></tr></table><br><br>'; }else{ #####モード2が存在しない場合 #####個人成績を表示しない場合 if($COOKIE{ck} > 0){$rowspan=10;}else{$rowspan=7;} #####ジャンルコメントが存在しない場合の場合分け if($GENRE_LST{$dir}{top_comment} ne ''){ $top_com="<td nowrap colspan=2 rowspan='$rowspan' width=50% bgcolor='$SYS{top_com_color}'>$walign12$GENRE_LST{$dir}{top_comment}$walign2</td>"; }else{ $top_com=''; } $main_html.=<<"_HTML_"; </tr></table></td></tr> <tr><td colspan=2 bgcolor="$SYS{top_table_color}" nowrap>$walign1$GENRE_LST{$dir}{1}{mode_name}$walign2</td> $top_com </tr> <tr><td colspan=2 bgcolor="$SYS{top_table_color}" nowrap>$walign1$chalenge1\[<a href=$quiz_cgi?h=1&d=$dir&m=1>$_high</a>][<a href=$quiz_cgi?d=$dir&g=1&m=1>$_graph</a>]$walign2</td></tr> _HTML_ #####トップページ簡易バージョンでない場合 if($SYS{easy} eq 0 || $SYS{easy} eq 1){ $main_html.=<<"_HTML_"; <tr><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>問題数 : $quiz_max1 問</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>挑戦者 : $mass1 人</small>$walign2</td></tr> <tr><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>出題数 : $play_max1 問</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>合格者 : $clear1 人</small>$walign2</td></tr> <tr><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>終了条件 : $lose_max1 問</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>合格率 : $clear_per1 %</small>$walign2</td></tr> <tr><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>合格基準 : $GENRE_LST{$dir}{1}{high_border} %</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>平均点 : $ave1 問</small>$walign2</td></tr> <tr>$high1</tr> _HTML_ } #####個人成績の表示 if($COOKIE{ck} > 0){ $main_html.=<<"_HTML_"; <tr><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>個人挑戦 : $COOKIE{"S1$dir"}回</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>個人完走 : $COOKIE{"E1$dir"}回</small>$walign2</td></tr> <tr><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>個人出題 : $iplay_max1問</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>個人最高 : $COOKIE{"H1$dir"}問</small>$walign2</td></tr> <tr><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>個人正解率 : $iave1%</small>$walign2</td><td bgcolor="$SYS{top_table_color}" nowrap>$walign1<small>個人平均 : $cook_a1問</small>$walign2</td></tr> _HTML_ } $main_html.='</table></td></tr></table><br><br>'; } } #************************************************ # 一覧形式メニューの表示 #************************************************ sub listup_html{ local(%list_title,%list_mode1,%list_mode2,%list_com,$mode2_flg,$com_flg); foreach $dir(@GENRE_DIR_AVAILABLE){ $list_mode1{$dir}="\[<a href=$quiz_cgi?d=$dir\&m=1>$GENRE_LST{$dir}{1}{mode_name}</a>]"; if($GENRE_LST{$dir}{2}{mode_name} eq ''){ $list_mode2{$dir}=' '; }else{ $mode2_flg=1; $list_mode2{$dir}="\[<a href=$quiz_cgi?d=$dir\&m=2>$GENRE_LST{$dir}{2}{mode_name}</a>]"; } if($GENRE_LST{$dir}{top_comment} eq ''){ $list_com{$dir}=' '; }else{ $com_flg=1; $list_com{$dir}=$GENRE_LST{$dir}{top_comment}; } } $main_html.=<<"_HTML_"; <table width="$SYS{tblw}" border=0 cellpadding=0 cellspacing=0 bgcolor="$SYS{top_border_color}"><tr><td> <table $top_tbl_opt> _HTML_ foreach $dir(@GENRE_DIR_AVAILABLE){ $main_html.=<<"_HTML_"; <tr> <td$nowrap bgcolor="$SYS{top_genre_color}"><table width=100% border=0 cellpadding=0 cellspacing=0><tr><td><b><span>$GENRE_LST{$dir}{title}</span></td> <td align=right><small>\[<a href=$quiz_cgi?d=$dir\&s=1>$_score</a>\]</small></b></td></tr></table></td> <td$nowrap bgcolor="$SYS{top_table_color}"><span>$list_mode1{$dir}</span></td> _HTML_ if($mode2_flg eq 1){ $main_html.="<td$nowrap bgcolor=\"$SYS{top_table_color}\"><span>$list_mode2{$dir}</span></td>"; } if($com_flg eq 1){ $main_html.="<td$nowrap bgcolor=\"$SYS{top_table_color}\"><span>$list_com{$dir}</span></td>"; } $main_html.='</tr>'; _HTML_ } $main_html.='</table></td></tr></table><br><br>'; } #************************************************ # 個人成績表示ボタン #************************************************ sub personal_button_html{ local($ret); $ret=<<"_HTML_"; <table border=0 cellpadding=0 cellspacing=0 bgcolor="$SYS{top_border_color}"><tr><td> <table $top_tbl_opt> <form method="$method" action="$index_cgi"> <td bgcolor="$SYS{top_table_color}"> _HTML_ if($COOKIE{bgm} > 0){ $ret.=<<"_HTML_"; <input type=hidden name=bgm value=0> <input type=submit value='効果音無'></td></form> _HTML_ }else{ $ret.=<<"_HTML_"; <input type=hidden name=bgm value=1> <input type=submit value='効果音付'> _HTML_ } $ret.='</td></form>'; $ret.="<form method='$method' action='$index_cgi'><td bgcolor='$SYS{top_table_color}'>"; if($COOKIE{ck} > 0){ $ret.=<<"_HTML_"; <input type=hidden name=ck value=0> <input type=submit value='個人記録非表\示'></td></form> <form method="$method" action="$index_cgi"><td bgcolor="$SYS{top_table_color}"> <input type=hidden name=ck value=2> <input type=submit value='個人記録消去'> _HTML_ }else{ $ret.=<<"_HTML_"; <input type=hidden name=ck value=1> <input type=submit value='個人記録表\示'> _HTML_ } $ret.='</td></form>'; $ret.='</tr></table></td></tr></table><br>'; return $ret; } #************************************************ # 各種計算 #************************************************ sub cal{ local($high,$mass,$clear,$ave); local($dir,$scorehst,$highcgi,$play_max,$lose_max,$high_border,$quiz_max,$mondai)=@_; if($quiz_max eq ''){$quiz_max = $mondai;} elsif($quiz_max > $mondai){$quiz_max = $mondai;} if($play_max eq ''){$play_max = $quiz_max;} elsif($play_max > $quiz_max){$play_max = $quiz_max;} if($lose_max eq ''){$lose_max = $play_max;} elsif($lose_max > $play_max){$lose_max = $play_max;} open(DB,"$dir/$scorehst\.cgi");local(@list)=<DB>;close(DB); local(@score); if($list[0]=~ /^date/){@score=@list[1..$#list];} else{@score=@list;} $mass=0;$clear=0;$ave=0;$per=0; foreach ($k=0;$k<=$play_max;$k++){ $mass=$mass+$score[$k]; #####挑戦者数 if($play_max >0){ $syutu=$k+$lose_max; if($syutu > $play_max){$syutu=$play_max;} if($syutu >0){if($high_border <= $k*100/$syutu){$clear=$clear+$score[$k];}} $xxx=$k*100/$syutu; } $ave=$ave+$score[$k]*$k; } $clear_per=0; if($mass >0){ $clear_per=&point($clear*100/$mass,1); #####合格率 $ave=&point($ave/$mass,1); }else{$clear_per=0;$ave=0;} $high='';$day='';$name=''; open(DB,"$dir/$highcgi\.cgi");local(@lines)=<DB>;close(DB); if($lines[0]=~ /^date/){($day,$high,$name,$host,$time,$com) = split(/\t/,$lines[1]);} else{($day,$high,$name,$host,$time,$com) = split(/\t/,$lines[0]);} $day=&time_set($day); if($name eq ''){$name='----';} if($high eq ''){$high='0';} $high="<td colspan=2 bgcolor='$SYS{top_high_color}'>$walign1<small>Top:[$name] $high問正解</small>$walign2</td>"; return ($mass,$clear,$clear_per,$ave,$high,$quiz_max,$play_max,$lose_max); }