Урок №1 - Регистрация и авторизация игроков

уроки, мануалы, советы по Construct 2

Полезен ли этот урок:

Да, очень полезен
17
63%
Да, познавательно
7
26%
Так себе
2
7%
Нет, ничего нового
0
0%
Нет, отвратительно
1
4%
Всего голосов : 27

Сообщение Урок №1 - Регистрация и авторизация игроков
» 16 май 2015, 00:47

В этом уроке мы создадим мини игру с использованием регистрации и авторизации ее участников (назовем ее КРЕПЫШ - сокращенно от крепкого орешка), научимся записывать данные в базу MySQL, а также выводить их обратно. Для начала определимся с инструментами и ресурсами.

 Урок №1
LessonOne.capx
(1.64 МБ) Скачиваний: 95

Нам потребуется:

 Изображение
Изображение
 Описание
1. Изображения - лежат они в папке Details. В принципе можете использовать свои, в инете их полно.
2. Звуковые эффекты представлены 4 файлами OGG - также лежат в папке Details.
3. Программа Notepad ++, весит мало, умеет много. Качайте с оф. сайта, поддерживает все ОС.
4. Ну и собственно сам движок Construct 2. Плагинов качать никаких не надо, последняя версия подойдет.
 Ресурсы
Details.rar
(293.85 КБ) Скачиваний: 70

1. Создание проекта.

 Изображение
Изображение
 Описание
1.1 Создадим новый проект - File -> New. Заполним нужные поля About, Project settings и Configuration Settings. Имя проекта (name) - Урок №1, размер окна Window Size - 1024,768.
1.2 Изменим название нашей сцены (Layout 1) - Game, название прикрепленного к ней эвента (Event sheet 1) - Event Game. Установим размер сцены Game равными размерам нашего окна проекта (Layout size) - 1024,768. Добавление объектов расписывать не буду, на скриншотах приведены все настройки. Необходимо подключить следующие плагины: AJAX (нужен для взаимодействия с нашими php скриптами), Audio (музыкальное сопровождение), Brouser (я его не использовал, но необходим для включения полноэкранного режима), Mouse (производит действия с объектами).
1.3 Перейдем во вкладку Слои (Layers). Переименуем наш слой (Name) - Ground, изменим его цвет (Background color) - 0,0,0 и изменим значение паралакса (Parallax) - 0,0 и Scale rate - 0.

2. Настройка слоев и объектов.

 Изображение
Изображение
Изображение
Изображение
Изображение
Изображение
 Описание
2.1 Создадим еще два слоя Menu и Record. Настроим их по аналогии Ground, но значение Transparent установим на yes. Слой Menu сделаем нивидимым на старте Initial visibility - Invisible.
2.2 Все объекты распределим по слоям, пользуйтесь скриншотами. На примере объекта Blood объясню как читать скриншоты с настройками всех остальных объектов.
Изображение
2.2.1 Создадим спрайт с именем Blood на слое Ground.
2.2.2 Установим ему позицию 25, -100 и размер 50, 45
2.2.3 Добавим ему поведение Fade. Время появления (Fade in time) - 0, Время задержки (Wait time) - 0 и время исчезновения (Fade out time) - 1.
2.3 Будьте внимательны, некоторые объекты имеют свои поведения. Для объектов ter и girl нужно настроить коллизионную маску для точного попадания и точку origin - 150,150.
 Настройка коллизии
В идеале не рекомендуется использовать более 8 точек коллизии, но т.к. у нас всего один кадр анимации, то ничего страшного не будет.
Изображение

3. Работа с php файлами.

 Описание
3.1 Всего у нас будет 4 скрипта: base, enter, record и death. Далее мы подробно разберем их по отдельности.
3.2 base.php - отвечает за подключение к базе данных, в которой мы будем хранить информацию об участниках игры.
3.3 enter.php - выполняет проверку вводимых данных (имени и пароля) и автоматически определяет авторизуется участник или регистрируется.
3.4 record.php - выводит список игроков набравших большее количество очков.
3.5 death.php - проверяет имеющееся количество очков в базе и заменяет его если игрок поставил свой новый рекорд.
 base.php
