チェックリスト 1. シンプルなサイコロローラー 多くのゲームやゲームシステムではサイコロが必要です。まずは簡単な部分、つまり 6 面体のサイコロを振ることから始めましょう。基本的に、6 面体のサイコロを振ることは、1 から 6 までの乱数を選択するだけです。 PHP では、これは非常に単純です: echo rand(1,6);。 多くの場合、これは基本的に簡単です。しかし、運次第のゲームを扱う場合は、より良い実装が必要です。 PHP は、より優れた乱数ジェネレーター mt_rand() を提供します。 2 つの違いをあまり深く掘り下げずに、mt_rand はより高速で優れた乱数生成器であると考えることができます: echo mt_rand(1,6);。この乱数ジェネレーターを関数に組み込むとさらに良くなります。 リスト 1. mt_rand() 乱数生成関数の使用
);各配列からランダムな要素を選択できます: echo $male[array_rand($male)] ' ' 。複数の名前を一度に抽出するには、配列を混合し、必要に応じて抽出するだけです。
リスト 4. 混合名の配列
コードは次のとおりです。 ;= 3 ; $i++) {
echo $male[$i] . $last[$i]; }
この基本的な概念に基づいて、最初と最後を保存するテキスト ファイルを作成できます。名前。テキスト ファイルの各行に名前を保存すると、ファイルの内容を改行で区切ってソース コードの配列を簡単に構築できます。
リスト 5. 名前のテキスト ファイルを作成します
コードをコピー
コードは次のとおりです。
$last =explode('n', file_get_contents('names.last.txt'));
適切な名前のファイルをいくつかビルドまたは検索すれば (一部はコード アーカイブに含まれています)、名前について心配する必要はもうありません。
シナリオ ジェネレーター
名前ジェネレーターの構築に使用したのと同じ基本原則を使用して、シナリオ ジェネレーターを構築できます。このジェネレーターは、ロール プレイング ゲームだけでなく、擬似ランダム環境のコレクション (ロール プレイング、即興、執筆などに使用できる) を使用する必要がある状況でも役立ちます。私のお気に入りのゲームの 1 つである Paranoia には、GM パックに「ミッション ブレンダー」が含まれています。ミッション ミキサーを使用すると、サイコロをすばやく振りながら、完全なミッションを組み合わせることができます。独自のシーンジェネレーターを組み立ててみましょう。
次のシナリオを考えてみましょう: あなたは目が覚めると、ジャングルで迷っていることに気づきました。ニューヨークに行かなければならないことはわかっていますが、その理由はわかりません。近くで犬の吠え声と敵の探索者の独特の音が聞こえます。あなたは寒くて震えていて、武装していません。シーン内の各文は、シーンの特定の側面を紹介します。
「あなたは目を覚ますと、ジャングルで迷っていることに気づきます。」 — この文は設定を確立します。
「ニューヨークに行かなければならないことはわかっていますね」 — この文は目標を説明します。
「犬の吠え声が聞こえます」 — この文は敵を紹介します。
「あなたは寒くて震えていて、武装していません」 - この文はさらに複雑になります。
名と姓のテキスト ファイルを作成したのと同じように、まず設定、目的、敵、複雑さのテキスト ファイルをそれぞれ作成します。サンプル ファイルはコード アーカイブに含まれています。これらのファイルを取得したら、シーンを生成するコードは基本的に名前を生成するコードと同じになります。
リスト 6. シーンを生成する
コードをコピーする コードは以下のとおりです:
$settings =explode("n", file_get_contents('scenario.settings.txt')); explode(" n", file_get_contents('scenario.objectives.txt')); $antagonists =explode("n", file_get_contents('scenario.antagonists.txt')); $complicati**** =explode( "n" , file_get_contents('scenario.complicati****.txt'); shuffle($settings) shuffle($antagonists); ); echo $settings[0] . ' ' ' . " "; 新しいテキスト ファイルを追加することでシーンに要素を追加できますが、複数の複雑さを追加したい場合もあります。基本的なテキスト ファイルに追加するコンテンツが増えるほど、時間の経過とともにシーンがより多く変化します。 デッキ ビルダーとギア (シャッフル)
ポーカーをプレイしてカード関連のスクリプトを扱う場合は、デッキ ビルダーとギアのツールを統合する必要があります。まず、標準的なトランプのデッキを構築しましょう。 2 つの配列を構築する必要があります。1 つは同じスーツのカードのグループを保持するため、もう 1 つはカードの表を保持するためです。これにより、後で新しいデッキやカード タイプを追加する必要がある場合に大きな柔軟性が得られます。
リスト 7. 標準的なトランプ デッキの作成
コードをコピーします
コードは次のとおりです: $suits = array (
"Spades", "Hearts", "Clubs", "ダイヤモンド"
); $faces = array ( 「Two」、「Three」、「Four」、「Five」、「Six」、「Seven」、「Eight」、 「Nine」、「Ten」、" Jack」、「Queen」、「King」、「Ace」 ); 次に、カード配列のデッキを構築して、すべてのカードの値を保存します。これは、1 対の foreach ループを使用するだけで簡単に実行できます。
リスト 8. トランプ配列の構築
コードをコピーします
コードは次のとおりです: $deck = array()
foreach ($suits as $suit) {
foreach ( $faces as $face ) { $deck[] = array ("face"=>$face, "suit"=>$suit) } } トランプ配列のデッキを構築した後、簡単にデッキをシャッフルして、ランダムにカードを引くことができます。
リスト 9. デッキをシャッフルしてカードをランダムに引きます
コードをコピーします コードは次のとおりです。 $card['face'] ' の $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' => 'Spades ') ; $draw = array('face' => 'Ace', 'suit' => ''); シンプルなポーカーディーラー
確率の計算に役立ついくつかのツールを入手しました。特定のカードを引く場合、カードを配るための非常に単純なカード ディーラーを統合できます。この例では、5 枚のカードを引くカード ディーラーを構築します。カードディーラーはデッキ全体から 5 枚のカードを提供します。数字はどのカードを捨てる必要があるかを指定するために使用され、ディーラーはこれらのカードをデッキの他のカードと置き換えます。ライセンス制限や特別なルールを指定する必要はありませんが、これらは個人的に非常に有益な経験になるかもしれません。
前のセクションで示したように、デッキを生成してシャッフルし、各手に 5 枚のカードを持ちます。配列インデックスによってカードを表示するので、どのカードが返されるかを指定できます。これは、どのカードを置き換えたいかを示すチェックボックスを使用して行うことができます 。 リスト 14. チェックボックスを使用して、置き換えるカードを指定します
コードをコピーします
コードは次のとおりです: foreach ($hand as $index =>$card) { echo " " . $card['face'] . ' of ' . $card['suit'] . " " ; ; }
次に、入力配列 $_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 . " n" }
}
単語リストの品質と推測の精度に応じて、一致する可能性のある適切な単語リストを取得できるはずです。 「ルール外の遊び」を表す 5 文字の単語の答えが「チェスト」なのか「チート」なのかは、自分で決める必要があります。 Midlibis Midlibis は、プレイヤーに短い物語が与えられ、主要な種類の単語を同じ種類の別の単語に置き換えて、同じ物語の新しい、より退屈なバージョンを作成する単語ゲームです。次のテキストを読みます。「公園を歩いているときに湖を見つけました。飛び込み、水を飲みすぎました。病院に行かなければなりませんでした。」 単語の種類を他の単語マーカーに置き換え始めます。予期しない文字列の一致を防ぐために、開始タグと終了タグには下線が付いています。 リスト 20. 単語の種類を単語タグに置き換えます
コードをコピーします
コードは次のとおりです:
$text = "I was _VERB_ing in the _PLACE_ when I found a _NOUN_. I _VERB_ed in、そして _VERB_ed too much _NOUN_. I had to go to the _PLACE_."; 次に、いくつかの基本的な単語リストを作成します。 。この例では、あまり複雑にしません。
リスト 21. 基本的な単語リストをいくつか作成します
$verbs = array('pump', 'jump', 'walk', 'swallow', 'crawl', 'wail', 'roll'); = array('公園', '病院', '北極', '海', '食料品', '地下室',
'屋根裏部屋', '下水道') $名詞 = array('水', '湖'); 、'唾'、'足'、'ワーム'、
'土'、'川'、'ワンケルロータリーエンジン');
テキストを繰り返し評価して、必要に応じてトークンを置き換えることができるようになりました。
リスト 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($ 大まかな例。単語リストが正確であればあるほど、そしてベーステキストに費やす時間が長くなるほど、より良い結果が得られます。テキスト ファイルを使用して、名前のリストと基本的な単語のリストを作成しました。同じ原理を使用して、ジャンルごとに分割された単語リストを作成し、これらの単語リストを使用してより多様な 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/322955.html www.bkjia.com true http://www.bkjia.com/PHPjc/322955.html 技術記事 リスト 1. シンプルなサイコロ ローラー 多くのゲームやゲーム システムではサイコロが必要です。まずは簡単な部分、つまり 6 面体のサイコロを振ることから始めましょう。実際、6 面体のサイコロを振ることは...