|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
|
krinart |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 75 Регистрация: 10.4.2008 Где: Донецк Репутация: нет Всего: нет |
хочу сделать карточную онлайн игру, для чего нужно хранить в БД карты игроков. Вроде придумал неплохой способ - битовый массив, где каждой карте сообветствует свой бит, и если она у игрока есть, значит этот бит=1. Так как карт 36, соответственно нужно в БД хранить число <= (2^36-1).
Но почемуто иногда выскакивают отрицательные числа в самом алгоритме, не пойму почему приведу код
подскажите, в чём проблема |
|||
|
||||
ZlojEzh |
|
|||
Опытный Профиль Группа: Участник Сообщений: 285 Регистрация: 8.10.2005 Где: Киев, Украина Репутация: 10 Всего: 15 |
http://ua.php.net/int
какие у Вас значения PHP_INT_SIZE и PHP_INT_MAX? Добавлено через 1 минуту и 24 секунды да, похоже, и при стандратных 32 bits signed, крайний бит будет управлять знаком |
|||
|
||||
krinart |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 75 Регистрация: 10.4.2008 Где: Донецк Репутация: нет Всего: нет |
ZlojEzh, а где это посмотреть? ни в php.ini ни в phpinfo() ничего такого нет
|
|||
|
||||
ZlojEzh |
|
|||
Опытный Профиль Группа: Участник Сообщений: 285 Регистрация: 8.10.2005 Где: Киев, Украина Репутация: 10 Всего: 15 |
это константы
просто print PHP_INT_SIZE |
|||
|
||||
krinart |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 75 Регистрация: 10.4.2008 Где: Донецк Репутация: нет Всего: нет |
PHP_INT_SIZE =4
PHP_INT_MAX= 2147483647 я начинаю догадываться... а как их корректно изменить, чтобы всё заработало? мне нужно 36 бит |
|||
|
||||
ZlojEzh |
|
|||
Опытный Профиль Группа: Участник Сообщений: 285 Регистрация: 8.10.2005 Где: Киев, Украина Репутация: 10 Всего: 15 |
сомневаюсь, что это меняется
да и вообще, битовый массив в php - это как-то странно заведите массив boolean'ов потери в производительности даже замерить будет сложно ) |
|||
|
||||
krinart |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 75 Регистрация: 10.4.2008 Где: Донецк Репутация: нет Всего: нет |
ZlojEzh, а как это вобще сделать? подскажите где можна почитать про массив boolean
|
|||
|
||||
solenko |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
krinart, если все таки хочется хранить массив битов, то можно просто разбить карты на два числа -- красное/черное. 18 бит поместятся на любой системе.
Вопрос -- а зачем вам вообще хранить карты в базе? Пользователи могут разлогинится, потом вернутся и продолжить игру? -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
krinart |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 75 Регистрация: 10.4.2008 Где: Донецк Репутация: нет Всего: нет |
solenko, дело в том что игра будет не с компьютером, а с другими игроками и сделана при помощи AJAX'a. Вот и придётся всю информацию хранить в базе для обмена с другими игроками. А за совет - спасибо, наверно придётся так и сделать
|
|||
|
||||
krinart |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 75 Регистрация: 10.4.2008 Где: Донецк Репутация: нет Всего: нет |
неужели никак невозможно сделать одним массивом? очень уж некрасиво получается дальше, когда для описания хода, то есть одной карты, нужно добавлять ещё один бит, чтобы хранить к какому цвету относится карта... и такая же ситуация возникает при сохранении козыря... вобщем несколько некрасивый способ, хотелось бы чтото более элегантное
|
|||
|
||||
solenko |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
krinart, вы не ответили на мой вопрос. Игда между жувумя игроками != игру можно продолжить по прошествии дня/недели/окончанию_сессии.
Это я к тому что зачем писать в базу? SESSION будет гораздо убоднее. Кроме того, зачем именно битовая карта? Чеи обусловлена такая экономия места в базе и нужно ли это. Искать по текущему раскладу вы явно не будете, так почему не хранить все тот же сериализованный массив? -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
krinart |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 75 Регистрация: 10.4.2008 Где: Донецк Репутация: нет Всего: нет |
использование битовой карты обусловлено её удобством. Для сравнения карт, не нужно знать достоинства карт, с помощью сдвигов можно узнать масть и просто сравнить как числа.
А насчёт SESSION.. ведь всё равно придётся один раз записать в базу, при раздаче. Чтобы потом все смогли "забрать" свои карты, после чего уже можно и в сессии хранить. Да и ходы тоже придётся писать в базу, чтобы к этой информации имели доступ несколько пользователей. Или я неправильно понял саму идею? |
|||
|
||||
ksnk |
|
|||
прохожий Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
solenko, сессия вряд-ли будет удобнее. В конце концов игру можно отложить на пол-часа. Просто не ходить. За это время сессия сдохнет, а запись в базе - не обязательно К тому-же сессия предназначена для идентификации одного игрока. Разделение сессии между 2-мя игроками представляется идеологически неверным решением ...
Добавлено через 1 минуту и 36 секунд krinart, удобство битовой карты для php, imho, несколько преувеличено. Можно еще, к примеру, заюзать строку из 36 символов... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
krinart |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 75 Регистрация: 10.4.2008 Где: Донецк Репутация: нет Всего: нет |
ksnk, а как же быть со сдвигами? или php настолько всеяден что даже такое сможет?
|
|||
|
||||
ksnk |
|
|||
прохожий Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
krinart, а зачем вообще используются сдвиги? Чтобы узнать масть? Как, можно поинтересоваться?
Можно составить список задач программы-дилера и подобрать подходящий способ хранения данных. - новая игра -- раздать карты - продолжение игры -- проверка корректности хода игрока --- карта, которой сделан ход у противника есть --- ход не противоречит правилам игры -- вывод резльтатов хода - окончание игры -- поздравление победителя -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |