Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/951: Рейтинг темы: голосов - 951, средняя оценка - 4.62
7 / 7 / 0
Регистрация: 20.04.2009
Сообщений: 45

Принцип создания браузерной игры

22.04.2009, 23:47. Показов 185099. Ответов 351
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
С чего начинаются писаться браузерные игры? С регистрации игрока?
6
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.04.2009, 23:47
Ответы с готовыми решениями:

Создание браузерной игры...
Я хочу создать браузерную игру, какие типы программирования мне нужно знать? Добавлено через 36 секунд что бы создать движок игры?

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

Написать бота для браузерной игры
Здрасте. я ничего не знаю про web програмирование. Однако поставил цель написать бота для браузерной игры. суть такова что нужно...

351
34 / 32 / 2
Регистрация: 25.11.2010
Сообщений: 386
22.02.2012, 14:27
Студворк — интернет-сервис помощи студентам
crautcher, что то я неожиданно почувствовал себя нубом...
Эм.. класс мапы это не всё что нужно, генерировать её легко.. а вот потом визуалезировать сложно...
А на счёт всего остального.. без работы с БД это всего лишь бесполезный кусок кода...
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
22.02.2012, 17:23
ну я стараюсь делать какието кубики из которых потом можно построить разные здания а не строю сразу дом . ну а визуализировать довольно просто будет , у меня уже есть идея реализации

Добавлено через 2 часа 21 минуту
ну класс бота у меня такой :
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
class Bot extends Unit
{
private $difficulty;
private $drop;
 
function __construct($lvl)
{
parent::__construct("bot");
$this -> SetLvl($lvl);
$this -> SetDifficulty( mt_rand(0,10) );
$this -> drop = array();
$this -> compile();
}
 
function SetDifficulty($lvl)
{
if ($lvl < 0)
 $lvl = 0;
if ($lvl > 10)
 $lvl = 10;
$this -> difficulty = $lvl; 
}
 
function compile()
{
$stats = include "conf/conf.stats.php";
foreach ($stats as $s)
  $this -> SetStats($s , ( $this -> lvl * $this -> GetConf( $s ) + $this -> difficulty ) );
}
 
function AddDrop($drop , $chance=50)
{
static $counter = 0;
if ($chance < 1)
 $chance = 1;
if ($chance > 100)
 $chance = 100;
$counter ++;
$this -> drop [$counter]['item'] = $drop;   
$this -> drop [$counter]['chance'] = $chance;   
}
 
function GetDrop()
{
$drop = array();
foreach ($this -> drop as $c)
 {
 $chance = mt_rand(1,100);
 if ( !($c ['chance'] > $chance) )
  $drop [] = $c['item'];
 }
return $drop; 
}
 
function LoadConf()
{
$conf = include "conf/conf.bot.php";  
if (!isset($conf[ $this -> Pclass ]))
 if(!isset ($conf[ 'unknow_'.$this -> type ]) )
  return false;
 else 
  $conf = $conf[ 'unknow_'.$this -> type ];
else
 $conf = $conf[ $this -> Pclass ];
return $conf;  
}
 
function GetConf($stat)
{
static $conf = false;
if (!$conf) $conf = $this -> LoadConf();
if (!$conf) return 0;
if (!isset($conf[$stat])) return 0;
return $conf[$stat];  
}
 
}
тут я использую 2 конфига , 1ый содержит статы которые будут иметь игроки и боты у меня он выглядит так , но его с легкостью можно менять
PHP
1
2
<?
return array("hp","ldmg","hdmg","crit","def","agility","intuition","antycrit");
второй содержит классы ботов , а именно множители в расчетной форумле , классы также легко можно менять и добавлять
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
return array(
 #default 
 "unknow_bot" => array(
   "hp" => 1,
   "ldmg" =>1,
   "hdmg" =>2,
   "crit"=>1,
   "def"=>1
 ),
  "assasin" => array(
   "hp" => 1,
   "ldmg" =>2,
   "hdmg" =>2,
   "crit"=>2,
   "def"=>0,
 )
);
ну и как выглядит наш обьект ("на практике шаблоны ботов будут загружатся из базы")
PHP
1
2
3
4
5
6
7
8
9
$a = new bot(7); #бот 2го лвла
$a -> SetDifficulty(2); #2го уровня сложности
$a -> SetName('Dark Assasin'); 
$a -> SetClass('assasin');
$a -> AddDrop('gloves of agility' , 25);
$a -> AddDrop('dager of blood' , 33);
var_dump($a);
echo "got drop:";
var_dump($a -> GetDrop());
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
dkd@crautcher-desktop:~/Desktop/my/some$ php class.bot.php
object(Bot)#1 (7) {
  ["difficulty":"Bot":private]=>
  int(2)
  ["drop":"Bot":private]=>
  array(2) {
    [1]=>
    array(2) {
      ["item"]=>
      string(17) "gloves of agility"
      ["chance"]=>
      int(25)
    }
    [2]=>
    array(2) {
      ["item"]=>
      string(14) "dager of blood"
      ["chance"]=>
      int(33)
    }
  }
  ["Pclass"]=>
  string(7) "assasin"
  ["stats"]=>
  array(8) {
    ["hp"]=>
    int(23)
    ["ldmg"]=>
    int(23)
    ["hdmg"]=>
    int(44)
    ["crit"]=>
    int(23)
    ["def"]=>
    int(23)
    ["agility"]=>
    int(2)
    ["intuition"]=>
    int(2)
    ["antycrit"]=>
    int(2)
  }
  ["lvl"]=>
  int(7)
  ["name"]=>
  string(12) "Dark Assasin"
  ["type"]=>
  string(3) "bot"
}
 
got drop :
array(1) {
  [0]=>
  string(17) "gloves of agility"
}
0
34 / 32 / 2
Регистрация: 25.11.2010
Сообщений: 386
23.02.2012, 00:28
crautcher, молодец что сказать, всё делаешь через ООП. Ну я бы хотел увидить эти саммые кубики...
0
11andriy11
11.03.2012, 14:00
Вот нашел курс по созданию бреузерной игры
http://makegame.3dn.ru/load/so... /11-1-0-63
34 / 32 / 2
Регистрация: 25.11.2010
Сообщений: 386
12.03.2012, 00:31
Цитата Сообщение от 11andriy11 Посмотреть сообщение
Вот нашел курс по созданию бреузерной игры
http://makegame.3dn.ru/load/so... /11-1-0-63
о спасибо. всегда хотел скачать этот курс неплотя денег но обычто всегда прикрывали такие места. Сейчас посмотрю и скажу свою оценку.

Добавлено через 28 минут
прочёл мельком. в подробности вникать не стал. Но тут видно что курс стоит своих денег. Код добротный.
0
 Аватар для GFS
18 / 18 / 8
Регистрация: 07.11.2009
Сообщений: 118
30.05.2012, 12:59
у меня 2 вопроса:
1. Допустим постоянный онлайн игроков - 1000. Пусть на каждого игрока приходится по 15 таймеров(5 добыча ресурсов, 3 строительных, 3 военные действия, 4 исследования). 1000 * 15 = 15000 таймеров. Но у игроков в оффлайне также могут работать таймеры пусть по 10 на каждого, если всего игроков 100тыс=100000*10 = 1млн таймеров.
Разве база такое может выдержать или постоянное накопление ресурсов, действия по окончанию промежутка времени реализуются по-другому?
2. Скажем у меня шахта 1 уровня которая добывает 10 дерева в минуту. Я поставил ее на улучшение до 2 уровеня и ушел в оффлайн. По истечению времени шахта становится уже 2 уровня, и, главное, добывает уже 15 ресурсов. А как такое реализовать?Т.е. база сама без участия игрока должна начать накапливать ресурсы уже в большем количестве.
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
30.05.2012, 13:14
Цитата Сообщение от GFS Посмотреть сообщение
Разве база такое может выдержать или постоянное накопление ресурсов, действия по окончанию промежутка времени реализуются по-другому?
выже не думаете что каждую секунд в базе обнавляется количество ресурсов , там лежит количество ресурсов до начала таймера и время старта таймера , при обращении к странице где показывается количетво ресуров достаём эти данные , высчитываем разницу во времени , и 2 варианта :
1. если таймер закончился , то апдейтим базу
2. если еще идет , передаём данные яваскрипту который всё подсчитает и т.д. всё сервер не грузится остальное в браузере клиента

Цитата Сообщение от GFS Посмотреть сообщение
Т.е. база сама без участия игрока должна начать накапливать ресурсы уже в большем количестве.
ничего она не накапливает , как ты зайдешь в онлайн всё подсчитается и ток тогда база обновится
1
 Аватар для Acmodeu
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 7
03.07.2012, 20:56
Доброго вам времени суток, очень интересная тема, сьел за час )) Спасибо.. Вопрос у меня по геймплею, тоесть, как организовать.. Занимаюсь wap проектми, так что и игра намеревается быть вап, браузерной..
Итак намного о передвижении игрока.. Мир будет выглядеть как квадрат 300 на 300 и передвигаться игрок будет посредством клеток.. (См рисунок). Начальная позиция будет посреди квадрата [0S/0E] где S -это север а Е - это восток.. Делая шаг на север координаты будут менятся [1S/0E] и так далее.. Четыре направления север, юг, запад, восток.. И вот теперь нужна помощь, как организовать данный ходы.. И чтоб при повторной авторизации, игрок был на тех координатах, на которых вышел.. Подсобите в написании и организации, буду очень благодарен..
Миниатюры
Принцип создания браузерной игры  
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
04.07.2012, 10:59
сохрняем в базу текущии кординаты , при регистрации задаём дефолтные
Цитата Сообщение от Acmodeu Посмотреть сообщение
[1S/0E]
лучще делать полностью цифеные координаты x:y , будет куда проще составлять запросы , делать циклы и сравнивать
0
 Аватар для Acmodeu
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 7
04.07.2012, 21:43
Такс, тут понял =) Как можно на простом примере написать к примеру локацию на 5/5?? Можете написать?? Чтоб знать от чего отталкиваться =)
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
05.07.2012, 11:38
ну сперва надо определится координаты будут тока положительные , тогда нижним левый угол будет 0:0 , или в диапазоне от -25 до +25 , тогда 0:0 будет центр карты ,
если могут быть отрецательными тогда убрать из запроса unsigned

создаём таблицу координат юзеров
SQL
1
2
3
4
5
6
CREATE TABLE `UserLocation`( 
`userID` INT(20) UNSIGNED NOT NULL ,
`cordX` INT(2) UNSIGNED NOT NULL DEFAULT '0' ,
`cordY` INT(2) UNSIGNED NOT NULL DEFAULT '0' ,
 PRIMARY KEY (`UserID`) 
);
ну и к примеру человек пошел на север
SQL
1
UPDATE `UserLocation` SET `cordY` = `cordY` + 1 WHERE `userID` = $userID
0
 Аватар для Acmodeu
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 7
05.07.2012, 15:22
Координаты будут положительными, и в целых числах

Пример: Идем по локациям:

У нас четыре направления: Север, юг, запад, восток (N - север, S - юг, W - запад, E - восток)

Координаты будут обозначать местонахождения игрока (1S/5W, 5N/235E)
Теперь идем: Начальные координаты (0N/0E) - пошли на юг 1 шаг (1S/0E) потом 1 шаг на запад (1S/1W) делаем 1 шаг на север (0N/1W) и шаг на восток (0N/0E) тоесть если первый шаг на север, то это обозначение (вперед) дальнейшие шаги на юг, будут отнимать с координат севера.. Север (1 шаг = N+1) Юг (1 шаг N-1) если же мы вернулись на отметку (0N) то дальнейшие шаги на юг, Будут считаться как (вперед) (S+1, S+1, S+1) А шаги на север (назад) (S-1, S-1,S-1) Так же аналогично с западом и востоком.. Хочу так же подметить, что в параметрах персонажа, будет "n" количество шагов. при регистрации стандарт (50ТП) И каждый шаг по клетке, будет отнимать 1 шаг (-1ТП) в примере мы сделали 4 шага, естественно (50-4=46) тоесть параметра нашей ТП теперь составляет 46ТП
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
06.07.2012, 01:40
С чего начинаются писаться браузерные игры? С регистрации игрока?
С изучения языка программирования и написания на нем простеших приложения(блог, новостник, форум и т.д.).
0
 Аватар для Acmodeu
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 7
06.07.2012, 12:45
OnYourLips, Все одно и тоже говорят )) Но мы же общаемся именно про функционал игры.. Учит язык лучше всего на практике, Берешь скрипт и модифицируешь, а так теория редко доходит..
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
06.07.2012, 13:39
Acmodeu, да ничем написание игры не отличается от написания новостной ленты.
Вот совсем ничем.
Пользователь делает запрос, принимаешь его, обрабатываешь, вносишь изменения в игровой мир, рисуешь пользователю страницу, основываясь на новых данных.
0
 Аватар для Acmodeu
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 7
06.07.2012, 15:01
Вот на данный момент столкнулся с небольшой проблемой, в пошаговой регистрацией.. Сначала расскажу что и как она из себя представляет.

Шаг первый: Пользователь попадает на главную страницу. Где выбор: Авторизация или Регистрация. (Если играем то вводим логин и пасс и продолжаем гулять по Skirym,у) А если нет то тут нужно начать играть ( Вот именно с регистрации начинается первый квест)

Шаг второй: Нажав на Регистрацию мы попадаем на reg1.php "1 страницу регистрации" (Отсюда сразу два вопроса: Оформить весь путь на одном листке, иле же reg1.php, reg2.php reg3.php и до финальной кнопки [Играть] в чем хранить данные (извеняюсь за свой албанский ) В СЕССИЯХ??

Итак: Как только мы нажали на Регистрацию то автоматом начинается 1 квест (Назовем его "Добро пожаловать в Skirym") //
PHP
1
2
3
4
5
6
// Рис -1
Тут "программа" спрашивает: Выбери свой путь: Вора, Война или Мага
Чуть подумали и жмем, того кто по душе :D
"1данные (воин, маг, вор)" //  Заносим эти данные в СЕССИЮ!!! 
HELP: куда их записывать? СЕССИЯ?
енд()
Нажав на выбор "Умений" мы попадаем на страницу reg2.php
Тут мы уже в теме, Демоны ненавидят Магов и нападает, что делать? Жмем "Бежать"
PHP
1
2
3
// Рис -2
Тут все просто, "Программа" нападает, "Мы" Бежим!!
енд()
Демоны конечно страшно и мы крутим педали, но не все тут просто, Демоны кругом.. Дальше все как "по сценарию" Че было не помним, Что случилось не знаем И вообще где Мы ( А мы уже на reg3.php Но тут мы видем Ангела (Рис -3) Который говорить = все ништяк, Теперь ты Супермен!!!

PHP
1
2
3
//Рис - 3
Тут и как на 2 листе, Читаем радуемся и Вперед // Начинается Ввод данных!!!
енд()
На reg4.php Рис -4 выбираем пол и переходим на следующий лсток reg5.php Рис - 5 Забиваем Логин и дальше
PHP
1
2
3
4
5
// Рис -5
"Заносим данные" // СЕССИЯ????
// Проверяем свободен или нет
"Запрос" { Логин свободен переходим на следующую страницу}else{Персонаж с таким именем уже существует: попробуйте другой}
енд()
[/PHP] на reg6.php Рис - 6 вводим пароль и УРА!!! Финиш (Выходим на index.php

Вопросы :
1 - Куда складывать данные?? До того как занесем в базу?? Или же сразу складывать по ячейкам?
2 - Как правильно оформить на одном листке (нужно ли шифрование)
3 - Безопасность, и все что с этим связанно + Скорость обработки кода (охото бы посмотреть примеры)

Ну вот как то так..

Кто поможет буду очень благодарен, Упомяну в титрах )))
С Уважением Данил Харитонов )))
Миниатюры
Принцип создания браузерной игры   Принцип создания браузерной игры   Принцип создания браузерной игры  

Принцип создания браузерной игры   Принцип создания браузерной игры   Принцип создания браузерной игры  

0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
06.07.2012, 15:17
Нажав на Регистрацию мы попадаем на reg1.php
Ошибка: отсутствие единой точки входа на сайт.

(Отсюда сразу два вопроса: Оформить весь путь на одном листке, иле же reg1.php, reg2.php reg3.php и до финальной кнопки [Играть] в чем хранить данные (извеняюсь за свой албанский ) В СЕССИЯХ??
Оформлять на одном листе с точки зрения юзабилити(потому что пользователю западло странички жать, и ему может наскучить, и он уйдет).
Если надо разделить на этапы, делай джаваскриптом, чтобы пользователь не ждал загрузки страниц.

Следовательно:
1. Не актуально.
2. Что? Какое шифрование, ты о чем?
3. Ничего специфичного.
1
 Аватар для Acmodeu
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 7
06.07.2012, 15:28
Цитата Сообщение от OnYourLips Посмотреть сообщение
Ошибка: отсутствие единой точки входа на сайт.


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

1 - Если в СЕССИЯХ хранить не актуально, то объясните почему, и КАК ТОГДА??
2 - Шифровать действия в url строке (апять албанский )
3 - Очень важный такой в момент, когда ты набрал Логин, и вдруг отвлекся, чтоб уже ни кто не мог воспользоваться данным Логином.
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
06.07.2012, 16:35
1 - Если в СЕССИЯХ хранить не актуально, то объясните почему, и КАК ТОГДА??
Незачем. Все будет на одной странице в итоге же.

2 - Шифровать действия в url строке
Зачем? o_O

3 - Очень важный такой в момент, когда ты набрал Логин, и вдруг отвлекся, чтоб уже ни кто не мог воспользоваться данным Логином.
При регистрации проверять на уникальность.
0
 Аватар для Acmodeu
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 7
07.07.2012, 12:53
OnYourLips, Все будет по шагам! 1 действие - 2 действие и так далее, Вопрос остался, если я в первом действии ввел данные, в чем их держать до 6 действия, где мы поместим данные в базу? Переменные? или Сессия? Все шаги написаны мною выше..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.07.2012, 12:53

Упрощенный принцип создания поисковой системы на PHP
- Доброго времени суток. Сперва объясню ситуацию: выбрал тему на курсовой проект &quot;Поисковая система&quot;. Только сначала совсем не...

Принцип работы онлайн игры
Здравствуйте. Меня интересует такой вопрос. Для примера возьмем браузерную игру &quot;Дурак&quot;. Каким образом в этой игре происходит...

Как правильно создать систему уведомлений для браузерной игры\сайта?
Всем привет! Недавно начал заниматься веб программированием, есть некие начальные знания в PHP/JS/HTML/CSS, для более интересного...

Программисты для браузерной игры
Привет всем. И так начнём, меня зовут Виталий, являюсь по интернет маркетингу . Являюсь активным игроком в онлайн игры, работаю в интернете...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
260
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru