понедельник, 12 июня 2017 г.

Robocode – установка, запуск, простейшие команды

Прежде чем играть в Robocode, проверьте свой компьютер на соответствие системным требованиям: у вас должна стоять Java 5 или выше, а также должны быть прописаны системные переменные JAVA_HOME и Path. Скачать последнюю версию Java можно на java.com, проверить работоспособность JDK – в теории, на https://www.java.com/ru/download/installed8.jsp (только в Firefox оно всё равно не загрузится из-за ограничений, связанных с безопасностью).

Если вы уверены, что ваш ПК потянет эту игру, зайдите на SourceForge и скачайте последнюю версию Robocode (.jar-файл весом около 6 Мбайт). После скачивания найдите его в «Загрузках» и дважды кликните по нему. Вся установка сводится к выбору папки для программы и нескольким нажатиям на кнопку Yes.

Запустить игру можно двойным кликом по ярлыку на рабочем столе или открыв файл robocode.bat. Появится командная строка, в которой вам сообщат об успешном нахождении десятка библиотек и использовании стандартной конфигурации, потом откроется окно программы, воспроизведётся небольшая анимация и, наконец-то, начнётся главное веселье.

Новый бой запускается по команде Battle->New (ищите на панели сверху). Откроется окно выбора компонентов, в котором вас попросят выбрать нужные элементы боя. Для первого раза нам хватит трёх: MyFirstRobot, RamFire и Tracker. Добавляется компонент очень просто: щёлкаете по его имени в колонке Robots, жмёте на кнопку Add-> и дело сделано. В конце получится что-то вроде этого:

image hosted at ImgTaxi.com

Теперь, нажав на Start Battle, вы увидите, как на протяжении десяти раундов три робота будут взрывать друг друга в стиле танковых стратегий начала 2000-х.

Взглянем теперь поближе на персонажа под названием MyFirstRobot. Как и все роботы, он состоит из трёх частей: тела (отвечает за скорость, маневренность и грузоподъёмность «танка»), орудия (используется для стрельбы энергетическими снарядами, может поворачиваться влево-вправо) и радара (нужен для обнаружения противника).

image hosted at ImgTaxi.com

Вы можете совершенствовать и перестраивать роботов, редактируя их исходный код. Он доступен через команду Robot->Source Editor. Выберите её и подождите, пока система найдёт установленный на вашем ПК компилятор. После этого воспользуйтесь выпадающим меню File->New->Robot, придумайте имя для вашего нового бойца (возьмём дефолтное MyFirstRobot) и название пакета, в котором будут храниться его данные (я предпочла короткое и говорящее MyArmy). Появится текстовый редактор со «скелетом» робота – не удаляйте этот текст, он вам ещё понадобится.

В методе public void run() описаны действия, выполняемые роботом после начала раунда. По умолчания он делает следующее: пока не кончится битва (while (true)) он проезжает 100 пикселей по направлению вперёд (ahead(100)), разворачивает пушку на 360 градусов (turnGunRight(360)), отъезжает на 100 пикселей назад (back(100)) и снова описывает полный круг орудием.

В методе onScannedRobot даётся инструкция по поведению при встрече с врагом. Увидев противника, наш мини-танк стреляет (fire(1)).

Вот так выглядит необходимый «прожиточный минимум» для боевого робота. Чтобы не потерять эту чудесную машину, давайте сохраним её командой File->Save и скомпилируем, выбрав в меню сверху Compiler->Compile. Осталось только опробовать её в бою: закройте редактор кода, вернитесь в основное окно и устройте новый бой между своим роботом (у меня в списке он значится как MyArmy.MyFirstRobot*) и, скажем, моделью Target.

P.S. Мой танк попал по мишени, а ваш?

P.P.S. Продолжение следует.

четверг, 8 июня 2017 г.

Google Таблицы – приложение для бизнеса от разработчиков Android

Google Таблицы – редактор *.xls и *.xlsx-файлов (помимо этого работает с массой менее популярных форматов, можно даже извлекать данные из документов Блокнота), созданный группой программистов Google для загрузки, просмотра и изменения таблиц на устройствах под управлением ОС Android.

Изначально эти функции выполняла программа Google Drive: загруженный на диск документ MS Excel можно было открыть, дополнить и переслать друзьям, не выходя из аккаунта Google. Со временем возможностей Drive некоторым пользователям стало не хватать, и было принято решение о разработке нового табличного процессора для Android. Требования к функционалу были всё те же: простой интерфейс, приемлемая скорость работы, возможность грузить файлы из облачного хранилища и делиться ими с коллегами и знакомыми.

