もどる

FAQ〜よくある改造希望とその答え〜

〜改造の前に〜

  • shiritori.cgiの○行目、と説明してますので、行数を表示できるテキストエディタを用意してください。(秀丸エディタなど)
  • 行数は物理改行でなく、論理改行で数えています。テキストエディタの行数表示の設定を確認してください。(表示の幅に関わりなく、改行記号までで1行と数えるのが論理改行)
  • 改造の前に、改造しない状態できちんと動作することを確認してください。各種設定を変更しても動作しますか?


  • 回答時のコメントを必須にする。

    1. shiritori.cgiの658行目を変更する。
      よかったらコメントをどうぞ。<br> → コメントをお書き下さい。<br>

    2. shiritori.cgiの432行目の次に、次の1行を挿入。
      unless ($FORM{'imi'}){ &error(0,"コメントは必須です。記入をお願いします。");}

     ただし、これだと半角スペースでもコメントとして認められてしまいますので、一定の文字数以上を必須にするなら、shiritori.cgiの432行目の次に挿入するのは、次の1行にしてください。
    if (length $FORM{'imi'}<2*5){&error(0,"コメントはもっと書いてください。");}
     赤の数字が文字数を表し、ここで指定した文字数(全角で数える)以上のコメントでないと、やり直しになります。

    既出単語を答えたとき、減点しないようにする。

    shiritori.cgiの473行目を変更する。
    &genten(1,$dat[4],"残念! その単語は以前にもう出ています。","5:$FORM{'word'} ");

    &error(0,"残念! その単語は以前にもう出ています。");

    お手つき(はじまりの文字を間違う)を減点にする。

    shiritori.cgiの448行目を変更する。
    &error(0,"「$lastwordletter」から始めてください!") unless ($firstletter eq $lastwordletter);

    &genten(1,"","「$lastwordletter」から始めてください!","6:$FORM{'word'}") unless ($firstletter eq $lastwordletter);
    1点以上減点したい場合は、赤の数字を減点したい点数に変更してください。半角で。

    「ゃ」「ゅ」「ょ」で終わったとき、次は「や」「ゆ」「よ」から始まるようにする。

    1. shiritori.cgiの875行目を変更する。
      if ($letter eq "ゃ" || $letter eq "ゅ" || $letter eq "ょ"){$letter = substr($word,-4-$ifi,4);}

      $letter =~ tr/ゃゅょ/やゆよ/;

    2. kanri.cgiの1128行目を変更する。
      if ($letter eq "ゃ" || $letter eq "ゅ" || $letter eq "ょ"){$letter = substr($yomi,-4-$ifi,4);}

      $letter =~ tr/ゃゅょ/やゆよ/;

    回答フォームのある画面のログに、回答時間を表示する。

    shiritori.cgiの638行目と639行目の間に、次の1行を挿入する。
    print "<font color=\"#888888\" size=1>".&gettime($dat[5])."</font><br>\n";

    回答の読みの文字数だけでなく、言葉やコメントの文字数も制限する。

     回答の読みの文字数は設定ファイルで設定しますが、言葉やコメントの文字数の字数制限はありません。
    そこで、必要以上に長い言葉やコメントが入力されることを防ぐために、言葉やコメントの文字数を制限します。
  • shiritori.cgiの444行目の後に、次の2行を挿入する。
    if (length $FORM{'word'}>2*10){&error(0,"規定文字数を超えています。<br>10字以内の言葉にしてね。");}
    if (length $FORM{'imi'}>2*20){&error(0,"規定文字数を超えています。<br>20字以内の言葉にしてね。");}
    

    赤の数字のところが上限文字数です。文字数は全角で数えます。

  • 設定した文字を含む言葉を得点単語とする。

    1. 設定ファイル(settei.cgi)中の101,102行目を変更する。
      #@pointletters=();		#ここで設定した文字を含むものが得点単語になる。'で囲んで,で区切ることでいくつでも可。
      #$specialletterpoint=2;	#@pointlettersで設定した文字を含む言葉を回答したときの得点。
      

      @pointletters=('','');	#ここで設定した文字を含むものが得点単語になる。'で囲んで,で区切ることでいくつでも可。
      $specialletterpoint=2;	#@pointlettersで設定した文字を含む言葉を回答したときの得点。
      
      得点単語としたい文字と、そのときの得点を設定します。赤字の部分です。文字はいくつでも増やせます。反対に一つだけでも可。

    2. shiritori.cgiの506-508行目を変更する。
      #foreach (@settei::pointletters){
      #	if ($FORM{'word'} =~ /$_/ && $getpoint==1){$getpoint=$settei::specialletterpoint;last;}
      #}
      

      foreach (@settei::pointletters){
      	if ($FORM{'word'} =~ /$_/ && $getpoint==1){$getpoint=$settei::specialletterpoint;last;}
      }
      
    ただし、この場合は回答の言葉に指定した文字が含まれていた場合です。読みの文字で得点単語を指定したい場合は、次のようにします。
  • shiritori.cgiの506-508行目。
    foreach (@settei::pointletters){
    	if ($FORM{'yomi'} =~ /$_/ && $getpoint==1){$getpoint=$settei::specialletterpoint;last;}
    }
    
    当然、設定ファイルで@pointlettersを設定するときは、ひらがなで。

    それから、注意して欲しいのですが、この方法で得点単語を設定する場合、得点単語一覧には表示されませんが、回答ログの方に得点が$specialletterpointの点数が反映されます。(他の特別チャンスやキリ番はプラス得点や倍の得点が回答ログに反映されません。参加者名簿には反映されます。)
    つまり、たとえ不適切な回答であっても、2点以上得点されているのが他の方にわかるというわけで・・・
    これ、私的には好ましくないのですが、どうなのでしょうね? そのあたりを考慮にいれて、お使い下さい。
    なお、管理用CGI Ver.0.7より、回答ログを削除すると、その回答の点数に応じて名簿から減点します。(これまでは一律に1点減点でした。)

  • 100番ごとにキリ番を設定する。

     キリ番設定は設定ファイル中でできますが、100番ごとにキリ番を設定したいときなど、全部を設定ファイルに書くのは面倒です。
    そこで、スクリプトに1行加えれば、100番ごとに自動的にキリ番になります。
    1. shiritori.cgiの517行目を変更する。
      #$special=1 if ($no%100==0);	#←*00番をキリ番にする。
      $special=1 if ($no%100==0);	#←*00番をキリ番にする。
     行頭の#をとるだけです(笑)
     もし200番ごとをキリ番にしたいなら、赤字の部分を100ではなく、200にします。
    if ($no%100==0)の意味は、$noを100で割った余りが0ならば、ということ。$noは回答番号です。
    if ($no%100==1)にすれば、101や201など、100で割って余りが1になる数がキリ番ということになりますね。

    上位者ランキングに、得点単語回答ランキングもつける。

    サンプルでは、得点単語回答ランキングをつけていました。その付け方です。
  • shiritori.cgiの827行目の次に、次の27行を挿入する。
    	my @points = &open_file($settei::pointfile,"得点単語ファイル");
    	my (%times,%score);
    	foreach (@points){
    		chomp;
    		my @datas = split("\t",$_);
    		if ($datas[5] && $datas[3]){
    			$times{"$datas[5]"}++;
    			$score{"$datas[5]"}+=$datas[2];
    		}
    	}
    	if (%times){
    		print "<h4>得点単語回答者ランキング</h4>\n";
    		print "得点は、得点単語で得た得点の合計点です。<br>\n";
    		print "平均は、得点単語で得た得点の平均(得点÷回数)です。<br>\n";
    		print "<table border=1 cellspacing=0><tr><th>順位</th><th>お名前</th><th>回数</th><th>得点</th><th>平均</th></tr>\n";
    		my $i=1;my $k=1;my @p;
    		foreach (sort {$times{$b}<=>$times{$a} or $score{$b}<=>$score{$a}} keys %times){
    			($times{"$_"}==$p[0] && $score{"$_"}==$p[1]) || ($i=$k);
    			print "<tr";
    			($c_name eq $_) && print " class=\"myranking\"";
    			my $heikin = (int $score{"$_"}*10/$times{"$_"})/10;
    			print "><td>$i位</td><td>$_さん</td><td>$times{\"$_\"}回</td><td>$score{\"$_\"}点</td><td>$heikin点</td></tr>\n";
    			@p = ($times{"$_"},$score{"$_"});
    			$k++;
    		}
    		print "</table>\n";
    	}
    
     得点単語を誰も答えていない場合は表示されません。
  • タイトル部分のデザインを変更する。

    shiritori.cgiの694-700行がタイトル部分です。ここを変更してください。
    HTMLで記述します。変数有効。各行ごとに説明をつけておくので、参考にしてください。(灰色部分が説明)
    701行目の、_HTML_だけの行は変更しないでください。スペースも入れてはいけません。
    694〜700行の間で行数を増やすのはかまいません。
    $settei::body					←BODYタグ。設定ファイルで設定しています。
    [<a href=\"$settei::home\">HOME</a>]			←戻り先リンク。$setteii::homeは設定ファイルで設定($homeとして)
    <center>						←センタリング
    <hr>						←罫線。スタイルシート外部ファイル(shiritori.css)で定義可
    <div class=\"titlestyle\">$title</div>		←$titleはタイトル。スタイルシート外部ファイルでclass="titlestyle"を定義。
    <hr>						←罫線。
    <br>						←改行
    
     罫線を画像にしてもいいですね。<img src="line.gif"><br>なんて感じで。もちろんなくしてもいい。
     タイトルも画像と差し替えてもいいですが、画面の内容を知らせるものなので、$titleという部分をどこかに残しておいてください。 また、このままではスタイルシートに対応していないブラウザだと、タイトルが普通の文字になってしまって目立たないので、
    <div class=\"titlestyle\">$title</div> の部分を、<h4 class=\"titlestyle\">$title</h4>
    のようにしてもいいですね。

    時間の表示を方法を変更する。

    時間の表示は、2004年1月30日(土)15:05などのように表示されます。この表示の変更方法です。
  • shiritori.cgiの895行目を変更する。
    	$time = sprintf("%04d年%01d月%01d日\($week[$wday]\)%02d:%02d",$year+1900,$mon+1,$dy,$hour,$min);
    
    	$time = sprintf("%01d月%01d日\%01d時%01d分%01d秒",$mon+1,$dy,$hour,$min,$sec);
    
     これだと、2004年1月30日(土)15:05ではなく、1月30日15時5分10秒のように表されます。
     他の表示がいい人は、これを参考に手直ししてください。
     なお、時間表示の色や文字サイズはここでは変更できません。
    print &gettime($dat[5])
     のように記述されている部分(灰色部分は違うこともあります)が、時間を表示しているところなので、その前後のfontタグを探して、色や文字サイズを直してください。
  • 賞品をナシにする。

    1. shiritori.cgiの208,265,709行目を変更する。
      それぞれ「得点・順位確認&賞品表\示」または「得点確認&賞品表\示」という言葉があるので、これを「得点・順位確認」に変更する。
    2. shiritori.cgiの212-216行目をコメントアウトする。
      (行頭に#をつけてコメントアウトします。削除してもいいです。)
      #	if ($^T > $kigen && $^T < $end || -e "$settei::piriod_dir" && $^T< $end){
      #		print "ただいま賞品表\示期間中です。<p>\n";
      #		print "これまでに$settei::minscore点以上の得点を取っていれば、賞品が表\示されます。<p>\n";
      #	}
      #	if ($^T >= $end){print &gettime($end)."を持って、賞品表\示期間も終了しています。\n";}
      

    3. shiritori.cgiの217行目を変更する。
      elsif ($nameflag==0){&entername;}		#名前とパスの入力画面

      if ($nameflag==0){&entername;}		#名前とパスの入力画面

    4. shiritori.cgiの231-259行目をコメントアウトする。
      print "<table border=1 cellspacing=0 cellpadding=5><tr><td>\n";
      if ($cdata[2] < $settei::minscore){
      		print "<center>$settei::minscore点以上の得点を取っていれば、ここに賞品が表\示されます。<br>\n";
      
      	中略
      
      		print $settei::omedetou2;
      		print "</td></tr></table>\n";
      	}
      }
      

    5. shiritori.cgiの261-262行目を変更、コメントアウトする。
      	unless (-e "$settei::piriod_dir") {print "ゲームは".&gettime($kigen)."まで、<br>\n";}
      	print "賞品の表\示期間は".&gettime($end)."までです。<p>\n";
      
      	unless (-e "$settei::piriod_dir") {print "ゲームは".&gettime($kigen)."までです。<br>\n";}
      	#print "賞品の表\示期間は".&gettime($end)."までです。<p>\n";
      

    6. kanri.cgiの937行目をコメントアウトする。
      #print "<OPTION VALUE=\"price_view\">賞品の表\示確認</option>\n";

    期間限定にしない。

     これについては手直しする個所が多すぎるので、「ポイント制しりとり」として別に配布しています。

    同音異義語を回答として認める。他

     回答には言葉と読みを入力してもらっていますが、回答チェック時には回答ログと照らし合わせて、言葉・読みのそれぞれどちらかが既に既出のものであった場合、既出単語として回答を受け付けません。(減点されます。)
    しかし、日本語には同音異義語(読みは同じだが字=意味が異なる言葉)や、同じ漢字であっても読み=意味の異なる言葉があるわけで・・・。
    そこで、言葉と読みの両方が一致したもののみを既出の単語とする方法です。
    1. shiritori.cgiの459行目を変更する。(削除単語も、言葉と読みの両方が一致したもののみを弾く場合)
      if($FORM{'yomi'} eq $dat[1] || $FORM{'word'} eq $dat[0]){

      if($FORM{'yomi'} eq $dat[1] && $FORM{'word'} eq $dat[0]){

    2. shiritori.cgiの472行目を変更する。
      if($FORM{'yomi'} eq $dat[2] || $FORM{'word'} eq $dat[1]){

      if($FORM{'yomi'} eq $dat[2] && $FORM{'word'} eq $dat[1]){

    3. shiritori.cgiの491行目を変更する。(得点単語も、言葉と読みの両方が一致したもののみを得点とする場合)
      if ($FORM{'word'} eq $dat[0] || $FORM{'yomi'} eq $dat[1]){

      if ($FORM{'word'} eq $dat[0] && $FORM{'yomi'} eq $dat[1]){
     この場合は、文字が同じでも読みが違う、または読みが同じでも文字が違うならばOKってことになります。
     回答の文字が同じかどうかだけでチェックする場合は、上記の3個所を、次のように変更してください。
    shiritori.cgiの459行目,491行目→if ($FORM{'word'} eq $dat[0]){
    shiritori.cgiの472行目→if ($FORM{'word'} eq $dat[1]){

     回答の読みが同じかどうかだけでチェックする場合は、上記の3個所を、次のように変更してください。
    shiritori.cgiの459行目,491行目→if ($FORM{'yomi'} eq $dat[1]){
    shiritori.cgiの472行目→if ($FORM{'yomi'} eq $dat[2]){

    コメント部分で一部のタグを有効にする。

     しりとりでは、いくつかコメントを入力する場面があります。それぞれのコメントでタグを有効にする方法です。
     すべてのタグを許可するのではなく、いくつかのタグのみ許可します。

  • まずは、回答時のコメントで、一部タグを許可する方法。(デフォルトではタグを一切許可していません。)
    1. shiritori.cgiの544行目を変更する。
      &tsuika_file("$no\t$FORM{'word'}\t$FORM{'yomi'}\t$FORM{'imi'}\t$FORM{'name'}\t$^T\t$getpoint\n",$settei::wordfile,"しりとり回答記録ファイル");
      
      &tsuika_file("$no\t$FORM{'word'}\t$FORM{'yomi'}\t".&tagok($FORM{'imi'})."\t$FORM{'name'}\t$^T\t$getpoint\n",$settei::wordfile,"しりとり回答記録ファイル");
      
    2. shiritori.cgiの658行目を変更する。
      よかったらコメントをどうぞ。<br>

      よかったらコメントをどうぞ。(<b>,<i>,<s>タグのみ有効)<br>

  • 回答後、上位者に対してコメント欄が表示されます。そのコメント欄で一部タグを有効にする方法。
    1. 設定ファイル(settei.cgi)の116行目の次(最終行の前)に次の1行を挿入する。
      $tagok = 1;
    2. shiritori.cgiの837行目を変更する。
      print "<small>改行反映、タグ不可。</small><br>\n";

      print "<small>改行反映、<b>,<i>,<s>のみ許可。</small><br>\n";

     回答時のコメント、回答後のコメント、ともにデフォルトでは、b,i,s,fontタグが有効ですが、他のタグを許可したい場合は、「有効にするタグを変更する」をご覧ください。
     また、タグは閉じ忘れている場合、有効になりません。

  • 得点単語回答時に表示される、その単語につけられた管理人からのメッセージをタグ有効にする。
     これは<b>,<i>,<s>,<li>,<sup>,<sub>,<font>のタグと、&から始まる特殊文字が、最初から有効になっています。他のタグも有効にしたい場合は、「有効にするタグを変更する」を参考に、kanri.cgiの1324-1337行目を変更してください。
  • 有効にするタグを変更する。

     「コメント部分で一部のタグを有効にする。」でタグを有効にした後、有効にするタグの種類を変えたい、あるいは増やしたい場合の方法です。
     一部のタグを有効にしているのは、shiritori.cgiの1000-1010行目です。解説を示しておきます。(解説は灰色、その行の#以降)
    sub tagok{	#タグを戻す。
    	my ($comment) =@_;
    	study $comment;
    	$comment =~ s/&#34;/"/gi;	"を"に変換する。
    	$comment =~ s/&LT;b&GT;(.*?)&LT;\/b&GT;/<b>$1<\/b>/gi;	#<b>タグ(強調)を有効にする。
    	$comment =~ s/&LT;i&GT;(.*?)&LT;\/i&GT;/<i>$1<\/i>/gi;	#<i>タグ(斜体)を有効にする。
    	$comment =~ s/&LT;s&GT;(.*?)&LT;\/s&GT;/<s>$1<\/s>/gi;	#<s>タグ(打ち消し線)を有効にする。
    	$comment =~ s/&LT;sup&GT;(.*?)&LT;\/sup&GT;/<sup>$1<\/sup>/gi;	#<sup>タグ(上付文字)を有効にする。
    	$comment =~ s/&LT;font(.*?)&GT;(.*?)&LT;\/font&GT;/<font$1>$2<\/font>/gi;	#<font>タグ(フォント)を有効にする。
    	return $comment;
    }
    

     "という特殊文字は、&#34;という表記に変換しています。"を表記するにはこれでいいんですが、タグ中に"が含まれていた場合、期待したとおりにタグが有効にならない場合があります。
     つまり、<font color="#ff0000">と記述したのに、<font color=&#34;#ff0000&#34;>となってしまって、赤の字にするはずが違う色になってしまった・・・ということがありえます。で、&#34;を有効にするための1行を入れているわけです。
     で、なんでわざわざこれを書くかと言いますと、この点をウッカリしていて、この&#34;を"に変換するための1行が、2004年2月6日まで配布していた分のスクリプト中で抜けているんですね(^^;)(今はちゃんとこの1行を入れたものを配布しています。)心当たりのある人はスクリプトをお確かめになって、もしこの1行が抜けているなら、付け加えておいてください。お願いします。(管理用CGIスクリプトkanri.cgiの方も同様です。1324-1337行あたりをご覧下さい。フォントタグを有効にした後の行に入れてくださいね。)

     話を戻して・・・有効にしたくないタグは、そのタグを有効にしている1行を削除またはコメントアウト(行頭に#をつける)すればOKです。(フォントタグは有効にしない方がいいかも。)では、新しくタグを有効にしたい場合ですが、そのタグを有効にするための1行を、1004-1009行の間に挿入します。すべてのタグについて書けないので、いくつか例を示しておきますので、参考になさってください。
  • 特殊文字を有効にする。("と'以外)
    $comment =~ s/&AMP;/&/g;
  • <u>(アンダーライン)を有効にする。
    $comment =~ s/&LT;u&GT;(.*?)&LT;\/u&GT;/<u>$1<\/u>/gi;
  • <img>(画像ファイルの表示)を有効にする。
    $comment =~ s/&LT;img src=(.*?)&GT;/<img src=$1>/gi;
  • <a href=〜>(リンク)を有効にする。
    $comment =~ s/&LT;a href=(.*?)&GT;(.*?)&LT;\/a&GT;/<a href=$1>$2<\/a>/gi;
  • <font color="〜">(文字色)を有効にする。
    (フォントタグを全部有効にすると、画面デザインが崩れることもある・・・ということで、文字色のみを許可する方法です。当然フォントタグを有効にする1行はコメントアウトして無効にしておいてくださいね。
    それと、文字色は"と"で囲んでおくこと・・・。)
    $comment =~ s/&LT;font color="(.*?)"&GT;(.*?)&LT;\/font&GT;/<font color="$1">$2<\/font>/gi;
  • 「あたまとり」にする。

    言葉の「しり(語尾)」ではなく、「あたま(語頭)」をとる、「あたまとり」に改造する方法です。
    1. shiritori.cgiの1013行目に次の12行を挿入する。
      sub rev{
      	my ($word) = @_;
      	my @new;
      	(substr($word,-2,2) eq "ー") || push(@new,substr($word,-2,2));
      	for (my $i=4;;$i+=2){
      		my $value = substr($word,-1*$i,2);
      		($value eq "") && last;
      		push(@new,$value);
      	}
      	$word = join("",@new);
      	return $word;
      }
      

    2. shiritori.cgiの875-876行目を変更する。
      if ($letter eq "ゃ" || $letter eq "ゅ" || $letter eq "ょ"){$letter = substr($word,-4-$ifi,4);}
      $letter =~ tr/ぁぃぅぇぉ/あいうえお/;
      

      #if ($letter eq "ゃ" || $letter eq "ゅ" || $letter eq "ょ"){$letter = substr($word,-4-$ifi,4);}
      $letter =~ tr/ゃゅょ/やゆよ/;
      

    3. shiritori.cgiの650行目を変更する。
      ($lastwordletter) ? (print "「<big>$lastwordletter</big>」で始まる言葉をどうぞ。<br><p>\n") : (print "好きな言葉で初めてくださっていいですよ。<p>\n");
      ($lastwordletter) ? (print "「<big>$lastwordletter</big>」で終わる言葉をどうぞ。<br><p>\n") : (print "好きな言葉で初めてくださっていいですよ。<p>\n");

    4. shiritori.cgiの648行目を変更する。
      my $lastwordletter = &lastletter($lastword{"yomi"},$lastword{'no'});
      my $lastwordletter = substr($lastword{"yomi"},0,2);

    5. shiritori.cgiの445-449行目を変更する。
      my $firstletter;
      (length $lastwordletter==4) ? ($firstletter = substr($FORM{'yomi'},0,4)):($firstletter = substr($FORM{'yomi'},0,2));	
      if ($lastwordletter){
      	&error(0,"「$lastwordletter」から始めてください!") unless ($firstletter eq $lastwordletter);
      }
      my $firstletter = &lastletter($FORM{'yomi'},$no);
      #(length $lastwordletter==4) ? ($firstletter = substr($FORM{'yomi'},0,4)):($firstletter = substr($FORM{'yomi'},0,2));
      if ($lastwordletter){
      	&error(0,"「$lastwordletter」で終わってください!") unless ($firstletter eq $lastwordletter);
      }

    6. shiritori.cgiの424行目を変更する。
      my $lastwordletter = &lastletter((split(/\t/,$datas[$#datas]))[2],$no);

      my $lastwordletter = substr((split(/\t/,$datas[$#datas]))[2],0,2);

    7. shiritori.cgiの115行目を変更する。
      if( $str_start le $dat[1] && $dat[1] lt $str_end){

      if( $str_start le &rev($dat[1]) && &rev($dat[1]) lt $str_end){

    8. shiritori.cgiの111行目を変更する。
      print "<tr><td colspan=\"5\" align=\"center\">○「$list_index[$i]」から始まる得点単語データ○</td></tr>\n";
      

      print "<tr><td colspan=\"5\" align=\"center\">○「$list_index[$i]」で終わる得点単語データ○</td></tr>\n";
      

    9. shiritori.cgiの102行目を変更する。
      @datas = @datas[sort {$tmp[$a] cmp $tmp[$b]} 0 .. $#tmp];

      @datas = @datas[sort {&rev($tmp[$a]) cmp &rev($tmp[$b])} 0 .. $#tmp];

    10. shiritori.cgiの96行目を変更する。
      &html_header("得点単語一覧");

      &html_header("得点単語一覧(語尾あいうえお順)");

    11. shiritori.cgiの30,31行目を変更する。
      @list_start = ('','い','う','え','お','か','き','く','け','こ','さ','し','す','せ','そ','た','ち','つ','て','と','な','に','ぬ','ね','の','は','ひ','ふ','へ','ほ','ま','み','む','め','も','や','ゆ','よ','ら','り','る','れ','ろ','わ') ;
      @list_end = ('い','う','え','お','か','き','く','け','こ','さ','し','す','せ','そ','た','ち','つ','て','と','な','に','ぬ','ね','の','は','ひ','ふ','へ','ほ','ま','み','む','め','も','や','ゆ','よ','ら','り','る','れ','ろ','わ','K') ;
      @list_start = ('','ぃ','ぅ','ぇ','ぉ','か','き','く','け','こ','さ','し','す','せ','そ','た','ち','つ','て','と','な','に','ぬ','ね','の','は','ひ','ふ','へ','ほ','ま','み','む','め','も','ゃ','ゅ','ょ','ら','り','る','れ','ろ','わ') ;
      @list_end = ('ぃ','ぅ','ぇ','ぉ','か','き','く','け','こ','さ','し','す','せ','そ','た','ち','つ','て','と','な','に','ぬ','ね','の','は','ひ','ふ','へ','ほ','ま','み','む','め','も','ゃ','ゅ','ょ','ら','り','る','れ','ろ','わ','K') ;
      

    12. bbs.cgiの150行目を変更する。
      if ($owari =~ /[ぁぃぅぇぉーゃゅょ]$/){$owari = substr($yomi,-4,4);}

      if ($owari =~ /[ー]$/){$owari = substr($yomi,-4,2);}
    13. bbs.cgiの189-190行目を変更する。
      my @list_start = ('','か','さ','た','な','は','ま','や','ら','わ') ;
      my @list_end = ('か','さ','た','な','は','ま','や','ら','わ','K') ;
      
      my @list_start = ('','か','さ','た','な','は','ま','ゃ','ら','わ') ;
      my @list_end = ('か','さ','た','な','は','ま','ゃ','ら','わ','K') ;
      

    14. settei.cgi中の$nokの値は0にする。
    15. shirotiri.cgiや設定ファイル、管理CGI、専用BBSCGI中の「しりとり」という言葉を「あたまとり」に直す。(全置換すればすぐです。)
    16. 設定ファイルで、ゲームの説明部分を書き換える。

    上記の、1と7、9〜11は、得点単語一覧を語尾順に表示させるためのものなので、得点単語一覧を表示させない場合、または語尾のあいうえお順にしなくてもいいのならば、 変更・挿入の必要はありません。
    また、12,13は専用BBSを使わないなら必要ありません。
    なお、11,13はしりとりのときもこちらの方がよいので、2004年2月6日以降の配布分(Ver.0.71)については既に訂正してあります。
    管理用CGIの方は「しりとり」→「あたまとり」の名称の変更だけでOK。もし得点単語一覧などを語尾のあいうえお順にしたい場合は、上記を参考に変更してください。

    しりとり回答画面に、回答できる時刻を表示する。

    時間制限がある設定にしていた場合、せっかく回答しても時間制限にひっかかって受け付けてもらえないことがあります。
    ということで、回答画面に、○時△分以降に回答してください、というメッセージを表示させる方法です。

    管理用CGIで得点単語を複数登録するとき、問題のあるもの以外はそのまま登録できるようにする。

     管理用CGIで得点単語を登録する時、既出とか登録済みとか、理由があって登録できないものがあると前ページに戻ってやり直しになります。ところが一定時間が経過すると前のページに戻れないんですね。これではせっかくの入力がすべてやり直しになってしまいます。登録できないもの以外はやり直ししないでそのまま登録できればいいのに・・・。
     ということで、問題のあるもの以外はそのまま登録し、登録できなかったものは理由をつけて表示する方法です。
    1. kanri.cgiの1121-1141行を次のように変更する。
      sub wordcheck{	#しりとりの回答適合チェック(終わり文字、文字数等)
      	my ($word,$yomi) = @_;
      	my ($letter,$ifi);
      	my @cantval;
      	($yomi) || push(@cantval,"読みがない");
      	(length $yomi>2*$settei::kiteiletters) && push(@cantval,"読みの規定文字数超過");
      	$letter = substr($yomi,-2,2);$ifi=0;
      	if ($letter eq "ー"){$letter = substr($yomi,-4,2);$ifi = 2;}
      	if ($letter eq "ゃ" || $letter eq "ゅ" || $letter eq "ょ"){$letter = substr($yomi,-4-$ifi,4);}
      	(!$settei::nok && $letter =~ /ん$/) && push(@cantval,"「ん」で終了");
      	($letter eq "ー") && push(@cantval,"終わりが「ー」連続");
      	($letter eq "っ") && push(@cantval,"終わりが「っ」");
      	($yomi =~ /\s/) && push(@cantval,"読みの途中にスペースが入っている");
      	($yomi =~ /[a-zA-Z0-9]/) && push(@cantval,"読みに記号・半角文字が入っている");
      	for(my $l=0;;$l++){
      		my $let = substr($yomi,$l*2,2);
      		($let eq "") && last;
      		($let ne "ー" && ($let lt "ぁ"|| $let gt "ん")) && push(@cantval,"読みに記号・全角かな以外の文字が入っている");
      	}
      	$word =~ s/^「//;	$word =~ s/」$//;	$word =~ s/。$//;
      	return @cantval;
      }
      
    2. kanri.cgiの657-676行目を次のように変更します。
      my (@newdatas,$value,@cantdatas);
      for (my $i=0;$i<10;$i++){
      	($FORM{"word_$i"}) || next;
      	my @cantval = &wordcheck($FORM{"word_$i"},$FORM{"yomi_$i"});
      	($FORM{"point_$i"}) || push(@cantval,"点数がない");
      	(grep($FORM{"word_$i"} eq (split /\t/)[0] || $FORM{"yomi_$i"} eq (split /\t/)[1],@datas)) && push(@cantval,"登録済み");
      	(grep($FORM{"word_$i"} eq (split /\t/)[1] || $FORM{"yomi_$i"} eq (split /\t/)[2],@worddatas)) && push(@cantval,"既出");
      	($FORM{"point_$i"} =~ /[^0-9\-]/) && push(@cantval,"ポイント設定が半角数字でない");
      	my $cantvalue = join(":",@cantval);
      	$value = "$FORM{\"word_$i\"}\t$FORM{\"yomi_$i\"}\t$FORM{\"point_$i\"}\t0\t".&tagok($FORM{"msg_$i"})."\n";
      	(@cantval) ? (push(@cantdatas,"$cantvalue\t$value")) :push (@newdatas,$value);
      }
      (@newdatas) && &tsuika_file(\@newdatas,$settei::pointfile,"得点単語ファイル");
      &html_header("得点単語リスト登録");
      (@newdatas) && print "<table><tr><td><dl>\n";
      foreach (@newdatas){
      	my @dat = split(/\t/,$_);
      	print "<dt><li>「<ruby><rb>$dat[0]<rp>(<rt>$dat[1]<rp>)</ruby>」($dat[2]点)<br>\n";
      	print "<dd><small>$dat[4]</small><br>\n";
      }
      (@newdatas) && 	print "</dl>を登録しました。</td></tr></table><p>\n";
      (@cantdatas) && print "次の言葉は登録できませんでした。<table><tr><td><dl>\n";
      foreach (@cantdatas){
      	my @dat = split(/\t/,$_);
      	print "<dt><li>「<ruby><rb>$dat[1]<rp>(<rt>$dat[2]<rp>)</ruby>」($dat[3]点)<br>\n";
      	print "<dd><small>$dat[5]</small><br>\n";
      	print "登録できなかった理由---";
      	foreach (split(/:/,$dat[0])){
      		print "$_,";
      	}
      }
      (@cantdatas) && print "</dl></td></tr></table><p>\n";
      

    しりとり回答画面に、連続回答ができないことを表示する。

    連続回答を禁止する設定で、直前の回答者が画面を見た場合、回答画面に、「連続回答は認められていないので、 ○○さんは答えられません・・・」というメッセージを表示させる方法です。

    既出単語を回答したとき、減点はしないが、最初にその言葉を答えた人に1点が加算されるようにする。

     既出単語を回答したとき減点としない方法では、既出単語が回答されたときに先に回答した人に加点する、というルールは無効になってしまいます。そこで、既出単語を回答しても、減点しないが、先に回答した人に加点するというルールを有効にする方法です。
    1. settei.cgiの90行目を、
      $ad_point_ok = 1;

      とする。既出単語を回答したとき、先に回答した人に加点するルールを有効にします。
    2. shiritori.cgiの597-601行目をコメントアウト(行頭に#をつける)する。削除でもよい。
      	#if ($c_name eq $dat[0] && &solve_pass($c_pass,$dat[1])){
      	#	$dat[5] -= $d;
      	#	$dat[6] = $^T unless $dat[6];
      	#	$_ = join("\t",@dat);
      	#}

    3. shiritori.cgiの611-614行目、
      	&html_header("減点です!");
      	print "<p><FONT SIZE=4><B>$msg</B></FONT><P>\n";
      	print "$c_nameさん、残念ながら$d点の減点になります。<p>\n";
      	if ($plus ne "" && $settei::ad_point_ok){print "そして、その単語を前に答えたのは$plusさんなので、<br>$plusさんに1点が追加されます。\n";}
      
      を、↓のようにする。
      	&html_header("お知らせ");
      	print "<p><FONT SIZE=4><B>$msg</B></FONT><P>\n";
      	if ($plus ne "" && $settei::ad_point_ok){print "なお、その単語を前に答えたのは$plusさんなので、<br>$plusさんに1点が追加されます。\n";}
      

    専用BBSで個人情報を表示させたときの順位が間違っているのを訂正する。

     専用BBSのVer.0.2は、個人情報を表示させたときの順位が間違っています。これを訂正する方法です。
     Ver.0.21以降は訂正してありますので、Ver.0.21以降を使っている方や、専用BBSを使わない設定の方は必要ありません。


    もどる