30 игровых скриптов, которые можно написать на языке PHP : Часть 2. Разработка 10 скриптов средней сложности

PHP – это общедоступный язык программирования, простой в изучении и применении. Он хорошо подходит для создания простых скриптов, которые вы сможете использовать для решения различных задач при программировании игр. Эта серия статей поможет вам вне зависимости от того, в какие игры вы играете – в простые одиночные игры на бумаге, в сложные ролевые игры в составе группы или в какую-либо разновидность онлайновых игр. Данная статья основывается на первой статье в этой серии под общим названием «30 игровых скриптов, которые можно написать на языке PHP», и посвящена исследованию 10 более сложных скриптов, которые могут быть использованы в играх различного типа. Рассматриваемые в данной статье скрипты предназначены для игр следующих трех типов: ролевые игры, азартные игры и игры в слова.

Дуэйн О'Брайен, разработчик PHP, внештатный писатель

Дуэйн О'Брайен (Duane O'Brien) был разносторонним специалистом еще в те времена, когда у игры Oregon Trail был только текстовый интерфейс. Его любимый цвет - sushi (суши). Он никогда не бывал на луне.



12.08.2009

В первой части этой серии мы создали несколько PHP-скриптов начального уровня. Теперь пришло время несколько повысить уровень сложности – это обеспечит дальнейшее совершенствование ваших навыков программирования на PHP и повысит ваш статус в качестве гейммастера.

При работе со скриптами для ролевых игр вы узнаете, как соединить калькулятор повреждения оружия, систему отслеживания характеристик персонажа и генератор NPC-персонажей, а также научитесь сохранять информацию в файле и работать с массивами в PHP. Скрипты для азартных игр помогут вам попрактиковаться в игре в Блэкджек, научиться считать карты и освоить базовые принципы Бинго, а также покажут, как организовать работу со случайными величинами в PHP. И, наконец, скрипты для игр со словами помогут находить решения в игре Jumble, создавать простые подстановочные шифры и генерировать диаграммы для поиска слов, одновременно совершенствуя свои навыки обращения с массивами в PHP.

Мы «пробежимся» по этим скриптам достаточно быстро. Такие темы как поиск хостинга или настройка сервера в данной статье рассматриваться не будут. Сегодня существует множество Web-хостов, которые предлагают PHP-дистрибутивы; в частности, инсталлятор XAMPP удобен в том случае, если вы хотите сформировать свою собственную среду. Мы не будем тратить много времени на разговоры о наилучших методиках PHP-разработки или о принципах проектирования игр. При создании рассматриваемых скриптов к ним предъявлялись несколько иные требования – эти скрипты должны были быть простыми для понимания, легкими в использовании и быстрыми в усвоении.

Прилагаемый к данной статье архив программного кода (далее – Архив) содержит полный исходный текст для каждого описываемого в ней скрипта. Кроме того, вы сможете увидеть эти скрипты «в действии» на Web-сайте: Chaoticneutral.net.

Калькуляторы повреждений

В первой статье этой серии мы построили базовый «кидатель кубика» (die roller). Рассмотрим использование этого «кидателя кубика» для построения базового калькулятора повреждений.

Если вы когда-либо в качестве ведущего или игрока имели дело с ролевыми играми настольного типа, то, вероятно, обратили внимание на большие таблицы оружия, включенные в руководства. Как правило, в этих таблицах (как, например, в таблице 1) дается название оружия и масштаб повреждений, причиняемых этим оружием.

Таблица 1. Вычисление повреждения
Название оружияПовреждение
Little Stick (небольшая палка)1d6
Big Stick (большая палка)1d6+4
Chainsaw (бензопила)2d8

К данному моменту вы должны обладать достаточными навыками, чтобы взять простую функцию roll, созданную в первой части серии "30 игровых скриптов, которые можно написать на PHP"», и использовать ее для вычисления повреждений от применения оружия, входящего в базовый набор. Сначала создайте массив, в котором будет содержаться информация об оружии.

В этом примере у каждого вида оружия есть три основных характеристики: Name (имя), Die Roll (кубик) и Damage Bonus (добавочное повреждение). Используя эти характеристики, построим массив оружия, показанный ниже (листинг 1).

Листинг 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).

Листинг 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). В этом примере мы будем работать с базовым персонажем Fred The Zombie из написанной мной игры под названием Shambles (Бойня). Начнем с массива, в котором будет содержаться информация о персонаже (листинг 3).

Листинг 3. Массив с информацией о персонаже
$character = array(
    'name' => 'Fred The Zombie',
    'health' => '36',
    'gore' => '1',
    'clutch' => '5',
    'brawn' => '6',
    'sense' => '4',
    'flail' => '2',
    'chuck' => '3',
    'lurch' => '4',
);

Вам нужно создать имя для файла, в котором будет храниться эта информация. Предположим, вы не хотите использовать для этого полное имя персонажа, однако при генерации собственного имени для создаваемого файла вы можете использовать только буквы из этого имени (листинг 4).

Листинг 4. Создание файла для хранения информации
$filename = substr(preg_replace("/[^a-z0-9]/", "", 
      strtolower($character['name'])), 0, 20);
file_put_contents($filename, serialize($character));

Примечание. Если вы делаете этот скрипт для общего пользования, то вам следует организовать фильтрацию информации, вводимой пользователями, чтобы не позволить злоумышленникам внедрять в файлы вредоносные JavaScript-сценарии или прочий мусор. В данном случае рассматривается пример скрипта для вашего личного использования. И, наконец, вы должны представить информацию в форме, допускающей простое обновление. Для этого достаточно создать форму, во входных полях которой будут присутствовать значения по умолчанию (листинг 5).

Листинг 5. Представление информации в форме
<input name='health' value='<?php echo $character['health'] ?>' />

Вы можете использовать этот базовый скрипт (см. Архив) для отслеживания нескольких обычных и NPC-персонажей.


Генератор NPC-персонажей

При создании масштабной игры всегда полезно иметь пул доступных NPC-персонажей. Это особенно полезно, если вам необходимо большое количество головорезов или пушечного мяса. Приступим к созданию генератора NPC-персонажей. Сначала создадим массив, содержащий правила для построения персонажей, а затем применим созданные ранее «Генератор случайных имен» и «Кидатель кубика» для создания группы персонажей.

Используя персонаж Fred The Zombie в качестве примера, сформулируем правила для создания персонажа. Некоторые характеристики являются статическими («здоровье», health, всегда начинается с уровня 36); некоторые характеристики являются производными («степень повреждения», gore, = health/6); некоторые характеристики определяются по результатам бросания кубика («способность к захвату», clutch, составляет 1d6 – один бросок кубика с шестью сторонами). Итоговый набор правил показан в листинге 6.

Листинг 6. Описание правил для создания персонажа
$rules = array(
    'health' => '36',
    'gore' => 'health/6',
    'clutch' => '1d6',
    'brawn' => '1d6',
    'sense' => '1d6',
    'flail' => '1d6',
    'chuck' => '1d6',
    'lurch' => '1d6',
);

Теперь мы можем написать небольшой фрагмент кода для проведения вычислений по указанным правилам (листинг 7).

Листинг 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-персонажей. В Архиве находится полный текст соответствующего скрипта для реализации этой задачи.


Калькулятор шансов: кидание кубика

В первой части вы создали простой калькулятор для определения вероятности вытаскивания карты определенного достоинства или определенной масти из заданного набора карт. Теперь мы создадим калькулятор вероятности для кидания кубика. В данном примере мы построим калькулятор, определяющий вероятность результатов при кидании двух шестигранных кубиков для игры в кости (2d6). Этот калькулятор окажется полезным, если вы используете какую-нибудь RPG-систему, основанную на использовании шестигранных кубиков, или играете в такую настольную игру как Монополия или Бакгаммон, или пытаетесь рассчитать шансы в игре в кости.

Для начала необходимо установить, как определяются возможные результаты при кидании двух кубиков. Для упрощения дальнейших рассуждений будем рассматривать кидание двух кубиков, окрашенных в разные цвета – в красный и синий. Если красный кубик приземляется на грань «1», то существует шесть возможных результатов броска синего кубика. Другими словами, общее число возможных результатов при кидании двух кубиков составляет – 6^2 = 36. На первый взгляд, этот вывод может показаться несколько странным, поскольку самое большое числовое значение, которое вы реально можете получить, равно 12 (красная шестерка + синяя шестерка). Этот вывод будет выглядеть более осмысленным, если вы вспомните, что можете получить число «11» двумя различными способами (красная шестерка + синяя пятерка или красная пятерка + синяя шестерка).

Предположим, что в данном примере вы хотите получить определенную сумму (10) и комбинацию (6 + 4), и что нет никакого различия между шестеркой на красном кубике и шестеркой на синем кубике. Важные характеристики в данном случае – это S (число граней кубика) и N (число кубиков). При заданном числе N максимальное число возможных результатов для одинаковых кубиков составляет S^N, хотя некоторые из этих результатов могут быть идентичными (например, 6 + 4 и 4 + 6) (листинг 8).

Листинг 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;
}

Вероятно, этот код выглядит несколько неуклюжим. Вы можете существенно оптимизировать этот код, но я хотел сделать его максимально наглядным для того, чтобы читатель смог понять, как осуществляется работа с массивами. После того как вы создадите заключительный массив, вы можете пройти по этому массиву и сгенерировать список итоговых сумм и соответствующих этим суммам шансов. Код этого скрипта также включен в состав Архива.


Простой дилер для игры в Блэкджек

В первой части этой серии мы построили простого дилера (раздатчика карт) для игры в покер. Фактически этот дилер не играл против вас; он всего лишь сдавал карты из колоды, чтобы вы могли попрактиковаться с различными комбинациями на руках. Теперь мы построим дилера для игры в Блэкджек, который будет реально играть против вас. При построении этого дилера мы будем следовать простому игровому регламенту, в соответствии с которым дилер обязан вытягивать карты не менее чем на 17 очков.

Отдельные фрагменты этого кода будут похожи на код простого покерного дилера, который мы в свое время создали. Для Блэкджека нам необходимо реализовать итеративный процесс вытягивания карты с последующей оценкой суммы на руках. Нам потребуется массив, который будет присваивать достоинства карт их числовым описаниям. Это можно сделать в исходном массиве $faces, если изменить порядок построения колоды (листинг 9).

Листинг 9. Изменение массива $faces для игры в Блэкджек
$faces = array('Two' => 2, ... ... ... 'King' => 10, 'Ace' => 11);

Затем нам потребуется базовая функция для оценки определенной руки. Эта функция будет смотреть на карты игрока и возвращать общую сумму карт на его руке (листинг 10).

Листинг 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;
}

Располагая функцией для оценки одной руки, вы без каких-либо затруднений сможете определять, не превысила ли ваша рука значение 21, или что в данной ситуации должен делать дилер. Полный текст соответствующего скрипта включен в Архив.


Счетчик карт

При игре в Блэкджек или в игры с козырями (такие как Червы) определенную пользу игроку может принести умение считать карты. В случае Блэкджека вам, как минимум, необходимо знать, сколько тузов и картинок вы уже увидели на текущий момент времени. При игре в Червы вам может потребоваться информация о том, сколько козырных карт осталось в игре. Для игры в Блэкджек мы построим простейший счетчик. При построении счетчика карт для игр с козырями вы можете использовать эти же принципы.

При подсчете карт построение карточной колоды осуществляется несколько иначе. Вам нет необходимости знать все карты – вам важна информация, те ли это карты, которые вас интересуют. Счетчик для одиночной колоды будет выглядеть следующим образом (листинг 11).

Листинг 11. Построение счетчика карт для одиночной колоды
$deck = array (
    'faces' => 16, // 10,J,Q,K * 4 suits
    'aces' => 4, // One per suit
    'other' => 32, // 52 - (16 + 4)
);

Теперь нужно построить простую форму с тремя кнопками (одна кнопка для фигурных карт, одна для тузов и одна для остальных карт). Каждый раз, когда вы увидите карту определенного типа, вы будете нажимать на соответствующую кнопку, после чего скрипт произведет подсчет карт, оставшихся в колоде (листинг 12).

Листинг 12. Простая форма с тремя кнопками
if ($_POST['submit'] == 'faces') {
    $deck['faces']--;
}

Теперь, по результатам анализа карточной колоды, после ее очередного изменения, вы сможете вычислять шансы для выпадения картинки, туза или иной карты (листинг 13).

Листинг 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).

Листинг 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;
}

После этого вы сможете одновременно перемешивать каждый подмассив и делать карточки. (Не забывайте: как правило, середина карточки оставляется свободной). Теперь создайте один главный массив, который вы сможете использовать подобно карточной колоде (листинг 15).

Листинг 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);
}

Теперь вы полностью готовы к игре! Раздайте свои карточки и начинайте вытаскивать виртуальные шары Бинго из главного набора – примерно так же, как вы раньше вытягивали карты. Полнофункциональная версия этого скрипта включена в состав Архива.


Помощник для игры в Jumble

Игра Jumble – это словесная головоломка, часто встречающаяся в газетах. Потенциальным игрокам предлагается несколько полностью перепутанных слов. Сначала вы должны создать из этой абракадабры реальные слова, а затем использовать определенные буквы для создания новой фразы. Воспользуемся помощником для разгадывания кроссвордов, созданным в первой части этой серии, и на его основе сформируем небольшой скрипт, который поможет нам при игре в Jumble.

Сначала откройте свой список слов. Нам необходимо организовать итерационное прохождение по этому списку с превращением каждого слова в отсортированный массив букв и с последующим воссоединением этого массива. Например, эта процедура превратит слово «COLOR» в строку «CLOOR»; эта строка содержит все буквы слова «COLOR», но в предсказуемом (и, что еще более важно, в сопоставляемом) порядке. Затем эта строка используется в качестве ключа для массива совпадающих слов. Это должен быть именно массив, поскольку слова «sword» и «words» состоят из одних и тех же букв, но в различном порядке. В конечном итоге наш скрипт будет выглядеть следующим образом (листинг 16).

Листинг 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);
    }
}

Теперь вы можете обращаться со своим «перепутанным» словом точно так же, как и с любым другим словом, т. е. искать значение для соответствующего ключа и выводить получающиеся результаты (листинг 17).

Листинг 17. Окончание скрипта для игры Jumble
$arr = str_split($_POST['jumble']);
sort($arr);
$search = implode('', $arr);

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

Полный текст данного скрипта включен в Архив.


Подстановочные шифры

Подстановочный шифр – простая техника шифрования, при которой каждая буква определенного алфавита заменяется другой буквой этого же алфавита. С точки зрения современного уровня шифрования, это не более чем детские игрушки. Тем не менее, простые подстановочные шифры представляют определенный интерес, особенно в контексте RPG-игр. Например, они могут служить для передачи другому игроку закодированного сообщения, созданного в процессе игры.

Для начала возьмем часть кода из генератора для игры в Виселицу (см. первую часть), а именно массив букв. Сделаем вторую копию этого массива, перетасуем эту копию и построим ассоциативный массив, в котором исходная буква получает «перетасованное» значение (листинг 18).

Листинг 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).

Листинг 19. Разбиение на буквы и вывод букв
if (!empty($_POST)) {

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

Использование символа @ перед $key[$letter] – это указание PHP-интерпретатору игнорировать любые ошибки, которые могут происходить в процессе шифрования. Если в сообщении будут присутствовать пунктуационные знаки, числа или пробелы, то PHP-транслятор пожалуется на то, что в массиве $key отсутствуют соответствующие значения. Это пойдет нам только на пользу. Результирующий зашифрованный текст будет лишен пробелов, чисел и пунктуационных знаков, что несколько затруднит его расшифровку.


Генератор для поиска слов

По всей вероятности, поиск слов – это одна из первых буквенных головоломок, с которой каждый из нас познакомился в свое время. Используя рассмотренные ранее методы и включив немного логики из помощника для разгадывания кроссвордов, вы сможете создать прекрасный базовой генератор для поиска слов. Чтобы не усложнять пример, будем осуществлять поиск слов в таблице размерностью 10x10 букв, внутри которой будет скрыто 10 слов (пять по вертикали и пять по горизонтали).

Первая часть задачи (ввод горизонтальных слов) достаточно проста – постройте массив из массивов (по 10 элементов в каждом), заполненных точками. Затем в каждом из остальных массивов вставьте буквы для отдельных слов. Чтобы вставить вертикальные слова, вы должны пройти по всем массивам одновременно, используя при этом код кроссвордного помощника для отыскания возможных совпадающих слов. Возможно, самый хитрый момент на следующем фрагменте кода (листинг 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);
        }
    }
}

В Архив включены соответствующие комментарии, разъясняющие этот процесс в целом. Существует масса возможностей для усовершенствования этого кода; в своем нынешнем виде он позволяет читателю получить общее представление о методах решения рассматриваемой проблемы. Чтобы увидеть реальные результаты его работы, воспользуйтесь полным скриптом из Архива.


Заключение

В данной статье было показано, как на основе некоторых базовых скриптов, написанных в первой части серии под общим названием «30 игровых скриптов, которые можно написать на языке PHP» , создать несколько более сложных скриптов. Основываясь на полученных в этой статье результатах, в третьей части этой серии мы создадим еще более интересные и полезные инструменты.


Загрузка

ОписаниеИмяРазмер
10 intermediate PHP scriptsos-php-gamescripts2-php10games2.zip385KB

Ресурсы

Научиться

  • Оригинал статьи: 30 game scripts you can write in PHP, Part 2: Developing 10 intermediate scripts (EN).
  • Первое знакомство с XAMPP (EN): XAMPP – простой в установке дистрибутив Apache, в состав которого также входят продукты MySQL, PHP и Perl.
  • Опробуйте действующие примеры (EN) всех скриптов.
  • Бюро переписи США (EN) – обширный источник информации для списков имен.
  • Базовая информация об игре Paranoia (EN).
  • Ознакомьтесь с основными правилами игры в покер (EN).
  • Некоторые удобные списки слов (EN). Дополнительные ресурсы на Web-сайте ManyThings.org (EN).
  • Посетите официальный Web-сайт игры Mad Libs (EN).
  • Прочитайте статью Apache V2 and PHP Installation (EN), в которой описывается, как получить дистрибутивы Apache V2 и PHP V4.x (поддерживается использование PHP V5.x), совместно работающие в среде Linux.
  • В статье "Подключение PHP-приложений к серверу Apache Derby" (EN) показано, как установить и сконфигурировать PHP в среде Windows (некоторые шаги применимы и к среде Linux).
  • Прочитайте статью "Learning PHP, Part 1" (EN) (Изучение PHP, часть 1), в которой излагаются базовые сведения по PHP. Затем прочитайте Часть 2 (EN) этой статьи, чтобы узнать, как загрузить файлы на локальные хосты с помощью DOM и SAX. В завершающей эту серию Части 3 описывается потоковое приложение.
  • Обратитесь к документу Руководство по PHP (EN), чтобы узнать больше об объектах данных в PHP и об их возможностях.
  • PHP.net (EN): центральный ресурс для PHP-разработчиков.
  • Ознакомьтесь со "списком рекомендованной литературы по PHP (EN)."
  • Просмотрите все материалы по PHP (EN) на ресурсе developerWorks.
  • Для совершенствования навыков программирования на PHP рекомендуем посетить раздел ресурса IBM developerWorks под названием Ресурсы проекта PHP (EN).
  • Прослушайте интересные интервью и дискуссии для разработчиков ПО: подкасты ресурса developerWorks (EN).
  • Используете базу данных с PHP? Ознакомьтесь с продуктом Zend Core for IBM (EN) – это простая в установке и применении, готовая к использованию среда для разработки и эксплуатации приложений на языке PHP, поддерживающая IBM DB2 V9.
  • Следите за техническими событиями и Web-трансляциями на ресурсе developerWorks (EN).
  • Своевременно узнавайте о намечаемых конференциях, выставках, Web-трансляциях и других событиях (EN) во всем мире, представляющих интерес для разработчиков продуктов IBM с открытым кодом.
  • Посетите раздел Web-сайта developerWorks, посвященный продуктам с открытым кодом (EN) – к вашим услугам обширный ассортимент справочной информации, инструментов и обновлений, который поможет осуществлять разработки на основе технологий с открытым кодом и использовать их вместе с продуктами IBM.
  • Наблюдайте и изучайте технологии IBM и технологии с открытым кодом, а также функции новых продуктов бесплатно: демонстрации «по запросу» на ресурсе developerWorks (EN).

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Open source
ArticleID=420315
ArticleTitle=30 игровых скриптов, которые можно написать на языке PHP : Часть 2. Разработка 10 скриптов средней сложности
publish-date=08122009