Вопрос по WM_CHAR. В доках мелкомягких написано что символ в UTF-16 кодировке http://msdn.microsoft.com/en-us/library/windows/desktop/ms646276%28v=vs.85%29.aspx, однако раньше я, да и во всех просмотренных доках использовалось простое преобразование Symbol = Char(WParam), т.е. в кодировке utf8. В паре найденных случаях использовалось преобразование типа MultiByteToWideChar, которые преобразует в UTF-16, хотя по докам он и так в UTF-16. Как на самом деле корректно работать? Чтобы и японские и арабские символы нормально обрабатывались. И как проверять, чтобы всякие бэкспейсы и другие непечатаемые символы не обрабатывались?
var
Buf: WideChar;
kbState: TKeyboardState;
keybLayout: HKL;
begin
if KeyCode = $08 then //BACKSPACE
FTextObj.Text := Copy(FTextObj.Text, 0, Length(FTextObj.Text) - 1) //стираю символ
else
begin
if KeyCode = VK_RETURN then
Exit();
if Length(FTextObj.Text) >= FMaxTextLength then
Exit();
GetKeyboardState(kbState);
KeybLayout := GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, nil));
ToUnicodeEx(KeyCode,(KeyData and $FF0000), @kbState, @Buf, (KeyData and $FFFF),0, keybLayout);
FTextObj.Text := FTextObj.Text + Buf;
end;
end;
Непечатаемые символы (кроме enter и backspace) обрабатываются при присвоении текста (последняя строка) - просто проверяется, есть ли в сгенерированном шрифте такие символы.
Daemon, я пробовал через ToUnicodeEx, английские нормально, русские как то косячно выходило(наверно косяк с кодировками), пробовал Utf16toUtf8 (wParam), вроде нормально. Хотя я под вайном тестировал, может из за него так. Попробую под виндой еще раз. Проверять наличие символов в шрифте я как то не додумался :D Спасибо ))
В D2009 все отлично с русскими, английскими, арабскими и прочим :) Таким образом запили ввод имени для таблицы рекордов Ragdoll Sports. Про лазарус не скажу. FPC очень странно работает с юникодом и весьма необычно имплементит WideString
Когда-то писал свои контролы, всё нормально принималось через WM_CHAR
Проверь, чтобы все функции работы с окном и мессагами имели суффикс W (Wide), а не A (Ansi). Но кириллица и латиница даже при A должны приходить.
кирилица в Ansi стрингах, только если в винде выставлено что однобайтная кодировка, это 1251, что далеко не всегда.
по теме:
FPC делает неявные преобразования кодировок для стрингов (думаю, что и дельфи тоже), если код не в UTF8 с BOM и не стоит директивы {$codepage UTF8}, то строка преобразуется в AnsiString, иначе UnicodeString.
Спасибо за советы, опробую позже)
Может и не в тему темы, но все же...
Думаю как сделать экономику в игре. Хочется сделать, чтобы цены и рынок саморегулировались. Т.е. хочется создать какую то относительно достоверную модель рынка. Хотя бы методом последовательных приближений. Допустим, есть мир, в этом мире есть некоторое количество денег. Есть всего один товар на продажу в единственном экземпляре. Исходя из того, что деньги есть "мерило" товара, логично предположить, что цена этого товара будет равной количеству всех денег в этом мире. Если товара два, то соответственно делим её на два.
Если в игре есть несколько сторон, и каждый предлагает разный товар, и у каждого есть некоторая начальная сумма денег, то как определить, кому по чем товар продавать? Можно конечно вычислять трудозатраты на создание единицы товара и исходя из них как то назначать цену, но эта цена должна быть адекватной количеству денег в мире. А если трудозатраты минимальны, но специфика такова, что можно производить очень ограниченное количество товара за единицу времени? Если стороны будут производить товар, то он по идее должен обесцениваться. Опять же как регулировать цены? Население будет расти, количество товаров тоже, соответственно по идее нужно будет выпускать больше денег. В идеале хотелось бы вывести какую то простую зависимость цены товара от его количества в мире, других товаров и количества в мире денег.
У кого какие идеи? Или что можно почитать?
При капитализме продавец сам выставляет стоимость своих товаров исходя из своих соображений (с поправкой на законы, типа запрета на демпинг) и неполном представлении о рынке.
При централизованной экономике центры формируются, соответственно, централизовано. У тебя такая, да?
Есть модели формирования цены на основе спроса, аукцион к примеру.
Есть всего один товар на продажу в единственном экземпляре. Исходя из того, что деньги есть "мерило" товара, логично предположить, что цена этого товара будет равной количеству всех денег в этом мире.
Нет, не логично. Начиная с того, что деньги — абстракция с абстрактными законами, бумага и символ, и заканчивая тем, что у нас не определена рыночная модель. Может владелец товара готов продать этот единственный товар задёшево, а не за все деньги?
При централизованной экономике центры формируются, соответственно, централизовано. У тебя такая, да?
У меня не централизованная экономика. Исхожу из истории про то откуда взялся ссудный процент. Источника не помню да и не найду уже. Суть там в том, что один человек выпустил деньги, чтобы устранить меновой рынок(сколько стоит одна корова в топорах?). Причем, каждый с самого начала брал себе столько денег, сколько посчитает нужным, при условии, что через год отдаст на 1 процент больше(читай заём).
Просто ввожу участников рынка, распределяю каждому по штуке баксов к примеру, у каждого есть какое то начальное количество товара. И есть какое то оборудование для его производства. Товары все разные. Дальше они сами по идее должны определить цены на свой товар(как?), который будет корректироваться впоследствии спросом и предложением(как?).
Я еще ничего не реализовал, просто пока думаю над этим.
Doj написал:
Может владелец товара готов продать этот единственный товар задёшево, а не за все деньги?
Вообще, этот случай вырожденный, для облегчения понимания как все это устроено. При продаже единственного товара, если покупатель в дальнейшем не собирается его продавать деньги после продажи теряют всякий смысл, т.к. покупать на них больше нечего.
Просто ввожу участников рынка, распределяю каждому по штуке баксов к примеру, у каждого есть какое то начальное количество товара. И есть какое то оборудование для его производства. Товары все разные. Дальше они сами по идее должны определить цены на свой товар(как?), который будет корректироваться впоследствии спросом и предложением(как?).
Я еще ничего не реализовал, просто пока думаю над этим.
Я своим предыдущим сообщением поставил под сомнение концепцию "все деньги в мире равны по стоимости всем товарам в мире". Мне это кажется противоестественным; в условиях отсутствия централизованной экономике это вообще недостижимо (математически).
Концепция "стоимость товара равна стоимости всех затраченных на него товаров + прочие издержки производства (если есть, например количество пролитого пота)" выглядит весьма логично и справедливо, разве нет?
Концепция "стоимость товара равна стоимости всех затраченных на него товаров + прочие издержки производства (если есть, например количество пролитого пота)" выглядит весьма логично и справедливо, разве нет?
Выглядит логично, для товара определить трудозатраты в человеко-часах, учитывая все исходные компоненты для его создания. Умножить человеко-часы на условную стоимость человеко-часа, получаем себестоимость товара, накидываем некий процент на прибыль, получаем цену по которой и продаем. Но как определить стоимость этого человеко часа? Ведь если взять стоимость 1 рубль, и раздать всем изначально по паре миллиардов рублей, никто работать не захочет ведь все и так миллиардеры) Имею ввиду нет зависимости от рынка здесь, ни от спроса ни от предложения ни от "стоимости денег"(инфляция\дефляция).
Может надо не раздавать всем по миллиарду, а ввести банк, в котором они будут делать займы, и в итоге все банку будут должны:D
CoderInTank написал:
Думаю как сделать экономику в игре. Хочется сделать, чтобы цены и рынок саморегулировались. Т.е. хочется создать какую то относительно достоверную модель рынка. Хотя бы методом последовательных приближений.
Зачем? (это первый вопрос, который задаётся на любую идею, призванную замутить что-то сложное, и с непрозрачными целями)
Зачем тебе нужна в игре сколько-нибудь сложная экономика? Это будет ММОГ, просто мультиплеер или сингл? Какая часть игры будет посвязена экономике? Скажем "Капитализм" посвящён экономике чуть менее чем полностью. В EVE экономика играет заметную роль и близка к реальной по поведению и принципам. В Х экономика занимает существенную долю, но сама по себе довольна проста.
Какая игра будет у тебя? Если это будет сингл, в котором экономика является только чекоторой частью геймплея, имеет ли смысл наворачивать трудно балансируемые сложности одна на другую?
Я к тому, что существует два основных подхода к балансировке, снизу и сверху.
Снизу, это когда задаются параметры, на их основе функции что-то считают и получается результат. Этот путь избирает 99% разработчиков (незамивисо от того, разрабатывают они компьютерную игру или настолку). И в 99% случаев получается несбалансировнное нечто, выдающее убервафли и прочие порушители баланса на раз.
Сверху, это когда очерчиваются рамки того, что должно быть в итоге, а потом выводятся начальные параметры для получения этого. Это путь контролируемого баланса, требующий больше предварительной работы.
Ты сейчас размышляешь первым спсобом. С вероятностью 99% это окажется не тем, что нужно :)
Возможно, чтоит уточнить, какое именно место будет занимать экономика в игре и, возможно, вполне подойдёт модель, в которой экономика будет делать вид, что ведёт себя правдоподобно. Это сделать в 99 раз проще. Во столько же раз проще удержать баланс.
Да думаю развить идею X-COM: Apocalypse в виде ММОГ. Игрок будет управлять одним человеком, может быть участником организации своей либо чьей то, если он глава организации, то соответственно может вести внешнюю политику организации, что то закупать, что то продавать, с кем то воевать.
В исходной X-COM: Apocalypse город, поделенный между организациями, в идеале там планировалось, что все что то производят и продают, либо оказывают услуги. Получается живой город, организации между собой воюют, дружат, сотрудничают. Вот... они в свое время многое не успели реализовать, получилось нечто интересное, но явно неоконченное.
Не нравится мне, когда деньги появляются ниоткуда(продал товар или здание, кому можно продать товар или здание в стратегии где ты один на необитаемом острове??) и все накапливаются, накапливаются, уходя из мира только в виде уничтоженной техники, зданий. При затягивании игры, получается, что экономика уже не решает никакой роли, у тебя просто огроменная куча бабла, которую можно потратить на что угодно, только успевай заказывать новых юнитов и отстраивать базу.
Охохо сама по себе идея реализовать Х-СОМ в виде ММОГ невероятно сложна а еще и экономика. По моему это очень сложно для одного человека. Да даже для команды это будет не просто
Ох, экономика ММОГов это сильно отдельная песня. Могу точно сказать, что при такой игре сколько-нибудь правдоподобная экономика не будет работать вообще и потребуется куча усилий, чтобы удержать инфлаюцию от безудержного роста (не остановить, а именно удержать в рамках)
Daemon, заюзал в общем твой код, все работает, только пришлось добавить вызов Utf8Encode после ToUnicodeEx, зачем... непонятно.... подозреваю, что возвращается UTF-16 который Utf8Encode перекодирует в UTF-8. В функе Utf8Encode вызывается UnicodeToUtf8.
Начал изучать программирование под андроид. Хочу сделать свой мессенджер с блекджеком и шлюхами. Работать с udp сокетами. Клиент соответственно на андроиде сделанный на java, сервак на ПК сделанный на free pascal. Подскажите какое шифрование можно применить для трафика, чтобы просто было но достаточно надежно? Ну и желательно поддержка чтоб была и на java и на fpc.
Upd.
Погуглил, решил остановиться на Blowfish, и там и там реализация есть. Blowfish - использует симметричное шифрование.
Шифрование нужно, чтобы при перехвате трафика трудоемко было бы его прочитать. Если использовать для всех клиентов одинаковый ключ, то при компрометации этого ключа(путем декомпиляции, допустим), злоумышленнику легко можно будет расшифровать траффик всех клиентов. Если же генерировать и передавать незашифрованным ключ при каждой новой сессии, то при перехвате траффика этот ключ так же будет скомпрометированным и шифрование окажется бесполезным. Возможно я чего то не понимаю, как правильно делать то?