1 Востаннє редагувалося Vo_Vik (09.02.2014 21:39:52)

Тема: Пишу(емо) браузерку на PHP

Власне на створення цієї теми надихнули свої метання 10-ти річної давності, а також кілька тем на цьому і інших форумах.

Отже спробую описати процес написання браузерки. Буду писати коли матиму час, тобто фактично по вихідних, тому процес може розтягнутись. Я так підозрюю що тема може розростися на багато сторінок, тому по мірі оновлення буду редагувати перше повідомлення і додавати до нього лінки на решту моїх постів.

Зміст
Вибір технологій.
Загалний опис гри.
Готуємо середовище розробки.
Композер
Встановлюємо Yii
Git. Ініціалізація і перший коміт
"Заливаємо"  наші зміни на github

2

Re: Пишу(емо) браузерку на PHP

Вибір технологій.

Ну так сталось, що більше мав справи під LAMP, тому будемо писати під оцим, за виключенням що все ж я буду використовувати Nginx замість Apache. Але це суттєвого значення немає, все має йти і під апачем.

Були вагання чи використовувати фреймворк, все ж вирішив хай буде з ним, стаття все ж більше навчальна. В реальному проекті нам потрібна швидкодія, тому там би я ще довго вагався. Все ж візьмемо найбільш швидкий з мені відомих Yii.
MySQL візмемо самий звичайний, то й що йде в звичайному репозиторії убунти 5.5  на даний момент.

Система контролю версій буде git. Код буде викладатись на github.com, тож легко буде ілюструвати зроблені зміни.

Доречі, звернення до всіх початківців, обов’язково використовуйте систему контролю версій. Буває вже на наступний день забуваєш що робив вчора. Або щось поміняв і те що раніше працювало, а тепер перестало. З системою контролю версій будете бачите що ви власне поміняли.

Подякували: miroslav.chandler, Replace3

3

Re: Пишу(емо) браузерку на PHP

Загальна ідея гри.

Є 3 фрації, умовно сині, зелені, сині. Є початкова фракція сірих з якої починаємо грати. Кожна фракція має набір 3-х основних шляхів розвитку, атака, захист, підтримка. З кожною дією певного типу збільшується навик цього типу, а відповідність успішного виконання дії, а також стають доступними дії вищі по класу для цього типу.  З кожним успішним боєм збільшується бойова слава, яка дає можливість після ініціалізації і вибору ігрової фракції переходити на вищий рівень сприйняття, що збільшує швидкість і захист. Бойова слава з часом "забувається", тобто щоб зберігати рівень треба постійно грати.

Це так в основному, походу будемо уточнювати деталі.

І 2 слова про реалізацію. Фактично будемо писати для можливості безболісного переходу на не веб клієнт. Тобто "серверній частині" повинно бути все рівно хто до неї звертається на іншій стороні. Тобто в браузері у нас буде якась проста, але повнофунціональна реалізація ігрового клієнта.

Подякували: Replace2

4 Востаннє редагувалося Vo_Vik (06.01.2014 16:11:38)

Re: Пишу(емо) браузерку на PHP

Готуємо середовище розробки.

Спочатку встановимо веб сервер з MySQL i PHP
становлення Apache 2.2.17, php 5.3.5, MySQL 5.5.9 під Windows
Встановлення і Apache, PHP, MySQL версії для Windows i Ubuntu
Встановлення php-fastcgi та nginx у Debian/Ubuntu
Встановлення локального серверу WAMP

Якщо у вас не буде після попереднього пункту, то встановлюємо ще phpMyAdmin
http://www.phpmyadmin.net/home_page/downloads.php

Маленький секрет для власнків Windos. Відкриваєте файл %SystemRoot%\system32\drivers\etc\hosts
і там добавляєте щось типу оттакого
127.0.0.1    game
де "game" - назва сервера яку ви створили при конфігурації віртуального хосту по лінках вище. Це повідомить вашому комп’ютеру що домен game знаходиться по адресу 127.0.0.1 - що є адресою вашого комп’ютера.
Тобто в кінцевому результаті набравши в браузері game, маємо одержати щось таке:
http://www.image-share.com/upload/2392/89.jpg

Де текст на екрані має відповідати тексту у вашому index.php файлі

Я розумію, що у багатьох виникнуть питання по цьому пункту, але це питання скоріше по налаштуваннях веб серверів ніж по написанні гри, так що будем на них відповідати по ходу, але в зміст не заноситемо.

Post's attachments

web_server.jpg 23.04 kb, 447 downloads since 2014-01-06 

Подякували: Replace2

5

Re: Пишу(емо) браузерку на PHP

Ну що продовжимо.

Композер.

Для тих хто не в курсі, composer це скрипт який дозволяє автоматизувати загрузку і підключення сторонніх бібліотек. Перевага його використання, що в свому проекті ви просто в композері перечислюєте які сторонні проекти підключати і яких версій, і композер виконає за вас всю іншу роботу. Відповідно якщо хтось захоче запустити ваш код у себе, то завдяки композеру одержить абсолютно ті самі сторонні бібліотеки, які ви використовували. Тобто можна залишити контроль версій сторонніх проектів їхнім розробниками, а самому переживати тільки за свій проект і в гіті тримати тільки його.

http://getcomposer.org/doc/00-intro.md# … on-windows - ось тут інструкція як його ставити під віндовс. Даруйте, але української версії не знайшов.

Під лінукс просто ж робимо
$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer

При необхідності треба буде поставити curl, якщо він у вас ще не встановлений.
sudo apt-get install curl

6 Востаннє редагувалося Vo_Vik (09.02.2014 04:21:40)

Re: Пишу(емо) браузерку на PHP

Вибачте що довго не писав, події в Україні трохи вибили з колії.

Цей пост буде трохи відступом від власне написання гри, то в зміст його не додаю.
Отже продовжимо. Остання версія Yii вимагає >php5.4.0
як виявилось у мене тільки:
php -v
PHP 5.3.10-1ubuntu3.9 with Suhosin-Patch (cli) (built: Dec 12 2013 04:24:43)

Ну що ж обновимо версію.
sudo add-apt-repository ppa:ondrej/php5
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install php5

Після встановлення отримаємо
php -v
PHP 5.5.8-3+sury.org~precise+2 (cli) (built: Jan 29 2014 13:27:08)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies
    with Zend OPcache v7.0.3-dev, Copyright (c) 1999-2013, by Zend Technologies

Однак стандартна інсталяція змінює тільки конфігурацію apache, оскільки я використовую php-cgi під nginx, то phpinfo все ще показує версію PHP Version 5.3.10-1ubuntu3.9

Прийшлось трохи попаритись з Упгрейдом системи, як виявилось в Українському репозиторії mate немає всіх оновлень, то прийшлось переключитись на основний репозиторій, нажать пробавився близько години, то не можу відтворити всіх кроків, і сказати що власне вирішило проблему. Якщо в когось буде щось схоже, то пишіть, будем і для вас разом вирішувати. Судячи з версії яка встановилась, то помогло добавляння precise в source list.

Наразі маю:
PHP Version 5.5.8-3+sury.org~precise+2

під віндовс просто скачайте собі інсталяційний файл з останньою версією і встановіть його. http://windows.php.net/download/

7 Востаннє редагувалося Vo_Vik (09.02.2014 06:07:54)

Re: Пишу(емо) браузерку на PHP

Встановлюємо Yii2

Директорії де буде знаходитись наш проект створюємо файл composer.json

{
    "type": "yii2-extension",
    "require": {
    "yiisoft/yii2-composer" : "dev-master",
        "yiisoft/yii2": "dev-master"
    }
}

із запускаємо команду composer update

ця дія повинна загрузити останню версію Yii2  з гітхабу і створити директорію vendor де буде розміщенний сам фреймворк, також по мірі додавання там будуть міститись інші сторонні бібліотеки.

Перевіримо чи все працює
Базовий конфіг:

Прихований текст

config/web.php

<?php
// This is the main Web application configuration. Any writable
// CWebApplication properties can be configured here.
return array(
        'id' => 'basic',
        'basePath' => dirname(__DIR__),
        'preload' => array('log'),
);

public/index.php

<?php

// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

$config = require(__DIR__ . '/../config/web.php');

(new yii\web\Application($config))->run();

views/layouts/main.php

<?php
use yii\helpers\Html;

/**
* @var \yii\web\View $this
* @var string $content
*/
?>
<?php $this->beginPage() ?>
<!DOCTYPE html>
<html lang="<?php echo Yii::$app->language ?>">
<head>
<meta charset="<?php echo Yii::$app->charset ?>"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?php echo Html::encode($this->title) ?></title>
<?php $this->head() ?>
</head>
<body>

<?php $this->beginBody() ?>
<div>
<?php echo $content ?>
</div>
<?php $this->endBody() ?>
</body>
</html>
<?php $this->endPage() ?>

Індекс контролер з статичною сторінкою

Прихований текст

controllers/SiteController.php

<?php
namespace app\controllers;

use Yii;
use yii\web\Controller;

class SiteController extends Controller
{
    /**
    * This is the default 'index' action that is invoked
    * when an action is not explicitly requested by users.
    */
    public function actionIndex()
    {
        return $this->render('index');
    }

}

views/site/index.php

<?php

use yii\helpers\Html;
/**
* @var yii\web\View $this
*/
$this->title = 'My Game';
?>

<h1>Welcome to <i><?php echo Html::encode($this->title); ?></i></h1>

Також потрібно створити папочку runtime і дати права веб-серверу на запис туди
mkdir runtime
sudo chown -R www-data:www-data runtime

В даному прикладі всі шляхи вказані від корення нашого проекту. На наступному кроці ми це все закомітимо і ви зможете скачати готові файли з гітхабу.

Також перевірте чи конфігурація вашого віртуального хоста вказує на папочку паблік, яку ми створили в цьому повідомленні.

в результати ваш браузер мав би відобразити ось такий текст

Welcome to My Game

З таким початковим кодом сторінки.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>My Game</title>
<meta name="csrf-var" content="_csrf">
<meta name="csrf-token" content="YnpEcHJTanYSSjUiQQdcDwoSPgIbaik.PSkAKQBrNTImCQ8WQTYlRQ=="></head>
<body>

<div>

<h1>Welcome to <i>My Game</i></h1></div>
</body>
</html>

ПС: якщо десь щось налажав, вибачайте, сьогодні побачив Yii2 перший раз. Буду радий вислухати конструктивну критику.

8

Re: Пишу(емо) браузерку на PHP

Ну от бачите, за місяць в Фараона вже була глючна, але хоч трохи робоча гра.
А ви тільки фреймворк обрали і вперше написали слово Game.
Причому реальних причин, чому зроблений той чи інший вибір, не пишете - мовляв, це тому, що "стаття все ж більше навчальна". І чому ж вона навчатиме?
Якщо вже навчати писати гру, то, як на мене, треба робити все циклами, як в звичайній розробці. Я розумію, що ви вже всі граблі добре знаєте, але новачки не знають, і будуть наступати, навіть якщо прочитають цей курс.
Зрештою, можна все оформити як четверту-п'яту ітерацію, і додавати коментарі ("ось тут можна було б спростити, але на третій ітерації у нас все завалилося через <?=$вигадана_причина?>").

9

Re: Пишу(емо) браузерку на PHP

Ну нарешті, хоч якийсь комент. Якби я сидів тут стільки скільки Faraon, то теж би було вже щось робоче. Ладно не хочу я говорити про його код. Я в принципі і хочу робити це циклами. На рахунок Yii, здається писав, але можу повторити ще раз. Yii вважається одним з найшвидших, що для гри є принциповим моментом.
По ітераціях, так і планується писатись. Просто треба хоч якийсь діалог для цього. Тому дуже дякую за коментарій.

10

Re: Пишу(емо) браузерку на PHP

Прихований текст

Цікаво, чому Фараон не відписує тут

Подякували: koala, Kasper2

11

Re: Пишу(емо) браузерку на PHP

Chemist-i написав:
Прихований текст

Цікаво, чому Фараон не відписує тут

Прихований текст

Бо, по-перше, тут немає гри, а по-друге, тут багато незрозумілих йому слів (nginx, Yii etc.)

12 Востаннє редагувалося Vo_Vik (09.02.2014 20:58:10)

Re: Пишу(емо) браузерку на PHP

Git. Ініціалізація і перший коміт.

В директорії проекту виконуємо команду

git init

Initialized empty Git repository in /home/sites/game/.git/

ну от в нас є репозиторій гіту.
тепер якщо набрати git status
то одержите список всіх змінених файлів в нашому проекті. Оскільки у нас є тільки init, то цей список є списком всіх файлів в проекті.

# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .buildpath
#    .project
#    .settings/
#    composer.json
#    composer.lock
#    config/
#    controllers/
#    log/
#    public/
#    runtime/
#    vendor/
#    views/
nothing added to commit but untracked files present (use "git add" to track)

з цього всього списку я буду відслідковувати тільки ті файли, які є унікальними для проекту, все інше потрібно сховати від гіту. Створимо файл .gitignore

.*
composer.lock
log
runtime
vendor

тепер якщо виконати git status, то буде показано тільки ті файли які ми створили вручну.
Залишилось їх закомітити

git add .
git commit -m"first commit"

Або поставимо собі візуальний інтерфейс для цього
sudo apt-get install git-gui

Тепер після виконання команди git gui запуститься вікно в якому можна переглянути список модифікацій, відмітити потрібні для коміту файли, та власне і зробити коміт.
http://goo.gl/2CykPL

Post's attachments

git_gui.jpg 56.91 kb, 368 downloads since 2014-02-09 

13

Re: Пишу(емо) браузерку на PHP

"Заливаємо"  наші зміни на github

https://help.github.com/articles/create-a-repo - ось хороша інструкція по створенні нових репозиторіїв.
https://help.github.com/articles/generating-ssh-keys - також пораджу використовувати ssh ключі при роботі.

Отже створимо ключі, README файл і закинемо все на гігхаб
https://github.com/Vo-Vik/game - ось так воно виглядає.

14

Re: Пишу(емо) браузерку на PHP

так 2 гілка уіі пабілк превю. чого б не юзати уіі1?

15 Востаннє редагувалося Vo_Vik (10.02.2014 04:52:08)

Re: Пишу(емо) браузерку на PHP

Ну так колись треба починати. А так проект не комерційний, то чого б і не попробувати.

Плюс підтримка композера з коробочки.

16

Re: Пишу(емо) браузерку на PHP

в уіі1 також є підтримка композера

17

Re: Пишу(емо) браузерку на PHP

Та так, але давай глянемо на ситуацію коли хтось буде читати цю тему через рік. У нього тоді будуть протилежні питання, навіщо юзати yii, якщо вже більше півтора року існує yii2. Що ж ви такі технології використовуєте.

18

Re: Пишу(емо) браузерку на PHP

Автори пишуть, що Yii2 - не зовсім те, що думають інші.
Тобто Yii2  це готовий фреймворк CMS з набором модулів і не має відношення до Yii (MVC only), як ніби нова версія.

або переплутав з їхнім іншим проектом, або дійсно так робили до 2014 року в розробці....
Виправте якщо не правий.

19

Re: Пишу(емо) браузерку на PHP

Vo_Vik написав:

..... навіщо юзати yii, якщо вже більше півтора року існує yii2. Що ж ви такі технології використовуєте.

Ага з 2011 до 2014.10 він був у стані розробки
і дуже сирий!! станом 2013.10,
особливо для тих хто тільки починає вивчати аби яку MVC такого рівня

20

Re: Пишу(емо) браузерку на PHP

Оскільки все заглохло більше як рік тому, то коли відновиться. то пару статей певно прийдеться поправити)