Понедельник, 02 Декабря 2024, 23:37

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
last2424Дата: Среда, 27 Августа 2014, 17:44 | Сообщение # 641 | Тема: Столкновение
30 мл. блоков
Сейчас нет на сайте
Flakky, спасибо, написал. smile

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
last2424Дата: Среда, 27 Августа 2014, 00:08 | Сообщение # 642 | Тема: getData и формы. Не работает в опере.
30 мл. блоков
Сейчас нет на сайте
zxc76, ещё есть вариант такой, у браузеров всех разное, а может у кого то одинаковое восприятие JavaScript'a какие то функций работают нормально, какие то через задницу.

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

Сообщение отредактировал last2424 - Пятница, 29 Августа 2014, 15:06
last2424Дата: Вторник, 26 Августа 2014, 16:27 | Сообщение # 643 | Тема: Столкновение
30 мл. блоков
Сейчас нет на сайте
Ну собственно пишу движок, появилась нужда в столкновениях, удобных алгоритмов я не нашёл, сам тоже не смог составить ничего путного.

Может кто-нибудь подскажет какой-нибудь удобный и простой алгоритм?

P.S. Rectangle уже написан.


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

Сообщение отредактировал last2424 - Вторник, 26 Августа 2014, 16:28
last2424Дата: Пятница, 22 Августа 2014, 21:59 | Сообщение # 644 | Тема: [Gamiron #8] Rescue Zor'ka
30 мл. блоков
Сейчас нет на сайте
Fill_Freeman, завтра cдавать уже, успеешь?

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
last2424Дата: Пятница, 22 Августа 2014, 21:34 | Сообщение # 645 | Тема: Вопрос-[ответ] по Unity
30 мл. блоков
Сейчас нет на сайте
Adom, выкинуть из окна комп.

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
last2424Дата: Пятница, 22 Августа 2014, 21:15 | Сообщение # 646 | Тема: Scalibur !ВИДЕО ГЕЙМПЛЕЯ!
30 мл. блоков
Сейчас нет на сайте
Цитата last2424 ()
Жду бесплатную лицензию


Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
last2424Дата: Пятница, 22 Августа 2014, 16:10 | Сообщение # 647 | Тема: Помогу с вашим проектом за $
30 мл. блоков
Сейчас нет на сайте
Edison6, тебе главное код или результат, каждый пишет по свойму, и каждый понимает только своё, что бы поняли другие нужны "//", "#" и "/**/"? В принципе я могу я про комментить и разбираться в моём коде будет не так сложно. В 7 уроке я не комментил по одной простой причине, я хотел спать.

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

Сообщение отредактировал last2424 - Пятница, 22 Августа 2014, 16:14
last2424Дата: Пятница, 22 Августа 2014, 16:01 | Сообщение # 648 | Тема: Помогу с вашим проектом за $
30 мл. блоков
Сейчас нет на сайте
Edison6, уж точно не хуже чем ты.

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
last2424Дата: Пятница, 22 Августа 2014, 15:48 | Сообщение # 649 | Тема: Помогу с вашим проектом за $
30 мл. блоков
Сейчас нет на сайте
Folleah, нет слушай, китайский. biggrin

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
last2424Дата: Пятница, 22 Августа 2014, 15:35 | Сообщение # 650 | Тема: Помогу с вашим проектом за $
30 мл. блоков
Сейчас нет на сайте
Вообще зачем мне вам показывать что то я сказал с языками похожему по синтаксису, если вам надо будет на том же C# сделать скрипт вы тоже будете портфорлио просить? biggrin

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
last2424Дата: Пятница, 22 Августа 2014, 14:04 | Сообщение # 651 | Тема: Помогу с вашим проектом за $
30 мл. блоков
Сейчас нет на сайте
Edison6, *о боже какие они элементарные. Вот напишу 8 урок посмотрим какие элементарные они для тебя будут. biggrin

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

Сообщение отредактировал last2424 - Пятница, 22 Августа 2014, 14:04
last2424Дата: Пятница, 22 Августа 2014, 13:17 | Сообщение # 652 | Тема: Выбор средства разработки-один из важнейших этапов
30 мл. блоков
Сейчас нет на сайте
На самом деле без разницы на чём, главное опыт в своём деле, что вы так все печётесь?

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
last2424Дата: Пятница, 22 Августа 2014, 13:03 | Сообщение # 653 | Тема: Помогу с вашим проектом за $
30 мл. блоков
Сейчас нет на сайте
Цитата
Речь о паре-тройке десятков тысяч рублей?

