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

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

Jun 21, 2016 am 08:54 AM
array quot

この記事では、単純なサイコロの目、ランダム名ジェネレーター、シーンジェネレーター、デッキビルダー (デッキビルダー) と装備品 (シャッフラー)、単純なポーカー発行カードマシン、ハングマンゲーム、クロスワードヘルパーなど、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);

}

}

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




このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C# の Array.Sort 関数を使用して配列を並べ替える C# の Array.Sort 関数を使用して配列を並べ替える Nov 18, 2023 am 10:37 AM

タイトル: Array.Sort 関数を使用して C# で配列を並べ替える例 本文: C# では、配列は一般的に使用されるデータ構造であり、多くの場合、配列を並べ替える必要があります。 C# には Array クラスが用意されており、このクラスには配列を簡単に並べ替えるための Sort メソッドがあります。この記事では、C# で Array.Sort 関数を使用して配列を並べ替える方法を示し、具体的なコード例を示します。まず、Array.Sort 関数の基本的な使用法を理解する必要があります。 Array.So

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

PHPのarray_merge_recursive()関数を使用するシンプルで明確な方法 PHPのarray_merge_recursive()関数を使用するシンプルで明確な方法 Jun 27, 2023 pm 01:48 PM

PHP でプログラミングする場合、多くの場合、配列をマージする必要があります。 PHP には、配列のマージを完了するための array_merge() 関数が用意されていますが、配列内に同じキーが存在する場合、この関数は元の値を上書きします。この問題を解決するために、PHP は配列をマージして同じキーの値を保持できる array_merge_recursive() 関数を言語で提供し、プログラム設計をより柔軟にします。配列マージ

PHP で array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法 PHP で array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法 Jun 26, 2023 pm 01:41 PM

PHP には、配列操作をより便利かつ高速にする強力な配列関数が多数あります。 2 つの配列を結合して連想配列にする必要がある場合、PHP の array_combine 関数を使用してこの操作を実行できます。この関数は、実際には、ある配列のキーを別の配列の値として新しい連想配列に結合するために使用されます。次に、PHP の array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法を説明します。 array_comb について学ぶ

PHPのarray_fill()関数の使い方の詳しい説明 PHPのarray_fill()関数の使い方の詳しい説明 Jun 27, 2023 am 08:42 AM

PHP プログラミングにおいて、配列は大量のデータを簡単に処理できる非常に重要なデータ構造です。 PHP は配列関連の関数を多数提供しており、array_fill() はその 1 つです。この記事では、array_fill() 関数の使い方と実際の応用におけるヒントを詳しく紹介します。 1. array_fill() 関数の概要 array_fill() 関数の機能は、同じ値で構成される指定された長さの配列を作成することです。具体的には、この関数の構文は次のとおりです。

Python で Array モジュールを使用する方法 Python で Array モジュールを使用する方法 May 01, 2023 am 09:13 AM

Python の配列モジュールは事前定義された配列であるため、標準のリストよりもメモリ内で使用するスペースがはるかに少なく、追加、削除、インデックス付け、スライスなどの要素レベルの操作を高速に実行することもできます。さらに、配列内のすべての要素は同じ型であるため、平均値、最大値、最小値の計算など、配列が提供する効率的な数値演算関数を使用できます。さらに、配列モジュールは、配列オブジェクトのバイナリ ファイルへの直接の書き込みと読み取りもサポートしているため、大量の数値データを処理する際の効率が向上します。したがって、大量の同種データを処理する必要がある場合は、Python の配列モジュールを使用してコードの実行効率を最適化することを検討してください。配列モジュールを使用するには、まず次のことを行う必要があります。

Java での ArrayStoreException の一般的な原因は何ですか? Java での ArrayStoreException の一般的な原因は何ですか? Jun 25, 2023 am 09:48 AM

Java プログラミングでは、配列は重要なデータ構造です。配列は 1 つの変数に複数の値を格納できます。さらに重要なのは、インデックスを使用して各値にアクセスできることです。ただし、配列を操作しているときに、いくつかの例外が発生する場合があります。そのうちの 1 つは ArrayStoreException です。この記事では、ArrayStoreException 例外の一般的な原因について説明します。 1. 型の不一致 配列の作成時に要素の型を指定する必要があります。互換性のないデータ型を配列に格納しようとすると、

Java での ArrayIndexOutOfBoundsException の一般的な原因は何ですか? Java での ArrayIndexOutOfBoundsException の一般的な原因は何ですか? Jun 24, 2023 pm 10:39 PM

Java は、さまざまな開発分野で広く使用されている非常に強力なプログラミング言語です。ただし、Java プログラミング中に、開発者は ArrayIndexOutOfBoundsException 例外に遭遇することがよくあります。では、この異常の一般的な原因は何でしょうか? ArrayIndexOutOfBoundsException は、Java の一般的なランタイム例外です。これは、データにアクセスするときに、配列の添字が配列の範囲を超えていることを意味します。一般的な理由には次のようなものがあります。

See all articles