Открывая приложение, вы видите список файлов, с которыми работали в последнее время. Отображаются как документы, хранящиеся в Google Drive, так и таблицы, расположенные на SD-карте телефона, а также данные других людей, к которым вам предоставлен доступ. В правом нижнем углу находится кнопка «+», по нажатию на которую создаётся новый пустой документ. Есть функции поиска файлов по названию и сортировки по алфавиту или дате добавления.

Google Таблицы заметно уступают MS Excel в плане оформительских возможностей: жирный шрифт, выравнивание по вертикали/горизонтали, перечёркнутый текст – вот, в принципе, и всё. Но библиотека функций в этой программе оправдала мои ожидания на все 100: там можно создавать даже кое-что похожее на SQL-запросы. Разумеется, все математические, статистические и логические процедуры в Google Таблицах тоже есть и пригодны к использованию. А вот классического VBA и, как следствие, всем знакомых макросов, я в этом приложении не нашла (интересно было бы открыть на телефоне какой-нибудь *.xlsx-файл со встроенным кодом, но ничего подходящего у меня сейчас под рукой нет).

Главный плюс Google Таблиц, пожалуй – совместный доступ и редактирование документов. Ни в одном аналогичном приложении это не реализовано настолько просто и красиво, как здесь. Понятно, что предназначено это в первую очередь для офисных работников, но школьники и студенты тоже могут извлечь из этого пользу: один человек сделал домашку, предоставил одноклассникам доступ к таблице, те по очереди подставили туда свои данные и всё, хорошие оценки всей компании обеспечены. Или глава семьи может создать файл для учёта денежных расходов, а остальные домочадцы будут записывать в нужные ячейки свои траты.

468x60 #2

Подведём итоги. Основные достоинства Google Таблиц:


  • Возможность просмотра электронных таблиц, сохранённых в памяти мобильного или на Google Диске.
  • Возможность организации коллективной работы над документами.
  • Богатая библиотека функций, привычный интерфейс в стиле Microsoft Excel.
  • Бесплатность и доступность.

Кому это нужно?

Офисным работникам, студентам экономических и компьютерных специальностей, школьникам, людям, ведущим домашнюю бухгалтерию или изучающим финансовые расчёты.

Скачать в Google Play

вторник, 16 мая 2017 г.

Уменьшение объёма исполняемого файла Free Pascal

Проблема архивации скомпилированных *.exe-файлов чаще встаёт перед пользователями RAD-сред наподобие Delphi и Lazarus, но иногда возникает необходимость «обрезать» приложение, сделанное в обычном Free Pascal (например, в том случае, если вы храните свои программы на файлообменнике или бесплатном хостинге).

468x60

Чтобы выяснить, каким же образом можно сжать и без того небольшой файл, давайте обратимся к опыту визуального программирования. Что мы делаем, когда хотим минимизировать объём своего проекта в Lazarus? Во-первых, ещё до начала работы с кодом отключаем добавление отладочной информации (иначе есть шанс получить форму с двумя кнопками весом в 12 Мбайт), во-вторых, после компиляции запускаем утилиту strip или upx.

Итак, начнём наш эксперимент. У меня в папке bin лежит исходник с именем test.pas. Давайте попробуем скомпилировать его с разными вариантами настроек.

  • Стандартная конфигурация (только что установленный FPC без всяких наворотов) – 67521 байт.
  • Включаем «Generate smaller code» и «Create smartlinkable units» в меню «Options» -> «Compiler» -> «Generated code», выключаем «Range checking» и «Stack checking» - 67455 байт.
  • Включаем все три уровня оптимизации в том же меню – а вот это, как показала практика, не помогает вообще.

Теперь попробуем воспользоваться утилитой strip. Для её запуска нужно открыть командную строку, перейти в папку с файлом strip.exe (команда cd вам в помощь), а затем ввести в окне cmd инструкцию strip --strip-all путь_к_файлу_вашей_программы. Применив её к своему test.exe, я получила приложение объёмом 40448 байт.

Upx в «чистом» Free Pascal’е нет, поэтому грузим его отсюда: https://upx.github.io/. Архив распаковываем в ту же папку, что и strip. Полное руководство по этому пакету вы сможете найти в файле upx.doc, я подскажу только один вариант работы с программой:


  • Переходим с помощью команды cd в каталог, куда устанавливали upx.
  • Вбиваем строку upx --brute путь_к_файлу_вашей_программы и нажимаем Enter.

На этом этапе может открыться один из минусов такого способа сжатия exe-шников, а именно – очень натянутые отношения между архиватором и антивирусами вроде avast! Free Antivirus. Но если вас это не беспокоит, то вот результат использования утилиты upx: объём моего test.exe стал равен всего лишь 19968 байт.

Полезные ссылки по теме:
https://www.freepascal.org/docs-html/prog/progse51.html#x256-27000011.5 – «Tips to generate smaller code»
http://wiki.freepascal.org/File_size_and_smartlinking - это больше про Lazarus, но для Free Pascal тоже актуально.

вторник, 9 мая 2017 г.

Метод Монте-Карло: примеры для языка C++

Метод Монте-Карло используется для нахождения определённых интегралов путём определения среднего значения функции на отрезке интегрирования. Он применяется в физике (теория струн, физика плазмы, физика твёрдого тела), экономике, химии, теории управления, поэтому владение этим методом наверняка будет для вас полезным.

468x60 #2

В самом простом случае интегрирование способом Монте-Карло выглядит так: вы генерируете N чисел в пределах промежутка интегрирования [a;b], находите f(x) для каждого из них, складываете полученные значения, умножаете на (b-a) и делите на N. Чтобы было понятнее – простой пример.

Задача 1. Найти площадь фигуры, ограниченной половиной синусоиды.

//Половина синусоиды - это sin x при xє[0;pi]
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
using namespace std;
int main(){
    double res=0; //Значение определённого интеграла
    srand(time(0));
    for(int i=0;i<100;i++){ //Ищем f(x) для 100 случайных значений
        res+=sin(acos(-1)*rand()/RAND_MAX);
    }
    cout << res*acos(-1)/100 << '\n';
    system("pause");
    return 0;
}

Результат должен быть приблизительно равен двум.

Задача 2. Найти площадь фигуры, ограниченной параболой y=x2, прямой x=2 и осью абсцисс.

//Нарисуйте то, что описано в условии, и увидите простейший табличный интеграл
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main(){
    double res=0;
    srand(time(0));
    for(int i=0;i<100;i++){
        double x=2.0*rand()/RAND_MAX;
        res=res+x*x;
    }
    cout << res*0.02 << '\n';
    system("pause");
    return 0;
}

Но это ещё не всё – есть также геометрическая вариация метода Монте-Карло. Она немного сложнее вышеописанного алгоритма, и выглядит следующим образом: находим прямоугольник, такой, что любая его сторона содержит хотя бы одну точку графика функции, но не пересекает его, выбираем N случайных точек внутри него и смотрим, сколько из них попали под график функции (назовём эту величину K). Значение интеграла находится как площадь прямоугольника, умноженная на K/N.

Задача 3. Найти число π, вычислив площадь единичного круга геометрическим методом Монте-Карло

//Площадь круга S=pi*R^2, pi=S/R^2
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <cmath>
using namespace std;
int main(){
    srand(time(0));
    int k=0;
    //Используем прямоугольник с левым верхним углом в (-1;1) и правым нижним в (1;0)
    //Найдём площадь половины круга как площадь под графиком функции y=sqrt(1-x^2)
    for(int i=0;i<1000;i++){
        double x=-1+2.0*rand()/RAND_MAX, y=1.0*rand()/RAND_MAX;
        if(y<=sqrt(1-x*x)){
            k++;
        }
    }
    double pi=k/250.0;
    cout << pi << '\n';
    system("pause");
    return 0;
}

воскресенье, 30 апреля 2017 г.

Пример работы с массивами в Free Pascal

Рассмотрим такую задачу:"Дан массив A(n,m). В каждой строке находится минимальный элемент,затем среди этих чисел выбирается максимальное. Напечатать номер строки массива A, в которой расположено выбранное число." Несмотря на внешнюю запутанность, решается она очень просто, а именно - вот так:

468x60

program abcd;
  var m,n,min_,i,j,max_,k:integer;
      a:array [1..10] of array [1..10] of integer;
  begin
    writeln('Введите числа M (M<=10) и N (N<=10)');
    readln(m,n);
    writeln('Введите элементы матрицы ');
    for i:=1 to m do
      for j:=1 to n do
      read(a[i][j]);
    k:=1;
    for i:=1 to m do
    begin
      min_:=a[i][1];
      for j:=2 to n do
      if a[i][j]<(min_) then min_:=a[i][j];
      if i=1 then max_:=min_
      else if min_>max_ then begin
      k:=i; max_:=min_; end;
    end;
    writeln;
    writeln(k,'-я строка');
    readln;
  end.

суббота, 1 апреля 2017 г.

Обзор карты Italy CS:GO

Тот случай, когда вся суть дизайна отображена в названии. Italy действительно напоминает декорации для мафиозного боевика, сколоченные из старых фургонов на киностудии где-нибудь в Техасе. Узкие мощёные улицы смотрятся как капилляры, пронизывающие белоснежную ткань многовековых зданий. Все атрибуты итальянской жизни представлены на этом полотне: обширный винный погреб, радио с изысканной музыкой, атмосфера кокетливой старины. Знающие люди утверждают, что срисован этот пейзаж был с небезызвестной Флоренции.

Задания на карте Italy связаны с освобождением заложников, захваченных террористами из группировки «Сепаратистов». Бандитам противостоит подразделение спецназа GIGN. Игровой баланс, к сожалению, не на высшем уровне: выполнить боевую задачу полиции заметно сложнее, нежели устроить кровавую потасовку за противоположную сторону. Подобрать оружие тоже нелегко, так как карта не ориентирована на какой-либо вид боя. Вы можете встретить противника в апартаментах и уничтожить его с помощью ножа либо пистолета, а можете стать жертвой автоматной очереди с другого конца улицы. Единственное утешение – за 100 побед в такой обстановке выдаётся достижение «Ветеран карты Italy».

Стоит заметить, что данное поле боя не является изобретением дизайнеров CS:GO, итальянская тема присутствовала ещё в версии 1.6, однако полагаться на ранее приобретённый опыт я вам не советую. В Global Offensive вас ждут как минимум четыре неожиданности, среди которых:

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

Перемены заметны и на рынке (правда, там речь идёт о мелочах, которые большая часть игроков, скорее всего, не заметит, отдав своё внимание деталям матча). Две курицы, выдававшие вас кудахтаньем в 1.6 и Condition Zero, теперь висят на прилавке, видимо, пристреленные уставшими спецназовцами. А на полочках нашлось место мутировавшим баклажанам, кровоточащим от выстрелов, но игнорирующим нападение с ножом.

Советы контр-террористам

Возьмите снайперскую или, лучше, штурмовую винтовку, подберите позицию под своё оружие и ждите противника. Для полной уверенности в исходе боя не забывайте о гранатах – они крайне хороши для отрезвления любителей «порашить». Если денег мало или же вы просто экономный, берите дробовик, пистолет-пулемёт и становитесь около заложников – при наличии хорошего скилла ваш урон превысит сопротивление терроров.

«Сепаратистам» здесь играть, как я уже говорила, намного легче, наилучшей тактикой будет наблюдение за спецназом и согласование действий с полученными данными. Не лезьте на рожон – карта сложная, и тупое наступление вам ничего не даст. А воевать есть за что: для вас здесь предусмотрено достижение «Мёртвый пастырь», выдаваемое за убийство полицейского, ведущего заложника.

Итальянская барахолка

Одноименная коллекция содержит 15 скинов для разнообразных видов оружия с качеством от «Ширпотреб» до «Армейского». Из общего ряда выделяется разве что «Гадюка» для эталонной снайперки AWP – этот тёмно-зелёный камуфляж получил ярлык «Запрещённого».

AUG Наёмник
Ширпотреб
UMP-45 Пороховой дым
Промышленное качество
AWP Гадюка
Запрещённое оружие

воскресенье, 8 января 2017 г.

Colobot Gold - готовые программы для раздела "Пауки и еда"

Первая задача - "Пауки 1"
extern void object::Spider1()
{
aim(0);
fire(1);
turn(90);
fire(1);
turn(180);
fire(1);
}

Вторая задача - "Батарея 1"
extern void object::Spider2()
{
grab();
turn(90);
drop();
turn(180);
grab();
turn(90);
drop();
}

Третья задача - "Титан 1"
extern void object::Titanium1()
{
move(20);
grab();
turn(180);
move(30);
drop();
move(-2.5);
}

Четвёртая задача - "Титан 2"
extern void object::Titanium2()
{
goto(radar(TitaniumOre).position);
grab();
goto(radar(Converter).position);
drop();
move(-2.5);
}

Пятая задача - "Батарея 2"
extern void object::Spider2()
{
while(true){
goto(radar(PowerCell).position);
grab();
goto(radar(WingedShooter).position);
drop();
}
}

Шестая задача - "Пауки 2"
extern void object::Spider2()
{
while(true){
turn(direction(radar(AlienSpider).position));
fire(1);
}
}

Седьмая задача - "Пауки 3"
extern void object::Spider3()
{
object item;
while(true){
item=radar(AlienSpider);
turn(direction(item.position));
move(distance(position, item.position)-40);
fire(1);
}
}