Смотря какая игра, если какая-нибудь мелкая, то тут тысячи или три. Если мне скажут им мморпг писать пусть десятки тысяч платят smile

Цитата
Готовые проекты, наработки, сколько опыта.

Ну там в готовых движках где то уже 7 урок по браузерке от меня лежит, мало?

Цитата
Ты сейчас перечислил то что в школе дают(кроме GML), не густо.

Цитата
Риальне сейчас в школе преподают Javascript и PHP? Паскаль с Basic-ом в прошлом?)


Смотря где, меня научил другой человек ему, но не в школе, а в другом месте, он нас обучил всему и больше собирать группу не стал, вот мы сейчас единственные со Stalket_Peoplom с ним общаемся, да и я сейчас редко. А в том месте всяких курсов по программированию веб-приложений у нас нет, там теперь только как сказали Pascal, Html и CSS учат. biggrin

P.S. да нас даже JS там не учили только PHP, поэтому иди ты лесом эдисон, ещё не хрена не учат.


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

Сообщение отредактировал last2424 - Пятница, 22 Августа 2014, 13:11
last2424Дата: Четверг, 21 Августа 2014, 20:18 | Сообщение # 654 | Тема: Помогу с вашим проектом за $
30 мл. блоков
Сейчас нет на сайте
Готов помочь с вашим проектом, если будут нужны лишние руки.

Я по специальности программист, поэтому к рисованию и моделированию никакого дела не имею, могу помочь с чем угодно в плане программирования.

В принципе из-за лени делаю все свои проекты в CC и C2. Но в остальном я владею такими языками так:

PHP, JavaScript, я знаю даже тот же GML, который так зубрят пользователи Game Maker, а так же похожие по синтаксису языки.

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

В принципе как то так. biggrin

Для заказчиков: ICQ 657596478


Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
last2424Дата: Четверг, 21 Августа 2014, 11:20 | Сообщение # 655 | Тема: Новые уроки по создание броузерной игры – 7 - Часть 1
30 мл. блоков
Сейчас нет на сайте
Folleah, ну я не олдфаг, просто мне так и хочется через эту букву "О", в названий пройти. biggrin

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
last2424Дата: Четверг, 21 Августа 2014, 10:04 | Сообщение # 656 | Тема: Новые уроки по создание броузерной игры – 7 - Часть 1
30 мл. блоков
Сейчас нет на сайте
-l33t-h4xx-, ну, для оригинальности я их так назвал. biggrin

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
last2424Дата: Четверг, 21 Августа 2014, 07:32 | Сообщение # 657 | Тема: Новые уроки по созданию броузерной игры – 7 - Часть 2
30 мл. блоков
Сейчас нет на сайте
Админ, всё не влезло в тему, я пытался добавить новым сообщением, но он сдвинул див в бок, пишу отдельной.

Так, те кто читает этот урок сначало читаем первую часть потом эту.

<-- превая часть

Инвентарь со стороны клиента сделали, дальше, таблица квестов.

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

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

$data_quests = $quests->find(array('login' => $_SESSION['login_player'])); //вытаскиваем инвентарь

if($server_work == 1 and $_SESSION['login_player'] != null){ //проверяем если сервер включён и пользователь авторизировался
?>
<!DOCTYPE html>
<html>
<head>
<title>THEBESTGAME</title>
<link rel="stylesheet" href="style_game.css"/><!--Подключаем стили-->
</head>
<body>
<?
while($quests = $data_quests->getNext())
{?>
<div id="quest">
<?echo "<h1>".$quests['name_quest']."</h1><br/> <h5>".$quests['desctription']."</h5><br/>Prise:<br/>".$quests['prise']."<br/>XP:<br/>".$quests['xplus'];?>
</div>
<?}?>
<div id="test"></div>
</body>
</html>
<?       

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

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

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

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

}

?>


Тут я думаю всё ещё проще, ведь я тут только вывожу div’ы со всеми квестами игрока.

Теперь чат.
Chat_messages.php:
Код
<?
include 'conf.php';
?>
<!DOCTYPE html>
<html>
<head>
<title>THEBESTGAME</title>
<link rel="stylesheet" href="style_game.css"/>
</head>
<body id="ms">
<?
$data_chat = $chat->find(array('s' => 1)); //вытаскиваем сообщения

$data_chat->sort(array("time" => -1));
while($messages = $data_chat->getNext())
{
echo $messages['login'].": ".$messages['message']." ".$messages['time']."<br/>";
}
?>
</body>
</html>

Тут происходит выборка и сортировка сообщение между { } идёт вывод сообщений.

Chat.js:
Код
var xmlhttp; //переменная через которую будут многие функций протекать

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


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

Ну и в принципе, последний файл это 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'])); //вытаскиваем данные пользователя
$data_inventory = $inventory->findOne(array('login' => $_SESSION['login_player'])); //вытаскиваем инвентарь
$number_cell = array('1', '2', '3', '4', '5', '6', '7', '8', '9');

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']; //временно выводим айди

if(isset($_POST['message']))
{
$chat->insert( //запись в бд
              array(
                   'login' => $_SESSION['login_player'], //логин пользователя
                   'message' => $_POST['message'], //сообщение пользователя пользователя
          's' => 1, //ещё данные для выборки
          'time' => date("H:i:s")       
          ));
                
}

if(isset($_POST['nameitem'])){
          foreach($number_cell as &$val){
         if($data_inventory[$val] == 'invcell'){
          $inventory->update(array('login' => $_SESSION['login_player']), array('$set' => array($val => $_POST['nameitem']))); //обновляем инвентарь
       break;
       }
       }
}

if(isset($_POST['itemname'])){
$data_items = $items->findOne(array("name" => $_POST['itemname'])); //вытаскиваем предмет
$cell = $_POST['cell_id'];
$faithplus = $data_player['faith'] + $data_items['faith'];
$hpplus = $data_player['hp'] + $data_items['hp'];
$manaplus = $data_player['mn'] + $data_items['mn'];
$intelligenceplus = $data_player['intelligence'] + $data_items['intelligence'];
$speedplus = $data_player['speed'] + $data_items['speed'];
$strengthplus = $data_player['strength'] + $data_items['strength'];
if($data_items['type'] == "weapon" && $_POST['itemname'] != "invcell" && $data_items['class'] == $data_player['charaster_class']){
          $inventory->update(array('login' => $_SESSION['login_player']), array('$set' => array($cell => 'invcell', "weapon" => $_POST['itemname']))); //обновляем инвентарь
       $users->update(array('login' => $_SESSION['login_player']), array('$set' => array("faith" => $faithplus, "hp" => $hpplus, "mn" => $manaplus, "intelligence" => $intelligenceplus, "speed" => $speedplus, "strength" => $strengthplus))); //обновляем характеристики
}
}

if(isset($_POST['itename'])){
       $data_items2 = $items->findOne(array('name' => $_POST['itename'])); //вытаскиваем предмет
       $faithminus = $data_player['faith'] - $data_items2['faith'];
$hpminus = $data_player['hp'] - $data_items2['hp'];
$manaminus = $data_player['mn'] - $data_items2['mn'];
$intelligenceminus = $data_player['intelligence'] - $data_items2['intelligence'];
$speedminus = $data_player['speed'] - $data_items2['speed'];
$strengthminus = $data_player['strength'] - $data_items2['strength'];
           foreach($number_cell as $val_cel){
         if($data_inventory[$val_cel] == 'invcell' && $data_inventory['weapon'] != 'weapon'){
          $inventory->update(array('login' => $_SESSION['login_player']), array('$set' => array($val_cel => $_POST['itename'], "weapon" => 'weapon'))); //обновляем инвентарь
       $users->update(array('login' => $_SESSION['login_player']), array('$set' => array("faith" => $faithminus, "hp" => $hpminus, "mn" => $manaminus, "intelligence" => $intelligenceminus, "speed" => $speedminus, "strength" => $strengthminus))); //обновляем характеристики
       break;
       }
       }
}

if(isset($_POST['cell'])){ //если пришло сообщение о выбросе
$cell_var = $_POST['cell'];
$inventory->update(array('login' => $_SESSION['login_player']), array('$set' => array($cell_var => 'invcell'))); //выкидываем <img src="http://s12.ucoz.net/sm/1/biggrin.gif" border="0" align="absmiddle" alt="biggrin" />
}
if(isset($_POST['cell2'])){ //если пришло сообщение о выбросе оружия из ячейки экипировки
$cell_var2 = $_POST['cell2'];
$inventory->update(array('login' => $_SESSION['login_player']), array('$set' => array($cell_var2 => 'weapon'))); //выкидываем <img src="http://s12.ucoz.net/sm/1/biggrin.gif" border="0" align="absmiddle" alt="biggrin" />
}

if(isset($_POST['hpplus']) && $data_player['count_up'] != 0){
$hpup = $data_player['hp']+1;
$count_up = $data_player['count_up']-1;
$users->update(array('login' => $_SESSION['login_player']), array('$set' => array("hp" => $hpup, "count_up" => $count_up)));
}
if(isset($_POST['mnplus']) && $data_player['count_up'] != 0){
$mnup = $data_player['mn']+1;
$count_up = $data_player['count_up']-1;
$users->update(array('login' => $_SESSION['login_player']), array('$set' => array("mn" => $mnup, "count_up" => $count_up)));
}
if(isset($_POST['spplus']) && $data_player['count_up'] != 0){
$spup = $data_player['speed']+1;
$count_up = $data_player['count_up']-1;
$users->update(array('login' => $_SESSION['login_player']), array('$set' => array("speed" => $spup, "count_up" => $count_up)));
}
if(isset($_POST['stplus']) && $data_player['count_up'] != 0){
$stup = $data_player['strength']+1;
$count_up = $data_player['count_up']-1;
$users->update(array('login' => $_SESSION['login_player']), array('$set' => array("strength" => $stup, "count_up" => $count_up)));
}
if(isset($_POST['intplus']) && $data_player['count_up'] != 0){
$intup = $data_player['intelligence']+1;
$count_up = $data_player['count_up']-1;
$users->update(array('login' => $_SESSION['login_player']), array('$set' => array("intelligence" => $intup, "count_up" => $count_up)));
}
if(isset($_POST['ftplus']) && $data_player['count_up'] != 0){
$ftup = $data_player['faith']+1;
$count_up = $data_player['count_up']-1;
$users->update(array('login' => $_SESSION['login_player']), array('$set' => array("faith" => $ftup, "count_up" => $count_up)));
}
?>


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

Теперь поговорим о том как моделировать данные в базе(в основном нужно моделивать только items, но я расскажу про остальные:

Inventory:
Код
{
         "1": "invcell",
         "2": "invcell",
         "3": "invcell",
         "4": "invcell",
         "5": "invcell",
         "6": "invcell",
         "7": "invcell",
         "8": "invcell",
         "9": "invcell",
         "login": "login",
         "weapon": "weapon"       
}

Название после “:”, кроме логина означают название картинки.

Chat:
Код
{
         "login": "login",
         "message": "Сообщение",
         "s": NumberInt(1),
         "time": "00:00:00"       
}
       

По “s” вы ищите сообщения.

Items:
Код
{
        "class": "класс персонажа требующий этого предмета(если всем надо присвоить делайте 3 3 эземляра",
        "faith": 1,
        "intelligence": 2,
        "name": "name",
        "speed": 3,
        "strength": 3,
        "type": "weapon, uses or да хрен его знает, сами названия придумывайте"
}

Quests:
Код

{
         "desctription": "Описание",
         "login": "Персонаж который взял этот квест",
         "name_quest": "название",
         "prise": "награда",
         "xplus": "количество опыта за прохождение",
         "endq": "кому здавать"
}


Обещанные изображения.

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


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

Сообщение отредактировал last2424 - Вторник, 10 Февраля 2015, 16:56
last2424Дата: Четверг, 21 Августа 2014, 07:20 | Сообщение # 658 | Тема: Новые уроки по создание броузерной игры – 7 - Часть 1
30 мл. блоков
Сейчас нет на сайте
Боже мой, я спать хочу но всё равно писать урок решил, будьте благодарны, smile

<-- пред урок

Я сразу предупрежу, перед тем как мы приступим к делу, в этот раз… ну… скажем так,… комментариев будет немного меньше, так, как… моё сегодняшнее состояние… ну вы поняли. Также я сделал всё как можно примитивнее, так, как это уроки, а вы должны учится делать своё, я вам показываю максимально то что может сделать любой из вас, вы же можете потом сделать из этого более удобную вещь, ответ на домашнее задание уже будет в, скрипте game.php, поэтому не переживайте, не буду особо говорить о реализаций.

Начнём. Нам предстоит создать 8 новых файлов и изменить примерно 6 файлов.

Начнём с .htaccess, важная штука вы должны хорошенько задавать настройки вашей игре, но в данном случае я туда добавил только то что в .js файле может работать php код(потом вы поймёте почему).

Код
AddType application/x-httpd-php .js
AddHandler x-httpd-php5 .js

<FilesMatch "\.(js|php)$">
SetHandler application/x-httpd-php
</FilesMatch>


Как это работает я уже объяснил, поэтому пойдём дальше.

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><!--Подключаем game.js-->
<script src="chat.js"></script><!--Подключаем chat.js-->
<link rel="stylesheet" href="style_game.css"/><!--Подключаем стили-->
</head>
<body>
<canvas id="map"></canvas>
<div id="chat">
<iframe src="chat_messages.php" width="898" height="200" id="sms"><!--Создаём фрейм через который подключаем chat_messages.php для вывода сообщений-->
        </iframe>
</div><div id="smeski"><input type="text" name="mes" value="" method="post"/><input type="submit" onclick="var mes = document.getElementsByName('mes')[0].value; sub(mes);" method="post"/></div><!--Форма для отправки сообщений-->
<div id="menu"><a href="inventory.php" target="_blank"><img src="images/invopen.png"/></a><a href="quests.php" target="_blank"><img src="images/queopen.png"/></a><a href="skills.php" target="_blank"><img src="images/mageopen.png"/></a></div> <!--Меню-->
</body>
</html>
<?        

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

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

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

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

}

?>


Тут можно увидеть что я подключил новый файл: chat.js. Он отвечает за функций игрового чата, кроме того были добавлены ещё форма отправки сообщение и iframe с выводом этих сообщений, а также меню из кнопок-картинок(все картинки в конце урока).

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
           ));
$inventory->insert( //запись в бд
               array(
                    'login' => $_POST['login'], //логин пользователя
           '1' => "invcell",
           '2' => "invcell",
           '3' => "invcell",
           '4' => "invcell",
           '5' => "invcell",
           '6' => "invcell",
           '7' => "invcell",
           '8' => "invcell",
           '9' => "invcell",
           'weapon' => "weapon"
           ));        
           $_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>


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

Game.js:
Код
<?
include 'conf.php';
$data_player = $users->findOne(array('login' => $_SESSION['login_player'])); //вытаскиваем данные пользователя
?>

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"; //указываем где находится картинка

var hp = new Image();
hp.src = "images/hp.png";

var mn = new Image();
mn.src = "images/mn.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++){ //запускаем первый цикл в котором у нас рисуется вся трава по x
        for(var y = 0; y < 13; y++){ //запускаем второй цикл в котором у нас рисуется вся трава по 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" />
}
}
for(var x = 0; x < 5; x++){ //запускаем первый цикл в котором у нас рисуются деревья по x
        for(var y = 0; y < 3; y++){//запускаем первый цикл в котором у нас рисуются деревья по y
        ckarta.drawImage(tree, 0, 0, gameWidth, gameHeight, 200*x, 150*y, gameWidth, gameHeight); //рисую
        }
        }
        for(var i = 0; i < <?echo $data_player['hp'];?>; i++){
        ckarta.drawImage(hp, 0, 0, gameWidth, gameHeight, 1*i, 0, gameWidth, gameHeight); //рисую
        }        
         for(var i = 0; i < <?echo $data_player['mn'];?>; i++){
        ckarta.drawImage(mn, 0, 0, gameWidth, gameHeight, 1*i, 6, gameWidth, gameHeight); //рисую
        }        
}


Вот наконец то мы используем php в js файле, тут я в данном случае только вывожу количество здоровье и манны через php, связываюсь с БД, я вижу это крайне удобным, не думаете?

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;
$chat = $db->chat;
$inventory = $db->inventory;
$items = $db->items;
$quests = $db->quests;
?>


Тут я добавил в список новые коллекций: chat, inventory, items, quests.

Style_game.css:
Код

body {
background: #000;
margin: 0px;
padding: 0px;
}
img{
vertical-align: middle;
}
#chat {
background: #fff;
width: 900px;
height: 200px;
display: block;
}
#smeski {
background: #fff;
width: 900px;
}

#map        
{
display: block;
background: #fff;
}
#menu{
display: block;
width: 900px;
height: 200px;
}

#ms{
background: #fff;
}

#inventory{
display: block;
margin: 0px;
}

#quest {
background: #F0A303;
display: block;
border: 1;
border-color: red;
width: 600px;
}

#white_text{
color: #fff;
}


Тут я добавил только разные, новые таблицы со стилями.

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

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

$data_player = $users->findOne(array('login' => $_SESSION['login_player'])); //вытаскиваем инвентарь

if($server_work == 1 and $_SESSION['login_player'] != null){ //проверяем если сервер включён и пользователь авторизировался
?>
<!DOCTYPE html>
<html>
<head>
<title>THEBESTGAME</title>
<script src="skills.js"></script> <!--Подключаем skills.js-->
<link rel="stylesheet" href="style_game.css"/><!--Подключаем стили-->
</head>
<body>
<p id="white_text"><?echo "Колличество очков для прокачки: ".$data_player['count_up'];?></p>
<p id="white_text">Здоровье:<?echo " ".$data_player['hp']." ";?> <a href="" onclick="hpplus();">+</a></p>
<p id="white_text">Мана: <?echo " ".$data_player['mn']." ";?><a href="" onclick="mnplus();">+</a></p>
<p id="white_text">Сила: <?echo " ".$data_player['strength']." ";?><a href="" onclick="stplus();">+</a></p>
<p id="white_text">Скорость: <?echo " ".$data_player['speed']." ";?><a href="" onclick="spplus();">+</a></p>
<p id="white_text">Интелект: <?echo " ".$data_player['intelligence']." ";?><a href="" onclick="intplus();">+</a></p>
<p id="white_text">Вера: <?echo " ".$data_player['faith']." ";?><a href="" onclick="ftplus();">+</a></p>
<div id="test"></div>
</body>
</html>
<?        

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

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

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

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

}

?>


Это примерно такая же вещь как и во время создание персонажа – прокачка.

В данном случае просто вывод, с кнопками.

Код
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")
         }        
                
function hpplus(){
xmlhttp.onreadystatechange=function() //через xmlhttp.onreadystatechange постоянно смотрим за состоянием xmlhttp
         {
         if (xmlhttp.readyState==4 && xmlhttp.status==200) //если запрос удачно отправлен(или принят, я не помню уже) и статус равен 200, а не 404 или чему то другому
           {
           }
         }
xmlhttp.open("POST","server.php",true); //открываем асинхронное соединение с адресом server.php методом POST
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //отправляем заголовок, таким образом имитируя форму, POST запрос всегда требует        
xmlhttp.send("hpplus=1"); //отправляем сообщение
}

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

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

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

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

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


Тут ещё всё проще, мы создаём AJAX запрос, и создаём 6 разных функций в которых выполнятся одно и тоже только разные названия. В данном случае они отправляют на сервер то что игрок нажал на “+” возле одного из характеристик персонажа.

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

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

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

$data_inventory = $inventory->findOne(array('login' => $_SESSION['login_player'])); //вытаскиваем инвентарь

if($server_work == 1 and $_SESSION['login_player'] != null){ //проверяем если сервер включён и пользователь авторизировался
?>
<!DOCTYPE html>
<html>
<head>
<title>THEBESTGAME</title>
<script src="inventory.js"></script> <!--Подключаем inventory.js-->
<link rel="stylesheet" href="style_game.css"/><!--Подключаем стили-->
</head>
<body>
<img src="images/backwindow.png"/><img src="images/backwindow.png"/><img src="images/backwindow.png"/><img src="images/backwindow.png"/><img src="images/backwindow.png"/><br/>
<img src="images/backwindow.png"/><img src="images/items/<?echo $data_inventory['1'];?>.png" onclick="equp('1', '<?echo $data_inventory['1'];?>'); document.location.href = document.location;" oncontextmenu="itemDrop('1'); return false; document.location.href = document.location;"/><img src="images/items/<?echo $data_inventory['2'];?>.png" onclick="equp('2', '<?echo $data_inventory['2'];?>'); document.location.href = document.location;" oncontextmenu="itemDrop('2'); return false; document.location.href = document.location;"/><img src="images/items/<?echo $data_inventory['3'];?>.png" onclick="equp('3', '<?echo $data_inventory['3'];?>'); document.location.href = document.location;" oncontextmenu="itemDrop('3'); return false; document.location.href = document.location;"/><img src="images/backwindow.png"/><br/>
<img src="images/backwindow.png"/><img src="images/items/<?echo $data_inventory['4'];?>.png" onclick="equp('4', '<?echo $data_inventory['4'];?>');" oncontextmenu="itemDrop('4'); return false;"/><img src="images/items/<?echo $data_inventory['5'];?>.png" onclick="equp('5', '<?echo $data_inventory['5'];?>'); document.location.href = document.location;" oncontextmenu="itemDrop('5'); return false; document.location.href = document.location;"/><img src="images/items/<?echo $data_inventory['6'];?>.png" onclick="equp('6', '<?echo $data_inventory['6'];?>'); document.location.href = document.location;" oncontextmenu="itemDrop('6'); return false; document.location.href = document.location;"/><img src="images/backwindow.png"/><br/>
<img src="images/backwindow.png"/><img src="images/items/<?echo $data_inventory['7'];?>.png" onclick="equp('7', '<?echo $data_inventory['7'];?>');" oncontextmenu="itemDrop('7'); return false;"/><img src="images/items/<?echo $data_inventory['8'];?>.png" onclick="equp('8', '<?echo $data_inventory['8'];?>'); document.location.href = document.location;" oncontextmenu="itemDrop('8'); return false; document.location.href = document.location;"/><img src="images/items/<?echo $data_inventory['9'];?>.png" onclick="equp('9', '<?echo $data_inventory['9'];?>'); document.location.href = document.location;" oncontextmenu="itemDrop('9'); return false; document.location.href = document.location;"/><img src="images/backwindow.png"/><br/>
<img src="images/backwindow.png"/><img src="images/backwindow.png"/><img src="images/items/<?echo $data_inventory['weapon'];?>.png" onclick="unequp('<?echo $data_inventory['weapon'];?>'); document.location.href = document.location;" oncontextmenu="itemDropweapon('weapon'); return false; document.location.href = document.location;"/><img src="images/backwindow.png"/><img src="images/backwindow.png"/>
<div id="test"></div>
</body>
</html>
<?        

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

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

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

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

}

?>


Тут я просто рисую картинки и отправляю запросы в Js файл если игрок нажал правой или левой кнопкой мыши(эти запросы разные, в зависимости от кнопки мыши).

Inventory.js:
Код
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")
         }        
function newItem(name){
xmlhttp.onreadystatechange=function() //через xmlhttp.onreadystatechange постоянно смотрим за состоянием xmlhttp
         {
         if (xmlhttp.readyState==4 && xmlhttp.status==200) //если запрос удачно отправлен(или принят, я не помню уже) и статус равен 200, а не 404 или чему то другому
           {
           }
         }
xmlhttp.open("POST","server.php",true); //открываем асинхронное соединение с адресом server.php методом POST
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //отправляем заголовок, таким образом имитируя форму, POST запрос всегда требует        
xmlhttp.send("nameitem=" + name); //отправляем запрос с данными которые записаны в скобках
}

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

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

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

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


Тут у нас создаётся аякс запрос и в зависимости от функций у нас отправляется одна из команд: если появился новый предмет, если он экипирован, он его выкинули, если его сняли.

Часть 2 ->>


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

Сообщение отредактировал last2424 - Четверг, 21 Августа 2014, 14:30
last2424Дата: Четверг, 21 Августа 2014, 05:02 | Сообщение # 659 | Тема: Scalibur !ВИДЕО ГЕЙМПЛЕЯ!
30 мл. блоков
Сейчас нет на сайте
Жду бесплатную лицензию biggrin
Я просто удивлён я с начало видео хотел увидеть пятнадцати-руково-шалкана-босса(но увидел нечто круче).


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

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

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