ホームページ > php教程 > php手册 > 共有できる 25 の優れた PHP ゲーム プログラミング スクリプト コード

共有できる 25 の優れた PHP ゲーム プログラミング スクリプト コード

WBOY
リリース: 2016-06-21 08:54:57
オリジナル
1172 人が閲覧しました

この記事では、単純なサイコロの目、ランダム名ジェネレーター、シーンジェネレーター、デッキビルダー (デッキビルダー) と装備品 (シャッフラー)、単純なポーカー発行カードマシン、ハングマンゲーム、クロスワードヘルパーなど、25 の優れた PHP ゲームプログラミングスクリプトコードを紹介します。ミッドリブ、宝くじマシンなど。あなたの仕事に役立つことを願っています。

シンプルなサイコロ転がし機

多くのゲームやゲーム システムではサイコロが必要です。まずは簡単な部分、つまり 6 面体のサイコロを振ることから始めましょう。基本的に、6 面体のサイコロを振ることは、1 から 6 までの乱数を選択するだけです。 PHP では、これは非常に単純です: echo rand(1,6);。

多くの場合、これは基本的に簡単です。しかし、運次第のゲームを扱う場合は、より適切な実装が必要です。 PHP は、より優れた乱数ジェネレーター mt_rand() を提供します。 2 つの違いをあまり深く掘り下げずに、mt_rand はより高速で優れた乱数生成器であると考えることができます: echo mt_rand(1,6);。この乱数ジェネレーターを関数に組み込むとさらに良くなります。

リスト 1. mt_rand() 乱数生成関数の使用

関数ロール () {

return mt_rand(1,6);

}

エコーロール();

次に、振るサイコロの種類をパラメータとして関数に渡すことができます。

リスト 2. サイコロの種類をパラメーターとして渡す

関数ロール ($sides) {

return mt_rand(1,$sides);

}

echo roll(6) // 6 面のサイコロを振ります

echo roll(10) // 10 面サイコロを振る

echo roll(20) // 20 面のサイコロを振る

ここからは、必要に応じて複数のサイコロを一度に振り続け、結果の配列を返すことができます。また、異なる種類の複数のサイコロを一度に振ることもできます。ただし、ほとんどのタスクはこの単純なスクリプトを使用して実行できます。

ランダムな名前ジェネレーター

ゲームを実行したり、ストーリーを書いたり、一度に多数のキャラクターを作成したりしている場合、絶え間なく流れてくる新しい名前に対処するのに圧倒されることがあります。この問題を解決するために使用できる単純なランダム名ジェネレーターを見てみましょう。まず、2 つの単純な配列を作成しましょう。1 つは名用、もう 1 つは姓用です。

リスト 3. 名と姓の 2 つの単純な配列

$male = array(

「ウィリアム」、

「ヘンリー」、

「ヘーゼルナッツ」、

「ジョン」、

「パット」、

);

$last = array(

「スミス」、

「ジョーンズ」、

「ウィンクラー」、

「クーパー」、

「クライン」、

);

その後、各配列からランダムな要素を選択できます: echo $male[array_rand($male)] ' ' 。複数の名前を一度に抽出するには、配列を混合し、必要に応じて抽出するだけです。

リスト 4. 混合名の配列

シャッフル($male);

シャッフル($last);

for ($i = 0; $i

$male[$i] をエコーし​​ます。 $last[$i];

}

この基本概念に基づいて、姓名を保存するテキスト ファイルを作成できます。テキスト ファイルの各行に名前を保存すると、ファイルの内容を改行で区切ってソース コードの配列を簡単に構築できます。

リスト 5. 名前のテキスト ファイルの作成

$male =explode('n', file_get_contents('names. Female.txt'));

$last =explode('n', file_get_contents('names.last.txt'));

いくつかの適切な名前のファイルをビルドまたは検索すれば (一部はコード アーカイブに含まれています)、名前について心配する必要はもうなくなります。

シーンジェネレーター

名前ジェネレーターの構築に使用したものと同じ基本原則を使用して、シナリオ ジェネレーターを構築できます。このジェネレーターは、ロール プレイング ゲームだけでなく、擬似ランダム環境のコレクションが必要な状況 (ロール プレイング、即興、執筆など) にも役立ちます。私のお気に入りのゲームの 1 つである Paranoia には、GM パックに「ミッション ブレンダー」が含まれています。ミッション ミキサーを使用すると、サイコロをすばやく振りながら、完全なミッションを組み合わせることができます。独自のシーンジェネレーターを組み立ててみましょう。

次のシナリオを考えてみましょう: あなたは目が覚めると、ジャングルで迷っていることに気づきました。ニューヨークに行かなければならないことはわかっていますが、その理由はわかりません。近くで犬の吠え声と敵の探索者の独特の音が聞こえます。あなたは寒くて震えていて、武装していません。シーン内の各文は、シーンの特定の側面を紹介します:

「目が覚めると、ジャングルの中で迷っていることに気づきます。」 — この文が設定を確立します。

「ニューヨークに行かなければならないことはわかっていますね」 — この文は目標を説明します。

「犬の吠え声が聞こえる」 — この文は敵を紹介します。

「あなたは寒くて震えていて、武装していません」 - この文はさらに複雑になります。

姓と名用のテキスト ファイルを作成したのと同じように、まず設定、目的、敵、および複雑さ用に個別のテキスト ファイルを作成します。サンプル ファイルはコード アーカイブに含まれています。これらのファイルを取得したら、シーンを生成するコードは基本的に名前を生成するコードと同じになります。

リスト 6. シーンの生成

$settings =explode("n", file_get_contents('scenario.settings.txt'));

$objectives =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'));

シャッフル($settings);

シャッフル($objectives);

シャッフル($アンタゴニスト);

シャッフル($complicati****);

エコー $settings[0] . $objectives[0] . ' '

. $complicati****[0] .

新しいテキスト ファイルを追加することでシーンに要素を追加できますが、複数のレベルの複雑さを追加したい場合もあります。基本的なテキスト ファイルに追加するコンテンツが増えるほど、時間の経過とともにシーンがより多く変化します。

デッキビルダーおよびシャッフル

カードをプレイし、カード関連のスクリプトを処理する場合は、デッキ ビルダーとリグ内のツールを統合する必要があります。まず、標準的なトランプのデッキを構築しましょう。 2 つの配列を構築する必要があります。1 つは同じスーツのカードのグループを保持するため、もう 1 つはカードの表を保持するためです。これにより、後で新しいデッキやカード タイプを追加する必要がある場合に大きな柔軟性が得られます。

リスト 7. 標準的なトランプのデッキを作成する

$suits = array (

「スペード」、「ハート」、「クラブ」、「ダイヤモンド」

);

$faces = array (

「ツー」、「スリー」、「フォー」、「ファイブ」、「シックス」、「セブン」、「エイト」、

「ナイン」、「テン」、「ジャック」、「クイーン」、「キング」、「エース」

);

次に、カードの配列のデッキを構築して、すべてのカードの値を保存します。これは、1 組の foreach ループを使用するだけで簡単に実行できます。

リスト 8. トランプ配列の構築

$deck = array();

foreach ($suits として $suit) {

foreach ($faces として $face) {

$deck[] = array ("face"=>$face, "suit"=>$suit);

}

}

トランプの配列を作成したら、簡単に山札をシャッフルし、ランダムにカードを引くことができます。

リスト 9. デッキをシャッフルし、ランダムにカードを 1 枚引く

シャッフル($deck);

$card = array_shift($deck);

echo $card['face'] . ' $card['suit'];

これで、複数のカードデッキを引いたり、マルチデッキシューを構築したりするためのショートカットができました。

勝率計算ツール: カードの配り方

カードのデッキを構築するときに各カードの表とスーツが個別に追跡されるため、そのデッキをプログラムで使用して、特定のカードを取得する確率を計算できます。まず、各手札からカードを 5 枚ずつ引きます。

リスト 10. 各手から 5 枚のカードを引く

$hands = array(1 =>array(), 2=>array());

for ($i = 0; $i

$hands[1][] = implode(" of ", array_shift($deck));

$hands[2][] = implode(" of ", array_shift($deck));

}

その後、デッキを見て、カードが何枚残っているか、特定のカードを引く確率を確認できます。カードが何枚残っているかが簡単にわかります。 $deck 配列に含まれる要素の数を数えるだけです。特定のカードを引くチャンスを得るには、デッキ全体を調べて残りのカードを推定し、それらが一致するかどうかを確認する関数が必要です。

リスト 11. 特定のカードを引く確率を計算する

関数 Calculate_odds($draw, $deck) {

$remaining = count($deck);

$オッズ = 0;

foreach ($deck as $card) {

if ( ($draw['face'] == $card['face'] && $draw['suit'] ==

$card['suit'] )

($draw['face'] == '' && $draw['suit'] == $card['suit'] )

($draw['face'] == $card['face'] && $draw['suit'] == '' ) ) {

$odds++;

}

}

$odds を返します。' in ' $remaining;

}

どのカードを引くかを選択できるようになりました。物事をシンプルにするために、カードのように見える配列を渡します。特定のカードを探すことができます。

リスト 12. 指定されたカードを検索

$draw = array('face' => 'エース', 'スーツ' => 'スペード');

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 " . $index . "]'>

" . $card['face'] . ' of ' . $card['suit'] . "";

}

次に、入力配列 $_POST['card'] を評価して、どのカードが置換対象として選択されたかを確認します。

リスト 15. 計算入力

$i = 0;

while ($i

if (isset($_POST['card'][$i])) {

$hand[$i] = array_shift($deck);

}

}

このスクリプトを使用すると、特定のカードのセットに対処する最適な方法を見つけることができます。




関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート