Вторник, 03 Декабря 2024, 01:20

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
last2424Дата: Суббота, 16 Августа 2014, 20:17 | Сообщение # 681 | Тема: Новые уроки по создание броузерной игры – 6
30 мл. блоков
Сейчас нет на сайте
Друзья, у меня сегодня хорошее настроение. smile
Решил написать вам новый урок, урок будет уже о интерфрейсе, я нарисовал примитивную карту на которой будет игра. Сделал div для чата, в общем для этого урока всё готово давай те приступим.

<-- пред. урок

P.S. многие опять после этого скажут что бы я использовал jquery - идите лесом. smile

Приступим к коду, его сегодня не так много, как вчера, а возможно столько же, но тут в общем карта нарисованная через canvas. Никакого сервера сегодня, только клиент.

Game.php:
Код
<?
header("Cache-Control: no-store, no-cache"); //отключаем кеширование, кеш - плохо
set_time_limit(0); // скрипт работает бесконечно

include 'conf.php'; // вставляем конфигурацию в игру

if($server_work == 1 and $_SESSION['login_player'] != null){ //проверяем если сервер включён и пользователь авторизировался
?>
<!DOCTYPE html>
<html>
<head>
<title>THEBESTGAME</title>
<script src="condisk_server.js"></script> <!--Подключаем condisk_server.js-->
<script src="game.js"></script>
<link rel="stylesheet" href="style_game.css"/>
</head>
<body>
<canvas id="map"></canvas>
<div id="chat">СДЕСЬ БУДЕТ ЧАТ!</div>
</body>
</html>
<?    

}else if($_SESSION['login_player'] == null){ //если пользователь не авторизирован

echo 'Вы не авторизирвоались!'; // выводим строчку "Вы не авторизировались!"

}else if($server_work != 1){ //если сервер не включён

echo 'Сервер выключен.'; // выводим строчку "Сервер выключен."

}

?>


Эх, давай те разбирать. Добавил 4 новых строчки.
Подключил style_game.css.
Подключил файл game.js.
Создал “CANVAS”.
Создал div в котором написано – “СДЕСЬ БУДЕТ ЧАТ!”.
Усё(всё).

Приступим к следующему, самому большому куску, где собственно всё рисуется, создаётся.

Game.js:
Код
    

var karta; //экран
var ckarta; //контекст экрана

var gameWidth = 900; //ширина игрового экрана
var gameHeight = 400; //высота игрового экрана

var groundgreen = new Image(); //создаём переменную groundgreen в которую пихаем новый экземляр картинки
groundgreen.src = "images/groundgreen.jpg"; //указываем где находится картинка

var tree = new Image(); //создаём переменную tree в которую пихаем новый экземляр картинки
tree.src = "images/tree.png"; //указываем где находится картинка

window.onload  = function(){ //функция старта
karta = document.getElementById("map"); //подключаем canvas к карте
ckarta = map.getContext("2d"); //в даём доступ к канвасу для рисования

karta.width = gameWidth; //ширина экрана
karta.height = gameHeight //высота экрана
drawImg(); //запускаем функцию рисования
}

function drawImg() //обьявляем функцию drawImg
{
for(var x = 0; x < 29; x++){ //запускаем первый цикл в котором у нас рисуется вся трава в ширину
    for(var y = 0; y < 13; y++){ //запускаем второй цикл в котором у нас рисуется вся трава в длинну
    ckarta.drawImage(groundgreen, 0, 0, gameWidth, gameHeight, 32*x, 32*y, gameWidth, gameHeight); //рисуем <img src="http://s12.ucoz.net/sm/1/smile.gif" border="0" align="absmiddle" alt="smile" />
}
}

//деревья буду рисовать без циклов, надо будем сами сделаете
//первая линия
    ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 50, 50, gameWidth, gameHeight); //рисую
    ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 200, 50, gameWidth, gameHeight); //рисую
    ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 350, 50, gameWidth, gameHeight); //рисую
    ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 500, 50, gameWidth, gameHeight); //рисую
    ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 650, 50, gameWidth, gameHeight); //рисую
    ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 800, 50, gameWidth, gameHeight); //рисую
//вторая линия
    ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 50, 150, gameWidth, gameHeight); //рисую
    ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 200, 150, gameWidth, gameHeight); //рисую
    ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 350, 150, gameWidth, gameHeight); //рисую
    ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 500, 150, gameWidth, gameHeight); //рисую
    ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 650, 150, gameWidth, gameHeight); //рисую
    ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 800, 150, gameWidth, gameHeight); //рисую
//последняя линия
    ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 50, 250, gameWidth, gameHeight); //рисую
    ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 200, 250, gameWidth, gameHeight); //рисую
    ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 350, 250, gameWidth, gameHeight); //рисую
    ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 500, 250, gameWidth, gameHeight); //рисую
    ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 650, 250, gameWidth, gameHeight); //рисую
    ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 800, 250, gameWidth, gameHeight); //рисую
}


В самом начале объявляем 6 переменных, karta, ckarta, gameWidth, gameHeight, groundgreen и tree.

Первые две переменные это подключение канваса и разрешение его редактирования через JS, gameWidth и gameHeight – это ширина и высота игрового экрана, groundgreen – картинка травы, tree – картинка дерева. То что идёт после groundgreen и tree это я указываю местоположение картинок.

После этого запускаем функцию которая срабатывает после полной загрузки страницы, подключаем канвас, даём доступ, настраиваем ширину и высоту. После этого переходим на drawImg();

Там запускаем цикл рисования из 2 for в которых переменные x и y, думаю, вы поняли.

Между { { и } } идёт длинная функция вырисовки объектов, drawImage, сначало какую часть объекта мы рисуем, в данном случае всю картинку, потом ширина и высота картинки не на экране, я написал gameWidth и gameHeight если напишем 32 и 32 то трава будет размана, потом идёт местоположение картинок в данном случае они каждый раз умножаются на x и y и опять пишем ширину и высоту.

Потом я пишу “дохренища” всяких функций рисования, но в данном случае я рисую деревья.

Почему я нарисовал их примитивным способом. Ответ будет в конце урока. ↓

Нам остался только один файл style_game.css:
Код
body {
background: #000;
margin: 0px;
}
#chat {
background: #fff;
width: 900px;
height: 200px
}

#map    
{
display: block;
background: #fff;
}


Тут мы указываем цвет всех частей, ширину и высоту чата, дисплэй экрана, отступ body.

А теперь долгожданный ответ:

Я вас учу, значит должны быть задания biggrin

Вот вам задание, написать нормальный вариант рисования деревьев.

Всё, я пошёл пилить проект дальше.

Картинки.

Добавлено (16.08.2014, 18:23)
---------------------------------------------
UP!

Добавлено (16.08.2014, 20:17)
---------------------------------------------
Ну где срач то? biggrin


Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)

Сообщение отредактировал last2424 - Суббота, 16 Августа 2014, 16:09
last2424Дата: Суббота, 16 Августа 2014, 20:01 | Сообщение # 682 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
30 мл. блоков
Сейчас нет на сайте
Sanches, с этим то как раз всё норм.

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
last2424Дата: Суббота, 16 Августа 2014, 19:55 | Сообщение # 683 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
30 мл. блоков
Сейчас нет на сайте
Вот скрин.

Когда я делаю такую же телепортацию зелёный-красный у меня он с синего портала всё-равно телепортируется в красный, а блокировка стоит.


Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)

Сообщение отредактировал last2424 - Суббота, 16 Августа 2014, 19:55
last2424Дата: Суббота, 16 Августа 2014, 19:51 | Сообщение # 684 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
30 мл. блоков
Сейчас нет на сайте
Перечитай сообщение. biggrin

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)

Сообщение отредактировал last2424 - Суббота, 16 Августа 2014, 19:52
last2424Дата: Суббота, 16 Августа 2014, 19:41 | Сообщение # 685 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
30 мл. блоков
Сейчас нет на сайте
system, в C2 нельзя инвертировать collision another object. biggrin

На самом деле проблема даже не в этом. Проблема такая на самом деле, я телепортируюсь из синего портала в зелёный и попадаю в красный, хотя в этом время разрешение на телепортацию стоит на 1.


Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)

Сообщение отредактировал last2424 - Суббота, 16 Августа 2014, 19:50
last2424Дата: Суббота, 16 Августа 2014, 19:23 | Сообщение # 686 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
30 мл. блоков
Сейчас нет на сайте
SergeyDo, мне нужно использовать его с Platform biggrin

P.S. давно таких трудностей не было, но сейчас очень надо.

Добавлено (16.08.2014, 17:53)
---------------------------------------------
system, зачем зря компьютер файлами нагружать, в глобальную переменную вполне сойдёт.

Добавлено (16.08.2014, 17:55)
---------------------------------------------
P.P.S. главных героев 3. biggrin

Добавлено (16.08.2014, 18:42)
---------------------------------------------
Сделал так:
Создал для героя переменную в котором хранится его максимальная скорость.
Дальше так: если соприкоснулся с порталом и ещё не использовал его(что бы не зациклился и не пропал), если он падает, и у него такая то анимация(в данном случае это для того что бы сторону проверять), тогда перемещаем его к следующему порталу, переменной с максимальной скоростью даём значение
Blue_Slug.Platform.Gravity(его нужно потом будет отключить, не забудьте). И указал angel в которую работает гравитация(50).

Добавлено (16.08.2014, 19:23)
---------------------------------------------
А теперь последний и самый нубский вопрос. biggrin

Как мне сделать так, что бы когда персонаж перестал трогатся с порталом у него переменная изменилась на 1. biggrin (на самом деле я так и не понял как мне это сделать через конструкт)


Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)

Сообщение отредактировал last2424 - Суббота, 16 Августа 2014, 19:38
last2424Дата: Суббота, 16 Августа 2014, 17:17 | Сообщение # 687 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
30 мл. блоков
Сейчас нет на сайте
system, я на самом деле вообще не представляю как это можно реализовать. sad

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
last2424Дата: Суббота, 16 Августа 2014, 16:50 | Сообщение # 688 | Тема: Проблемы с допуском
30 мл. блоков
Сейчас нет на сайте
SarCasm, нет, у меня всё норм.

Добавлено (16.08.2014, 16:50)
---------------------------------------------
Вычисть браузер, кеш, все сессий, временные файлы. Может тогда перестанет.


Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
last2424Дата: Суббота, 16 Августа 2014, 16:20 | Сообщение # 689 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
30 мл. блоков
Сейчас нет на сайте
Делаю порталы, появился вопрос, как можно сделать сохранение скорости при попаданий в другой портал? То есть как то так:
1 - пробел
0 - перс
_-\/| - стены
o - первый портал
O -второй портал

O --> --> -->
0 -> | -----------
---- \/
|
| 11o
------------------


Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)

Сообщение отредактировал last2424 - Суббота, 16 Августа 2014, 16:42
last2424Дата: Суббота, 16 Августа 2014, 12:01 | Сообщение # 690 | Тема: Решаем задачи по Construct Classic [вопрос-ответ]
30 мл. блоков
Сейчас нет на сайте
Друзья, можно ли как то проверить с какой стороны было столкновение? В Construct 2.

Добавлено (16.08.2014, 12:01)
---------------------------------------------

Цитата
Anthem, "При наведении курсора" используется "Is overlaping another object"? В объекте Mouse&Keyboard есть отдельное условие "Cursor is over object" или как-то так. Может, стоит использовать это условие?

Мышку нельзя использовать через "In overlaping another object", надо использовать "Cursor is over object".


Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)

Сообщение отредактировал last2424 - Суббота, 16 Августа 2014, 11:57
last2424Дата: Суббота, 16 Августа 2014, 00:58 | Сообщение # 691 | Тема: Новые уроки по создание броузерной игры – 5
30 мл. блоков
Сейчас нет на сайте
lvovand, нееее, способ не годится что бы написать нормальный таймер надо кучу времени убить, и подумать, я так и не смог придумать его. Бал вариант проверять последний приход POST запроса между определённым временем, но я тоже не смог реализовать его, как то так, сейчас такие вещи не сделать, тут вариант только один, писать свой браузер, каким то образом кодировать код под сайты на этот браузер, что бы нельзя было использовать в опере например.

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)

Сообщение отредактировал last2424 - Суббота, 16 Августа 2014, 11:39
last2424Дата: Суббота, 16 Августа 2014, 00:37 | Сообщение # 692 | Тема: Новые уроки по создание броузерной игры – 5
30 мл. блоков
Сейчас нет на сайте
lvovand, нет, это для изменения колличества игроков, beforeunload работает при обновлений страницы тоже, я с оперы сижу. biggrin

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
last2424Дата: Суббота, 16 Августа 2014, 00:26 | Сообщение # 693 | Тема: Новые уроки по создание броузерной игры – 5
30 мл. блоков
Сейчас нет на сайте
lvovand, второе.

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
last2424Дата: Пятница, 15 Августа 2014, 23:42 | Сообщение # 694 | Тема: Новые уроки по создание броузерной игры – 5
30 мл. блоков
Сейчас нет на сайте
lvovand, у меня всё по разным файлам будет раскидано, останется только через html подключать их.
P.S. всё точно также как и в обычном яваскрипт, не работает unload.


Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)

Сообщение отредактировал last2424 - Пятница, 15 Августа 2014, 23:56
last2424Дата: Пятница, 15 Августа 2014, 22:26 | Сообщение # 695 | Тема: Новые уроки по создание броузерной игры – 5
30 мл. блоков
Сейчас нет на сайте
liker, biggrin (да, да, пусть у всех бомбит biggrin )

Добавлено (15.08.2014, 22:26)
---------------------------------------------
last2424, если кто хочет, могу собрать группу в скайпе, будите сидеть и смотреть, как я кодю(учтём, что микрофон в настоящее время отвалился(вернее провод)) biggrin


Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)

Сообщение отредактировал last2424 - Пятница, 15 Августа 2014, 22:26
last2424Дата: Пятница, 15 Августа 2014, 21:55 | Сообщение # 696 | Тема: Новые уроки по создание броузерной игры – 5
30 мл. блоков
Сейчас нет на сайте
dima9595, ой, jQuery для меня странная вещь, вроде бы подключен, а вроде бы нет. biggrin
Не, ну честно, начинаю использовать функцию и не понятно, работает она или не работает. biggrin

Ну а вообще я шучу, всё с ним нормально, просто мне его не удобно использовать.


Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)

Сообщение отредактировал last2424 - Пятница, 15 Августа 2014, 22:18
last2424Дата: Пятница, 15 Августа 2014, 21:27 | Сообщение # 697 | Тема: Новые уроки по создание броузерной игры – 5
30 мл. блоков
Сейчас нет на сайте
Блин, я уже не знаю, сколько времени прошло с последнего урока по созданию браузерки.

Но, вы правы, это проклятый 5 урок, мною проклятый, потому что я проклял браузеро-разрабов.

<-- пред. урок

Что вы сегодня узнаете:
Что такое аякс/эйджекс?
Как работают наш клиент-сервер и запись кода?
Минусы клиент сервера и почему я проклял браузеро-разрабов.

Давайте с начала узнаем какие технологий мы используем в нашем:
JavaScript
PHP
HTML

Почему я не указал аякс/эйджекс(это одно и тоже аякс – как называют русские, эйджекс – как говорится правильно)?
AJAX, Ajax (ˈeɪdʒæks, от англ. Asynchronous Javascript and XML — «асинхронный JavaScript и XML») — подход к построению интерактивных пользовательских интерфейсов веб-приложений, заключающийся в «фоновом» обмене данными браузера с веб-сервером. В результате, при обновлении данных веб-страница не перезагружается полностью, и веб-приложения становятся быстрее и удобнее.

По-английски AJAX произносится как «э́йджэкс», по-русски довольно распространено «ая́кс».

