PHP で作成する 30 種類のゲーム・スクリプト: 第 2 回 10 種類の中級スクリプトを作成する

PHP は、使いやすく、容易に学ぶことができ、そして幅広く利用できるプログラミング言語です。PHP は、あらゆる種類のゲームに役立つ簡単なスクリプトを作成するのに非常に適しています。紙と鉛筆を使った単純なゲームを 1 人でする場合であれ、複雑なテーブルトーク RPG を何人かのグループでする場合であれ、はたまたどのような種類のオンライン・ゲームをする場合であれ、このシリーズは皆さんにとって何らかの役に立つはずです。この記事は「PHP で作成する 30 種類のゲーム・スクリプト」シリーズの第 1 回の記事を元に、さまざまなタイプのゲームに使用できる 10 種類の中級スクリプトについて説明します。これらのスクリプトは、ロール・プレイング・ゲーム、ギャンブル・ゲーム、単語ゲームという 3 つのタイプのゲームに使用することができます。

Duane O'Brien, PHP developer, 自由职业者

Duane O'Brien はゲーム Oregon Trail がテキストのみで構成されていた頃から、万能な技術者として活躍しています。彼の好きな食べ物は寿司です。彼はまだ月に行ったことがありません。


developerWorks 貢献著者レベル

2008年 11月 25日

このシリーズの第 1 回では初心者レベルの PHP スクリプトをいくつか作成しました。今回は、もっと複雑な PHP スクリプトの作成にチャレンジすることで、皆さんの PHP プログラミング・スキルにさらに磨きをかけ、ゲームの達人としての地位を高めます。

ロール・プレイング・ゲーム用のスクリプトでは、武器によるダメージを計算するスクリプトとキャラクター・シートのステータスを追跡するスクリプト、そしてNPC (Non-Player Character: ノンプレイヤー・キャラクター) ジェネレーターを作成しながら、その一方で PHP でファイルに情報を保存する方法と配列の処理方法を説明します。ギャンブル・ゲーム用のスクリプトでは、これらのスクリプトを利用して、ブラックジャックを練習したり、カード・カウンティングを学んだり、ビンゴの基本を素早く理解したりしながら、PHP スクリプトの中に偶然の要素を取り入れる方法を説明します。最後に単語ゲーム用のスクリプトでは、これらのスクリプトを利用して、Jumble ゲームを解いたり、単純な換字式暗号を作成したり、単語検索のダイヤグラムを生成したりしながら PHP での配列処理のスキルをさらに高めます。

ここではこれらのスクリプトを駆け足で説明します。ホストを探したり、サーバーをセットアップしたりすることに関する内容は省略します。というのも、Web ホスティング・サービスを提供している会社で、PHP を提供しているところは数多くあり、また独自のホストをセットアップしたい場合には XAMPP インストーラーを使えば簡単に行うことができるからです。PHP でのベスト・プラクティスやゲームの設計テクニックについてはあまり時間をかけません。ここで紹介するスクリプトは、理解しやすく、使いやすく、そして簡単に学べるように設計してあります。

この記事のコード・アーカイブには、ここで説明する各スクリプトの完全なソース・コードが含まれており、また Chaoticneutral.net を訪れるとスクリプトの実際を見ることができます。

ダメージ計算スクリプト

第 1 回では基本的なダイス・ローラーを作成しました。そのダイス・ローラーを活用して基本的なダメージ計算スクリプトを作成しましょう。

テーブルトーク RPG で遊んだことのある人なら、武器に関する大がかりなチャートが本の中に含まれているのを見たことがあるでしょう。通常、これらのチャートには、武器の名前と、その武器によってどの程度のダメージが与えられるかが記されています。そのチャートは表 1 のようなものです。

表 1. ダメージの計算
武器の名前ダメージ
Little Stick (小さな棒)1D6
Big Stick (大きな棒)1D6+4
Chainsaw (チェーンソー)2D8

この「PHP で作成する 30 種類のゲーム・スクリプト」シリーズの第 1 回で作成した単純な roll 関数を使うと、基本的な武器セットによるダメージを計算することができます。そのためには、武器に関する情報を保持する配列を作成します。

この例での個々の武器は、Name (名前)、Die Roll (ダイス・ロール)、そして Damage Bonus (ダメージ・ボーナス) という 3 つの基本的な特性を持っています。これらの特性を利用すると、以下に示すような独自の武器配列を作成することができます。

リスト 1. 武器の配列
$weapons = array (
    'littlestick' => array (
        'name' => 'Little Stick',
        'roll' => '1d6',
        'bonus' => '0',
    ),
    'bigstick' => array (
        'name' => 'Little Stick',
        'roll' => '1d6',
        'bonus' => '4',
    ),
    'chainsaw' => array (
        'name' => 'Little Stick',
        'roll' => '2d8',
        'bonus' => '0',
    ),
);

この配列を使うと、武器と、武器が与えるダメージ、そしてダメージ・ロールの結果を示す表を作成することができます。

リスト 2. 武器の表を作成する
foreach ($weapons as $weapon) {
    list($count, $sides) = explode('d', $weapon['roll']);
    $result = 0;
    for ($i = 0; $i < $count;$i++) {
        $result = $result + roll($sides);
    }
    echo "<tr><td>" . $weapon['name'] . "</td><td>" 
. $weapon['roll'];
    if ($weapon['bonus'] > 0) {
        echo "+" . $weapon['bonus'];
        $result = $result + $weapon['bonus'];
    }
    echo "</td><td>" . $result . "</td></tr>";
}

このスクリプトを使うと、ダメージ計算が統合された基本的な武器チャートを作成することができます。


ステータス記録スクリプト

ダメージの計算ができるようになったので、NPC がいくつか登場するゲームを実行した場合に使用するような、キャラクターの基本的なステータスを記録する方法を考えてみましょう。ここではキャラクターの情報を保持するための単純な配列を作成し、それを (シリアライズして) テキスト・ファイルに保存します。(この情報をデータベースに保存する方法は数多くあり、PHP による処理に慣れたら、そうした方法の検討に進む必要があります)。この例では、私が作成した Shambles というゲームに登場するゾンビの基本キャラクターを作成します。まず、キャラクターの情報を保持する配列の作成から始めます。

リスト 3. キャラクターの情報用の配列
$character = array(
    'name' => 'Fred The Zombie',
    'health' => '36',
    'gore' => '1',
    'clutch' => '5',
    'brawn' => '6',
    'sense' => '4',
    'flail' => '2',
    'chuck' => '3',
    'lurch' => '4',
);

上記の配列を作成したら、この情報を保存するためのファイル名が決まるようにしなければなりませんが、ユーザーが入力したものをそのまま使うのではなく、キャラクターの名前から文字のみを抽出してファイル名として使うようにします。

リスト 4. 情報を保存するファイルを作成する
$filename = substr(preg_replace("/[^a-z0-9]/", "", 
      strtolower($character['name'])), 0, 20);
file_put_contents($filename, serialize($character));

注意: このスクリプトを公開して一般の人が利用できるようにする場合には、悪意を持った人が悪質な JavaScript や「ゴミ」をファイルに注入できないように、ユーザー入力をフィルタリングする必要があります。ここで示した例は、あくまでも個人的に使用するためのものです。最後に、この情報は更新しやすいフォームに入れて表示する必要があります。そのためには入力フィールドにデフォルト値を持つフォームを作成すればよいだけです。

リスト 5. 情報をフォームで表示する
<input name='health' value='<?php echo $character['health'] ?>' />

この基本的なスクリプト (コード・アーカイブを参照) を使うと、いくつかのキャラクターや NPC のデータを記録することができます。


NPC ジェネレーター

大規模なゲームを作成する際には、使い捨ての NPC のプールがあると便利です。これは大量の悪役や雑魚キャラが必要な場合に特に便利です。NPC ジェネレーターを作成するために、キャラクターの作成ルールを含む配列を作成し、次にランダム・ネーム・ジェネレーターとダイス・ローラーを使って大量のキャラクターをすべて一度に作成しましょう。

例として Fred the Zombie を使うと、キャラクターの作成ルールを定義することができます。一部のステータスは静的であり (health は常に 36 から始まります)、一部のステータスは派生型であり (gore は health/6)、また一部のステータスはダイス・ロールの結果です (clutch は 1D6、つまり6 面体のサイコロ 1 つ)。このルールはリスト 6 のようなものになります。

リスト 6. キャラクターの作成ルールを定義する
$rules = array(
    'health' => '36',
    'gore' => 'health/6',
    'clutch' => '1d6',
    'brawn' => '1d6',
    'sense' => '1d6',
    'flail' => '1d6',
    'chuck' => '1d6',
    'lurch' => '1d6',
);

今度はルールを評価する簡単なコードを作成します。

リスト 7. キャラクターの作成ルールを評価するコード
foreach ($rules as $stat=>$rule) {
    if (preg_match("/^[0-9]+$/", $rule)) {
        // This is only a number, and is therefore a static value
        $character[$stat] = $rule;
    } else if (preg_match("/^([0-9]+)d([0-9]+)/", $rule, $matches)) {
        // This is a die roll
        $val = 0;
        for ($n = 0;$n<$matches[1];$n++) {
            $val = $val + roll($matches[2]);
        }
        $character[$stat] = $val;
    } else if (preg_match("/^([a-z]+)\/([0-9]+)$/", $rule, $matches)) {
        // This is a derived value of some kind.
        $character[$stat] = $character[$matches[1]] / $matches[2];
    }
    echo $stat . ' : ' . $character[$stat] . "<br />\n";
}

キャラクターの作成ルールを適切に評価できると、ランダム・ネーム・ジェネレーターを使ってランダムな名前を生成させ、大量の NPC を作り出すことができます。このタスクがどのように作成されているのかに関してはコード・アーカイブを参照してください。


オッズ計算スクリプト: ダイス・ロール

第 1 回では、指定されたカード・セットから特定のフェイス (訳注: フェイスとはトランプで言うマークと数字が書かれた表面のことで、ここでは単に表面に書かれている数字のこと) または特定のスーツ (訳注: スーツとはトランプで言うマーク (スペード、ハート、ダイヤ、クラブ) のこと) のカードを引く可能性を判断するための単純なオッズ計算スクリプトを作成しました。今度はダイス・ロールのオッズを計算するスクリプトを作成しましょう。例えば、6 面体のサイコロ 2 個 (2D6) を振った場合の出目の可能性を判断する計算スクリプトを作成します。これは D6 ベースの RPG システムを使っている場合や、モノポリーやバックギャモンなどのボード・ゲームで遊んでいる場合、あるいはクラップスのようなダイス・ゲームでオッズを計算したい場合などに便利です。

※訳注: 「第 1 回」の記事は 2008-525 として納品済みです。

まず、2 個のサイコロを振った場合の出目の可能性を判断する方法を確定します。それには、色の異なる 2 個のサイコロ (例えば赤と青のサイコロなど) を振ることを考えると有効です。もし赤のサイコロで 1 が出たとすると、可能性のある出目は青のサイコロの各面との組み合わせによる 6 種類です。つまり、2 個のサイコロを振った場合に可能性のある出目の数は合計 6^2、つまり 36 通りあるということになりますが、この計算は少し奇妙に思えるかもしれません。と言うのも、2 個のサイコロを 1 回振ったときに出る目の合計の最大値は 12 (赤の 6 と青の 6) ですが、目の合計が 11 になる場合は 2 つの異なる目の出方がある (赤の 6 と青の 5、または赤の 5 と青の 6) からです。このことを理解すれば、奇妙と言った意味がわかるはずです。

この例では、合計の結果 (振った結果が 10) と各サイコロの結果 (6 と 4 の目が出た) の両方が必要だとし、赤のサイコロの 6 と青のサイコロの 6 との間には違いがないとします。重要な数字は S (サイコロの面数) と N (サイコロの個数) です。同じサイコロが N 個あるとすると出目の種類は最大で S^N ですが、これらの結果の一部は同じかもしれません (6 と 4、4 と 6 など)。

リスト 8. ダイス・ロール用のオッズ計算スクリプトを作成する
$s = 6;
$n = 2;
$results = array(array());
for ($i = 0; $i < $n; $i ++) {
    $newresults = array();
    foreach ($results as $result) {
        for ($x = 0; $x < $s; $x++) {
            $newresults[] = array_merge($result, array($x+1));
          
        }
    }
    $results = $newresults;
}

おそらくあまり洗練されているようには見えないこのコードは、もっと効率化したコードにすることができますが、ここでは配列の処理方法が理解できるように、少しばかり明示的な方法で行いました。最終的な配列が作成できると、その配列に対して繰り返し処理を行うことで、合計の一覧と、それぞれの合計が起こりうるオッズを生成することができます。このコードはコード・アーカイブの中に含まれています。


単純なブラックジャック・ディーラー

第 1 回では単純なポーカー・ディーラーを作成しました。このディーラーは実際には皆さんとプレイするわけではなく、単にシュー (訳注: シューとは、複数のデッキ (例えばトランプ 6 組) を使用するゲームで未使用のカードを入れておくボックスのこと) からカードを引き出し、皆さんがさまざまなハンド (訳注: ハンドとは手札の組み合わせのこと) を練習できるようにするだけでした。今度は実際に皆さんとプレイするブラックジャック・ディーラーを作成しましょう。このディーラーを作成するためには、ディーラーはハンドの合計ポイントが少なくとも 17 になるまで引かなければならないという簡単なハウス・ルールを使います。

このコードの一部は前回作成した単純なポーカー・ディーラーと同じように見えます。ブラックジャックの場合には、ドローして、ハンドを評価するという繰り返しの処理を行えるような仕組みを組み込む必要があります。またフェイス・カード (訳注: ブラックジャックなどのゲームでは、10、J、Q、K のことをフェイス・カードと呼ぶ) の値を (ハンドの合計を計算する際の) ポイントに割り当てるための配列が必要です。デッキの作成方法を変更すると、これを元の $faces 配列の中で行うことができます。

リスト 9. ブラックジャック用に $faces 配列を変更する
$faces = array('Two' => 2, ... ... ... 'King' => 10, 'Ace' => 11);

次に、与えられたハンドを評価するための基本的な関数が必要です。この関数はハンドを調べ、その合計値を返します。

リスト 10. 与えられたハンドを評価する関数
function evaluateHand($hand) {
    global $faces;
    $value = 0;
    foreach ($hand as $card) {
        if ($value > 11 && $card['face'] == 'Ace') {
            $value = $value + 1;  // An ace can be 11 or 1
        } else {
            $value = intval($value) + intval($faces[$card['face']]);
        }
    }
    return $value;
}

1 人のハンドを評価する関数を用意できると、ハンドの合計ポイントが 21 を超えたかどうか、あるいはディーラーがヒットするはずかステイするかの判断は簡単なはずです。このコードがどのように作成されているかの詳細はコード・アーカイブを参照してください。


カード・カウンター

ブラックジャックやハーツのようなトランプを使ったゲームをする際には、カードのカウントができると便利です。ブラックジャックの場合、最低限エースとフェイス・カードが何枚出たかを知る必要があります。ハーツの場合には、トランプのカードがあと何枚残っているかを知る必要があります。ここではブラックジャック用に基本的なカウンターを作成します。同じ原理を利用すればトランプを使ったゲーム用のカード・カウンターを作成することができます。

カード・カウンティング用のデッキは少し異なった方法で作成します。すべてのカードを知る必要はなく、関心のあるカードかどうかのみを知る必要があります。シングル・デッキのシューの場合には、次のようなものになります。

リスト 11. シングル・デッキ・シュー用のカード・カウンターを作成する
$deck = array (
    'faces' => 16, // 10,J,Q,K * 4 suits
    'aces' => 4, // One per suit
    'other' => 32, // 52 - (16 + 4)
);

次に、3 つのボタン (フェイス・カード用、エース用、その他のカード用) を持つ簡単なフォームを作成します。特定の種類のカードが出る度に適切なボタンをクリックすることで、デッキに残っているそれぞれの枚数を知ることができます。

リスト 12. 3 つのボタンを持つ簡単なフォーム
if ($_POST['submit'] == 'faces') {
    $deck['faces']--;
}

そうすると、変更された後のデッキを調べることで、フェイス・カードを引くオッズ、エースを引くオッズ、その他のカードを引くオッズを計算することができます。

リスト 13. フェイス・カード、エース、または他のカードを引くオッズを計算する
echo "Odds of pulling a face: " . $deck['faces'] . " out of " 
. $deck['faces'] + $deck['aces'] + $deck['other'];

この基本的なカード・カウンターを出発点として使うことで、これよりもはるかに強力なものを作成することができます。


ビンゴ・エンジン

この記事でこれまで行ってきたことを元にすると、プールからカードを生成したり数を引き出したりするビンゴ・エンジンを容易に作成することができます。

ビンゴの数字は 1 から 75 であり、15 ずつのグループに分割されます (1 から 15 を B に割り当て、16 から 30 を I に割り当て、など)。仮想的なビンゴ・ボールのセットを作成してシャッフルする方法は、仮想的なカード・デッキを作成してシャッフルする方法とほとんど同じです。しかしカード・デッキの場合のようにフェイスとスーツを追跡する必要はありません。まず、ベースとなる数字セットを作成します。

リスト 14. ビンゴ用のベース数字セットを作成する
for ($i = 1; $i < 16; $i++) {
    $numbers['B'][] = $i;
    $numbers['I'][] = $i+15;
    $numbers['N'][] = $i+30;
    $numbers['G'][] = $i+45;
    $numbers['O'][] = $i+60;
}

次に、各サブ配列をシャッフルし、同時にカード群を作成します。(真ん中のスペースは通常フリー・スポットであることを忘れないでください。) それをしながら、デッキのように使用できる 1 つのマスター配列を作成します。

リスト 15. マスター配列を作成する
$letters = array ('B','I','N','G','O');
foreach ($letters as $letter) {
    shuffle($numbers[$letter]);
    $chunks = array_chunk($numbers[$letter], 5);
    $cards[$i][$letter] = $chunks[0];
    if ($letter == 'N') {
        $cards[$i][$letter][2] = '  '; // Free Space
    }
    shuffle($balls);
}

これで完成です。ビンゴ・カードを配り、マスター・セットから仮想的なビンゴ・ボールを引き始めることができます (これは第 1 回でカードを引いたのと、ほとんど同じです)。このスクリプトの完全機能版はコード・アーカイブの中にあります。


Jumble ヘルパー

Jumble は新聞によく載っている単語パズルであり、いくつかの単語が「まぜこぜ」になっています。この無意味な「まぜこぜ」の中から本当の単語を作り出し、次に、ある文字列を使って新しい文を作ります。第 1 回で作成したクロスワード・ヘルパーを出発点に、Jumble に役立つ簡単なスクリプトを作成しましょう。

まず、皆さんの単語リストを開きます。このリストに対して繰り返し処理を行って各単語を文字へと分割し、その文字を配列として並べ、再度その配列を結合します。例えば、この変更操作によって「COLOR」という単語が「CLOOR」という文字列になります。この文字列は「COLOR」という単語のすべての文字を、予測可能な順序で (そしてもっと重要な点として、突き合わせ可能な順序で) 表しています。この文字列は次に、単語を突き合わせるための配列のキーとして使われます。配列でなければならない理由は、例えば「sword」と「words」はまったく同じ文字を異なる順序で持っているためです。結局、このスクリプトは次のようなものになります。

リスト 16. Jumble 用のスクリプト
foreach ($words as $word) {
    $arr = str_split($word);
    sort($arr);
    $key = implode('', $arr);
    if (isset($lookup[$key])) {
        array_push($lookup[$key], $word);
    } else {
        $lookup[$key] = array($word);
    }
}

ここまで用意できると、あとは他の任意の単語とまったく同じように Jumble を扱えばよく、そして対応するキーの値を検索して結果を出力すればよいだけです。

リスト 17. Jumble 用のスクリプトを完成させる
$arr = str_split($_POST['jumble']);
sort($arr);
$search = implode('', $arr);

if (isset($lookup[$search])) {
    foreach ($lookup[$search] as $word) {
        echo $word;
    }
}

これをすべてまとめたものはコード・アーカイブにあります。


換字式暗号用スクリプト

換字式暗号はアルファベットの文字を別のアルファベットの文字で置き換える単純な暗号化手法です。最近の暗号化手法の基準から見ると、換字式暗号は子供の遊びのようなものです。しかし単純な換字式暗号は楽しく遊べるものであり、特に RPG では、暗号化したメッセージを誰かに渡してゲーム中に解読させる、といったことができます。

まず、第 1 回の Hangman ジェネレーター (つまり文字の配列) から少しばかりコードを引用します。この配列をもう 1 度コピーし、そのコピーをシャッフルし、連想配列を作ります (この連想配列で元の文字はシャッフルされた値に置き換わります)。

リスト 18. 文字の配列を変更する
$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');
$code = $letters;
shuffle($code);
$key = array_combine($letters, $code);

次に、$_POST からの入力を受け取り、そのメッセージを文字へと分割し、キーの中の各文字の値を出力します。

リスト 19. メッセージを文字へと分割して出力する
if (!empty($_POST)) {

    $messageletters = str_split(strtolower($_POST['message']));
    $show = '';
    foreach ($messageletters as $letter) {
        $show .= @$key[$letter];
    }
}

$key[$letter] の前に @ シンボルを使うことで、エンコード中に発生するすべてのエラーを無視するように PHP に命令します。メッセージに句読点や数字、空白があると、PHP はそれに対応する値が $key 配列の中にないという警告を出します。それは無視して構いません。エンコードされて出力されるテキストからは空白や数字、句読点が削除され、そのメッセージは (わずかながら) デコードしにくくなります。


単語検索ジェネレーター

単語検索は、文字を使ったパズルのなかでもおそらく私達の誰もが一番最初に学ぶパズルでしょう。これまでに使用してきた手法を利用し、クロスワード・ヘルパーのロジックを一部含めると、非常に基本的な単語検索ジェネレーターを作成することができます。ここでは単純にするために、内部に 10 個の単語 (縦に 5 個、横に 5 個) が隠された、10 文字 x 10 文字のサイズの単語検索ダイヤグラムを作ります。

最初の部分、つまり横方向の単語を入れる部分は非常に簡単です (ピリオドが入った要素を 10 個持つ配列の配列を作成すればよいだけです)。次に、その配列 1 つおきに、個々の単語の文字を入れます。縦方向の単語を入れるためには、すべての配列を同時に調べる必要があるため、一致する可能性のある単語をクロスワード・ヘルパーのコードを使って探します。おそらく最も面倒な部分は、縦の列に (列の長さよりも短い) 単語またはランダムな文字を入れる部分でしょう (リスト 20)。

リスト 20. 縦の列に単語またはランダムな文字を入れる
$wordletters = str_split($word);
for ($c = 0; $c < $height; $c++) {
    if ( $grid[$c][$i] == '.' && ($c < $x || empty($wordletters))) {
        $grid[$c][$i] = $letters[rand(0,25)];
    } else  {
        if ($grid[$c][$i] == '.') {
            $grid[$c][$i] = array_shift($wordletters);
        } else if ($c >= $x) {
            array_shift($wordletters);
        }
    }
}

コード・アーカイブには、このプロセス全体を理解しやすくするために、いくつかのコメントを含めてあります。このコードには大いにパフォーマンスを改善する余地がありますが、この問題に対する手法の大まかな考え方は理解できるはずです。コード・アーカイブの完全なスクリプトを試し、結果を見てみてください。


まとめ

この記事では、この「PHP で作成する 30 種類のゲーム・スクリプト」シリーズの第 1 回で作成した基本的なスクリプトをいくつか取り上げ、それらを元にしてさらに強力なスクリプトを作成しました。第 3 回では、さらに一歩進め、今回作成したものを元にもっと強力で便利なツールを作成します。


ダウンロード

内容ファイル名サイズ
10 intermediate PHP scriptsos-php-gamescripts2-php10games2.zip385KB

参考文献

学ぶために

  • XAMPP のページを訪れてください。XAMPP は容易にインストールできる Apache のディストリビューションであり、MySQL、PHP、Perl が含まれています。
  • この記事で紹介したすべてのスクリプトの実際の例を調べてみてください。
  • デモ用に使用した Shambles ゲームを見てください。
  • サイコロを振った時の組み合わせについて学んでください。
  • ブラックジャックについての情報を見てください。
  • カード・カウンティングを学んでください。
  • ビンゴに関する基本的な情報を見てください。
  • Jumble のすべてを知るために、Jumble.com を訪れてください。
  • 単純なシーザー暗号を入手してください。
  • Linux で Apache V2 と PHP V4.x を一緒に動作させるための方法を解説した記事、Apache V2 and PHP Installation を読んでください (PHP V5.x も使うかもしれません)。
  • Connecting PHP applications to Apache Derby」は、Windows に PHP をインストールして構成する方法を解説しています (一部のステップは Linux にも応用することができます)。
  • Learning PHP, Part 1」を読み、PHP の基本を学んでください。次に「Part 2」を読み、Web にアクセスできない場所から DOM と SAX を使ってファイルをアップロードする方法を学んでください。そして「第 3 回」ではワークフロー・アプリケーションを完成させます。
  • PHP.net には PHP 開発者のためのリソースが集まっています。
  • Recommended PHP reading list」を調べてみてください。
  • developerWorks には他にも PHP に関する資料が豊富に用意されています。
  • IBM developerWorks の PHP project resources を利用して PHP のスキルを磨いてください。
  • developerWorks podcasts では、ソフトウェア開発者のための興味深いインタビューや議論を聞くことができます。
  • PHP でデータベースを使うのであれば、Zend Core for IBM を調べてみてください。これはシームレスでそのまま使用でき、インストールも容易な、IBM DB2 V9 をサポートする PHP の開発環境であり実動環境です。
  • developerWorks の Technical events and webcasts で最新情報を入手してください。
  • IBM オープンソース開発者にとって関心のある、世界中で今後開催される会議や業界展示会、ウェブキャスト、その他のイベントについて調べてみてください。
  • developerWorks の Open source ゾーンをご覧ください。オープンソース技術を使った開発や、IBM 製品でオープンソース技術を使用するためのハウ・ツー情報やツール、プロジェクトの更新情報など、豊富な情報が用意されています。
  • IBM とオープンソース技術、そして製品機能を調べ、学ぶために、無料の developerWorks On demand demos をご覧ください。

製品や技術を入手するために

  • 皆さんの次期オープンソース開発プロジェクトを IBM ソフトウェアの試用版を使って革新してください。ダウンロード、あるいは DVD で入手することができます。
  • IBM 製品の評価版をダウンロードし、DB2® や Lotus®、Rational®、Tivoli®、WebSphere® などが提供するアプリケーション開発ツールやミドルウェア製品をお試しください。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Open source
ArticleID=361062
ArticleTitle=PHP で作成する 30 種類のゲーム・スクリプト: 第 2 回 10 種類の中級スクリプトを作成する
publish-date=11252008