#!/usr/bin/perl # # 数当てゲーム # # WindowsNTの場合は以下のコメントを外す # push(@INC, "cgi-bin"); # ライブラリの挿入 require 'cgi-lib.pl'; # ↓カスタマイズ可能な変数↓ $title = "KAZUATE - Game"; $line = 4; # 数あわせの桁数 # 変数定義 $seikai = 0; # 正解したときに1 $offset = 9876; # 答えに加算する値(ユーザーに分かりにくくするため) # 入力データの解析 &ReadParse(*in); $value = $in{'value'}; # ユーザーが入力した値 $ans = $in{'ans'}; # 答え $count = $in{'count'}; # チャレンジ回数 # ヘッダー出力 print "Content-type: text/html\n\n$title"; print "

数あてゲーム

"; # チャレンジ回数を設定 $count++; if($count != 1){ # すでに値が決定している時は答えあわせする $atmp = $ans - $offset; if($atmp == $value){ # 正解したらその場で終了させる $count--; print "
おめでとうございます!!
"; print "めでたく$count回目で正解しました。
"; print ""; exit(0); } @v = split(//, $value); @a = split(//, $atmp); # print "答え:@a[0] @a[1] @a[2] @a[3]
"; print "

ただいま$count回目のチャレンジです

"; for($hit = 0, $i = 0; $i < $line; $i++){ if(@v[$i] == @a[$i]){ print "@v[$i]"; $str = sprintf("%sと", $str) if($hit); $str = sprintf("%s%d桁目", $str, $i + 1); $hit++; } else { print "x"; } } print "

"; # 結果発表 if($hit){ print "$strがあたっています!"; } else { print "まだどの桁もあたっていません"; } print "

ヒント:正解はもっと"; if($atmp > $value){ print "大きい数です

"; } else { print "小さい数です

"; } } else { # 初めて実行した時の処理 # 4桁の適当な乱数を発生させる。ただし4桁全ての数値が違うことを保証すること srand(time | $$); # 乱数の種を設定 for($i = 0; $i < $line; $i++){ do { $r[$i] = int(rand(10)); for($flag = 0, $j = 0; $j < $i; $j++){ $flag = 1 if $r[$j] == $r[$i]; } } while($flag); } $ans = sprintf("%c%c%c%c", $r[0] + 0x30, $r[1] + 0x30, $r[2] + 0x30, $r[3] + 0x30); $ans += $offset; } # HTMLの出力 print < $line桁の数字をあててください!


END_OF_HTML # -----