Код: Выделить всё
<?php
   // ShadowSSystemSProductS - KrashtreaT
   defined('PROTECTOR') or die('Error: restricted access');

   // введем имя сервера, базы, пользователя и пароль
   $mysql_host = "хост имя";
   $mysql_base = "имя базы";
   $mysql_user = "имя пользователя";
   $mysql_pass = "пароль";

   // выполним mysqli запрос серверу
   $mysqli = new mysqli("$mysql_host","$mysql_user","$mysql_pass","$mysql_base");

   // проверим подключение
   if (mysqli_connect_errno()){
         printf("Ошибка подключения к серверу. Код ошибки: %s\n", mysqli_connect_error());
         exit;}
?>
 enter.php
Код: Выделить всё
<?php
   // ShadowSSystemSProductS - KrashtreaT
   define('PROTECTOR', 1);
   
   // запишем переменные, отправленные нам методом POST
   // перед записью в БД сделаем экранирование строк и символов
   // для защиты от JS скриптов используем htmlspecialchars
   $name = htmlspecialchars(addslashes($_POST['name']));
   $pass = htmlspecialchars(addslashes($_POST['pass']));
   
   // проверим вводимые данные на недопустимые символы
   if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/",$name) or preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/",$pass)){
      echo "ИМЯ ЗАНЯТО";
      exit;}
   
   // проверим длинну вводимых данных
    if(strlen($name) < 3 or strlen($name) > 30 or strlen($pass) < 3 or strlen($pass) > 30){
        echo "ИМЯ ЗАНЯТО";
      exit;}
   
   // подключимся к БД
   include ('base.php');
   
   // если имя не заполнено выведем ошибку
   if ($name == ''){
      echo "НЕТ ИМЕНИ";
      exit;}

   // закодируем пароль участника используя md5
   $pass = md5($pass);
   
   // выполним запрос к БД на наличие участника с нужным именем и паролем
   $user = $mysqli->query("SELECT * FROM user WHERE name = '$name' AND pass = '$pass' LIMIT 1");
   $numuser = $user->num_rows;
   $user->close();

   // если такой участник существует выведем его имя
   if ($numuser == 1){
      echo $name;
      exit;}
   
   // если такого нет, выполним запрос к БД на наличие участника с нужным именем
   $user = $mysqli->query("SELECT * FROM user WHERE name = '$name' LIMIT 1");
   $numuser = $user->num_rows;
   $user->close();

   // если такой участник существует, выведем ошибку
   // если такого участника нет, произведем запись данных в БД и выведем его имя
   if ($numuser == 0){
      $mysqli->query("INSERT INTO user (name, pass) VALUES ('$name', '$pass')");
      echo $name;
      exit;}
   else {
      echo "ИМЯ ЗАНЯТО";
      exit;}
?>
 record.php
Код: Выделить всё
<?php
   // ShadowSSystemSProductS - KrashtreaT
   define('PROTECTOR', 1);
   
   // подключимся к БД
   include ('base.php');
   
   // выполним запрос к БД на выборку пятерых учатников с наибольшим количеством очков
   $score = $mysqli->query("SELECT * FROM user ORDER BY `score` DESC LIMIT 5");
   
   // выведем полученные данные
   while( $result = $score->fetch_assoc() ){
      echo $result['name']." - ".$result['score']."|";}
   $score->close();
?>
 death.php
Код: Выделить всё
<?php
   // ShadowSSystemSProductS - KrashtreaT
   define('PROTECTOR', 1);
   
   // запишем переменные, отправленные нам методом POST
   $name = htmlspecialchars(addslashes($_POST['name']));
   $score = htmlspecialchars(addslashes($_POST['score']));

   // проверим вводимые данные на недопустимые символы
   if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/",$name) or preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/",$score)){
      echo "ОШИБКА";
      exit;}

   // подключимся к БД
   include ('base.php');
   
   // выполним запрос к БД на наличие участника с нужным именем
   $user = $mysqli->query("SELECT * FROM user WHERE name = '$name' LIMIT 1");
   $numuser = $user->num_rows;

   // если такой участник существует, проверим его результат и сравним его с новым
   // если новый результат больше записанного, перепишем его используя Update
   // если такого участника нет, выведем ошибку
   if ($numuser == 1){
      while( $result = $user->fetch_assoc() ){
         if ($score > $result['score']){
            $mysqli->query("UPDATE `user` SET `score` = '$score' WHERE `name` = '$name' LIMIT 1");}}
      $user->close();
      exit;}
   else {
      echo "ОШИБКА";
      exit;}
?>

4. База данных MySQL.

 Изображение
Изображение
Изображение
 Описание
4.1 Для того чтобы разместить проект в сети, необходимо выбрать хостинг провайдера. Для своих тестовых работ я использую поставщика услуг Hostinger, но это уже на ваше усмотрение. После регистрации на хостинге, первым делом создадим FTP аккаунт и новую базу данных MySQL.
4.2 Для работы с БД воспользуемся специальной средой phpMyAdmin. В папке SQL лежит файл lesson1.sql - это дамп базы данных, откроем его программой Notepad ++ и скопируем содержимое. В phpMyAdmin войдем в нашу базу -> вкладка SQL (выполнение SQL запросов) и вставим туда наш дамп. Таблица user успешно создана, в нее мы будем записывать имя, пароль и количество очков игрока.

5. Эвенты.

 Изображение
Изображение
Изображение
Изображение
Изображение
 Описание
5.1 Для начала назовем константы: name - имя участника, также будет использоваться для вывода ошибок авторизации и регистрации, stage - уровень игры, будет использоваться в формуле определяющей сложность игры, score - очки игрока, teror - количество врагов на уровне, увеличивающееся с каждым уровнем, resp - время спавна врагов и заложников, killteror - количество убитых врагов, girl - количество, скажем так, заложников, killgirl - количество убитых заложников, timer - определяет время, через которое враги начнут стрелять, diff - сложность игры, формирует время спавна врагов, patron - количество патронов в обойме.
5.2 Системные эвенты. Тут ничего сложного, прелоад музыкального сопровождения, установка спрайта на курсор. Выполним условие, если слой Record видимый, то выполним AJAX запрос к файлу record.php, для выборки лучших игроков. Также обозначим константы, которые обновляются в начале игры. Если слой Menu - видимый, то перенесем кнопку входа со слоя Record на Menu и оформим наши текстовые поля. Проверим не авторизован ли наш участник, если да то слой Menu делаем невидимым и переходим к игре. Если из видимых слоев только Ground, то обозначим константы, которые обновляются в начале уровня и заполним текстовые поля с номером раунда и количеством очков. Далее начнем игру, будем спавнить врагов и заложников, таймаут спавна расчитаем по формуле - resp/diff (с 1 по 30 уровень спавн будет через 1 секунду, далее время задержки будет уменьшаться). Также с каждым созданным врагом будем включать его таймер (поведение объекта ter). Если игрок не успеет уничтожить врага, до окончания таймера, то враг застрелит игрока. Заложники спавнятся заметно реже, расчитываем по формуле - resp/diff*5 и через 4 секунды после создания самоуничтожаются. Теперь нам нужно указать условия прохождения или окончания раунда. Если убитых заложников больше 2 или таймер закончил свое действие, отправляем POST запрос файлу death.php. Расстрел игрока оформим звуковым сопровождением и анимацией выстрелов. Если все враги и заложники раунда созданы, завершаем раунд, переходим на следующий - stage = stage + 1.
5.3 Теперь распишем эвенты управления. При любом клике мыши и при условии, что таймер перезарядки не работает, убираем один патрон и создаем звук выстрела. Кроме того в суб эвентах укажем объекты, с которыми будет взаимодействовать наш выстрел. Отметим смену видимости слоев при нажатии на кнопку входа, а также запустим анимацию ее нажатия. Если слой Menu видимый, то при нажатии на кнопку отправим AJAX запрос файлу enter.php. При нажатии на врага, выполним анимацию кровотечения, уничтожим врага и приплюсуем его к уже убитым в этом раунде. Также добавим очки за убийство. При выстреле в заложника, напротив снимем двойное количество очков. Выполним анимацию следа от выстрела при нажатии на стену. Далее следует условие перезарядки. Если в магазине патронов < 1 или нажата кнопка gun, то запустим таймер перезарядки, заполним магазин и включим звуковое сопровождение.
5.4 Теперь немного об AJAX. Любой сделанный нами запрос к php скрипту нужно проверить на completed и error. Если запрос Enter успешно прошел, то проверим, что нам вернул скрипт. Если пришел результат "НЕТ ИМЕНИ" или "ИМЯ ЗАНЯТО", то выведем текст указывающий об ошибке и обновим нашу сцену. Если пришел ответ с именем участника, исполльзуем его для приветствия и начнем игру, сделав слой Menu невидимым. В данном уроке использовано AJAX.LastData, т.е. последнее, что выводил скрипт. Знак |, который мы использовали при выборке лучших игроков заменим на перенос строки newline, с помощью функции replace. В случае ошибок обновим сцену. После выполнения запроса Death делаем слой Record видимым и переходим в начало проекта.

В браузере проект выглядит неплохо, без лишних тормозов и подгрузок. В принципе для учебного проекта считаю работу законченной. Работа над уроком заняла 4 часа, 1 час - создание проекта, 3 часа - оформление теории. Если у кого возникли вопросы или предложения, просьба писать в л.с. Ждите новых уроков. Для вас работал KrashtreaT - SSP.

Последний раз редактировалось krashtreat 16 июн 2015, 20:46, всего редактировалось 18 раз(а).
Изображение

Карантин
Сообщений: 433
Я тут с 14 май 2015
Откуда: Север
Skype: vladimiragent
VK: krashvstreat
Репутация 84 [ ? ]

Сообщение Урок №1 - Регистрация и авторизация игроков
» 16 май 2015, 01:07

а что это за конструкция, объясните?
Код: Выделить всё
   $name = htmlspecialchars(stripslashes(addslashes($_POST['name'])));
   $pass = htmlspecialchars(stripslashes(addslashes($_POST['pass'])));
Аватара пользователя

Администратор
Сообщений: 2393
Я тут с 06 сен 2012
Откуда: Санкт-Петербург, Южно-Сахалинск
Skype: sirg1987
Репутация 261 [ ? ]

Сообщение Урок №1 - Регистрация и авторизация игроков
» 16 май 2015, 01:17

Sir_G писал(а):а что это за конструкция, объясните?

Преобразование специальных символов, удаление экранирования символов и экранирование строк. Как то так...
Изображение

Карантин
Сообщений: 433
Я тут с 14 май 2015
Откуда: Север
Skype: vladimiragent
VK: krashvstreat
Репутация 84 [ ? ]

Сообщение Урок №1 - Регистрация и авторизация игроков
» 17 май 2015, 13:13

krashtreat писал(а):ЗВЕНО - Мир фэнтези по мотивам серии игр TES откроет для вас множество тайн и интриг. Выберите подходящего себе героя и пройдите этот путь вместе с нами от начала до самого конца...

Как играть? Не понял. Начало понравилось, а что дальше. Просто любопытно. Такую игру проще делать в 3д или хотя бы "прирэндарить" и использовать в 2д. Спасибо! :shok:
Когда оба пути ошибочны, ты должен выбрать третий. А если его нет, ты должен его создать.
Ведь если ты не решишь задачу, ее обязательно решит кто-нибудь другой. Так почему бы не стать первым?
Аватара пользователя

Игродел
Сообщений: 2017
Я тут с 24 окт 2014
Откуда: Москва
Двиг: Construct2/UE4
Лицензия: Personal
Skype: smebor
Репутация 405 [ ? ]

Сообщение Урок №1 - Регистрация и авторизация игроков
» 17 май 2015, 16:09

smebor писал(а):Как играть? Не понял

Как таковой игры пока нет, только задумка, но работаем над проектом ежедневно и пока не остановились на C2, пробуем и другие движки...
Группа ВК

smebor писал(а):Такую игру проще делать в 3д или хотя бы "прирэндарить" и использовать в 2д.

Игру делаем в 3D редакторе и рендерим на анимированный 2D, это придает эффект 3D в 2D. На самом деле вопрос о простоте не актуален. Цель проекта, сделать полноценный, кроссбраузерный фентези мир...
Последний раз редактировалось krashtreat 17 май 2015, 21:58, всего редактировалось 3 раз(а).
Изображение

Карантин
Сообщений: 433
Я тут с 14 май 2015
Откуда: Север
Skype: vladimiragent
VK: krashvstreat
Репутация 84 [ ? ]

Сообщение Урок №1 - Регистрация и авторизация игроков
» 17 май 2015, 16:44

Хороший пример!Если автор прицепит плагин вконтакте, к примеру покупку жизней за лайки,или голоса то поклон и уважуха от всего форума.
А подкрутить вашу игру можно через артмани и похожие проги?Гооврят,что на мэйл-ру полно таких игр,которые вот на таких простых уроках сделаны!А дальше делайте выводы сами,использовать эти уроки,или заказать за деньги у профи.
Аватара пользователя

Участник
Сообщений: 98
Я тут с 08 апр 2015
Репутация 3 [ ? ]

Сообщение Урок №1 - Регистрация и авторизация игроков
» 17 май 2015, 20:27

gamermaster писал(а):А подкрутить вашу игру можно через артмани и похожие проги?

Сомневаюсь, что получится. Игра довольно динамичная без паузы, а после сохранения набранных очков в БД изменить вам их 100% не удастся...
gamermaster писал(а):Если автор прицепит плагин вконтакте, к примеру покупку жизней за лайки,или голоса то поклон и уважуха от всего форума.

Прицепить такой плагин могу, но проверить его у меня не получится. Надеюсь вы знаете, для того, чтобы разместить игру в каталоге вконтакте необходимо обзавеститсь сертификатом https...
Изображение

Карантин
Сообщений: 433
Я тут с 14 май 2015
Откуда: Север
Skype: vladimiragent
VK: krashvstreat
Репутация 84 [ ? ]

Сообщение Урок №1 - Регистрация и авторизация игроков
» 20 май 2015, 23:49

Капаикс сделан на 200 версии конструкта и не подходит на 184 версию.Сколько интересно займёт по времени сборка игры.
Аватара пользователя

Участник
Сообщений: 98
Я тут с 08 апр 2015
Репутация 3 [ ? ]

Сообщение Урок №1 - Регистрация и авторизация игроков
» 21 май 2015, 10:38

gamermaster писал(а):Капаикс сделан на 200 версии конструкта и не подходит на 184 версию.

Не в курсе, что за Капаикс. Что мешает обновиться до последней версии? На пиратке хорошего проекта не сделаешь...
Изображение

Карантин
Сообщений: 433
Я тут с 14 май 2015
Откуда: Север
Skype: vladimiragent
VK: krashvstreat
Репутация 84 [ ? ]

Сообщение Урок №1 - Регистрация и авторизация игроков
» 21 май 2015, 11:14

krashtreat писал(а):
gamermaster писал(а):Капаикс сделан на 200 версии конструкта и не подходит на 184 версию.

Не в курсе, что за Капаикс. Что мешает обновиться до последней версии? На пиратке хорошего проекта не сделаешь...

Капаикс - это видимо capx :D
А что именно нехорошего в пиратке? Просто сам сейчас не могу лицензию приобрести, но проект хочу делать уже "как на лицензии". В итоге пока стоит r195 крякнутая, через месяц-полтора планирую купить персональную лицензию и на нее перенести проект.
Изображение
Аватара пользователя

Участник + TDS
Сообщений: 104
Я тут с 05 май 2015
Репутация 7 [ ? ]



Вернуться в Уроки по Construct 2

Сейчас эту тему просматривают

Зарегистрированные пользователи: нет зарегистрированных пользователей

Наверх