AJAX — не самостоятельная технология, а концепция использования нескольких смежных технологий. AJAX базируется на двух основных принципах:
• использование технологии динамического обращения к серверу«на лету», без перезагрузки всей страницы полностью, например:
• с использованием XMLHttpRequest (основной объект);
• через динамическое создание дочерних фреймов[1];
• через динамическое создание тега <script>[2].
• через динамическое создание тега <img>, как это реализовано в google analytics.
• использование DHTML для динамического изменения содержания страницы;
Действия с интерфейсом преобразуются в операции с элементами DOM (англ. Document Object Model), с помощью которых обрабатываются данные, доступные пользователю, в результате чего представление их изменяется. Здесь же производится обработка перемещений и щелчков мышью, а также нажатий клавиш. Каскадные таблицы стилей, или CSS (англ. Cascading Style Sheets), обеспечивают согласованный внешний вид элементов приложения и упрощают обращение к DOM-объектам. Объект XMLHttpRequest (или подобные механизмы) используется для асинхронного взаимодействия с сервером, обработки запросов пользователя и загрузки в процессе работы необходимых данных.
Три из этих четырёх технологий — CSS, DOM и JavaScript — составляют DHTML (англ. Dynamic HTML). По мнению некоторых специалистов,[каких?] средства DHTML, появившиеся в 1997 году, подавали большие надежды, но так и не оправдали их.
В качестве формата передачи данных могут использоваться фрагменты простого текста, HTML-кода, JSON или XML.

Спасибо википедий.

Собственно теперь как же это работает?

Я не буду долго писать, я просто скину картинку опять же из википердий.


Для тех кто работал с Construct Classic и плагином Network, давай те представим что через аякс мы отправляем те самые пакеты.

Теперь приступим к коду.

Клиент мы будем писать на html+js.
Сервер пишем на php.

Запросы с клиента отправляем и принимаем через AJAX.

Для создания клиент-сервер я использовал всего 3 файла:
game.php – вывод данных
condisk_server.js - Connect к серверу, наш первый клиентский скрипт.
server.php – сюда у нас будут приходить все запросы.

Теперь код:

Game.php:
Код
<?
header("Cache-Control: no-store, no-cache"); //отключаем кеширование, кеш - плохо
set_time_limit(0); // скрипт работает бесконечно

include 'conf.php'; // вставляем конфигурацию в игру

if($server_work == 1 and $_SESSION['login_player'] != null){ //проверяем если сервер включён и пользователь авторизировался
?>
<!DOCTYPE html>
<html>
<head>
<title>THEBESTGAME</title>
<script src="condisk_server.js"></script> <!--Подключаем condisk.php-->
</head>
<body>
<div id="core"><h2></h2></div><!--Див в который будет выводится временная строчка с айди-->
</body>
</html>
<?      

}else if($_SESSION['login_player'] == null){ //если пользователь не авторизирован

echo 'Вы не авторизирвоались!'; // выводим строчку "Вы не авторизировались!"

}else if($server_work != 1){ //если сервер не включён

echo 'Сервер выключен.'; // выводим строчку "Сервер выключен."

}

?>


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

Condisk_server.js:
Код
var sendreq = "onload=1"; //данные которые будем отправлять
var xmlhttp; //переменная через которую будут многие функций протекать
if (window.XMLHttpRequest) // если наш браузер использует XMLHttpRequest
       {
       xmlhttp=new XMLHttpRequest(); //в переменную записываем новый экземляр класса XMLHttpRequest
       }
else if(window.ActiveXObject("Microsoft.XMLHTTP")) //иначе если у нас используется ActiveXObject("Microsoft.XMLHTTP")
       {
       xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); //записываем новый экземляр класса ActiveXObject("Microsoft.XMLHTTP")
       }else{ //иначе
         xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); //записываем новый экземляр класса ActiveXObject("Msxml2.XMLHTTP")
       }      
window.onload = function(){ //если страницы загрузилась

xmlhttp.onreadystatechange=function() //через xmlhttp.onreadystatechange постоянно смотрим за состоянием xmlhttp
       {
       if (xmlhttp.readyState==4 && xmlhttp.status==200) //если запрос удачно отправлен(или принят, я не помню уже) и статус равен 200, а не 404 или чему то другому
         {
         document.getElementById("core").innerHTML=xmlhttp.responseText; //записываем в наш див game.php весь текст который там выводится
         }
       }
xmlhttp.open("POST","server.php",true); //открываем асинхронное соединение с адресом server.php методом POST
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //отправляем заголовок, таким образом имитируя форму, POST запрос всегда требует форму
xmlhttp.send(sendreq); //отправляем запрос с данными которые записаны в sendreq
}


Создаём переменную senqreq в которой у нас находится данные которые отправляем,
подключаем аякс, для некоторых браузеров свои классы, потому что всё ещё есть те что сидят на старых браузерах.

Постоянно проверяем всё ли у нас хорошо с отправляемыми или отправляемыми(я не помню какие именно) данными. Если всё хорошо, выводим в div текст Ваш айди: “цифра”.

Открываем асинхронное соеденение с сервером, методом POST отправляем данные которые у нас в sendreq и последнее это отправляем заголовок, говоря что то что мы отправили – форма, POST будет работать только если будет отправлена форма.

Ну и остался последний файл server.php:

Код
<?
header("Cache-Control: no-store, no-cache"); //кеш - зло
set_time_limit(0); // скрипт работает бесконечно

include 'conf.php'; //подключаем конфиг

$server_session = $users->findOne(array('s' => 1)); //ищем данные с колличеством игроков
$data_player = $users->findOne(array('login' => $_SESSION['login_player'])); //вытаскиваем данные пользователя

if(isset($_POST['onload'])){ //если пришёл POST onload
if($_SESSION['id'] == null){ //если айди пользователя пуст
$id = $server_session['id']+1; //прибавляем игрока
$_SESSION['id'] = $id; //присваиваем айди
$users->update(array('s' => 1), array('$set' => array("id" => $id))); //обновляем данные с колличеством игроков
$users->update(array('login' => $_SESSION['login_player']), array('$set' => array("id" => $_SESSION['id']))); //обновляем айди пользователя
}
}
if($data_player['id'] != $_SESSION['id']){ //если айди не равен айди кототый у пользователя в базе, не равен айди который находится в сессий
$users->update(array('login' => $_SESSION['login_player']), array('$set' => array("id" => $_SESSION['id']))); //обновляем айди
}
echo "Ваш айди ".$_SESSION['id']; //временно выводим айди
?>


Первые три строчки знакомы, отключаем кеш, бесконечим код, подключаем конфиг. smile

Следующие 2 строчки устанавливают соединения с разными данными.
Первое соединение с данными о количестве игроков, второе о данных игрока.

Потом проверяем: если пришёл пост запрос, если у нас не присвоен айди, добавляем игрока, присваиваем айди, обновляем базу.

Следующая строчки проверяют если айди игрока в базе не равны с айди игрока в сессий, тогда обновляем базу.

И последняя строчка выводит.

Теперь что надо обновить:

Reg.php:
Код
<?
include 'conf.php'; //подключаем конфиг
$select = $users->findOne(array('login' => $_POST['login']));
if(isSet($_POST['regestration']) && $_POST['password'] == $_POST['repassword'] && preg_match('/[0-9a-zA-Z]/', $_POST['password']) && preg_match('/[0-9a-zA-Z]/', $_POST['login']) && $_POST['login'] != $select['login']){ //если пароли одинаковы и в них вообще чего-нибудь написано
$users->insert( //запись в бд
             array(
                  'login' => $_POST['login'], //логин пользователя
                  'password' => $_POST['password'], //пароль пользователя
         'email' => $_POST['email'], //эмэйл пользователя
         //основные характеристики персонажа
         'charaster_class' => "",
         'lvl' => 1,
                  'xp' => 0,
                  'hp' => 100,
                  'mn' => 100,         
         //второстепенные характеристики персонажа
         'strength' => 0,
         'speed' => 0,
         'intelligence' => 0,
         'faith' => 0,
         'count_up' => 50,
         //динамические данные
         'x' => 0,
         'y' => 0,
         'session_id' => 0
         ));
         $_SESSION['login_player'] = $_POST['login'];
echo '<script>
          document.location.href = "http://25.120.133.229/charcreater.php";
          </script>';//и переходим на страницу с с созданием персонажа
}
?>
<!DOCTYPE html>
<html>
<head>
<title>THE BEST GAME</title>
<link rel="stylesheet" type="text/css" href="stylereg.css">
</head>
<form action="reg.php" method="post">
<body>
<input type="text" placeholder="Login" name="login" class="textinputlogin"/>
<input type="email" placeholder="Email" name="email" class="textinputemail"/>
<input type="password" placeholder="Password" name="password" class="textinputpassword"/>
<input type="password" placeholder="Repeat password" name="repassword" class="textinputrepassword"/>
<input type="submit" value="Зарегистрироваться" name="regestration" class="button"/>
</form>
</body>
</html>

