Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Написание простой онлайн игры. Советы в организации

244
04 мая 2007 года
UAS
2.0K / / 19.07.2006
Хочу написать простенькую онлайн-игру. Просто для того чтобы набраться опыта. Игра простая, если кто то играл в Final Fantasy или Legend of Dragon, то поймут. (Извините аналог игры на PC привести не могу, ибо только в КС играю).

Смысл: против пользователя выбирается случайный враг (монстр какой-нибудь), и они начинают сражаться. У пользователя как и у врага есть жизни(HP), очки магии(MP), в течении битвы они тратятся. У кого первее закончатся HP тот и проиграл.

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

Клиент, сервер: самый лучший клиент на мой взгляд, написанный на Flash, но я во флэше вообще не умею, так что я думаю можно для начала обойтись AJAX, и с его помощью с серваком обмениваться. Потом полученные данные уже парсить и раскидывать по странице где надо.
Сервер писать буду на PHP ибо только его норм.знаю, но если писать большой проект, то тогда конечно надо на С++ писать. БД тоже думаю возьму стандартный MySQL. Для моих целей его хватит.

Хранение данных: здесь вроде тоже ничего сложного. Данные врага будут хранится в какой-то папке enemy с именем имя_врага.xml Т.е. все данные будут хранится в xml файле. Которые при загрузке матча будут парситься.
Данные пользователя. Тут посложнее... Юзер регится на сайте, выбирает кем будет играть. Все данные я думаю тоже будут хранится в xml, потом пользователь подерется с врагом, заработает опыт => обновляем xml, увеличиваем характеристики и т.д.

Битва: а вот здесь я уже хз че делать...
Моя идея: при начатии боя на серваке создается какой-то файл с рандомным именем, в котором буду хранится данные боя, характеристика бойцов. Например пользователь шарахнул врага мечом, у него отнялось 40HP: на сервер отсылается параметр "удар мечом", там по всяким формулам высчитывается нанесенный урон. HP врага уменьшается. Файл о битве на серваке обновляется. И потом враг наносит ответный удар. Ну и так до победы.
Теперь вопросы: как организовать так чтобы сервер не путал какому пользователю принадлежит файл битвы... Т.е. чтобы правильно инициализировал битву, ведь постоянного коннекта с сервером нет, насколько я знаю. Тогда использовать cookie или сессию, значит?

И как удалять ненужные данные? Например битва закончилась. Сразу удалить файл, или просто поместить имя файла куда-нибудь, а потом где-то раз в час удалять разом все ненужные файлы?

Пока что вроде это все вопросы. Рационально ли так проектировать проект? Какие есть замечания???
13
04 мая 2007 года
RussianSpy
3.0K / / 04.07.2006
В аську мне стукнись - может чем и помогу... Онлайн играми занимаюсь уже 3 года
239
08 июня 2007 года
Dolonet
1.7K / / 20.05.2000
Цитата: UAS
...Клиент, сервер: самый лучший клиент на мой взгляд, написанный на Flash, но я во флэше вообще не умею, так что я думаю можно для начала обойтись AJAX, и с его помощью с серваком обмениваться. Потом полученные данные уже парсить и раскидывать по странице где надо.
Сервер писать буду на PHP ибо только его норм.знаю, но если писать большой проект, то тогда конечно надо на С++ писать. БД тоже думаю возьму стандартный MySQL. Для моих целей его хватит.
...
Пока что вроде это все вопросы. Рационально ли так проектировать проект? Какие есть замечания???


Интересно, а почему именно C++? Неужели Perl настолько плох? Вот по моей информации Гугл плавно переходит с ЦПП на Java.

244
08 июня 2007 года
UAS
2.0K / / 19.07.2006
Dolonet, ну не знаю) Просто С++. Я в программировании не аз. Просто если проект нагруженный очень, то имхо я думаю на С++ писать. (Я не говорю что у меня проект нагруженный, просто размышления в общем).
240
09 июня 2007 года
aks
2.5K / / 14.07.2006
Цитата: Dolonet
Интересно, а почему именно C++? Неужели Perl настолько плох? Вот по моей информации Гугл плавно переходит с ЦПП на Java.


А чем C++ плох? )) темболее, что работать явно быстрее будет. По мне так такое стоит писать или на C++ или на Java.

239
09 июня 2007 года
Dolonet
1.7K / / 20.05.2000
Ребят, я просто спросил ) Мне интересны были аргументы UAS )
244
10 июня 2007 года
UAS
2.0K / / 19.07.2006
Вообщем перед отпуском решил дописать наконец-то.. Встала небольшая проблемка в виде того как хранить данные боя. Ясень пень что не на стороне браузера. Когда проводится атака - то будет использоваться AJAX для запроса к серверу. Но вот как всё это хранить на сервере??
Привязать браузер по IP, Cookie?? Потому что хранить id сражения в браузере и потом передавать как идентефикатор - имхо бред, потому что можно подменить...
Так же как хранить данные о битве на сервере? Скорее всего создавать под них отдельную таблицу...
1.8K
10 июня 2007 года
civ3
68 / / 21.07.2003
Цитата: UAS
Потому что хранить id сражения в браузере и потом передавать как идентефикатор - имхо бред, потому что можно подменить...


Это как раз и не бред.
Для примера.
Таблица: id боя, id первого игока, id второго игрока, активный бой (0 или 1).

id боя приходит из GET
id игока известен.

Выбираешь по id боя, id залогиненого игрока и активный бой = 1
Некорректный id боя ни на что не повлияет.

1.0K
12 июня 2007 года
diesel_den
169 / / 22.12.2005
Цитата: civ3

Некорректный id боя ни на что не повлияет.




Можно чужой id указать.
тогда сделаешь ход за другого игрока

271
12 июня 2007 года
MrXaK
721 / / 31.12.2002
для начала чужой ид надо узнать... особенно если передавать юзера его ид в виде хэша...
1.0K
12 июня 2007 года
diesel_den
169 / / 22.12.2005
Цитата: Mr.Hacker
для начала чужой ид надо узнать... особенно если передавать ид юзера в виде хэша...



1) Правельнее сказать не хеш, а зашифрованный id.
Потому как по хешу не всегда можно узнать
входное значение.
2) Можно заюзать HTTPS, но вообще
при организации любой защиты нужно оценить
заинтересованность хакера и отталкиваться от этого.
При большой заинтересованности HTTPS не поможет.
Мне тут друг сказал, что недавно закрытые ключи
научились быстро подбирать по открытым.

1.8K
12 июня 2007 года
civ3
68 / / 21.07.2003
1) Бред. На хрена хэшировать или шифровать id боя???
2) Каким мерилом ты оценишь заинтересованность хакера?

P.S. Против keylogger'a ваще ничего не поможет.
244
12 июня 2007 года
UAS
2.0K / / 19.07.2006
Цитата: civ3
1) Бред. На хрена хэшировать или шифровать id боя???



Ну например: онлайн проходят 4 матча, id допустим 324,325,326,327. В каждом матче по 2 игрока, соответственно у каждого свого uid.
Если узнать id другого матча, и id игрока, то вполне можно делать ход за любого игрока протекающих матчей. Так что просто надо привязку делать я думаю не только по id матча, но ещё и по IP и cookie. По идее можно и просто по cookie.

271
12 июня 2007 года
MrXaK
721 / / 31.12.2002
а как вы авторизация на сайте пишите... в кука складывается PHPSESSID который потом обрабатывается сервером и выдаётся соответствующий массив кук... юзер может зайти за другого только если украдёт куку... это уже не проблема игры...
в игре то же самое... как делает БК (или раньше делал)... перед боём в куку кладётся сгенерённый id (или даже не в куку а в тупую в hidden поле формы боя), он передаётся на сервер, скрипт ловит этот ид, смотрит есть ли пользователь в этом бою и всё... за другого игрока ты удар не нанесёшь, ибо ты знаешь этот сгенерённый id, в другом бою не ударишь, ибо сервер проверит твой ид на соответствие бою... всё
1.8K
13 июня 2007 года
civ3
68 / / 21.07.2003
Цитата: UAS
Если узнать id другого матча, и id игрока, то вполне можно делать ход за любого игрока протекающих матчей.


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

244
13 июня 2007 года
UAS
2.0K / / 19.07.2006
Запрос атаки делается через AJAX, естественно будут передаваться через него как раз id игрока и матча. Логика понятна?? Подменяем данные в исходном коде страницы и усе.
1.0K
13 июня 2007 года
diesel_den
169 / / 22.12.2005
Цитата: UAS
Запрос атаки делается через AJAX, естественно будут передаваться через него как раз id игрока и матча. Логика понятна?? Подменяем данные в исходном коде страницы и усе.



Ну почему же "естественно" ?
Тут кажись про то и пишут, что не будут.
Будет передаваться особый id (его условно назвали id боя),
который однозначно генериться по
id матча и id игрока и однозначно их определяет.
Алгоритму генерации нужно постоянно менять
параметр/ключ, тогда взломать это дело будет трудно.

244
13 июня 2007 года
UAS
2.0K / / 19.07.2006
diesel_den, спс. Не подумал. +1
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог