Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] Скрипт для игры в реальном времени, Помогите или дайте направление (http://forum.oszone.net/showthread.php?t=109908)

Artem-Samsung 25-06-2008 00:04 834143

Скрипт для игры в реальном времени, Помогите или дайте направление
 
Мне вот от самого начал моего пока что небольшого отрезка пути к познанию php и веб-программированию в целом было интерестно, как составить непростую игру.
К примеру между двумя пользователями.
Для примера игра в камень - ножници - бумагу.

Один человек ставит камень
Второй - ножницы.

Присваивается очко первому за то, что камень побил ножницы.

Возможно это реализовать при php и mysql ?

rus-4-ever 25-06-2008 00:56 834184

НЕТ!!!
Тут скорее JavaScript юзать надо... а лучше AJAX (а к ним уже и РНР привязывается, если надо)... или вообще что то типо флеш приложений чтоли (или как там они называются-вконтакте ещё такие висят)

Тут по сути то нужно интерактивное приложение! Нужно обрабатывать запросы с сервера! А РНР этого не позволяет, так как он только формирует страницу!!! один раз!

bruder 25-06-2008 01:01 834191

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

Artem-Samsung 25-06-2008 01:08 834195

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

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

BASSON_XVI 25-06-2008 01:20 834202

Ммм.. ну вообщем сделать перезагрузку страницы скажем каждые 5 секунд.. и все.. игра маленькая думаю фреймов ненадо... хранить данные можно в БД или в файлах... но думаю в файлах будет лучше... так как обьем данных будет меньше и файлы работать будут быстрее....

rus-4-ever 25-06-2008 01:25 834207

Ну можно и с перезагрузкой... Только это неэффективно...
Если например по умолчанию дается минута на ход, а соперник стормозил, то стороница перезагрузится вхолостую...
Если чел сходил за 2 секунды-то целая минута лишнего ожидания!!!

Ну а так-можно к каждой игре присваивать свой ID...
есть таблица:
ID | 1 gamer | 2 gamer
12 | bumaga | kamen

Думаю с реализацией проблем не видно???

а 5 секунд ставить не стоит :( если инет глючит, то толком сделать ход то не получится... страница по пол минуты загружается...

Artem-Samsung 25-06-2008 02:25 834234

Можно сделать перезагрузку кнопкой дополнительной, при желании на которую можно нажимать

BASSON_XVI 25-06-2008 02:45 834246

Да с кнопкой ты правильно... :drug:

Artem-Samsung 25-06-2008 03:03 834250

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

Busla 25-06-2008 11:30 834437

солидарен с rus-4-ever - оптимально - использовать AJAX
решение на php получается громоздким, но почему нет?
Какая-то таблица с профилями пользователей, допустим, есть. Добавляем таблицу игры с результатами ходов. Как передать на сервер ход игрока - это понятно - обычная форма. Пишем крохотный php-скрипт который возвращает состояние игры по её id - буквально одну цифру. Со страницы игры скриптом регулярно опрашиваем этот php. Зачем всю страницу-то перегружать?

Костэн 25-06-2008 12:02 834470

Вот что я думаю по этому поводу :

1. Создаётся единая для всех желающих поиграть страница с запросом ник_нейма.
2. В базе данных выделяется ячейка памяти не больше чем для двух ник_неймов с упорядоченым
именем. Допустим ячейка1.
3. При вводе ник_нейма потенциальный игрок получает запрос(с кем из списка он бы хотел по играть) с выводом тех, в чьей ячейке есть место для соперника. Если он является первым, то ячейка создаётся сразу после вывода отсутствия игроков. И оповещяет об этом.
4. При вводе ник_нейма своего соперника, ячейка заполняется и для них создаётся по страничке с игрой(камень ножницы бумага).
5. Эти странички одинаковы. На них присутствуют три рисунка соответственно тематике игры. У каждого рисунка своё имя. Логично будет сделать так: у камня - камень, у ножниц- ножницы, у бумаги - бумага.
6. При клике на одном из рисунков запускается обработчик onSubmit(), которому присвоена функция отправки принятого решения в виде имени рисунка.
7. В ячейке, после выбора игроков, под ихними ник_неймами выделяется память для хранения имени выбранного рисунка.
8. Как только под обоими игроками появляется выбор, запускается функция сравнения по принципу: камень > ножницы > бумага > камень.
9. Если выбор Игрока один, будет сделан в пользу рисунка "ножницы"(допустим), а Игрок два, выберет "бумагу"(допустим), то функция сравнивает и выводит результат в ново-выделенную память для хранения счёта.
Ножницы > бамага, значит выиграли ножницы. И один балл присваивается Игроку один.
10. На страничке должен быть счётчик времени для принятия решения выставленный на двадцать секунд. Т.к. страница откроется быстро. Если игрок один сделал выбор за пять(допустим) секунд, а второй за семь(доустим),
то остаётся ещё время для ожидания. Что бы такого не происходило нужно, как только последний игрок сделает выбор - выводить результат поединка.


Время: 20:10.

Время: 20:10.
© OSzone.net 2001-