);各配列からランダムな要素を選択できます: echo $male[array_rand($male)] 。複数の名前を一度に抽出するには、配列を混合し、必要に応じて抽出するだけです。
リスト4. 混合名前配列
この基本的な考え方に基づいて、姓名を保存するテキスト ファイルを作成できます。テキスト ファイルの各行に名前を保存すると、ファイルの内容を改行で区切ってソース コードの配列を簡単に構築できます。
$male =explode('n', file_get_contents('names. Female.txt'));
名前ジェネレーターの構築に使用したのと同じ基本原則を利用して、シナリオジェネレーターを構築できます。このジェネレーターは、ロール プレイング ゲームだけでなく、擬似ランダム環境のコレクション (ロール プレイング、即興、執筆などに使用できる) を使用する必要がある状況でも役立ちます。私のお気に入りのゲームの 1 つである Paranoia には、GM パックに「ミッション ブレンダー」が含まれています。ミッション ミキサーを使用すると、サイコロをすばやく振りながら、完全なミッションを組み合わせることができます。独自のシーンジェネレーターを組み立ててみましょう。
次のシナリオを考えてみましょう: あなたは目が覚めると、ジャングルで迷っていることに気づきました。ニューヨークに行かなければならないことはわかっていますが、その理由はわかりません。近くで犬の吠え声と敵の探索者の独特の音が聞こえます。あなたは寒くて震えていて、武装していません。シーン内の各文は、シーンの特定の側面を紹介します:
姓と名用のテキスト ファイルを作成したのと同じように、まず設定、目的、敵、複雑さ用に個別のテキスト ファイルを作成します。サンプル ファイルはコード アーカイブに含まれています。これらのファイルを取得したら、シーンを生成するコードは基本的に名前を生成するコードと同じになります。
$complicati**** =explode( "n" , file_get_contents('scenario.complicati****.txt');
shuffle($settings)
shuffle($antagonists); );
echo $settings[0] . ' ' '
. "
";
新しいテキスト ファイルを追加することでシーンに要素を追加できますが、複数のレベルの複雑さを追加したい場合もあります。基本的なテキスト ファイルに追加するコンテンツが増えるほど、時間の経過とともにシーンがより多く変化します。
デッキビルダー(デッキビルダー)とギア(シャッフラー)
ポーカーをプレイしてカード関連のスクリプトを扱う場合は、デッキビルダーとギア内のツールを統合する必要があります。まず、標準的なトランプのデッキを構築しましょう。 2 つの配列を構築する必要があります。1 つは同じスーツのカードのグループを保持するため、もう 1 つはカードの表を保持するためです。これにより、後で新しいデッキやカード タイプを追加する必要がある場合に大きな柔軟性が得られます。
リスト 7. 標準的なトランプ デッキの構築
$deck = array() foreach ($suits as $suit) { foreach ( $faces as $face ) { $deck[] = array ("face"=>$face, "suit"=>$suit);トランプの配列を作成したら、簡単にデッキをシャッフルし、ランダムにカードを引くことができます。
リスト 9. デッキをシャッフルしてカードをランダムに引きます コードをコピーします コードは次のとおりです。 $card[' face'] . ' of . $card['suit'];
これで、複数のカードを引くか、マルチデッキシューを構築するためのショートカットができました。
オッズ計算機: ディーリング
ポーカーデッキを構築する際、各カードのフェイスとスートが個別に追跡されるため、デッキをプログラム的に使用して、特定のカードを取得するオッズを計算できます。まず、各手札からカードを 5 枚ずつ引きます。
リスト10. 各手からカードを5枚ずつ引く
コードをコピー
コードは以下の通りです:
$hands = array(1 => array(), 2=>array() ); for ($i = 0; $i $hands[1][] = implode(" of ", array_shift($deck)); = implode( " of ", array_shift($deck)); }
その後、デッキを見て、カードが何枚残っているか、特定のカードを引く確率を確認できます。カードが何枚残っているかが簡単にわかります。 $deck 配列に含まれる要素の数を数えるだけです。特定のカードを引くチャンスを得るには、デッキ全体を調べて残りのカードを推定し、それらが一致するかどうかを確認する関数が必要です。
リスト 11. 特定のカードを引く確率を計算します
コードをコピーします
コードは次のとおりです: function Calculate_odds($draw, $deck) { $remaining = count($deck ); $odds = 0; foreach ($deck as $card) { if ( ($draw['face'] == $card['face'] && $draw['suit'] ==
$カード['スーツ' ] ) ||
($draw['顔'] == '' && $draw['スーツ'] == $card['スーツ'] ) || ] == $card ['face'] && $draw['suit'] == '' ) ) {
$odds++;
}
}
return $odds ' in ' $remaining;カードを引くことを選択できるようになりました。シンプルにするために、カードのような配列を渡します。特定のカードを探すことができます。
リスト 12. 指定されたカードを検索します
コードをコピーします
コードは次のとおりです:
$draw = array('face' => 'Ace', 'suit' => ' Spades' );
echo implode(" of ", $draw) . ' : ' .calculate_odds($draw, $deck); または、指定したフェイスまたはスートを持つカードを検索することもできます。
リスト13. 指定されたカードフェイスまたはスートを持つカードを検索します
コードをコピーします
コードは次のとおりです:
$draw = array('face' => '', 'suit ' => 'スペード ');
$draw = array('face' => 'Ace', 'suit' => ''); これで、シンプルなポーカーディーラー
が完成しました。ツールでは、特定のカードを引く確率を計算するために、カードを配る非常に単純なカード ディーラーを統合できます。この例では、5 枚のカードを引くカード ディーラーを構築します。カードディーラーはデッキ全体から 5 枚のカードを提供します。数字はどのカードを捨てる必要があるかを指定するために使用され、ディーラーはこれらのカードをデッキの他のカードと置き換えます。ライセンス制限や特別なルールを指定する必要はありませんが、これらは個人的に非常に有益な経験になるかもしれません。
前のセクションで示したように、カードを生成してシャッフルし、それぞれの手札に 5 枚のカードを持ちます。配列インデックスによってカードを表示するので、どのカードが返されるかを指定できます。これを行うには、交換するカードを示すチェックボックスを使用します。
リスト 14. チェックボックスを使用して、置き換えるカードを指定します
foreach ($hand as $index =>$card) {
echo " . $card['face'] . "
" 次に、入力配列 $_POST[ 'card'] を使用して、置換対象として選択されたカードを確認します。 リスト 15. 入力の計算
コードをコピー
コードは次のとおりです:
$i = 0;
while ($i < 5) { if (isset($_POST['card '][ $i])) {
$hand[$i] = array_shift($deck)
}
}
;
このスクリプトを使用すると、特定のカードのセットに対処する最適な方法を見つけることができます。
ハングマン ゲーム
ハングマンは基本的に推測ゲームです。単語の長さを考慮すると、限られた数の機会を利用して単語を推測します。単語に現れる文字を推測する場合は、その文字が現れる位置をすべて埋めてください。何度か (通常は 6 回) 間違った推測をすると、ゲームに負けます。大まかな絞首刑執行人ゲームを構築するには、単語のリストから始める必要があります。では、単語リストを単純な配列にしてみましょう。
リスト 16. 単語リストを作成する
コードをコピー コードは次のとおりです。
$words = array (
"giants",
"triangle",
"particle",
"birdhouse" ,
「minimum」、
「flood」
);
前に説明した手法を使用して、これらの単語を外部の単語リスト テキスト ファイルに移動し、必要に応じてインポートできます。
単語リストを取得したら、単語をランダムに選択し、各文字を空として表示してから、推測を開始する必要があります。推測するたびに、正しい推測と不正解の推測を追跡する必要があります。推測配列をシリアル化し、追跡目的で各推測に渡すだけです。ページのソースを見て人々が推測するのを防ぐ必要がある場合は、より安全な措置を講じる必要があります。
文字と正しい/間違った推測を保持する配列を構築します。正確に推測するには、キーとして文字を、値としてピリオドを配列に入力します。
リスト 17. 文字を保存して結果を推測する配列を構築します
コードをコピーします コードは次のとおりです:
$letters = array('a','b','c', 「d」、「e」、「f」、「g」、「h」、「i」、「j」、「k」、「l」、「m」、「n」、「o」、
」 p','q ','r','s','t','u','v','w','x','y','z');
$right = array_fill_keys( $letters, '. ');
$wrong = array();
単語推測ゲームを完了するときに、推測を評価して単語を表示するコードが必要です。
リスト 18. 推測を評価し、進捗状況を表示する
コードをコピーする コードは次のとおりです。
if (stristr($word, $guess)) {
$show = ''; [$guess
$wrong[$guess] = $guess;
if (count($wrong) == 6) {
$show = $word
} else {
foreach ($wordletters as $letter) {
$show .= $right[$letter];
}
}
}
ソースコードアーカイブでは、推測配列をシリアル化し、配列をある推測から別の推測に渡す方法を確認できます。
クロスワードヘルパー
これは不適切だとはわかっていますが、クロスワードパズルをプレイしていると、Cで始まりTで終わる5文字の単語を見つけるのに苦労することがあります。 Hangman ゲーム用に構築されたのと同じ単語リストを使用して、パターンに一致する単語を簡単に検索できます。まず、言葉を伝える方法を見つけます。簡単にするために、欠落している文字をピリオドに置き換えます: $guess = "c...t";。正規表現ではピリオドが 1 文字として扱われるため、単語のリストを簡単に反復処理して一致するものを見つけることができます。
リスト 19. 単語リストを走査します
コードをコピーします
コードは次のとおりです:
foreach ($words as $word) { if (preg_match("/^" . $_POST[ '推測'] . "$/",$word)) { echo $word . } }
単語リストの品質と推測の精度に応じて、一致する可能性のある適切な単語のリストを取得できるはずです。 「ルール外の遊び」を表す 5 文字の単語の答えが「チェスト」なのか「チート」なのかは、自分で決める必要があります。
Midlibis
Midlibis は、プレイヤーに短い物語が与えられ、主要な種類の単語を同じ種類の別の単語に置き換えることで、同じ物語の新しい、より退屈なバージョンを作成する単語ゲームです。次のテキストを読みます。「公園を歩いているときに湖を見つけました。飛び込み、水を飲みすぎました。病院に行かなければなりませんでした。」 単語の種類を他の単語マーカーに置き換え始めます。予期しない文字列の一致を防ぐために、開始タグと終了タグには下線が付いています。
リスト 20. 単語の種類を単語タグに置き換える $text = "_NOUN_ を見つけたとき、_PLACE_ で _VERB_ing していました。
I _VERB_ed in、そして _NOUN_ を _VERB_ed しすぎました。_PLACE_ に行かなければなりませんでした。";
次に、いくつかの基本的な単語リストを作成します。この例では、あまり複雑にしません。
リスト 21. 基本的な単語リストをいくつか作成します
コードをコピー コードは次のとおりです:
$verbs = array('pump', 'jump', 'walk', 'swallow', 'クロール' , '泣き声', 'ロール');
$places = array('公園', '病院', '北極', '海', '食料品店', '地下室',
'屋根裏部屋', '下水道' );
$nouns = array('water', '湖', '唾', '足', 'ワーム',
'土', '川', 'ヴァンケルロータリーエンジン');繰り返し評価されます。必要に応じてマークアップを置き換えるテキスト。
リスト 22. テキストを評価する
コードをコピー
コードは次のとおりです: while (preg_match("/(_VERB_)|(_PLACE_)|(_NOUN_)/", $text, $matches )) {
switch ($matches[0]) {
case '_VERB_' :
shuffle($verbs)
$text = preg_replace($matches[0], current($verbs), $text, 1);
break;
case '_PLACE_' :
shuffle($places);
case '_NOUN_' :
shuffle($nouns);
$text = preg_replace($matches[0], current($nouns), $text, 1);
break;
}
}
echo $text; です。シンプルかつ大まかな例。単語リストが正確であればあるほど、そしてベーステキストに費やす時間が長くなるほど、より良い結果が得られます。テキスト ファイルを使用して、名前のリストと基本的な単語のリストを作成しました。同じ原理を使用して、ジャンルごとに分割された単語リストを作成し、これらの単語リストを使用してより多様な Midlibis ゲームを作成できます。
宝くじマシン
6 つの正しいロト番号すべてを選ぶことは、控えめに言っても統計的に不可能です。それでも、多くの人がお金を払ってプレイしているので、数字が気に入ったら、傾向グラフを眺めるのも楽しいでしょう。当選番号を追跡し、リスト内の選択数が最も少ない 6 つの番号を提供できるスクリプトを作成してみましょう。
(免責事項:これはロトの賞品を獲得するのに役立ちませんので、チケットにお金を費やさないでください。これは単なる楽しみです)。
当選したロトの選択内容をテキストファイルに保存します。数値をカンマで区切って、数値の各グループを別の行に配置します。改行とカンマを使用してファイルの内容を区切って行を区切ると、リスト 23 のような結果が得られます。
リスト 23. 選択した当選ロトをテキスト ファイルに保存します
コードをコピーします
コードは次のとおりです:
$picks = array(
array('6', '10', ' 18 ', '21', '34', '40')、array('2', '8', '13', '22', '30', '39'), array('3' , '9', '14', '25', '31', '35'), array('11', '12', '16', '24', '36', '37'), array('4', '7', '17', '26', '32', '33')
);
明らかに、これは統計をプロットするための基本ファイルとしては十分ではありません。しかし、これは始まりであり、基本原則を説明するには十分です。
選択範囲を保存するための基本配列を設定します。たとえば、1 ~ 40 の数値を選択した場合 ($numbers = array_fill(1,40,0); など)、選択内容を繰り返し、対応する一致値を増加させます。
リスト 24. 選択範囲のトラバース
コードをコピー
コードは以下の通りです:
foreach ($picks as $pick) {
foreach ($pick as $number) { $numbers[$number ]++; } }
最後に、数値を値に従って並べ替えます。この操作では、選択された最小の数値が配列の先頭に配置されます。
リスト 25. 値に従って数値を並べ替える
コードをコピーする コードは次のとおりです。
echo implode (',', array_keys($pick));
当選番号のリストを含むテキストファイルに実際のロト当選番号を定期的に追加することで、番号選択の長期的な傾向を見つけることができます。特定の数字がどのくらいの頻度で現れるかを確認するのは興味深いことです。
http://www.bkjia.com/PHPjc/320130.html
www.bkjia.com
truehttp://www.bkjia.com/PHPjc/320130.html技術記事紙とペンを使った簡単なゲームを 1 人でプレイする場合でも、グループで複雑なテーブルトップ ロールプレイング ゲームをプレイする場合でも、あらゆる種類のオンライン ゲームをプレイする場合でも、このシリーズには必ず何かがあります...