Тут можно увидеть что я добавил ещё 3 колонки: x, y и id игрока, оси x и y все должны знать что это такое, это все должны били проходить в школе на математики, айди это личный индификатор игрока, по нему будут ориентироваться другие игроки.

Conf.php:
Код
<?session_start(); // запускаем сессию
ini_set('session.save_path', $_SERVER['DOCUMENT_ROOT'] .'../sessions/'); //меняем место положение наших сессий(возможно на бесплатных хостингах работать не будет закомементируйте, если что)
ini_set('session.gc_maxlifetime', 120960); //долгая жизнь сессий
$server_work = 1;
$dbhost = 'localhost'; //адрес хоста к mongodb
$dbname = 'thebestgame'; //имя базы данных

//подключение к mongodb
$m = new Mongo("mongodb://$dbhost");
$db = $m->$dbname;

//коллекций из которых делается выборка
$users = $db->users;
?>


Сюда я добавил переменную $server_work которая равна 1, это состояние сервера, если вы напишите 0 или любую другую цифру, сервер выключится, и игроки не смогут зайди что бы поиграть.

Хорошо, с кодом мы полностью закончили на этом уроке, теперь мы поговорим о минусах этого кода и почему я проклинаю браузеро-разрабов. biggrin

Минус кода в том, что при выходе клиента, закрытий страницы у нас ничего не происходит, то есть айди не обнуляется, пока не решите или я не решу эту проблемку, делаем так: много айди собралось, отключаем сервер в базе количество пользователей ставим 0, и включаем обратно.
Браузеро-разрабов я проклиняю за то что они испоганили функцию onbeforeload, она должна работать только когда пользователей перешёл на чужую страницу или вышел с сервера, а она каким то боком работает ещё и при обновлений страницы и за то что не работает функция onunload или unload(как удобно), они говорят мол, если они оставят её, будут сайты с которых нельзя выйти, но мне кажется гуманнее было запретить запрещать выход со страницы, они этого не сделали и я зол на них.

Всё, на этом я заканчиваю, следующий урок будет, не скоро. biggrin

P.S. не забудьте добавить в базу в коллекций Users, следующее:
Код
{
      "id": 0,
      "s": 1    
}


Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)

Сообщение отредактировал last2424 - Суббота, 16 Августа 2014, 16:02
last2424Дата: Пятница, 15 Августа 2014, 17:55 | Сообщение # 698 | Тема: [2D] COLORFUL RINGS [В разработке]
30 мл. блоков
Сейчас нет на сайте
Чёртов Никита, причём тут я? Я вообще не снимаю видео. biggrin

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
last2424Дата: Четверг, 14 Августа 2014, 20:03 | Сообщение # 699 | Тема: Новые уроки по создание броузерной игры – 4
30 мл. блоков
Сейчас нет на сайте
Saitei, Да не...(я ничего такого не имел ввиду, если вы подумали о другом, вам следует подумать о своём поведений) ты не говорил. biggrin

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
last2424Дата: Четверг, 14 Августа 2014, 19:30 | Сообщение # 700 | Тема: Новые уроки по создание броузерной игры – 4
30 мл. блоков
Сейчас нет на сайте
Завтра, послезавтра следующий урок, там начнём делать уже что то интересное, поработаем с аяксом, возможно сделаем отключение курицелапой(если ко мне не приедет озарение), без всяких лишних обновлений, расскажу нубам про аякс, расскажу нубам про работу сервера и клиента, всё что можно в этом уроке то и расскажу.

P.S. на счёт отключения, знаю половину начнёт говорить про таймеры, но таймеры эта такая страшная пристрашная штука, в общем кто захотел тот понял. biggrin
P.P.S а возможно отключения вообще уберу, ведь то что я написал это больше смахивает на кривой кик за афк, нежели на отключение, в данный момент из-за "гениальности" браузеро-разрабов я не могу использовать спокойно некоторые функций которые должны нормально работать, но из-за разрабов они нехрена не работают(я говорю про onunload и onbeforeload). Хотя одну вещь которая думаю может помочь мне в этой проблеме(хотя до сих пор не уверен что она сработает) smile


Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)

Сообщение отредактировал last2424 - Четверг, 14 Августа 2014, 19:42
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг