執行結果截圖:
讀取成語的檔案格式:
格式為機器出乙個成語,玩家接龍乙個,機器再次接龍,以此類推。
評分系統詳細rule為:
您一共有三次機會;
每答錯一次接龍會失去一次機會\n\t但相應的系統會給出最多十條提示成語可選以繼續進行比賽;
每個成語對應的分值由成語的「常用程度」和「可接成語數量」即難度係數來決定;
15秒內接上正確的成語則得對應分數;
超過15秒則按照冪函式對分值加權,時間越久分值越低;
本次接龍比賽預設能在三次機會內回答出10次(不考慮常用程度、難度係數和時間權重)成語的接龍(不包括提示成語)為滿分100;
最高100分 最低0分;
您可以輸入『h』選擇求助,但是依然會減少一次機會,請謹慎使用;
如果機器沒有可接的成語,算您獲勝,您可以得到附加分20分;
**部分:
main();
sub main
sub init
sub rule_show
sub readidiom=$fpy;#構造關鍵字是成語,值是首拼音的雜湊
$hash2=$lpy;#構造關鍵字是成語,值是尾拼音的雜湊
push(@},$chengyu);#由於關鍵字為首拼音的雜湊的值是若干個成語,所以構造值為陣列的雜湊
} }close(in);
#foreach $chengyu(sort keys %hash1)\n";}
#foreach $chengyu(sort keys %hash2)\n";}
#foreach(@}) }
sub time_diffi-$;
print "本次回答用時$diffi秒\t:)\n";
return $diffi;
}sub display
elsif($hash1 eq $hash2)}};
#foreach(@answers)
if(@answers==0)
else
} else
else
killed();
alive_check();
print "i will give idioms for you\n";
@answers=@}};
#foreach(@answers)#當人接錯時,這句可以列印出來所有可以接的成語
if(@answers==0)#機器上次給出的成語沒有可接的,故無法給出提示。
else
else
}print "plz choose a number\n";
$num=;
chomp($num);
print "the idiom you chose is: $answers[$num]\n";
$tpy=$hash2;#得到人選的成語的尾拼音
jielong(\$answers[$num]);
@answers_array=@};#機器將這個拼音作為首拼音查詢成語
if(@answers_array==0)
else
}} }
}sub killed
elsif($chancenum==1)
}sub zisha
sub alive_check
elsif($chancenum<=0) }
sub time_mark>15)/(sqrt($/15));}#先不設定超時會丟掉一次機會
else;}
$fina_mark=sprintf("%.3f", $fina_mark);#保留三位小數
print"\t這次回答原始分值為$分\n\t\t共耗時$秒 時間修正後的分值為$fina_mark 分\n";
return $fina_mark;
}sub idiom_mark";
@split_idiom=$=~/../g;
#foreach(@split_idiom)
#print $split_idiom[1];
if($split_idiom[1] eq $split_idiom[0] and $split_idiom[2] eq $split_idiom[3])」難度較低,初始分值為6\n";$i_mark=6;}
elsif($split_idiom[1] eq $split_idiom[0] or $split_idiom[2] eq $split_idiom[3] or $split_idiom[1] eq $split_idiom[3] or $split_idiom[0] eq $split_idiom[2])」難度中下,初始分值為7\n";$i_mark=7;}
#elsif($split_idiom[0]=~/[\一\二\三\四\五\六\七\八\九\十\百\千\萬]/ or
#$=~/.*[\一\二\三\四\五\六\七\八\九\十\百\千\萬]+$/)」難度為8\t";$i_mark=8;}
elsif(hz_usual(\@split_idiom))」難度偏低,初始分值為8\n";$i_mark=8;}
#對於只有乙個可接成語(2倍分值),但成語是最俗的aabb的情況(6分),也會得到12分,超過10分的設定;
else」難度適中,初始分值為10\n";$i_mark=10;}
return $i_mark;
}sub hz_usual=1;}
foreach(@)) )
} return 0; }
sub answer_difficulty}};
#print $;
$answer_num=scalar(@}}});
#print "\n@}}}.length\n";
if($answer_num==0)
if($answer_num==1);
print "\t剛剛您的回答是唯一乙個答案,難度極高\n\t故成語分值獲得2倍加權——成語分值為$w_mark\n";}
elsif($answer_num<5);
print "\t剛剛您的回答是僅僅$answer_num\個答案中的乙個,難度很高\n\t故成語分值獲得1.8倍加權——加權後成語分值為$w_mark\n";}
elsif($answer_num<13);
print "\t剛剛您的回答是$answer_num\個答案中的乙個,難度較高\n\t故成語分值獲得1.5倍加權——加權後成語分值為$w_mark\n";}
elsif($answer_num<21);
print "\t剛剛您的回答是$answer_num\個答案中的乙個,難度中等偏上\n\t故成語分值獲得1.2倍加權——加權後成語分值為$w_mark\n";}
else;
print "\t剛剛您的回答是$answer_num\個答案中的乙個,較為簡單\n\t沒有難度加成。故加權後成語分值仍為$w_mark\n";}
return $w_mark;
#最後單獨生成乙份所有包括分數變化的流程的txt檔案
#而在輸入中只產生簡潔的接龍
}sub total_sum;
}sub nomoreanswer
sub nomoreidiom_check";
if(@}}}==0)
}sub win_germore
sub jielong);
}sub show_jielongprint":)";
}
桌面接龍遊戲
問 os為?windows 2003 server 問 這台是你的個人電腦?還是公司或家人共用的電腦?自用問 這張桌布是什麼?從哪裡取得的?沒桌布,簡單就是美 問 更換桌布的頻率高嗎?心血來潮的時候就換一下,多數時候都是空白的。問 桌面上有幾多個icon?沒幾個,在家比較整齊一些,不像在單位的。問 ...
桌面接龍遊戲
問 os為?winxp 問 這台是你的個人電腦?還是公司或家人共用的電腦?公司問 這張桌布是什麼?從哪裡取得的?網上找到的一堆windows桌面主題中自帶的 問 更換桌布的頻率高嗎?幾乎不換 問 桌面上有幾多個icon?常用的,大概10多個吧 問 一堆檔案和捷徑放得亂七八糟的桌面,你看得下去嗎?正在...
1051 接龍遊戲
時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond description 給出了n個單詞,已經按長度排好了序。如果某單詞i是某單詞j的字首,i j算一次接龍 兩個相同的單詞不能算接龍 你的任務是 對於輸入的單詞,找出最長的龍。輸入描述 input description...