Будет полезно всем

Sp1DeR

Новичок
Репутация
0 / 66
Вобщем сейчас потихоньку учу PHP и всё тому подобное и очень заинтересовался разработкой браузерных онлайн игр и нашёл довольна таки полезный и интересный материал :

Создание Браузерной Онлайн игры :

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

1) Для начала нужно очень много терпения и твердого решения идти до победного конца. Иначе все оборачиваеться тем что сделали регистрацию и форму входа, на этом и закончилась игра. Также не помешает команда, но это уже как получиться.

2) Нужно иметь неплохие знания в таких скриптовых языках:
- php
- html
- css
- javascript
- MySQL
- AS3 (Flash)

3) Литература:
В интернете очень много разной литературы по приведенным выше скриптовых языках, используйте какая вам нравиться :) Но я все таки посоветую те книги по которым сам учился:

PHP:
А. Кухарчик Обучение на примерах
PHP для чайников

html, css:
http://www.htmlbook.ru/

java script:
javascript.ru

MySQL:

Самоучитель MySQL 5

AS3:
demiart.ru
easyflash.org

ActionScript 3.0 для Flash. Подробное руководство. Колин Мук
ActionScript 3.0 Сборник рецептов. Джои Лотт. Деррон Шалл. Кейт Питерс

4) Также вам нужно определиться что именно вы хотите сделать, описать все аспекты вашей игры, расписать подробное Техническое задание для себя и если вы делаете командой, то и для остальных. И можете приступать

Но это только малая часть того что нужно, все остальное прибудет с опытом ( надеюсь :) )
Успехов в нашем нелегком деле :)

-----------------------------------------------------------------------------------------------------

Урок по созданию браузерной игры № 1

Появилась такая идея как создать курс по теме: «Создание браузерной флеш игры». В этом курсе будет описываться главные аспекты игры, также, надеюсь, под конец курса многие поймут как делаються такие игры. Может возьмут этот курс за основу для своей будущей игры. Все уроки которые будут здесь написаны, будут максимально прокоментированы, если что то не понятно, то задавайте вопросы сразу в той теме в которой написан урок.

Что понадобиться:
PSPad – программа для написания php скриптов ( можно и другие, но я пользуюсь этой и привык к ней ).
FlashDevelop – для написания флеш модулей ( далее буду писать его сокращенно FD)
xampp — сборка веб-сервера ( будем тестировать наши скрипты )

Так как я не очень хорошо рисую, все картинки буду брать из конструктора RPG Maker.
Думаю с программами определились, перейдем к описанию уроков.

Уроки:
1. Урок № 1 Обсуждение игры. Создание БД (MySQL)
2. Урок № 2 Создание формы входа и I этап регистрации (php, html, MySQL,css)
3. Урок № 3 II этап регистрации (php, FD, MySQL)(в разработке)
4. Урок № 4 Игровое окно. Техническое описание чата (php, FD, MySQL)(в разработке)
5. Урок № 5 Создание чата (php, FD, MySQL)(в разработке)
6. Урок № 6 Создание характеристик чара (php, FD, MySQL)(в разработке)
7. Урок № 7 Техническое описание инвентаря(в разработке)
8. Урок № 8 Создание инвентаря (php, FD, MySQL)(в разработке)
9. Урок № 9 Игровое поле (php, FD, MySQL)(в разработке)
10. Урок № 10 Создание обьектов на игровом поле (php, FD, MySQL)(в разработке)
11. Урок № 11 Создание квеста (php, FD, MySQL)(в разработке)
12. Урок № 12 Техническое описание модуля боя(в разработке)
13. Урок № 13 Создание модуля боя (php, FD, MySQL)(в разработке)
14. Урок № 14 Создание системы прокачки героя (php, FD, MySQL)(в разработке)
15. Урок № 15 Подведем итоги(в разработке)

Вот такой перечень уроков. Уроки буду писать основываясь на собственном опыте, ни в каких книгах вы их не найдете, так что и не думайте что я с какой то книжки все это переписываю. Думаю по одному уроку в день писать, но как вы знаете теория и практика совершенно разные вещи, так что тогда извеняйте и ждите happy
В каждом уроке буду все детально расписывать, ведь курс расчитан на новичков, людей еще не опытных в сфере создания игр.

База данных

Итак начнем с сердца игры, ее Базы Данных (далее БД). Для чего она нужна? В ней будут храниться все данные, такие как: характеристики персонажа, сообщения в чате, какие предметы находяться в инвентаре и т.д. Мы будем пользоваться БД MySQL, так как она очень хорошо подходит для наших php скриптов. БД хранит в себе таблицы, в каждой таблице находяться столбцы, например таблица «users» имеет 3 столбца: “login”, “pass”, “email”. Думаю с этим разобрались.

У нас будет 7 таблиц:
users – хранит все характеристики игрока
avatar – хранит вид персонажа
chat – хранит сообщения чата
inventar – отображает какие вещи в инвентаре
quest – хранит данные о квесте
battle – хранит данные о боях
enemy – хранит данные о врагах

В дальнейшем БД может дополниться. Теперь рассмотрим каждую таблицу отдельно.
В таблице users будем хранить такие данные:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>id_user – уникальный номер персонажа
email — email игрока, по нему будет осуществляться вход в игру
pass - пароль
name — имя игрока, будет отображаться в самой игре и в чате
life – жизни персонажа
atk — значение атаки
def - значение защиты
lov – значение ловкости
lvl – уровень игрока
exp – опыт игрока
В таблице avatar такие данные:
id_ava – уникальный номер аватарки
gander – какого пола персонаж
vid – какой вид у персонажа
path – путь к папке с картинками персонажа
В таблице chat такие данные:
id_msg – уникальный номер сообщения
msg – сообщение
time_msg – время когда было написано сообщение
wrt_user – кто написал
who – кому написали
В таблице inventar такие данные:
id_inv – уникальный номер вещи
name_object – название вещи
atk_up – сколько добавляет к атаке
def_up - сколько добавляет к защите
lov_up - сколько добавляет к ловкости
life_up - сколько добавляет к жизням
В таблице quest такие данные:
id_quest – уникальный номер квеста
cont_quest – завершен квест или нет?
kill_quest – сколько убито противников
В таблице battle такие данные:
id_btl – уникальный номер битвы
end_btl – исход битвы ( выиграли вы или проиграли )
В таблице enemy такие данные:
id_enm – уникальный номер врага
name_enm – имя врага
life_enm – жизни врага
atk_enm - атака
def_enm - защита
lov_enm - ловкость
exp_enm – сколько опыта даст если победить его
path_enm – путь к картинкам врага</div>

Думаю все, если чего то не хватает, то по ходу написания доделаем. С установкой xampp я думаю разобрались. Теперь запустите его, в xampp Control Panel должно быть запущено Apache и MySQL, все остальное выключено. Напротив MySQL есть кнопка Admin, жмите на нее и попадете в утилиту phpMyAdmin, которая позволяет создавать БД. В открывшемся окне браузера находим вкладку SQL и жмем ее.
Теперь пришло время создать нашу БД, а также ознакомиться со скриптовым языком SQL. Ниже приведен код и прокоментирован, если все таки возникнут вопросы, то задавайте.

<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
DROP DATABASE testgame; /* Если данная БД уже создана, то удаляем ее */
CREATE DATABASE testgame DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci; /* Создаем БД со стандартной кодировкой cp1251(для того что б поддерживался русский язык)*/
USE testgame; /* используем данную БД */

/* таблица персонажа */
CREATE TABLE `users` (
id_user bigint(20) unsigned NOT NULL auto_increment, /* уникальный номер, который не повторяеться и с каждым новым пользователем увеличиваеться на 1 */
email CHAR(64), /* текстовый тип (64 символа) */
pass CHAR(32), /* текстовый тип (32 символа) */
name CHAR(32), /* текстовый тип (32 символа) */
life INT DEFAULT 50, /* числовой тип, по умолчанию равен 50 */
atk INT DEFAULT 7, /* числовой тип, по умолчанию равен 7 */
def INT DEFAULT 5, /* числовой тип, по умолчанию равен 5 */
lov INT DEFAULT 7, /* числовой тип, по умолчанию равен 7 */
lvl INT DEFAULT 1, /* числовой тип, по умолчанию равен 1 */
exp INT DEFAULT 0, /* числовой тип, по умолчанию равен 0 */
PRIMARY KEY (`id_user`) /* Показываем что уникальным номером у нас являеться id_user */
) ENGINE=MyISAM DEFAULT CHARSET=cp1251; /* Обозначаем тип таблицы MyISAM. Таблицы типа MyISAM показывают хорошие результаты при выборках SELECT. Для .jktt подробного изучения читайте Самоучитель по MySQL 5 */

/* таблица аватара */
CREATE TABLE `avatar` (
id_ava bigint(20) unsigned NOT NULL auto_increment, /* уникальный номер, который не повторяеться и с каждым новым пользователем увеличиваеться на 1 */
gander SMALLINT(1), /* Пол игрока, цыфровой тип(1 цыфра) */
vid SMALLINT(2), /* Вид игрока, цыфровой тип(2 цыфры)*/
path CHAR(32), /* Путь к папке с рисунками персонажа, текстовый тип(32 символа) */
PRIMARY KEY (`id_ava`) /* Показываем что уникальным номером у нас являеться id_ava */
) TYPE=MyISAM;

/* таблица чата */
CREATE TABLE `chat` (
id_msg bigint(20) unsigned NOT NULL auto_increment, /* уникальный номер, который не повторяеться и с каждым новым пользователем увеличиваеться на 1 */
msg CHAR(255), /* текстовый тип(255 символов) */
time_msg CHAR(5), /* текстовый тип(5 символов) */
wrt_user CHAR(32), /* текстовый тип(32 символов) */
who CHAR(32), /* текстовый тип(32 символов) */
PRIMARY KEY (`id_msg`) /* Показываем что уникальным номером у нас являеться id_msg */
) TYPE=MyISAM;

/* таблица инвентаря */
CREATE TABLE `inventar` (
id_inv bigint(20) unsigned NOT NULL auto_increment, /* уникальный номер, который не повторяеться и с каждым новым пользователем увеличиваеться на 1 */
name_object CHAR(64),
atk_up INT(2),
def_up INT(2),
lov_up INT(2),
life_up INT(4),
PRIMARY KEY (`id_inv`) /* Показываем что уникальным номером у нас являеться id_msg */
) TYPE=MyISAM;

/* таблица квеста */
CREATE TABLE `quest` (
id_quest bigint(20) unsigned NOT NULL auto_increment,
cont_quest CHAR(32),
kill_quest INT DEFAULT 0,
PRIMARY KEY (`id_quest`)
) TYPE=MyISAM;

/* таблица боя */
CREATE TABLE `battle` (
id_btl bigint(20) unsigned NOT NULL auto_increment,
end_btl CHAR(32),
PRIMARY KEY (`id_btl`)
) TYPE=MyISAM;

/* */
CREATE TABLE `enemy` (
id_enm bigint(20) unsigned NOT NULL auto_increment,
name_enm CHAR(32),
atk_enm INT,
life_enm INT,
def_enm INT,
lov_enm INT,
exp_enm INT,
path_enm CH AR(32),
PRIMARY KEY (`id_enm`)
) TYPE=MyISAM;

/* Добавляем в таблицу данные о враге */
INSERT INTO enemy (name_enm,
atk_enm,life_enm,def_enm,lov_enm,exp_enm,path_enm)
VALUES('Призраки','7','40','6','4','10','path/enemy/'); </div>

С таблицей справились, проверяем, все нормально. SQL запрос прошел удачно. На этом урок заканчиваеться, ждите продожения smile

Если возникли вопросы пишите в этой теме.
Если есть какие то подправки в код, тоже пишите, так как я так же как и вы учусь создавать браузерную флеш игру и тоже могу ошибаться.


-----------------------------------------------------------------------------------------------------

Урок № 2 Создание формы входа и I этап регистрации

Итак приступаем ко второму уроку. Здесь я опишу как с помощью html создаються формы, и как с помощью php можно записать данные, введенные в эти формы, в БД.
Сначала создадим форму входа, она будет состоять с двух полей ввода для email игрока и пароля. Также на ней будет 2 кнопки, одна кнопка ведет на скрипт регистрации, другая инициализирует игрока и перемещает его в игру. Для начала перейдите в папку htdocs что находиться в каталоге xampp, у меня это C:\xampp\htdocs\ и удалите все что там есть.
Итак приступим к написанию скрипта, создайте с помощью PSPad новый документ и назовите его index.php, сохраните этот документ в папке htdocs, которая находиться в каталоге xampp. У меня это C:\xampp\htdocs\
После того как сохранили вставьте код приведенный ниже, а лучше перепишите, так вы лучше поймете и запомните.

<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
<!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=windows-1251" />

<meta name="description" content="Браузерная Флеш игра BTG" />

<meta name="keywords" content="игра, флеш, браузер, BTG, игроки." />

<link rel="stylesheet" href="style.css" type="text/css" />

<title>BTG – браузерная онлайн Flash игра</title>

</head>

<body>

<div id='entry'>

<form action=“login.php” method=“post”>

<input class="inup" type="text" onblur="if (value == '') {value='E-mail'}" onfocus="if (value == 'E-mail') {value =''}" value="E-mail" name="email">


<input class="inup" type="password" onblur="if (value == '') {value='Пароль'}" onfocus="if (value == 'Пароль') {value =''}" value="Пароль" name="pass">


<input type="submit" class='btn' value="Войти">


<input type=button class='btn' value=' Регистрация ' onclick='window.location="reg.php"'>

</form>
</div>
</body>
</html> </div>

С формой входа справились, сохраняем ее, открываем браузер и переходим по такому адресу
http://localhost/index.php и видим примерно следующее
(
8de08c4d7e75.jpg
).
Так сказать не очень впечатляет такое расположение элементов. Что б все красиво оформить создаем в PSPad документ CSS(Cascading Style Sheet) и называем его style.css. В этом документе мы будем хранить всю графическую информацию главной страницы сайта и I этапа регистрации. Приступаем к еаписанию кода.

<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>/* Задаем значения для той области документа, которая находиться между тегами <body></body>. background-color это фон нашего сайта, я установил на черный, все остальные значения обозначают что у нас отступы от краев браузера будут равны 0, тоесть их совсем не будет */
body {background-color:#000000;margin-left:0px;margin-top:0px;margin-right:0px;margin-bottom:0px;}
/* Задаем значения для той области которая находиться в теге <div> с именем entry(id=entry)
Задаем цвет текста белый, и выравнивание по-центру */
#entry {color:#ffffff;text-align:center;}
/* Здесь описываються значения для наших кнопок. Размер шрифта, цвет текста, сам шрифт, цвет фона и цвет рамки вокруг кнопки */
.btn {font-size:7.5pt;color:#dfddd3;font-family:Verdana,Arial,Helvetica,sans-serif;background-color:#2b2b18;border:1px double #817A63;}
/* Здесь описываються значения для наших полей ввода. Размер шрифта, цвет текста, сам шрифт, цвет фона и цвет рамки вокруг поля */
.inup {text-align:center;font-size:8pt;color:#dfddd3;font-family:Verdana,Arial,Helvetica,sans-serif;background-color:#151616;border: 1px double #817a63;}</div>

Сохраняем документ и снова переходим по адресу http://localhost/index.php и теперь видим более менее приличную картину
5ecc7028058c.jpg

Вы конечно можете переделать цвет и фон по своему, это будет вам на пользу.
Теперь если нажать на кнопку Вход то перейдем по адресу http://localhost/login.php , но нам выдаст ошибку так как такого файла нету, мы его еще не создали.
И если нажать на кнопку Регистрация, тоже выдаст ошибку, так как тоже такого файла еще нету.
Файл login.php мы создадим в 3 уроке. Сейчас возьмемся за файл reg.php.
Создаем в PSPad'e новый php файл, сохраняем его с именем reg.php в папку где находиться index.php и style.css.
Итак, что же у нас будет в файле регистрации?
Будет 3 поля, в одном нужно будет ввести email игрока, в другом пароль и в третьем подтверждение пароля.
Также у нас будет check-box для согласия с правилами игры. Ну и конечно кнопка Далее.
При создании этого файла мы впервые столкнемся с языком php, на котором напишем условие проверки заполнения полей, а также записи данных в БД.
Но для начала нам нужно создать файл conf.php, в нем будет храниться информация о нашей БД. Все php скрипты пишуться в таких вот кавычках <?php ?>
Выглядеть это будет так:

<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?php
$base_name="localhost"; //имя (стандартно у всех localhost)
$base_user="root"; //юзер (стандартно у всех root)
$base_pass="password"; //пароль (выставить можно зайдя во вкладку Привилегии в phpMyAdmin
$db_name="testgame"; //имя БД
?> </div>

Теперь мы можем приступить к написанию скрипта регистрации:

<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?php
session_start(); //стартуем сесию

include "conf.php"; //подключаем файл с параметрами БД

/* Подключаемся к БД, если не получаеться, то выводим ошибку */
$data = mysql_connect($base_name, $base_user, $base_pass);
if(!mysql_select_db($db_name,$data)){
echo "
";
echo mysql_error();
die();
}
//Прверяем на заполнение полей
if ($_POST['next']){ //если нажата кнопка далее, то
$error=0; // переменная равна 0
//Проверка на мыло
if (!$_POST['email']){ $errm = "Вы не ввели e-mail
"; $error=1;}
if(!preg_match("/^[_\.0-9a-z-]{1,}@[_\.0-9a-z-]{1,}\.[_\.0-9a-z-]{2,}$/", $_POST ["email"])) {$errm .= "Неправильный e-mail"; $error =1;}
$c_e = mysql_num_rows(mysql_query("SELECT id FROM players where email='".$_POST ["email"]."'")); {if ($c_e>0) {$errm .= "Данный e-mail уже зарегистрирован в игре"; $error=1;}}
//Проверка на пароль
if(!$_POST ["pass"]) {$errp = "Необходимо указать Ваш пароль
"; $error =1;}
if(!preg_match("/^[А-Яа-яЁёa-zA-Z0-9]+$/",$_POST ["pass"])) {$errp .= "Пароль содержит запрещенный символ
"; $error =1;}
if (strlen ($_POST ["pass"])<6 || strlen ($_POST ["pass"])>25){ $errp .="Длина пароля от 6 до 25 символов
"; $error =1;}
if ($_POST ["pass"]!= $_POST ["pass2"]){ $errp .="Введёные вами пароли не совпадают!"; $error =1;}
//проверка на согласие с правилами
if (!$_POST['rules']) {$errr = "Вы не согласны с правилами?
"; $error=1;}
// Нет ошибок, создаём перса
if(!$error)
{
$ip = $_SERVER['REMOTE_ADDR'];//узнаем ip адрес юзера
/* Записываем данные в БД */
mysql_query ("INSERT INTO players (pass, ip, email) values('".md5($_POST ["pass"])."','".$ip."','".addslashes($_POST ["email"])."')") or die("Invalid query: " . mysql_error());
session_register("email");//регестрируем сессию email
session_register("ip");//регестрируем сессию ip
$_SESSION['user'] = $_POST['email']; //записуем email в глобыльную переменную $_SESSION
$_SESSION['ip'] = $_POST['ip'];//записуем ip в глобыльную переменную $_SESSION
?>
<script>location.href="goreg.php";</script>
<?php
}
}
// Выводим ошибочки
function err($text){
return "<tr valign='middle' align='left'><td colspan='2'>$text</td></tr>";
}
?>
<!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=windows-1251" />
<meta name="description" content="Браузерная Флеш игра BTG" />
<meta name="keywords" content="игра, флеш, браузер, BTG, игроки." />
<link rel="stylesheet" href="style.css" type="text/css" />
<title>BTG – браузерная онлайн Flash игра</title>
</head>
<body>
<div id="reg">
<form action="" method="post">

<table align="center">

<tr><td align="left" width="200">E-mail:</td><td><input type="text" value="<?php echo $_POST['email'] ?>" name="email" class="inup"></td></tr>
<?php echo err($errm); ?>
<tr><td align="left" width="200">Пароль:</td><td><input type="password" value="" name="pass" class="inup"></td></tr>
<?php echo err($errp); ?>
<tr><td align="left" width="200">Повторите пароль:</td><td><input type="password" value="" name="pass2" class="inup"></td></tr>

</table>

<span><input type="checkbox" class="inup" name="rules"> Я обязуюсь соблюдать </p>
<?php echo err($errr); ?>
<input type="submit" name="next" value="Дальше" class="btn">
</form>
</div>
</body>
</html> </div>

Теперь обьясняю. После нажатии кнопки Далее происходит проверка скрипта, если все поля введены, то переадресовываем на следующую страницу в которой будет создавать своего персонажа, но это в 3 уроке.
Если поля или какое то поле пустое, то выводиться ошибка.
Так же у нас появился новый параметр — ip. Мы его не обозначили в нашей БД.
Так что заходим в phpMyAdmin, Переходим по нашей БД testgame, жмем на таблицу users и добавляем ip, по скринам думаю разберетесь:
6e7b56af2c0f.jpg

0547fcc0adfc.jpg

47290c2351b6.jpg

Теперь нам нужно подправить файл style.css, так как в нашем скрипте добавился еще один класс reg. Добавим следующий код:

<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>#reg {color:#ffffff;text-align:center;}
.error {FONT-SIZE:8pt;FONT-FAMILY:verdana;COLOR:red;}
A:link {COLOR:#F9F7EA;TEXT-DECORATION:none;font-weight:normal;}
A:visited {COLOR:#F9F7EA;TEXT-DECORATION:none;font-weight:normal;}
A:active {COLOR:#77684D;TEXT-DECORATION:none;font-weight:normal;}
A:hover {COLOR: #7E7765;TEXT-DECORATION:underline} </div>

A:link, A:visited, A:active, A:hover — описывают состояние ссылки при наведении на нее мишки, при нажатии, при покидании области ссылки и в неактивном состоянии.

Вот и второй урок подошел к концу, если возникли вопросу, прошу задавайте, буду рад ответить.

<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Скрытая информация: Данный мануал взят с <input type="button" value="Показать" style="width:60px;font-size:10px;margin:0px;padding:0px;" onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = 'Скрыть'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Показать'; }">
</div>
<div class="alt2" style="margin: 0px; padding: 6px; border: 1px inset;">
<div style="display: none;">
http://gcup.ru/forum/51
</div>
</div>
</div>


Надеюсь кому пригодится. Вобщем по мере появления новых уроков буду выкладывать. Ну и предлагаю если кому интересна эта тема можем тоже коллективно писать уроки тут. :)
 
только при чём тут ИВ ? :) :) :) :)
Ну сори не знал где постить :)
Вобщем многие как и я во многом не шарят но хотят доделать ИВ и поднять его у себя на серве (образно)
Я думаю тут многое что будет полезным для этого. Как минимум читая как делается с нуля можно понять в чём суть и как работает, а следовательно связать с ИВ
 
тему перенёс и вроде чтото похожее гдето уже видел........
 
Любое создание онлайн игры начинаеться с dapf.ru

Думаю вопросов больше нет :)
 
моё мнение это то, что любую игру можно создать и/или научится чему либо это благодоря желанию и поиску!

я начял изучать хтмл не по своей воли, просто в му сайтах когда делал свой му, просто смотрел что какая фигня делает и так запоминал.

С пхп познакомился благодаря скрипту ИВ, очень хотел зделать игру :) ну вот штудировал, смотрел ИВ ну и понемногу начял понимать. Очень мало использовал ресурсов пхп уроков и.т.д. только в последнее время.


Поиск + Желание + Мо3г = Всё что захочеш
 
Ну я по сути занимаюсь этим для изучения языка и очень хочу сделать что то вроде неверлендс. так как найти хотя бы частичный скрипт от нл не мог :) (именно НЛ а не переделку с ИВ) то хочу с каркаса ИВ полностью воспроизвести что то подобное НЛ.


Кстати у кого есть подобная полезная инфа из этой области поделитесь буду очень признателен :)
 
Поиск + Желание + Мо3г = Всё что захочеш

руки забыл!! без рук не получится))) :)
 
тему перенёс и вроде чтото похожее гдето уже видел........

да есть помоему школа такая создания игор + ише гдето на форуме есть видео уроки ... вопшем ето взято с етава))
 
носом по клавишам пусть строчат :) есть руки из норм места, а есть и из Жо-Жо =)

НЛ == САМОПИСЬ! Учись и пиши с 0 подобие НЛ. Я не играл НЛ токо глазом пробежался помоему и давным давно 1-2 ур. набил даж 2 небыло :) и всё! Как ты уже и пробуеш, так и пробуй делать из ИВ. Нечего толкого по НЛ сказать не могу.
 
НЛ раньше был вроде на основе ИВ а щас думаю там уже всё переписано.
 
незнаю, я говорю что я вижу щас и видел раньче, потому что я невидел что было с самого начала, я даж нез. сколько она вобще существует...
 
:) эт тема как сделать индекс.пхп?))такое еще со школы помню))
 
И так продолжение :)
Пы.Сы. Можно тему немного почистить я буду потихоньку тут продолжать.

Извините за долгое отсутствие уроков, очень мало свободного времени остаеться, но ничего. Приступаем к нашему третьему уроку. В этом уроке мы сделаем II часть регистрации, а именно — создание персонажа. Я сильно не заморачивался и сделал по простому, вот такой результат у нас получиться
69814c3bb2b4.png
.
И еще одно, так как флешки, которые мы будем создавать, читают только utf-8 кодировку, то нам нужно немного изменить нашу БД.
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>DROP DATABASE testgame; /* Если данная БД уже создана, то удаляем ее */
CREATE DATABASE testgame DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; /* Создаем БД со стандартной кодировкой utf-8(для того что б поддерживался русский язык)*/
USE testgame; /* используем данную БД */

/* таблица персонажа */
CREATE TABLE `users` (
id_user bigint(20) unsigned NOT NULL auto_increment, /* уникальный номер, который не повторяеться и с каждым новым пользователем увеличиваеться на 1 */
email CHAR(64), /* текстовый тип (64 символа) */
pass CHAR(32), /* текстовый тип (32 символа) */
name CHAR(32), /* текстовый тип (32 символа) */
life INT DEFAULT 50, /* числовой тип, по умолчанию равен 50 */
atk INT DEFAULT 7, /* числовой тип, по умолчанию равен 7 */
def INT DEFAULT 5, /* числовой тип, по умолчанию равен 5 */
lov INT DEFAULT 7, /* числовой тип, по умолчанию равен 7 */
lvl INT DEFAULT 1, /* числовой тип, по умолчанию равен 1 */
exp INT DEFAULT 0, /* числовой тип, по умолчанию равен 0 */
ip CHAR(15), /* текстовый тип (15 символов) */
PRIMARY KEY (`id_user`) /* Показываем что уникальным номером у нас являеться id_user */
) ENGINE=MyISAM DEFAULT CHARSET=utf8; /* Обозначаем тип таблицы MyISAM. Таблицы типа MyISAM показывают хорошие результаты при выборках SELECT. Для более подробного изучения читайте Самоучитель по MySQL 5 */

/* таблица аватара */
CREATE TABLE `avatar` (
id_ava bigint(20) unsigned NOT NULL auto_increment, /* уникальный номер, который не повторяеться и с каждым новым пользователем увеличиваеться на 1 */
gander INT(2), /* Пол игрока, цыфровой тип(2 цыфра) */
vid CHAR(32), /* Вид игрока, цыфровой тип(2 цыфры)*/
path CHAR(32), /* Путь к папке с рисунками персонажа, текстовый тип(32 символа) */
PRIMARY KEY (`id_ava`) /* Показываем что уникальным номером у нас являеться id_ava */
) TYPE=MyISAM;

/* таблица чата */
CREATE TABLE `chat` (
id_msg bigint(20) unsigned NOT NULL auto_increment, /* уникальный номер, который не повторяеться и с каждым новым пользователем увеличиваеться на 1 */
msg CHAR(255), /* текстовый тип(255 символов) */
time_msg CHAR(5), /* текстовый тип(5 символов) */
wrt_user CHAR(32), /* текстовый тип(32 символов) */
who CHAR(32), /* текстовый тип(32 символов) */
PRIMARY KEY (`id_msg`) /* Показываем что уникальным номером у нас являеться id_msg */
) TYPE=MyISAM;

/* таблица инвентаря */
CREATE TABLE `inventar` (
id_inv bigint(20) unsigned NOT NULL auto_increment, /* уникальный номер, который не повторяеться и с каждым новым пользователем увеличиваеться на 1 */
name_object CHAR(64),
atk_up INT(2),
def_up INT(2),
lov_up INT(2),
life_up INT(4),
PRIMARY KEY (`id_inv`) /* Показываем что уникальным номером у нас являеться id_msg */
) TYPE=MyISAM;

/* таблица квеста */
CREATE TABLE `quest` (
id_quest bigint(20) unsigned NOT NULL auto_increment,
cont_quest CHAR(32),
kill_quest INT DEFAULT 0,
PRIMARY KEY (`id_quest`)
) TYPE=MyISAM;

/* таблица боя */
CREATE TABLE `battle` (
id_btl bigint(20) unsigned NOT NULL auto_increment,
end_btl CHAR(32),
PRIMARY KEY (`id_btl`)
) TYPE=MyISAM;

/* */
CREATE TABLE `enemy` (
id_enm bigint(20) unsigned NOT NULL auto_increment,
name_enm CHAR(32),
atk_enm INT,
life_enm INT,
def_enm INT,
lov_enm INT,
exp_enm INT,
p ath_enm CHAR(32),
PRIMARY KEY (`id_enm`)
) TYPE=MyISAM;

/* Добавляем в таблицу данные о враге */
INSERT INTO enemy (name_enm,
atk_enm,life_enm,def_enm,lov_enm,exp_enm,path_enm)
VALUES('Призраки','7','40','6','4','10','path/enemy/'); </div>

А также во всех php файлах заменить эту строку:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
<meta http-equiv="content-type" content="text/html; charset=windows-1251" /> </div>
на эту:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> </div>
С помощью этой замены мы поменяем кодировку страниц на utf-8. Также в PSPad'e на строке меню нажмите Формат->UTF-8 и эту операцию проделайте с каждым файлом php.
Теперь приступим к созданию нашей регистрации. Мы будем её делать во FlashDevelop. Запускаем его и видим начальное окно, в котором нам предлагают создать AS3, AS2, HAXE проекты. Мы будем работать с AS3, а именно с Flex'ом. Почему с ним? Потому что я начал изучение данной среды разработки и мне она понравилась happy . Выбираем Flex 3 Project, в поле Name вводим имя своего проекта, я назвал CreateChar. В поле Location выбираем где будет находиться наш проект, у меня это C:\Documents and Settings\Администратор\Мои документы. Поле Package не трогаем, ставим галочку внизу, для того что б создать папку для нашего проекта и жмем OK.
Справа, в окошке Project наши файлы с которыми мы будем работать
25d9220ae9a5.jpg
.
Наш главный файл обозначен зеленой стрелочкой вниз. Называеться он Main.mxml, нажмите на него 2 раза ЛКМ. Теперь вы можете писать свой код для этого файла. Как вы видите в нашем фале уже есть строчки кода. Первая определяет кодировку, ее не трогайте. Вторая указывает что это приложение, а не модуль и последняя закрывает тег приложения. Как видите здесь также как и в html существуют теги, и все они начинаються с отрытия скобки < и букв mx. Перейдите во вкладку Design View
6521ca609bf8.jpg

и можете создавать свое приложение перетаскивая компоненты в рабочую область. В папке Controls
91299a13a222.jpg

Выберите и разместите в рабочую область такие компоненты:
- Button – 3 шт.
- Image – 1 шт.
- Label – 1 шт.
- RadioButton – 2 шт.
- TextInput – 1 шт.

После того как вы разместили, переходите обратно во вкладку Source View. Видим у нас изменился код, все те компоненты, которые мы добавили отобразились и здесь. Нам остаеться только их правильно разместить и дать имена. Поэтому изменяем координаты компонентов как нам удобно, я изменил так:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Button label="Далее" click="onCreateChar()" x="140" y="252" width="100" height="22"/>
<mx:TextInput id="nameChar" textAlign="center" x="111" y="222" width="160" height="22"/>
<mx:Image id="avatar" source="img/men1-1.png" x="171" y="93" width="33" height="33"/>
<mx:RadioButton id="men" label="Мужской" groupName="gander" selected="true" click="iMen()" x="19" y="41" width="73" height="22"/>
<mx:RadioButton id="women" label="Женский" groupName="gander" click="iWomen()" x="19" y="67" width="74" height="22"/>
<mx:Label text="Имя" x="176" y="198" width="36" height="18"/>
<mx:Button label="Пред." click="onLeft()" x="78" y="141" width="100" height="22"/>
<mx:Button label="След." click="onRight()" x="200" y="141" width="100" height="22"/>
</mx:Application> </div>
label – что будет отображаться на кнопке или возле RadioButton
click – функция которая происходит после нажатия на кнопку или RadioButton
id – имя тега
textAlign — размещение текста(слева, по-центру, справа)
source — путь к картинке

С этим справились, теперь нам нужно указать какой по размерам будет наша флешка, для этого заменяем тег:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> </div>
на
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><mx:Application layout="absolute" width="400" height="300" xmlns:mx="http://www.adobe.com/2006/mxml"> </div>
Мы задали имя слоя - absolute и указали высоту и ширину нашей будущей флешки. Теперь приступаем к написанию логической части. Вся логика будет заключаться в теге <mx:Script>, поэтому после тега:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><mx:Application layout="absolute" width="400" height="300" xmlns:mx="http://www.adobe.com/2006/mxml"> </div>
пишем:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><mx:Script><![CDATA[
import mx.rpc.events.ResultEvent; //при написании кода вручную, эти импорты появляються сами, первый нужен для
import mx.controls.Alert; //определения результата, второй для вывода всплывающих окон

private var pic_arr_m:Array = ["img/men1-1.png", "img/men1-2.png", "img/men1-3.png", "img/men1-4.png"]; //создаем масив, который хранит путь к картинкам мужского пола
private var pic_arr_w:Array = ["img/women2-1.png", "img/women2-2.png", "img/women2-3.png", "img/women2-4.png"]; //создаем масив, который хранит путь к картинкам женского пола
private var i:int = 0; //числовая переменная равна 0
[Bindable] //сам еще не знаю для чего нужна это строка, но без нее выдает ошибку
private var gr:String = "1"; //текстовая переменная равна 1
[Bindable]
private var patch:String; //текстовая переменная
/* Функция создания чара, отправляет данные которые ввел пользователь */
private function onCreateChar():void {
createRequest.send();
}
/* Функция выбора RadioButton мужского пола */
private function iMen():void {
avatar.load(pic_arr_m[0]); //отображает картинку, которая равна 0 в масиве, тоесть первую картинку
gr = "1"; //переменная равна 1
simpleLabel.text = "1-1"; //тег <mx:Text> который имеет имя simpleLabel равен "1-1"
}
/* Функция выбора RadioButton женского пола */
private function iWomen():void {
avatar.load(pic_arr_w[0]); //отображает картинку, которая равна 0 в масиве, тоесть первую картинку
gr = "2"; //переменная равна 1
simpleLabel.text = "2-1"; //тег <mx:Text> который имеет имя simpleLabel равен "2-1"
}
/* Функция нажатия кнопки "Пред." */
private function onLeft():void {
if (men.selected == true){ //если выбран пол "Мужской", то
avatar.load(pic_arr_m); //картинка равняеться переменной "i"
i--; //переменная уменьшаеться на 1
if (i == -1) { //если переменная "i" равна -1, то
i = 3; //"i" равна 3
}
if (i == 0) { //если "i" равна 0, то
simpleLabel.text = "1-1"; //тег <mx:Text> который имеет имя simpleLabel равен "1-1"
avatar.load(pic_arr_m[0]); //будет отображать первый аватар
patch = "img/man1-1.swf"; //путь к аватару
}
if (i == 1) {
simpleLabel.text = "1-2";
avatar.load(pic_arr_m[1]);
patch = "img/man1-2.swf";
}
if (i == 2) {
simpleLabel.text = "1-3";
avatar.load(pic_arr_m[2]);
patch = "img/man1-3.swf";
}
if (i == 3) {
simpleLabel.text = "1-4";
avatar.load(pic_arr_m[3]);
patch = "img/man1-4.swf";
}
}
if (women.selected == true) { //если выбран пол "Женский", то
avatar.load(pic_arr_w); //картинка равняеться переменной "i"
i--; //переменная уменьшаеться на 1
if (i == -1) { //если переменная "i" равна -1, то
i = 3; //"i" равна 3
}
if (i == 0) {
simpleLabel.text = "2-1";
avatar.load(pic_arr_w[0]);
patch = "img/woman2-1.swf";
}
if (i == 1) {
simpleLabel.text = "2-2";
avatar.load(pic_arr_w[1]);
patch = "img/woman2-2.swf";
}
if (i == 2) {
simpleLabel.text = "2-3";
avatar.load(pic_arr_w[2]);
patch = "img/woman2-3.swf";
}
if (i == 3) {
simpleLabel.text = "2-4";
avatar.load(pic_arr_w[3]);
patch = "img/woman2-4.swf";
}
}
}
/* Функция нажатия кнопки "След." */
private function onRight():void {
if (men.selected == true){ //если выбран пол "Мужской", то
avatar.load(pic_arr_m); //картинка равняеться переменной "i"
i++; //переменная увеличиваеться на 1
if (i == 4) { //если переменная "i" равна 4, то
i = 0; //"i" равна 0
}
if (i == 0) {
simpleLabel.text = "1-1";
avatar.load(pic_arr_m[0]);
patch = "img/man1-1.swf";
}
if (i == 1) {
simpleLabel.text = "1-2";
avatar.load(pic_arr_m[1]);
patch = "img/man1-2.swf";
}
if (i == 2) {
simpleLabel.text = "1-3";
avatar.load(pic_arr_m[2]);
patch = "img/man1-3.swf";
}
if (i == 3) {
simpleLabel.text = "1-4";
avatar.load(pic_arr_m[3]);
patch = "img/man1-4.swf";
}
}
if (women.selected == true) { //если выбран пол "Женский", то
avatar.load(pic_arr_w); //картинка равняеться переменной "i"
i++; //переменная увеличиваеться на 1
if (i == 4) { //если переменная "i" равна 4, то
i = 0; //"i" равна 0
}
if (i == 0) {
simpleLabel.text = "2-1";
avatar.load(pic_arr_w[0]);
patch = "img/woman2-1.swf";
}
if (i == 1) {
simpleLabel.text = "2-2";
avatar.load(pic_arr_w[1]);
patch = "img/woman2-2.swf";
}
if (i == 2) {
simpleLabel.text = "2-3";
avatar.load(pic_arr_w[2]);
patch = "img/woman2-3.swf";
}
if (i == 3) {
simpleLabel.text = "2-4";
avatar.load(pic_arr_w[3]);
patch = "img/woman2-4.swf";
}
}
}

/* Функция определения результата */
private function onResult(e:ResultEvent):void {
if (int(e.result) > 0) { //если результат больше 0, тоесть существует, то
//var link:URLRequest = new URLRequest("http://localhost/game.php"); //создаем ссылку
//navigateToURL(link, "_self"); //переадресовываем по ссылке
} else { //в другом случае, если результат не существует, то
switch (int(String(e.result))) { //считываем данные
case -1 : //если данные равны "-1", то выводим всплывающее окно
Alert.show("Неудалось подключиться к базе данных. Попробуйте позже", "Ошибка!");
break;
case -2 : //если данные равны "-2", то выводим всплывающее окно
Alert.show("Такое имя уже существует", "Ошибка!");
break;
case -3 : //если данные равны "-3", то выводим всплывающее окно
Alert.show("Вы не ввели имя", "Ошибка!");
break;
case -4: //если данные равны "-4", то выводим всплывающее окно
Alert.show("Недопустимые символы в имени", "Ошибка!");
break;
}
}
}
]]></mx:Script> </div>
Я здесь все прокоментировал, думаю вопросов не возникнет, а если возникнут, то прошу — задавайте =)
Теперь нам нужно создать обработчик, который определяет какие данные нужно отослать в php скрипт. Такой обработчик называеться HTTPService. У нас он будет выглядеть так:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'> <mx:HTTPService id="createRequest" useProxy="false" method="POST" result="onResult(event)" url="reg_comp.php">
<mx:request>
<mx:nameChar>{nameChar.text}</mx:nameChar>
<mx:avaIm>{simpleLabel.text}</mx:avaIm>
<mx:gr>{gr.toString()}</mx:gr>
<mx:patch>{patch.toString()}</mx:patch>
</mx:request>
</mx:HTTPService> </div>
Он отсылает текст, который мы введем в поле "Имени чара" в php скрипт reg_comp.php, который обрабатывает полученные данные и записывает имя чара, если такое уже существует, то выводит соответствующую ошибку. Также отправляет какой аватар выбран.
Полный код нашего Main.mxml:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?xml version="1.0" encoding="utf-8"?>
<mx:Application layout="absolute" width="400" height="300" xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
import mx.rpc.events.ResultEvent; //при написании кода вручную, эти импорты появляються сами, первый нужен для
import mx.controls.Alert; //определения результата, второй для вывода всплывающих окон

private var pic_arr_m:Array = ["img/men1-1.png", "img/men1-2.png", "img/men1-3.png", "img/men1-4.png"]; //создаем масив, который хранит путь к картинкам мужского пола
private var pic_arr_w:Array = ["img/women2-1.png", "img/women2-2.png", "img/women2-3.png", "img/women2-4.png"]; //создаем масив, который хранит путь к картинкам женского пола
private var i:int = 0; //числовая переменная равна 0
[Bindable] //сам еще не знаю для чего нужна это строка, но без нее выдает ошибку
private var gr:String = "1"; //текстовая переменная равна 1
[Bindable]
private var patch:String; //текстовая переменная
/* Функция создания чара, отправляет данные которые ввел пользователь */
private function onCreateChar():void {
createRequest.send();
}
/* Функция выбора RadioButton мужского пола */
private function iMen():void {
avatar.load(pic_arr_m[0]); //отображает картинку, которая равна 0 в масиве, тоесть первую картинку
gr = "1"; //переменная равна 1
simpleLabel.text = "1-1"; //тег <mx:Text> который имеет имя simpleLabel равен "1-1"
}
/* Функция выбора RadioButton женского пола */
private function iWomen():void {
avatar.load(pic_arr_w[0]); //отображает картинку, которая равна 0 в масиве, тоесть первую картинку
gr = "2"; //переменная равна 1
simpleLabel.text = "2-1"; //тег <mx:Text> который имеет имя simpleLabel равен "2-1"
}
/* Функция нажатия кнопки "Пред." */
private function onLeft():void {
if (men.selected == true){ //если выбран пол "Мужской", то
avatar.load(pic_arr_m); //картинка равняеться переменной "i"
i--; //переменная уменьшаеться на 1
if (i == -1) { //если переменная "i" равна -1, то
i = 3; //"i" равна 3
}
if (i == 0) { //если "i" равна 0, то
simpleLabel.text = "1-1"; //тег <mx:Text> который имеет имя simpleLabel равен "1-1"
avatar.load(pic_arr_m[0]); //будет отображать первый аватар
patch = "img/man1-1.swf"; //путь к аватару
}
if (i == 1) {
simpleLabel.text = "1-2";
avatar.load(pic_arr_m[1]);
patch = "img/man1-2.swf";
}
if (i == 2) {
simpleLabel.text = "1-3";
avatar.load(pic_arr_m[2]);
patch = "img/man1-3.swf";
}
if (i == 3) {
simpleLabel.text = "1-4";
avatar.load(pic_arr_m[3]);
patch = "img/man1-4.swf";
}
}
if (women.selected == true) { //если выбран пол "Женский", то
avatar.load(pic_arr_w); //картинка равняеться переменной "i"
i--; //переменная уменьшаеться на 1
if (i == -1) { //если переменная "i" равна -1, то
i = 3; //"i" равна 3
}
if (i == 0) {
simpleLabel.text = "2-1";
avatar.load(pic_arr_w[0]);
patch = "img/woman2-1.swf";
}
if (i == 1) {
simpleLabel.text = "2-2";
avatar.load(pic_arr_w[1]);
patch = "img/woman2-2.swf";
}
if (i == 2) {
simpleLabel.text = "2-3";
avatar.load(pic_arr_w[2]);
patch = "img/woman2-3.swf";
}
if (i == 3) {
simpleLabel.text = "2-4";
avatar.load(pic_arr_w[3]);
patch = "img/woman2-4.swf";
}
}
}
/* Функция нажатия кнопки "След." */
private function onRight():void {
if (men.selected == true){ //если выбран пол "Мужской", то
avatar.load(pic_arr_m); //картинка равняеться переменной "i"
i++; //переменная увеличиваеться на 1
if (i == 4) { //если переменная "i" равна 4, то
i = 0; //"i" равна 0
}
if (i == 0) {
simpleLabel.text = "1-1";
avatar.load(pic_arr_m[0]);
patch = "img/man1-1.swf";
}
if (i == 1) {
simpleLabel.text = "1-2";
avatar.load(pic_arr_m[1]);
patch = "img/man1-2.swf";
}
if (i == 2) {
simpleLabel.text = "1-3";
avatar.load(pic_arr_m[2]);
patch = "img/man1-3.swf";
}
if (i == 3) {
simpleLabel.text = "1-4";
avatar.load(pic_arr_m[3]);
patch = "img/man1-4.swf";
}
}
if (women.selected == true) { //если выбран пол "Женский", то
avatar.load(pic_arr_w); //картинка равняеться переменной "i"
i++; //переменная увеличиваеться на 1
if (i == 4) { //если переменная "i" равна 4, то
i = 0; //"i" равна 0
}
if (i == 0) {
simpleLabel.text = "2-1";
avatar.load(pic_arr_w[0]);
patch = "img/woman2-1.swf";
}
if (i == 1) {
simpleLabel.text = "2-2";
avatar.load(pic_arr_w[1]);
patch = "img/woman2-2.swf";
}
if (i == 2) {
simpleLabel.text = "2-3";
avatar.load(pic_arr_w[2]);
patch = "img/woman2-3.swf";
}
if (i == 3) {
simpleLabel.text = "2-4";
avatar.load(pic_arr_w[3]);
patch = "img/woman2-4.swf";
}
}
}

/* Функция определения результата */
private function onResult(e:ResultEvent):void {
if (int(e.result) > 0) { //если результат больше 0, тоесть существует, то
//var link:URLRequest = new URLRequest("http://localhost/game.php"); //создаем ссылку
//navigateToURL(link, "_self"); //переадресовываем по ссылке
} else { //в другом случае, если результат не существует, то
switch (int(String(e.result))) { //считываем данные
case -1 : //если данные равны "-1", то выводим всплывающее окно
Alert.show("Неудалось подключиться к базе данных. Попробуйте позже", "Ошибка!");
break;
case -2 : //если данные равны "-2", то выводим всплывающее окно
Alert.show("Такое имя уже существует", "Ошибка!");
break;
case -3 : //если данные равны "-3", то выводим всплывающее окно
Alert.show("Вы не ввели имя", "Ошибка!");
break;
case -4: //если данные равны "-4", то выводим всплывающее окно
Alert.show("Недопустимые символы в имени", "Ошибка!");
break;
}
}
}
]]></mx:Script>
<mx:HTTPService id="createRequest" useProxy="false" method="POST" result="onResult(event)" url="reg_comp.php">
<mx:request>
<mx:nameChar>{nameChar.text}</mx:nameChar>
<mx:avaIm>{simpleLabel.text}</mx:avaIm>
<mx:gr>{gr.toString()}</mx:gr>
<mx:patch>{patch.toString()}</mx:patch>
</mx:request>
</mx:HTTPService>
<mx:Label id="simpleLabel" x="168" y="64" width="36" height="18"/>
<mx:Button label="Далее" click="onCreateChar()" x="140" y="252" width="100" height="22"/>
<mx:TextInput id="nameChar" textAlign="center" x="111" y="222" width="160" height="22"/>
<mx:Image id="avatar" source="img/men1-1.png" x="171" y="93" width="33" height="33"/>
<mx:RadioButton id="men" label="Мужской" groupName="gander" selected="true" click="iMen()" x="19" y="41" width="73" height="22"/>
<mx:RadioButton id="women" label="Женский" groupName="gander" click="iWomen()" x="19" y="67" width="74" height="22"/>
<mx:Label text="Имя" x="176" y="198" width="36" height="18"/>
<mx:Button label="Пред." click="onLeft()" x="78" y="141" width="100" height="22"/>
<mx:Button label="След." click="onRight()" x="200" y="141" width="100" height="22"/>
</mx:Application> </div>
После того как мы написали нашу флешку, пришло время ее создать, для этого жмем синий трехугольник на панели инструментов
f08e3a1261f0.jpg

и ждем когда FD скомпилирует нам нашу флешку. После этого заливаем нашу флешку к нам на сервер в папку htdocs. Также копируем туда эти картинки вместе с папкой:
архив с картинками

Теперь нам нужно отобразить данную флешку в браузере, для этого создаем goreg.php и пишем туда такой код:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?php
session_start(); //запускаем сессию

include "conf.php"; //инклюдим conf.php
/* коннектимся к БД */
$data = mysql_connect($base_name, $base_user, $base_pass);
if(!mysql_select_db($db_name,$data)){
print "
";
echo mysql_error();
die();
}
/* Узнаем ip адрес юзера */
$ip = $_SERVER['REMOTE_ADDR'];
if ($ip==$_SESSION['ip']) { //если ip равен ip записаному в сессию, то выводим флешку
?>
<!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="400" height="300" id="reg" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="false" />
<param name="movie" value="CreateChar.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#000000" />
<embed src="CreateChar.swf" quality="high" bgcolor="#000000" width="400" height="300" 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>";
}
?> </div>
Если мы попробуем перейти по адресу http://localhost/goreg.php нас перекинет на главную страницу, так и должно быть, если мы пройдем регистрацию, то окажемся на нашей страничке с флешкой.
Теперь приступим к написанию нашего файла reg_comp.php, который будет обрабатывать данные, которые будут поступать с флешки:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?php
session_start(); //запускаем сессию

include "conf.php"; //инклюдим conf.php

$nameChar = trim($_POST['nameChar']); /* переменная равна данным которые пришли от флешки, а именно — имя чара */
$vid = $_POST['avaIm']; /* получаем номер аватарки */
$gander = $_POST['gr']; /* узнаем какой пол выбран */
$patch = $_POST['patch']; /* получаем путь к аватаркам */
/* Проверяем заполнено ли поле имени, если нет, то выводим ошибку */
if ($nameChar == '') {
echo "-3";
exit;
}
/* Проверяем что б имя состояло только с английских букв */
if (!preg_match("/^[a-zA-Z]+$/",$nameChar)) {
echo "-4";
exit;
}
/* Подключаемся к БД, если не удалось, то выводим ошибку */
$data = mysql_connect($base_name, $base_user, $base_pass);
if(!$data){
echo "-1";
exit;
}
/* Проверяем есть ли юзер с данным именем, если есть, то выводим ошибку */
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;
}
/* Записываем имя чара */
$result = mysql_query("UPDATE users SET name='".$nameChar."' WHERE email='".$_SESSION['user']."'");
/* Записываем данные аватарки в таблицу avatar */
$ava = mysql_query("INSERT INTO avatar (gander, vid, path) VALUES ('".$gander."', '".$vid."', '".$patch."')");
?> </div>
Урок писался неделю, так как я только начал изучение Flex, поэтому долго разбирался. Я б сказал что урок полный, но в нем есть одна неувязочка, которую я до сих пор не могу решить. Эта неувязка состоит в том, что когда пользователь ввел данные, они записались, но его никуда не переадресовывает. Думаю в ближайшие дни исправлю это и тогда урок будет полностью закончен.
Жду вопросов, а также критику и советы.

------------------------------------------------------------------------------------------------------

Вот и 4 урок наступил, в нем поговорим о игровом окне, а именно где, какие компоненты будут размещены. Вот перечень этих компонентов:
- Игровое меню
- Чат
- Характеристики персонажа
- Инвентарь
- Игровое поле
- Журнал квестов
Но в самом игровом окне будет отображаться только чат, игровое меню и игровое поле. Остальное будет отображаться в виде отдельных окошек, которые появляються при нажатии на соответствующий пункт в игровом меню. Размещаться компоненты будут таким образом:
Вверху по центру — игровое меню, внизу будет чат, а все остальное пространство будет отведено под игровое поле. Теперь приступим к написанию нашего игрового окна. Это будет файл, который будет подключать в себя остальные файлы, такие как чат, игровое меню, и т.д.
Можете создать новый проект, но я советую в нашем проекте CreateChar создавать все остальное. Для этого открываем наш проект и справа в окошке Project на папке src нажимаем ПКМ->Add->New MXML File...
a0ab1ec485f3.jpg

и назовем его GameWindow.mxml
Приступаем к написанию кода:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?xml version="1.0" encoding="utf-8"?>
<mx:Application layout="absolute" width="800" height="600" xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:SWFLoader source="chat.swf" x="0" y="450" width="800" height="150"/>
<mx:SWFLoader source="menu.swf" x="330" y="0" width="170" height="50"/>
<mx:SWFLoader source="GameField.swf" x="0" y="0" width="800" height="450"/>
</mx:Application> </div>
Появился новый тег SWFLoader, он загружает другие флешки и отображает их в нашем окне. Для того что б скомпилировать данный код нам нужно нажать Ctrl + F8.
С игровым окном справились, теперь пришло время к технической реализации чата.

В чате будет реализовано смайлики, отправка сообщения публично и отправка сообщения по нику. Это будет происходить следующим образом:
Игрок вводит сообщение в строку ввода и жмет кнопку «Отправить» (или Enter), эта строка отправляеться в php скрипт, который записывает ее в нашу БД, а другой скрипт считывает данные с БД и выводит на экран. При отправке сообщения обновляеться экран чата, также он обновляеться каждые 30 секунд. Можно вставлять смайлики, при нажатии на книпку, открываеться небольшое окошко в котором можно выбрать смайлик, который сразу записываеться в строку ввода, в виде кода, а с помощью одной функции этот код преобразуеться в картинку. Сообщения будут выглядеть слкдующим образом:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>[11:11] RPGman(i): Проверка чата
[11:11] Jack(i): Все отлично работает</div>
В квадратных скобках — время, затем идет ник персонажа, в круглых скобках ссылка, которая открывает новое окно в котором описываеться информация о персонаже. И после двоеточия само сообщение. Также будет выводиться строка сколько юзеров online.

Вот и 4 урок подошел к концу, самый короткий из остальных happy Так сказать передышка для меня, но впереди еще много работы, так что отдохнуть не помешает.

-----------------------------------------------------------------------------------------------

Вот и 5 урок начался, извините что так долго не писал. Начнем с самого начала, ведь у нас так и осталось не доделана II часть регистрации, а именно переадресация в игру если персонаж создан. Для этого открываем наш файл Main.mxml и после строчек:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
[Bindable]
private var patch:String = "img/man1-1.swf"; //текстовая переменная </div>

Записываем:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
[Bindable]
private var per:String; //переменная для проверки создания чара </div>
Затем удаляем закоментированые мною строки:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>//var link:URLRequest = new URLRequest("http://localhost/game.php"); //создаем ссылку
//navigateToURL(link, "_self"); //переадресовываем по ссылке </div>
И вместо них вставляем:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
per = String(e.result); //переменная равна данным, что считали с php файла
if (per == "1"){ //если данные равны 1, то переадресовываем в игру
var url:URLRequest = new URLRequest("game.php");
navigateToURL(url,"_self");
} </div>

И подправим немного файл reg_comp.php, добавим в конец кода следующее:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
echo "1";
$wh*shok*nline = mysql_query("UPDATE users SET online='1' WHERE email='".$_SESSION['user']."'"); //записываем что столбец online равен 1
session_register("nameChar"); //регистрируем сессию
$_SESSION["name"] = $_POST["nameChar"]; //создаем сессию, которая равна имени персонажа </div>

Как видите появился еще один компонент как online, его мы не создавали в нашей БД, так давайте сделаем это. Заходим в нашу БД, в таблицу users и нажимаем на вкладку SQL в ней записываем такую строку:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>ALTER TABLE `users` ADD `online` INT( 1 ) NOT NULL DEFAULT '0' </div>
Теперь нам нужно создать файл, который будет проверять данные, которые пользователь ввел для входа в игру. Назовем его login.php и запишем такие строки:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?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 "
";
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='http://localhost/game.php';</script>"; //переадресовываем в игру
} else { //в другом случае
echo "<script>location.href='http://localhost';</script>"; //переадресовываем на главную
}
?> </div>
Еще нам нужно изменить наш файл index.php, для этого добавим этот код в самое начало файла:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?php
session_start();
if (isset($_SESSION['user']) || isset ($_SESSION['ip']) || isset($_SESSION['name'])){ //если есть данные сессии, то удаляем их
unset($_SESSION['user']);
unset($_SESSION['ip']);
unset($_SESSION['name']);
}
?> </div>
Это что б не возникало конфликтов в скриптах. Теперь нам нужно создать файл игры — game.php, в нем будет отображаться флешка WindowGame:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?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>";
}
?> </div>
Все преготовления сделаны, приступаем к чату. Проведя небольшой опрос я не стал делать смайлы в чате, так как большинство ответов были:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>- Зачем, ними никто не пользуеться, только спамеры
- Та ну, мороки много, лучше побыстрее урок пиши</div>
Привожу код чата, прокоментирован, как всегда, но если возникнут вопросы, то задавайте. Буду рад ответить.
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?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> </div>
Теперь создадим файл для записи сообщений в БД, назовем его send_mess.php:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?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."')");
?> </div>
Файл для отображения сообщений, назовем его chat.php:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?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']." : ".$line['msg']."
";
}
?> </div>
И файл вывода сколько пользователей онлайн, назовем его online.php:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?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;
?> </div>
Вот и 5 урок подошел к концу, ждите продолжения И еще раз извините за задержки
 
У меня не входит в игру и т.д.


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

Еще посоветовал бы делать уроки в PDF формате, а скрипты к урокам в отдельной папке.
Например:
Содержимое архива с уроком №1
[/QUOTE]
---Урок № 1 Обсуждение игры.rar
|
|-Урок № 1 Обсуждение игры. Создание БД (MySQL).pdf
|
|-[dir] Scripts ---
|---тут всякие скрипты к уроку.
|-[dir] Video ----
|---видео материалы

|-[dir] etc ----
|---прочие файлы, библиотеки, программы

И еще делай больший уклон в уроках на работу с БД и циклами, ну и естественно не забывай про всякие проверки.
Смотрю в примерах кода почти в каждой строчке стоит комментарий это большой "+" продолжай делать уроки...
 
Урок № 6

В этом уроке я опишу как создать профиль для чара, а также как просмотреть характеристика любого игрока.
Для начала создадим меню. Открываем FlashDevelop и создаем новый mxml файл и называем его menu.mxml. Записываем в него такие строчки:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?xml version="1.0" encoding="utf-8"?>
<mx:Application layout="absolute" width="392" height="22" xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
import flash.net.URLRequest;
import mx.managers.PopUpManager;
/* Функция для отображения всплывающего окна, в котором находиться информация о вашем чаре */
public function prof():void {
var popup:profil = profil(PopUpManager.createPopUp(this, profil, false));
popup.x = 250;
popup.y = 100;
popup.title = "Профиль";
}
/* Функция которая переадресовывает на php скрипт? Который обрабатывает выход игрока */
private function logout():void {
var logoutLink:URLRequest = new URLRequest("logout.php");
navigateToURL(logoutLink, "_self");
}
]]></mx:Script>
<mx:Button click="prof()" label="Профиль" x="0" y="0" width="80" height="22"/>
<mx:Button label="Инвентарь" x="80" y="0" width="90" height="22"/>
<mx:Button label="Журнал квестов" x="170" y="0" width="123" height="22"/>
<mx:Button click="logout()" label="Выход" x="292" y="0" width="100" height="22"/>
</mx:Application> </div>
Изменим немного файл GameWindow.mxml, а именно заменим строку в которой мы загружаем флешку с менюшкой на эту:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><mx:SWFLoader source="menu.swf" x="200" y="0" width="400" height="22"/> </div>
В ней я только подкоректировал расположение менюшки.
Приступаем к написанию всплывающего окна в которм отображаються данные игрока. Создаем файл profil.mxml и записываем в него следующее:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow showCloseButton="true" layout="absolute" width="250" height="300" close="handleClose(event)" creationComplete="profileComplete()" xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
import mx.managers.PopUpManager;
import mx.events.CloseEvent;
import mx.rpc.events.ResultEvent;

private var dataXML:XML = new XML; //данные из XML файла
/* Функция для отправки данных в скрипт */
public function profileComplete():void {
profileChar.send();
}
/* Отображения данных */
public function onResult(e:ResultEvent):void { //обработка результатов и ошибок
dataXML = XML(e.result);
avatar_img.load(String(dataXML.avatar[0]));
nameChar.text = dataXML.name[0];
atk.text = dataXML.atk[0];
def.text = dataXML.def[0];
lov.text = dataXML.lov[0];
life.text = dataXML.life[0];
lvl.text = dataXML.lvl[0];
exp.text = dataXML.exp[0];
}
/* Функция закрытия всплывающего окна */
private function handleClose(evt:CloseEvent):void {
PopUpManager.removePopUp(this);

}
]]></mx:Script>
<mx:HTTPService id="profileChar" useProxy="false" method="POST" result="onResult(event)" resultFormat="xml" url="profil.php"/>
<mx:Label id="nameChar" text="1" x="86" y="11" width="53" height="18"/>
<mx:Label id="atk" text="2" x="149" y="41" width="53" height="18"/>
<mx:Label id="def" text="3" x="149" y="57" width="53" height="18"/>
<mx:Label id="lov" text="4" x="149" y="75" width="53" height="18"/>
<mx:Label id="life" text="5" x="150" y="93" width="53" height="18"/>
<mx:Label id="lvl" text="6" x="22" y="29" width="53" height="18"/>
<mx:Label id="exp" text="7" x="149" y="111" width="53" height="18"/>
<mx:Image id="avatar_img" x="11" y="54" width="120" height="200"/>
</mx:TitleWindow> </div>
Теперь приступим к созданию файла, который будет отображать характеристики вашего персонажа. Как видно из предыдущего кода данный файл будет называться profil.php:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?php
session_start();

include "conf.php";

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

$query = mysql_query("SELECT * FROM users WHERE name='".$_SESSION['name']."'");
$row = mysql_fetch_array($query);
### Запускаем XML и выводим характеристика юзера ###
echo "<?xml version='1.0'?>";
echo "<char>";

echo '<name>'.$row['name'].'</name>';

$query2 = mysql_query("SELECT * FROM avatar WHERE id_ava='".$row['id_user']."'");
$row2 = mysql_fetch_array($query2);

echo '<avatar>img/'.$row2['vid'].'.png</avatar>';
echo '<atk>'.$row['atk'].'</atk>';
echo '<def>'.$row['def'].'</def>';
echo '<lov>'.$row['lov'].'</lov>';
echo '<life>'.$row['life'].'</life>';
echo '<lvl>'.$row['lvl'].'</lvl>';
echo '<exp>'.$row['exp'].'</exp>';

echo '</char>';
?> </div>
Теперь делаем php скрипт, который обрабатывает выход игрока, назовем его logout.php:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?php
session_start();

include "conf.php";

$data = mysql_connect($base_name, $base_user, $base_pass);
if(!$data){
echo "
";
echo mysql_error();
die();
}
/* Ставим игроку в таблице users в столбце online цыфру 0, что означает что игрок оффлайн */
mysql_select_db($db_name);
mysql_query("UPDATE users SET online='0' WHERE email='".$_SESSION['user']."'");
/* Уничтожаем все сессии игрока */
if (isset($_SESSION['user']) || isset ($_SESSION['ip']) || isset($_SESSION['name'])){
unset($_SESSION['user']);
unset($_SESSION['ip']);
unset($_SESSION['name']);
}
/* Переадресовываем на главную */
echo "<script>location.href='index.php';</script>";
?> </div>
И последнее что нам осталось сделать это вывод информации о любом пользователя если нажать на значек (і) в чате возле имени игрока. Назовем данный скрипт info.php, я сильно не мудрил и сделал в виде простой таблицы, вы можете оформить как захотите:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><?php
include "conf.php";

$data = mysql_connect($base_name, $base_user, $base_pass);
mysql_select_db($db_name);
/* Описание ошибки */
$error = "<title>Ошибка!</title>
<body bgcolor=EBEDEC>
<font color=red>Ошибка:</font>
Персонаж с таким логином или ID не найден!";
/* Проверяем существует ли переменная nameChar и id который будет равняться ей */
if (isset($_POST['nameChar']) && !empty($_POST['nameChar'])){
$login = mysql_escape_string($_POST['nameChar']);
$where = " WHERE users.name='".addslashes($login)."'";
}
elseif (is_numeric($_SERVER['QUERY_STRING']))
{
$id = mysql_escape_string($_SERVER['QUERY_STRING']);
$where = " WHERE users.id_user=".addslashes($id);
}
else // в другом случае выводим ошибку
{
die($error);
}
/* Выделяем игрока */
$query = mysql_query("SELECT * FROM users".$where."");

$info = mysql_fetch_array($query);
$row = mysql_fetch_array(mysql_query("SELECT * FROM avatar WHERE id_ava='".$info['id_user']."'")); //узнаем аватарку игрока
?>
<html>
<head>
<title>Информация о персонаже - <?=$info['name']?></title>
<body>
<table align="center" border="0" width="243" height="280" cellspacing="0" cellpadding="0" bgcolor="#BFBFBF" bordercolor="#666699">
<tr>
<td>
<table width="243">
<tr>
<td align="center"><?=$info['name']?></td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table>
<tr>
<td align="center"><?=$info['lvl']?></td>
</tr>
<tr>
<td width="153" height="200" rowspan="5">
<
</td>
<td width="90" align="center">Атака: <?=$info['atk']?></td>
</tr>
<tr>
<td width="90" align="center">Защита: <?=$info['def']?></td>
</tr>
<tr>
<td width="90" align="center">Ловкость: <?=$info['lov']?></td>
</tr>
<tr>
<td width="90" align="center">Жизни: <?=$info['life']?></td>
</tr>
<tr>
<td width="90" align="center" valign="top">Опыт: <?=$info['exp']?></td>
</tr>
</table>
</td>
</tr>
</table>
</head>
</body>
</html> </div>
Вот и 6 урок подошел к концу, сожалею что долго не писал, так как не было интернета dry
Код как видите я комментировал не весь, так как в предыдущих уроках описыал об этом, надеюсь вы не забыли. Так же если возникнут вопросы — задавайте.

Данные картинки разархивируйте в папку img - картинки

----------------------------------------------------------------------------------------

Урок №7

В данном уроке поговорим о том как будет функционировать инвентарь. При нажатии на кнопку Инвентарь в меню, открываеться всплывающее окно в котором будет 6 ячеек, в них может быть оружие или броня. Данные, которые будут здесь отображаться, считываються с БД с таблицы которую мы создадим в следующем уроке. Вещи, которые будут надеты на игроке будут считывать данные с таблицы users, в неё мы добавим несколько столбцов, каждый столбец будет иметь id вещи, которая находиться в таблице inventar. В таблице inventar будут записаны все вещи, которые находяться в игре, также в ней будет краткое описание вещи и её свойства (повышение атаки, защиты и т.д.). Вещи, которые надеты на игроке будут отображаться в Профиле игрока, в нем будет 4 ячейки — голова, правая рука, левая рука, ноги.
Все вещи, которые игрок будет получать, будут отображаться в инвентаре, а потом их можно будет перенести на ячейку в Профиле игрока, как обычно во всех играх.
Думаю все, если что то забыл, то напишу в следующем уроке

Человек старался для таких как вы нубов, чтобы потом не спрашивали почему у меня вылазиет:

или



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

Еще посоветовал бы делать уроки в PDF формате, а скрипты к урокам в отдельной папке.
Например:
Содержимое архива с уроком №1


И еще делай больший уклон в уроках на работу с БД и циклами, ну и естественно не забывай про всякие проверки.
Смотрю в примерах кода почти в каждой строчке стоит комментарий это большой "+" продолжай делать уроки...

Пасибо за идею. В ближайшее время сделаю что то подобное :)
 
Всем здрасте, населько я знаю уроки "копи паст"

До 7 урока можно найти на этом форуме... gcup.ru(надеюсь за рекламу не сочтут...)
Я бы мог скопировать там уроки и сюда выложить но какой мне с того толк...
 
Всем здрасте, населько я знаю уроки "копи паст"

До 7 урока можно найти на этом форуме... gcup.ru(надеюсь за рекламу не сочтут...)
Я бы мог скопировать там уроки и сюда выложить но какой мне с того толк...

в конце первого поста смотри под катом. некто нечего не скрывает :)
если говорите что тоже можете то продолжайте :) мне не столь важно. очень хорошая инфа для начинающих поэтому пригодится. А вот то что идею кидали по поводу создания PDF это будет просто очень удобно :)
 
Темы бы почистить, чтоб удобно читать было, а насчет ообсуждения уроков отдельную тему создать
 
Сверху