| Сусла Александр's profileАлександр Сусла: сфераBlogGuestbookNetwork | Help |
Александр Сусла: сфера |
|||||
|
|
August 14 Ломаем игру социальной сети ВКонтакте «Гонки на клавиатурах»С недавнего времени начал натыкаться на игры которые предлагают измерить скорость набора из клавиатуры, играл когда-то в клавогонки.ру вот наткнулся на такую игру в контакте(социальная сеть). Пробовал измерять свою реальную скорость, получалось аж 230 – 260. Не дело, решил активизировать злодейскую часть мозга и решить данный вопрос с помощью бота. Начнем по порядку, первым делом нам необходим бот который будет принимать текст и потом печатать его где-то. И так создаем простое консольное приложение на Win и сразу же требуем от пользователя ввести текст который программа будет печатать: cout<<"Enter TExt"<<endl; char sMas[6000]; cin.getline(sMas,6000); После этого у нас есть массив чаров с букваками, как вы уже наверное знаете ценный груз такого массива заканчивается на ‘\0’ создадим цикл: for(int i =0;i<6000; i++) { Sleep(80); //Для регулировки скорости печати.
PressedKey(sMas[i],true); // Моя функция if(sMas[i] == '\0') { return 0; } } Теперь давайте посмотрим на функцию PressedKey ее код состоит из таких блоков. void PressedKey(char Key,bool show) { if(Key == '0') { keybd_event(0x30,1,KEYEVENTF_EXTENDEDKEY,0); keybd_event(0x30,1,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0); if(show == true){cout<<Key;} } if(Key == (char)-108)//Ф { keybd_event(0xA0,1,KEYEVENTF_EXTENDEDKEY,0); keybd_event(0x41,1,KEYEVENTF_EXTENDEDKEY,0); keybd_event(0x41,1,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0); keybd_event(0x10,1,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0); if(show == true){cout<<Key;} } if(Key == (char)-28) { keybd_event(0x41,1,KEYEVENTF_EXTENDEDKEY,0); keybd_event(0x41,1,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0); if(show == true){cout<<Key;} }
if(Key == (char)-101)//Ы { keybd_event(0xA0,1,KEYEVENTF_EXTENDEDKEY,0); keybd_event(0x53,1,KEYEVENTF_EXTENDEDKEY,0); keybd_event(0x53,1,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0); keybd_event(0x10,1,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0); if(show == true){cout<<Key;} } if(Key == (char)-21) { keybd_event(0x53,1,KEYEVENTF_EXTENDEDKEY,0); keybd_event(0x53,1,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0); if(show == true){cout<<Key;} } Это конечно же не все, как видите с цифрами все понятно мы просто проверяем если символ равен ноль значит эмулируем нажатие и «отжатие» кнопки. С буквами все немного сложнее так как они бывают большие и маленькие потому иногда необходимо нажимать Shift потом нажимать букву, отпускать букву, отпускать Shift Также простое сравнение букв «не катит» необходимо сравнивать их по индексам в ANSI. Короче, более детально смотрите в исходники. В итоге у нас должно получиться такое вот приложение: В своей программе я сделал задержку, аля нажимаем ентер и только через 2 секунды, начинается печать. Еще к сожалению моя программа туповата и не умеет распознавать раскладку потому будьте бдительны перед вводом выставьте русскую раскладку. Программа должна теперь без проблем набирать текст.
Теперь необходимо получить текст для игры, как видите на скрине: Есть надпись «Текст закрыт до начала игры» но на самом деле текст ЕСТЬ! Просто он не отображается. Для того чтоб посмотреть текст нам нужна программа: Charles Настройте еее так чтоб через нее шли все запросы (по умолчанию она должна быть настроена для Internet Explorer что в свою очередь без напрягов позволяет использовать ее для Chrome) Теперь заходим на страницу игры. После чего заходим в чарли(Charles) и создаем новую сессию: После чего в игре начинаем новую игру, как только вы кликните по ссылке ваш браузер отправит запрос на получение текста, ну и само собой получит ответ
Заходите в Charles идите в вашу сессию там уже должны быть запросы к сайту http://Klava.mzon.ru Там находим папку engine и в ней запросы к api.php, смотрите самый первый запрос, иногда второй, переходите в вкладку Response(ответы) ищите поле Text там и храниться ваш текст Кликните по полю два раза и вылезет текст в новом окне: Теперь копируем текст и вставляем в мою программу который она по истечении нескольких секунд наберет. Для защиты: Я бы посоветовал разработчикам как минимум зашифровать текст. вот все файлы которые вам понадобятся. з.ы: для Charles надо Java. Кстати на сайте Klavogonki.ru точно такая же система. June 26 Microsoft WorkFlow как способ описания логики ботаБот — специальная программа, выполняющая автоматически и/или по заданному расписанию, какие-либо действия. Конечные автоматы в описании логики бота помогают очень сильно и хорошо ускоряют время разработки решений, а если использовать для разработки Microsoft WorkFlow то возрастает еще и простота разработки потому как перетягивать из ToolBox Элементы намного проще чем писать код :). Цель которой я хочу добиться это описать очень примитивную логику движения автомобиля по шоссе, также хочу чтоб этих автомобилей было множество и они все использовали один Workflow. Для отображения реальной работы я буду использовать XNA. Для начала нарисую и напишу код который будет показывать на экране дорогу (для наглядности) Cup_coffee--; Результат на лицо: Презентационная часть программы полностью готова давайте для начала ознакомимся с классом автомобиля: Логика устроена так что «пользователь» может управлять автомобилем только через методы Acceleration(Набор скорости) и Brake(Торможение).Но в классе есть понятие Жива ли машина (свойство IsDead) «если автомобиль поломан(мертв) то разгонятся он не может, а так же сам по себе тормозит» Поломка происходит таким способом: если разогнать скорость более чем максимальная. Если вам интересно более детально рассмотреть этот класс смотрите в SRC к примеру. Теперь задача описать водителя для этого автомобиля. Как ему действовать я буду описывать с помощью Microsoft WorkFlow:
Первое что необходимо сделать это сам элемент WorkFlow, я буду использовать конечные автоматы, поэтому создаю: Теперь можно начинать описывать WorkFlow водителя. Для начала я создал просто два состояния с помощью который автомобиль будет просто «газовать» это действие выполняется в состоянии StartBot после этого состояние изменяется на состояние CheckSpeed но в ‘этом состоянии вся логика передается обратно в состояние StartBot Вот как выглядит это на схеме: Если хотите более детально рассмотреть смотрите примеры. Мой WorkFlow готов. Теперь его необходимо запустить и передать в него параметр какой машиной он будет управлять. Но сначала немного о том как вообще сделать связь между этими двумя проектами. Я решил проблему так: Описание класса Car(Автомобиль) я писал в проекте где находится сам WorkFlow также прям в этом классе я создал статический List<Car>. (кстати пришлос в References добавить пространства имен Microsoft.Xna) Подключив Длл с WF к проекту с XNA (здесь уже подключил пространства имен отвечающие за WF) я получил доступ к Классу Car а так же к статической коллекции находящейся в нем. На этом проблемы закончились я мог изменять коллекцию как в игре так и в WorkFlow. Но беда состоит в том что просто необходимо знать по какому индексу надо чтоб WF общался к коллекции. Решение весьма просто: передавать в WF индекс элемента коллекции, делается это весьма не обычным образом: Для рабочего потока вы передаете параметры, сохраняя их в словаре в виде пар “имя-значение”, и когда вы конструируете рабочий поток, то проходите по этому словарю. Когда WF планирует на выполнение рабочий поток, эти пары “имя-значение” используются для установки значений общедоступных свойств экземпляра рабочего потока. Каждое имя параметра проверяется по общедоступным свойствам рабочего потока и, если обнаружено соответствие, вызывается средство доступа set этого свойства и ему передается значение параметра. Если вы добавляете в словарь пару “имя значение”, причем имя не соответствует свойству рабочего потока, то при попытке сконструировать такой рабочий поток будет возбуждено исключение. Принскрин кода который создает рабочий поток с параметром: Рабочий поток теперь вызывается и вся система работает если говорить более абстрактно то: у нас есть игра есть рабочий поток автомобиль в игре просто передвигается в игровом пространстве а рабочий поток (WorkFlow) вызывает ускорение. Сейчас наверное читатели плюются типа: можно же было вызывать метот прямо в XNA приложении, но вся соль в том что: 1) Работа водителя(Бота) автомобиля рисуется в виде кубиков в приятном для понимания WorkFlow 2) Действия Водителя выполняются в отдельном потоке Но основная ценность это конечные автоматы в создании логики для водителя нашего виртуального автомобиля. Теперь имеет ясную необходимость то, что надо описать в нашем WF код так, чтоб скорость автомобиля не ставала больше чем, максимально доступная. При составлении условий в WF рекомендуется не использовать свойства из других классов потому рекомендуется копировать переменные в класс. Вот так выглядит схема после добавления логики ограничения скорости в класс? Если хотите более детально с ней познакомиться смотрите исходники Теперь автомобиль разгоняется до максимально доступной скорости и движется с этой скоростью до бесконечности. Я думаю что неплохо было бы добавить еще и логику остановки автомобиля если перед ним находиться другой автомобиль. Добавлю еще 2 автомобильчика, сделаю, чтоб первый шел впереди, но медленно, а два задних его догнали, но не врезались в него, а ехали за ним. Ну вот, все получилось схема выглядит по новому смотрим: А водители в автомобилях просто чудесны, едут друг за другом и никогда не попадают в аварии. Плохо только что из-за плохой поддержки много поточности XNA приложение «тупит» потому описывать работу в реальном времени, наверное, не следует. В любом случае пример может быть полезен. March 14 XNA мини гоночкиВот решил выложить такую себе альфа версию маленькой игры. Пока без исходных кодов только EXE но когда более менее доделаю, тогда выложу всё. Вот пара скриншотов: графика: Вот пока возможно выглядит сухо.. но все делается с перспективой:) Пока игра поддерживает только 2 игрока в сетевой игре, просто пока только 2 модельки машин. но в бедующем все исправлю. вот ссылка на архив с игрой http://www.alexsusla.narod.ru/DragRasingGame.rar Управлеие в Меню стрелочками и кнопкой ENTER. www.cbsystematics.com
March 01 Отличия Microsoft XNA Game Studio 1.0 от 2.0в этой статье я попробую рассказать, чем отличается XNA Game Studio 2.0 от XNA Game Studio 1.0 Установка XNA 2.0
Чистый проект Папку можно переименовать, ну все как обычно просто разработчики наверно подумали, что все равно люди создают эту папку руками вот и решили облегчить нам жизнь. Также туда положили пространства имен подключенные в проект. теперь о генераторе кода: Теперь заглянем в конструктор основного класса игры. Вместо старого Видим в начале у нас уже автоматически создался: Звук Со звуком в XNA 1.0 были проблемы Microsoft говорил надо пользоваться утилитой Microsoft Cross-Platform Audio Creation Tool (XACT) но все было не так просто надо было создать проект в ХАСТ а потом через командную строку его "отбилдить" и после всего этого били утечки памяти в наших играх, но во второй версии продукта все исправили.
1. Подготавливаем *.Wav файл (музыка для вашей игры) не можете найти? для примера возьмите стандартные звуки примечание: Спасибо за внимание надеюсь данная информация была полезной для вас. До новых встреч. www.cbsytematics.com February 27 Введение в XNA и инсталяция XNA Game StudioИ так перед тем как учить технологию XNA на С# неплохо бы прочитать немного выдержек с Интернета, что это такое и с чем его едят вот что говорит уважаемая википедия по этому поводу: Пакет Microsoft XNA, по словам представителей софтверного гиганта, позволит разработчикам компьютерных и видеоигр избежать многих технических трудностей, возникающих при написании кода, а также обеспечит существенное снижение стоимости конечной продукции. Кроме того, благодаря XNA программисты смогут создавать принципиально новые игры с высококачественной графикой. В ходе демонстрации Microsoft показала два анимационных ролика, созданных с применением технологии XNA. В одном из них облако вздымающегося сигаретного дыма в режиме реального времени меняло свою форму и направление движения под действием внешних факторов. Другой ролик демонстрировал разлетающиеся в разные стороны детали разбившегося о стену автомобиля. Нельзя не отметить тот факт, что инструментарий XNA изначально разрабатывался с целью максимально облегчить процесс разработки одинаковых игр для консоли Xbox и компьютеров, работающих под управлением операционной системы Windows. Вместе с тем, пакет XNA позволит распространить общие сервисы Xbox Live, такие как, например, аутентификация, на игры для ПК. Естественно, появление нового инструментария поможет софтверному гиганту лучше конкурировать с Sony в плане выпуска видеоигр для следующего поколения приставок. Вот что говорит один из самых популярных сайтов по программированию на XNA(http://www.xnadev.ru/): XNA Game Studio Express – это новый продукт от Microsoft предназначенный для разработки игр и ориентированный на студентов и разработчиков-любителей. XNA Game Studio основан на Visual C# express 2005 и позволяет разработчикам создавать игры как для Windows так и для Xbox 360. XNA Game Studio Express состоит из: * XNA Framework Content Pipeline – набор инструментов значительно упрощающий добавление в проект различного контента: текстуры, модели, звуки и т.д. * XNA Framework – набор .NET-библиотек классов делающих процесс разработки игр под платформы Windows и Xbox 360 более продуктивным. * Game Studio Express также включает полный набор документации и примеров показывающик наилучшие подходы к использованию XNA Framework и Content Pipeline. Выпуск бета версии XNA Game Studio Express запланирован на 30 августа 2006. Game Studio Express и разработка для Windows Разработчики будут иметь возможность бесплатно скачать Game Studio Express с сайта MSDN и использовать его для разработки как не коммерческих игр, так и тех игр которые планируется издавать и получать от этого прибыль. Game Studio Express и разработка для Xbox 360 Разработчики которые хотят создавать игры для Xbox 360 должны будут стать членами XNA Creator’s Club (клуб XNA-разработчиков). XNA Creator’s Club – это новый сервис на Xbox Live с помощю которого станет доступно все необходимое для разработки и запуска XNA-игр на консолях Xbox 360. Программа подписки Creator’s Club будет открыта для всех. Подписка будет платной и доступна в двух вариантах: $99 в год или $49 за 4 месяца. XNA Game Studio Professional – это эщё один продукт Microsoft предназначенный для разработки игр и ориентированный уже на профессиональных разработчиков. Он будет включать в себя всю функциональность XNA Game Studio Express а также дополнительные возможности для профессиональных разработчиков необходимые для создания коммерческих игр как для Windows так и для Xbox 360. Для разработки коммерческих игр для Xbox 360 как и прежде потребует членства в Xbox 360 Registered Developer Program. Выпуск бета версии XNA Game Studio Professional запланирован на начало 2007 года. XNA Framework Content Pipeline – это набор инструментов нацеленных на упрощение разработки 3D-игр малыми командами. Конвертирование контента (ресурсов: модели, текстуры и т.д.) в тот формат в котором они могут использоваться в игре – это одна из основных проблем разработчиков: различные инструменты для разработки контента используют различные форматы. Проблема усугубляется необходимостью оптимизировать контент под несколько платформ (Windows, Xbox 360). XNA Framework Content Pipeline призвана решить эти проблемы. XNA Framework позволяет разработчикам создавать современные игры с использованием языка программирования C# и богатого набора библиотек классов. XNA Framework также обеспечивает высокоуровневую унификацию АПИ между Windows и Xbox 360 версиями, что в значительной степени сокращает затраты на портирование игр между обоими платформами. XNA Framework реализована как надстройка над DirectX и предоставляет .NET 2.0-АПИ. Ну, информации и книг очень много не будем тормозить на введении. Как устроить себе рабочие место, для того чтоб можно было программировать на XNA? 1.0 скачать все нужные файлы все ссылки доступны для бесплатного скачивания, но ваши игры вы не сможете продаватьто есть не для коммерческого использования. 1.1 - инстал самой C# Express 2005 http://www.microsoft.com/express/2005/download/offline.aspx 1.2 - патч к SP1 http://download.microsoft.com/download/7/7/3/7737290f-98e8-45bf-9075-85cc6ae34bf1/VS80sp1-KB926749-X86-INTL.exe 1.3 - патч для того чтоб преобразовать ваш Express 2005 в XNA Game Studio http://download.microsoft.com/download/c/c/8/cc8c017a-ae53-4832-83a9-14b6d7b6e222/xnagse_setup.msi 1.4 - Directx SDK http://download.microsoft.com/download/b/e/7/be7ffe34-903c-410b-bdbc-ee6c018df45c/dxsdk_november2007.exe 1.5 - редист(этот пакет надо сбрасывать тем у кого хотите чтоб работали ваши игры) http://download.microsoft.com/download/1/7/d/17d2b68e-3ba4-4ec3-b225-cbd3d2e510a2/xnafx_redist.msi 2.0 инсталляция 2.1 – монтируем образ C# Express 2005 или изымаем из архива перед тем как качать мы выбирали качать ISO файл или архив 2.2 – инсталлируем C# Express 2005 2.3 – ставим SP1 на C# Express 2005 2.4 – ставим XNA Game Studio 2.5 – обязательно устанавливаем Directx SDK потому что в XNA графика основана на Directx (будте внимательны когда мы с Майкрософт скачиваем Directx SDK он в архиве сначала распаковываем потом инсталлируем) Еще есть варианты другие варианты инсталляции на Microsoft Visual Studio 2005 но они как бы не проверенные описанный выше способ рабочий на 100%!! все после этого среда разработки XNA на C# готова к работе! Как создать первый проект и понять основы роботы можно легко найти в книгах и в Интернете. В следующем посте постараюсь рассказать о том, как проинсталлировать XNA Game Studio 2.0 и чем она отличается от первой. Спасибо за внимание. Заходите еще! www.cbsystematics.com |
||||
|
|