Пятница, 19 Апреля 2024, 21:24

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Форум игроделов » Движки для разработки игр и сложные системы разработки » Движки для браузерных игр » Урок по созданию браузерной игры № 5 (Создание чата (php, FD, MySQL))
Урок по созданию браузерной игры № 5
AssasinДата: Воскресенье, 25 Октября 2009, 20:50 | Сообщение # 1
web-coder
Сейчас нет на сайте
Вот и 5 урок начался, извините что так долго не писал. Начнем с самого начала, ведь у нас так и осталось не доделана II часть регистрации, а именно переадресация в игру если персонаж создан. Для этого открываем наш файл Main.mxml и после строчек:
Code

[Bindable]
private var patch:String = "img/man1-1.swf"; //текстовая переменная

Записываем:
Code

[Bindable]
private var per:String; //переменная для проверки создания чара

Затем удаляем закоментированые мною строки:
Code

//var link:URLRequest = new URLRequest("http://localhost/game.php"); //создаем ссылку     
//navigateToURL(link, "_self"); //переадресовываем по ссылке

И вместо них вставляем:
Code

per = String(e.result); //переменная равна данным, что считали с php файла
if (per == "1"){ //если данные равны 1, то переадресовываем в игру
var url:URLRequest = new URLRequest("game.php");
navigateToURL(url,"_self");
}

И подправим немного файл reg_comp.php, добавим в конец кода следующее:

Code

echo "1";
$who_online = mysql_query("UPDATE users SET online='1' WHERE email='".$_SESSION['user']."'"); //записываем что столбец online равен 1
session_register("nameChar"); //регистрируем сессию
$_SESSION["name"] = $_POST["nameChar"]; //создаем сессию, которая равна имени персонажа

Как видите появился еще один компонент как online, его мы не создавали в нашей БД, так давайте сделаем это. Заходим в нашу БД, в таблицу users и нажимаем на вкладку SQL в ней записываем такую строку:

Code

ALTER TABLE `users` ADD `online` INT( 1 ) NOT NULL DEFAULT '0'

Теперь нам нужно создать файл, который будет проверять данные, которые пользователь ввел для входа в игру. Назовем его login.php и запишем такие строки:

Code

<?php
session_start();     

include "conf.php";

$email = $_POST['email'];
$passHash = md5($_POST['pass']);

$data = mysql_connect($base_name, $base_user, $base_pass);
if(!$data){
         echo "<BR>";
         echo mysql_error();
         die();
}

mysql_select_db($db_name);
$query = mysql_query("SELECT * FROM users WHERE email='".$email."' AND pass='".$passHash."'"); //выделяем таблицу  users с именем и паролем которые ввел пользователь
$row = mysql_fetch_array($query); //преобразовуем в массив
$num = mysql_num_rows($query); // Возвращает количество рядов результата запроса
if ($num > 0){ //если количество рядов больше 0, то
$_SESSION['user'] = $email; //создаем сессию  email
$_SESSION['ip'] = $row['ip']; //создаем сессию  ip
$_SESSION['name'] = $row['name']; //создаем сессию имени чара
mysql_query("UPDATE users SET online='1' WHERE email='".$email."'"); //делаем пользователя онлайн
echo "<script>location.href='game.php';</script>"; //переадресовываем в игру
} else { //в другом случае
echo "<script>location.href='index.php';</script>"; //переадресовываем на главную
}
?>

Еще нам нужно изменить наш файл index.php, для этого добавим этот код в самое начало файла:

Code

<?php
session_start();
if (isset($_SESSION['user']) || isset ($_SESSION['ip']) || isset($_SESSION['name'])){ //если есть данные сессии, то удаляем их
unset($_SESSION['user']);     
unset($_SESSION['ip']);
unset($_SESSION['name']);
}
?>

Это что б не возникало конфликтов в скриптах. Теперь нам нужно создать файл игры — game.php, в нем будет отображаться флешка WindowGame:

Code

<?php
session_start();

if (isset($_SESSION['user'])) { //если сессию игрока существует, то выводим флешку
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru"     
xml:lang="ru">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="description" content="Браузерная Флеш игра BTG" />     
<meta name="keywords" content="игра, флеш, браузер, BTG, игроки." />     
<link rel="stylesheet" href="style.css" type="text/css" />
<title>Евилопия - бессплатная онлайн Flash игра</title>
</head>
<body>     
<div id="goreg">
     <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="800" height="600" id="reg" align="middle">
     <param name="allowScriptAccess" value="sameDomain" />
     <param name="allowFullScreen" value="false" />
     <param name="movie" value="GameWindow.swf" />
      <param name="quality" value="high" />
      <param name="bgcolor" value="#000000" />
      <embed src="GameWindow.swf" quality="high" bgcolor="#000000" width="800" height="600" name="reg" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" />
     </object>
</div>
</body>
</html>
<?php
}else{ //в другом случае переадресовываем на главную
echo "<script>location.href='index.php';</script>";
}
?>

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

Quote
- Зачем, ними никто не пользуеться, только спамеры
- Та ну, мороки много, лучше побыстрее урок пиши

Привожу код чата, прокоментирован, как всегда, но если возникнут вопросы, то задавайте. Буду рад ответить.

Code

<?xml version="1.0" encoding="utf-8"?>
<mx:Application creationComplete="time()" layout="absolute" width="800" height="150" xmlns:mx="http://www.adobe.com/2006/mxml">
        <mx:Script><![CDATA[
     import flash.events.TimerEvent;
     import flash.net.URLRequest;
     import mx.rpc.events.ResultEvent;
     import mx.controls.Alert;
     import mx.events.ScrollEvent;
     import flash.utils.Timer;
         
     private var id_script:uint;
     private var i:int;
     private var mesg:String;
     private var on:String;
     /* Функция автообновления пользователей онлайн */
     private function time():void {
      onLine();
      msg();
      var timers:Timer = new Timer(10000);
      timers.addEventListener(TimerEvent.TIMER, onTimer);
      timers.start();
     }
         
     private function onTimer(e:TimerEvent):void {
      onLine();
     }
     /* Функция обновления чата */
     private function update():void {
      msg();
     }
     /* Передача сообщения в скрипт */
     public function createMess():void {
      id_script = 1;
      createMessage.send();
      mess_send.text = "";
     }
     /* Вывод сообщений на экран */
     public function msg():void {
      id_script = 2;
      up.send();
     }
     /* Сколько пользователей онлайн */
     public function onLine():void {
      id_script = 3;
      online.send();
     }
     /* Прокрутка текста */
     private function scrollBody():void {
      // сдвигаем скролл в конец окна
      vuvod.verticalScrollPosition = vuvod.maxVerticalScrollPosition + 2;
     }
         
     public function onResult(e:ResultEvent):void {  //обработка результатов и ошибок
       switch (id_script) {
        case 1:
         if (int(e.result) > 0) {
              
         } else {
          switch (int(e.result)) {
           case -1:
            Alert.show("Неудалось подключиться к базе данных. Попробуйте позже", "Ошибка");
            break;
           case -2:
            Alert.show("Вы ничего не ввели", "Ошибка");
            break;
          }
         }
        break;
        case 2:
         mesg = String(e.result);
         vuvod.htmlText = mesg; //вывод сообщений
        break;     
        case 3:
         on = String(e.result);
         onlineUsers.text = on; //вывод сколько пользователей онлайн
        break;
       }
     }

     ]]></mx:Script>
        <mx:HTTPService id="createMessage" useProxy="false" method="POST" resultFormat="text" url="send_mess.php" result="onResult(event)">
            <mx:request>
                <mx:mess_send>{mess_send.text}</mx:mess_send>
            </mx:request>
        </mx:HTTPService>
        <mx:HTTPService id="up" useProxy="false" method="POST" resultFormat="text" url="chat.php" result="onResult(event)"/>
        <mx:HTTPService id="online" useProxy="false" method="POST" resultFormat="text" url="online.php" result="onResult(event)"/>
        <mx:TextInput id="mess_send" x="26" y="119" width="570" height="22" enter="createMess()"/>
        <mx:TextArea id="vuvod" editable="false" x="27" y="29" width="750" height="80" valueCommit="scrollBody()"/>
        <mx:Label text="Игроков в игре:" x="28" y="8" width="97" height="18"/>
        <mx:Label id="onlineUsers" text="-" x="127" y="8" width="36" height="18"/>
        <mx:Button label="Отправить" click="createMess()" x="612" y="119" width="100" height="22"/>
        <mx:Button label="Обновить" click="update()" x="684" y="4" width="90" height="22"/>
</mx:Application>

Теперь создадим файл для записи сообщений в БД, назовем его send_mess.php:

Code

<?php
session_start();

include "conf.php";

$aHours = date("H"); //узнаем сколько часов
$aMinutes = date("i"); //узнаем сколько минут
$time = $aHours.":".$aMinutes; //задаем отображение времени
$mess_send = $_POST['mess_send']; //получаем сообщение
$write = $_SESSION['name']; //узнаем имя чара
$who = $_POST['who']; //узнаем кому отправляют сообщение
/* Выводим ошибку, если ничего не ввели, но нажали кнопку Отправить */
if ($mess_send == "") {
     echo "-2";
     exit;
}
/* Подключаемся к БД */
$data = mysql_connect($base_name, $base_user, $base_pass);
if(!$data){
         echo "-1";
         exit;
}
mysql_select_db($db_name);
/* Записываем данные в БД */
$query = mysql_query("INSERT INTO chat (msg, time_msg, wrt_user, who) VALUES ('".$mess_send."', '".$time."', '".$write."', '".$who."')");
?>

Файл для отображения сообщений, назовем его chat.php:

Code

<?php
include "conf.php";

$data = mysql_connect($base_name, $base_user, $base_pass);
mysql_select_db($db_name);

$query = mysql_query("select * from chat");
$query2 = mysql_query("SELECT * FROM users");
$row = mysql_fetch_array($query2);
/* Выводим сообщения  */
while($line = mysql_fetch_array($query)){
            echo "[".$line['time_msg']. "] ".$line['wrt_user']."<a href='info.php?$row[id_user]' target='_blank'>(i)</a>: ".$line['msg']."<br>";
}
?>

И файл вывода сколько пользователей онлайн, назовем его online.php:

Code

<?php
include "conf.php";

$data = mysql_connect($base_name, $base_user, $base_pass);
mysql_select_db($db_name);

$query = mysql_query("SELECT * FROM users WHERE online='1'");
$online = mysql_num_rows($query);

echo $online;
?>

Вот и 5 урок подошел к концу, ждите продолжения happy И еще раз извините за задержки happy

При копировании материала ссылка на источник обязательна!

WeissДата: Понедельник, 26 Октября 2009, 13:08 | Сообщение # 2
был не раз
Сейчас нет на сайте
У меня проблемка опять
При переходе на goreg.php там где вызиваетса createChar при вводе ника и нажатии даите ничо не происходит но в базу записуетса ник и при поврортном ажатии далее выскакивает окошко мол уже сушествует.

а При входе в адресную строчку выдает http://localhost/“login.php”?email=weiss1985%40gmail.com&pass=1111111
и выдает

Code


<img src="http://s12.ucoz.net/sm/1/sad.gif" border="0" align="absmiddle" alt="sad"> при ручном входе на game.php
все норм заходит но чат сам необновляется. надо наживать обновить. :(Object not found!

The requested URL was not found on this server. The link on the referring page seems to be wrong or outdated. Please inform the author of that page about the error.  

If you think this is a server error, please contact the webmaster.  
Error 404
localhost
26.10.2009 12:03:46
Apache/2.2.12 (Win32) DAV/2 mod_ssl/2.2.12 OpenSSL/0.9.8k mod_autoindex_color PHP/5.3.0 mod_perl/2.0.4 Perl/v5.10.0

Добавлено (26.10.2009, 13:08)
---------------------------------------------
У меня проблемка опять
При переходе на goreg.php там где вызиваетса createChar при вводе ника и нажатии даите ничо не происходит но в базу записуетса ник и при поврортном ажатии далее выскакивает окошко мол уже сушествует.

а При входе в адресную строчку выдает http://localhost/“login.php”?email=weiss1985%40gmail.com&pass=1111111
и выдает

Code

The requested URL was not found on this server. The link on the referring page seems to be wrong or outdated. Please inform the author of that page about the error.  

If you think this is a server error, please contact the webmaster.  
Error 404
localhost
26.10.2009 12:03:46
Apache/2.2.12 (Win32) DAV/2 mod_ssl/2.2.12 OpenSSL/0.9.8k mod_autoindex_color PHP/5.3.0 mod_perl/2.0.4 Perl/v5.10.0

sad при ручном входе на game.php
все норм заходит но чат сам необновляется. надо наживать обновить. :(Object not found!
AssasinДата: Понедельник, 26 Октября 2009, 15:35 | Сообщение # 3
web-coder
Сейчас нет на сайте
В файле index.php замени 34 строку на эту:
Code
<form action='login.php' method='post'>

Просто я писал в Ворде, а он заменяет кавычки на свои, поэтому у тебя была ошибка.
Для того что б чат обновлялся при отправке нового сообщения допиши в конец функции createMess():

Code
msg();

Для авто-обновления уже сам доделай, там легко happy

777OLEKSEY777Дата: Среда, 28 Октября 2009, 19:18 | Сообщение # 4
Руководитель и 3D дизайнер в IlluGameTea Studio
Сейчас нет на сайте
Супер!!! Как и всегда. Когда продолжение?
MaiklIlДата: Среда, 18 Ноября 2009, 17:27 | Сообщение # 5
был не раз
Сейчас нет на сайте
В коде файла login.php, в самом конце, в строке:
Quote (Assasin)
echo "<script>location.href='http://localhost/game.php';</script>"; //переадресовываем в игру

вместо 'http://localhost/game.php' может, лучше просто 'game.php' вставить, вдруг путь у кого-нить другой

а ниже, в строке:

Quote (Assasin)
echo "<script>location.href='http://localhost';</script>"; //переадресовываем на главную

index.php пропущено
AssasinДата: Среда, 18 Ноября 2009, 21:50 | Сообщение # 6
web-coder
Сейчас нет на сайте
Можно smile
MorganДата: Суббота, 21 Ноября 2009, 12:43 | Сообщение # 7
был не раз
Сейчас нет на сайте
при нажатии на кнопку далее на странице goreg ничего не происходит. Что делать?

Сообщение отредактировал Morgan - Суббота, 21 Ноября 2009, 12:47
AssasinДата: Суббота, 21 Ноября 2009, 12:51 | Сообщение # 8
web-coder
Сейчас нет на сайте
Это ошибка клиента, нужно 1 раз ввести имя, нажать Далее, потом удалить и второй раз ввести и нажать, тогда перейдет. Можно и убрать эту ошибку, но попытайтесь сделать сами happy
MorganДата: Суббота, 21 Ноября 2009, 12:59 | Сообщение # 9
был не раз
Сейчас нет на сайте
Quote (Assasin)
Это ошибка клиента, нужно 1 раз ввести имя, нажать Далее, потом удалить и второй раз ввести и нажать, тогда перейдет. Можно и убрать эту ошибку, но попытайтесь сделать сами

Че то ничего не выходит sad Помогите плиз cry

Сообщение отредактировал Morgan - Суббота, 21 Ноября 2009, 13:21
AssasinДата: Суббота, 21 Ноября 2009, 14:22 | Сообщение # 10
web-coder
Сейчас нет на сайте
Что б долго не мучаться в файле reg_comp.php после данного кода
Code
mysql_select_db($db_name);
$query = "SELECT * FROM users WHERE name='".$nameChar."'";
$result = mysql_query($query);
$num_results = mysql_num_rows($result);
if ($num_results > 0) {
  echo "-2";
  exit;
}

замените все на этот

Code
echo "1";
$result = mysql_query("UPDATE users SET name='".$nameChar."' WHERE email='".$_SESSION['user']."'");
$who_online = mysql_query("UPDATE users SET online='1' WHERE email='".$_SESSION['user']."'");
echo "1";
session_register("nameChar");
$_SESSION["name"] = $_POST["nameChar"];
$ava = mysql_query("INSERT INTO avatar (gander, vid, path) VALUES ('".$gander."', '".$vid."', '".$patch."')");
echo "1";

А в файле Main.mxml вместо

Code

[Bindable]  
private var per:String; //переменная для проверки создания чара

Напишите

Code

[Bindable]  
private var per:int; //переменная для проверки создания чара

и вместо

Code
per = String(e.result); //переменная равна данным, что считали с php файла  
if (per == "1"){ //если данные равны 1, то переадресовываем в игру  
var url:URLRequest = new URLRequest("game.php");  
navigateToURL(url,"_self");  
}

напишите

Code

per = int(e.result); //переменная равна данным, что считали с php файла  
if (per > 0){ //если данные равны 1, то переадресовываем в игру  
var url:URLRequest = new URLRequest("game.php");  
navigateToURL(url,"_self");  
}
MorganДата: Суббота, 21 Ноября 2009, 14:35 | Сообщение # 11
был не раз
Сейчас нет на сайте
Блин не знаю что такое но ничего не выходит(((( При нажатии на далее вообще нечиго не происходит. Хотя в базу все заносится и при ручном переходе на game.php все норм пишет что пользователей 1 и ник пишет. вообщем буду разбираться
AssasinДата: Суббота, 21 Ноября 2009, 14:40 | Сообщение # 12
web-coder
Сейчас нет на сайте
Попробуйте перезапустить xampp, возможно проблема устраниться.
MorganДата: Суббота, 21 Ноября 2009, 14:46 | Сообщение # 13
был не раз
Сейчас нет на сайте
Тоже самое абсолютно ничего. может скажешь какие страницы выложить здесь, и ты глянешь в чем дело? Буду очень признателен)))))
AssasinДата: Суббота, 21 Ноября 2009, 14:48 | Сообщение # 14
web-coder
Сейчас нет на сайте
Выложи reg_comp.php и Main.mxml
MorganДата: Суббота, 21 Ноября 2009, 15:06 | Сообщение # 15
был не раз
Сейчас нет на сайте
Выкладываю)))


Сообщение отредактировал Morgan - Суббота, 21 Ноября 2009, 15:08
AssasinДата: Суббота, 21 Ноября 2009, 15:12 | Сообщение # 16
web-coder
Сейчас нет на сайте
Все верно, выложи Main.mxml
MorganДата: Суббота, 21 Ноября 2009, 15:13 | Сообщение # 17
был не раз
Сейчас нет на сайте
Вот


Сообщение отредактировал Morgan - Суббота, 21 Ноября 2009, 15:14
AssasinДата: Суббота, 21 Ноября 2009, 15:16 | Сообщение # 18
web-coder
Сейчас нет на сайте
После
Code
import mx.controls.Alert; //определения результата, второй для вывода всплывающих окон

Нужно добавить
Code
import flash.net.navigateToURL;
MorganДата: Суббота, 21 Ноября 2009, 15:20 | Сообщение # 19
был не раз
Сейчас нет на сайте
Это все или еще что то не так?
AssasinДата: Суббота, 21 Ноября 2009, 15:22 | Сообщение # 20
web-coder
Сейчас нет на сайте
Все smile
Форум игроделов » Движки для разработки игр и сложные системы разработки » Движки для браузерных игр » Урок по созданию браузерной игры № 5 (Создание чата (php, FD, MySQL))
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

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