Экономическая стратегия «Сахалинская колония. Игра сахалинская колония

Сахалинская колония - экономическая стратегия, цель которой, выжить. Игроку дается типовое, либо случайно сгенерированое игровое поле, поделенное на ячейки.
Каждая ячейка представляет собой определенный ресурс, либо чистое поле. В начале игры игроку дается здание администрации и 2 участка земли, на которых он может строить ресурсодобывающие строения. Все строения со временем разрушаются и требуют ремонта - за деньги вырученные от продажи ресурсов. Здание администрации является основным - невозможность его ремонта приводит к окончанию игры.
Выйти в плюс по доходам непросто, и редкий, но дорогой ремонт администрации часто ломает красиво выстроенные планы.

Когда-то давно, мне очень нравилась экономическая стратегия «Сахалинская колония» Григория Жмулевского. Сейчас именно с нее я решил написать свою первую доведенную до конца игру, и заодно изучить различные аспекты C#. Получив от автора лаконичное «Конечно» на вопрос о копировании его игры, я приступил к работе.
Исходники на C++ доступны на сайте автора, и я обращался к ним для копирования данных объектов - стоимость, сколько объект живет, в каких ситуациях разрушается сильнее или слабее и т.п. В остальном я старался полагаться только на себя.
Вместе с хромом размер оригинала - 640Х480. Я выбрал те же размеры приложения, но без хрома. За счет этого, а так же более оптимального использования пространства удалось увеличить размер ячейки карты на 2 пикселя. Немного, но тоже хорошо.
Внутренняя логика игры сохранена почти полностью. Добавлена краткая справка.

Краткая информация о ходе разработки.

Общее
Делать игру было решено на XNA в частности потому что для него у меня уже были наработки по gui.
Для реализации была выбрана довольно простая архитектура:
Игровые классы без использования специфических XNA классов, для простоты возможного порта на другой движок в будущем:

  • Класс игры со ссылкой на карту
  • Класс карты со ссылкой на массив ячеек
  • Ячейка со своими данными и ссылкой на строение
  • Строение со своими данными и индексом ячейки
  • Статичный класс содержащий все неизменные данные, в т.ч. перечисления.
Xna класс Game:
  • В update() - открытие / закрытие диалоговых форм, вызов update контролов.
  • В draw() - отрисовка игровых элементов, вызов draw контролов.
Класс event_handlers:
  • Класс-прослойка между Game и игровыми классами. Вызов игровых методов осуществляется только через него. Опять же для простоты возможного порта на другой движок. В нем же - работа с потоками.
Класс xml:
  • Работа по сохранению, чтению данных.

Сериализация
Сериализация в теории могла помочь отказаться от громоздкого класса сохранения / чтения данных с использованием XmlDocument.
Однако на практике при внедрении функционала сериализации я столкнулся с рядом задач без которых она не могла работать.
В частности пришлось большую часть статичных классов сделать публичными. В итоге получился статичный класс верхнего уровня, содержащий ссылку на публичный класс игры. Данный подход позволил с одной стороны сохранить простоту обращения к необходимым данным, с другой - использовать сериализацию. Во время программирования и промежуточных тестов я столкнулся со странным поведением программы при открытии и сохранении данных - на комьютере разработки все работало, но на другом игра все время вылетала на сериализации. Добавив в игру конструкции try catch удалось получить и вывести информацию о ошибках в файл. Выяснилось что сериализатор (только!) на клиентском компьютере не мог разобрать некие статичные классы. Выяснилось что проблема в полях - перечислениях, которые объявлены во вспомогательном статичном классе. После долгих поисков мне посоветовали исключить их из сериализации атрибутом . Тем не менее эти поля необходимы в логике, поэтому было принято решение дублировать их в строковые поля, и после чтения xml сразу парсить строковое представление в соответствующее перечисление. Это сработало.

Контент
Поначалу я планировал заполнить игру изображениями с пометкой free из интернета, т.к. сам никогда рисовать не умел, однако поиски подходящих картинок
оказались на удивление сложными. В итоге попробовав нарисовать иконки самостоятельно я увидел что получается нормально (на мой взгляд), и по времени быстрее чем искать их в интернете. На данный момент в игре лишь три картинки из интернета - деньги, еда, золото. Остальные нарисованы в пайнте. Постобработки в более серьезном редакторе довольно мало. Все иконки земли и строений по факту вдвое больше чем отображаются в игре - так их было проще рисовать. К тому же иконки такого размера проще будет использовать в дальнейшем. Уменьшать проще чем увеличивать.

Текстурные карты
Изначально весь графический контент был разбит - каждой кнопке один файл. Причем встроенный механизм контента XNA не использовался - все текстуры загружались в игру стандартным для C# способом и затем конвертировались в Texture2d через Stream. Хранились текстуры в именованном массиве. Большое количество файлов и сложности с публикацией заставили задуматься о текстурных картах. Собрав (почти) все
текстуры в карты удалось уменьшить потребление памяти приложением почти на 10 мегабайт (Значение колонки «выделенная память» в диспетчере уменьшалось с 69 до 60 мб). Именованный массив так же был заменен на n отдельных переменных.

Интерфейс
К сожалению в XNA нет своего графического интерфейса. Подключение win form или wpf накладывает свои ограничения. Т.к. одна из целей проекта - обучение программированию в C# в целом и конкретно в игровой среде, было принято решение вспомнить относительно старый велосипед - гуи под XNA.
Изначально этот гуи задумывался как очень мощный механизм - конструктор интерфейсов. Его мощь обратилась огромными блоками кода с трудно находимыми ошибками и медленной работой. Пришлось обрезать очень много кода, упростить работу, сократить количество вызовов вспомогательных функций в update.
Так же был написан контрол edit - принимающий только цифры, десятичную точку, знаки плюс и минус (исключая плюс и минус на дополнительной клавиатуре - не нашел их в списке клавиш XNA). Средствами гуи при необходимости происходит создание дополнительных текстур - нажатия, наведения, недоступного состояния. Получился небольшой, но вполне рабочий gui.

Потоки
Приложение использует окна, в т.ч. модальные. Окна-вопросы, сообщения, а так же форма торговли, должны пересылать в программу некую информацию, которая будет обрабатываться.
В ходе работы было найдено следующее решение: при активизации окна в отдельном потоке происходит вызов целевого метода, например ремонт строения. Идет расчет стоимости ремонта, в статичный класс вопроса передается флаг активации окна, текст самого вопроса.
Метод ремонта строения (вызванный поток) входит в цикл по флагу - признаку получению ответа пользователя. Параллельно исполнению этого цикла, в методе Update (главный поток) происходит открытие окна - диалога, исполнение gui, по нажатию пользователем клавиши да или нет происходит установка соответствующих флагов в статичном классе вопроса. Дочерний поток выходит из цикла, и продолжает исполнение метода ремонта строения ориентируясь уже на полученный ответ пользователя.
Для того что бы не порождать много параллельных потоков и экранировать другие возможные проблемы, все игровые кнопки блокируются при активации вопроса. Системные кнопки не блокируются, в частности потому что они используют стандартные диалоги windows, которые и так полностью блокируют приложение.

Приложение
Написано под win 7, требует установленных компонентов XNA, фреймворк.net 4.0 - все необходимое скачивается автоматически в процессе установки.
Компоненты XNA можно скачать отдельно

Экспозиция знакомит с историей Сахалина в 1869–1906 годы. Царским указом 1869 года остров Сахалин был объявлен местом каторги и ссылки, превращен в один из самых мрачных уголков России.

На плазменной панели отмечены два пути, которыми каторжане по этапу попадали на Сахалин: сухопутный путь через Сибирь и морской путь из Одессы через Суэцкий канал, Индийский океан.
В экспозиции есть модель парохода «Нижний Новгород», фотографии каторжан на его борту.
Колонизация острова продолжалась около сорока лет. Тюремная администрация имела безграничную власть, как над ссыльными, так и над немногочисленными свободными сахалинцами.


Подлинные предметы: ручные и ножные кандалы, замок и ключ от карцера одной из крупных тюрем острова - Александровской - являются символами той эпохи. Шахтерские сани для вывоза угля и кайло дают представление о труде сахалинских каторжан на угольных копях.
Выставлена также рубашечка для новорожденного из грубого холста. Это была первая в жизни одежда детей арестантов, которая выдавалась в тюремной больнице.



Тем не менее, именно в этот временной период были заложены основы современной экономики области. Каторга стала важным этапом в становлении базовых отраслей промышленности Сахалина: угольной, нефтяной, рыбной, лесной и сельского хозяйства. В экспозиции представлены материалы по исследованию природных богатств, организации первых производственных предприятий, комплекс предметов быта конца XIX века.
Хозяйственно-бытовой комплекс предметов населения острова на рубеже двух веков знакомит с орудиями труда, домашней утварью, убранством дома.


Сахалин, являясь крупнейшей в России уголовной каторгой, был также и каторгой политической. На острове отбывали наказание члены наиболее значительных российских политических партий и организаций («Пролетариат», «Народная воля»): Б. О. Пилсудский, Л. Я. Штернберг, Л. А. Волкенштейн, И. П. Ювачев, Б. П. Еллинский и другие активисты. Работая в школах, библиотеках, больницах, мастерских, канцелярии островной администрации, они оказывали практическую помощь в облегчении участи каторжан и их семей, внесли большой вклад в духовную и культурную жизнь общества.

В 1890 году Сахалин посетил известный русский писатель А. П. Чехов. Результатом путешествия, трехмесячного пребывания на острове и изучения сахалинской действительности стали книги «Из Сибири» и «Остров Сахалин», которые буквально потрясли всю читающую Россию.
После громкого общественного резонанса правительство было вынуждено реформировать законодательство о содержании каторжан и ссыльных. 10 апреля 1906 года вышел Закон об упразднении сахалинской каторги. В 1908 году остров был объявлен свободным для вольного заселения.

Центральная улица в посту Дуэ

Natural History of Sakhalin

Ammonite. This fossilized shell is about 70 mln. years old.

Desmostylus hesperus.

Fossilized skeleton (copy) of an extinct mammal inhabiting Northern Pacific shores in the mid Miocene (12–15,8 mln. years ago). The animal was described for the first time by O. Ch. Marsh — famous discoverer of dinosaurs — who was able to describe it having only one tooth at his disposal. Teeth in Desmostylus hesperus resemble a bunch of columns. The animal’s name is based on its teeth structure. Desmos means bunch or stack, and stylus means pillar or column in Greek.
Desmostylus hesperus skeleton, the copy of which is displayed in the museum, was found by chance. In July of 1933 Nagao Takumi, Hokkaido University professor, was visited by a man who was engaged in shipping timber from Sakhalin island. He brought in a strange looking fossil — a skull of an unknown animal — which had been found by chance to the north-west of contemporary town of Smirnykh. Professor Nagao identified the skull as belonging to the Desmostylus species based on the teeth shape. Without delay he got together a group of scientists and left for Sakhalin. Unfortunately, that year the bones from the fore part of the body only were collected, but in 1934, in the second expedition, the remaining bones were found. The fossilized bones were shipped to Japan and processed in the University of Hokkaido. It was for the first time in the world that the whole skeleton of the animal was found. Paleontological community as a whole was taken by big surprise. It became clear that Desmostylus hesperus had well developed fore and hind limbs and also hands and feet well suited for rowing. (before then the Desmostylus hesperus were thought to have flippers). The animals apparently used long shovel-like tusks for ploughing bottom sediments in search of benthic organisms, such as: shell-bearing mollusks, crabs and echinoderms.
Desmostylus hesperus reached 3 m in length and were as heavy as 1200 kg. The animals led coastal life and were good swimmers and divers, taking rest on coastal cliffs. During their reproductory period they stayed on the coast, however moving on land in a rather clumsy way.
Warm shallow water areas of the Sea of Japan and those of the Western Sakhalin islands with their shallow water shelf and numerous inland and coastal water bodies of the other parts of the Paleo-Sakhalin were favorable habitat for Desmostylus hesperus in the Neogene Period.
Reconstruction of the skeleton was performed by the professor Nagao Takumi together with taxidermist Sinoda Syudziro. It was the first reconstruction of the Desmostylus skeleton ever. Based on the teeth size, Nagao described the animal above-mentioned as a new species — Desmostylus mirabilis. Today it is accepted that the attribution to a different species was caused only by the individual features and now the skeleton in question is attributed to the Desmostylus hesperus species.
During the World War II in the Pacific the skeleton was taken to pieces and buried in the ground to be preserved. The skeleton was reassembled after the war by the professor Kamei Setsuo.
The copy of the Desmostylus hesperus skeleton was presented to the Sakhalin Regional Museum as a gift by the Association for Bilateral Relationships of Museums of the Northern Regions and Hokkaido on July 26, 2006.


Рудничная морская пристань общества «Сахалин»

Дуйская однопрестольная церковь в честь святителя Николая Чудотворца. Открыта в 1856 году

Угольные склады на рудниках общества «Сахалин»

Добыча угля на шахте общества «Сахалин»

Жонкиерский маяк. Построен в 1886 году

Сонька — Золотая Ручка

Прикованные к тачкам во дворе Воеводской тюрьмы

Пароход «Атлас», потерпевший крушение в мае 1890 года

Улица Николаевская в посту Александровском

Дом военного губернатора острова Сахалин

Здание почтово-телеграфного ведомства в посту Александровском

Александровское окружное полицейское управление и канцелярия Александровской тюрьмы

Пешеходный мост на реке Дуйка в посту Александровском

Центральная часть села Рыковского

Церковь Казанской Божьей Матери в селе Рыковском. Открыта в 1888 году

Корсаковская тюрьма

Улица в посту Корсаковском

Пост Корсаковский

Корсаковское окружное полицейское управление

Поселение Третья Падь

Селенье Малое Такое

Селение Березняки

Селение Владимировка

Селение Листвиничное

Каторга как средство освоения отдаленных территорий не была российским изобретением. Можно вспомнить опыт Англии при освоении Нового Света в XVII-XVIII веках. Или не менее драматичную историю заселения Австралии, которая началась в 1788 году. Тогда флотилия капитана Филиппа доставила в Новый Уэльс группу ссыльных, основавших на берегу залива Порт-Джексон первый европейский поселок - будущий Сидней. Почти восемь десятилетий «старая добрая Англия» колонизировала целый континент, создавая военно-каторжные поселения. До 1868 года туда было сослано 155 тысяч человек.

На Сахалине первый каторжник оказался еще в 1858 году. Историкам даже известно его имя - Иван Лапшин. Он служил у одного из горных инженеров, который занимался изучением угольных месторождений. Позднее каторжан доставляли в Дуэ небольшими партиями. Отработав на шахте один-два года, они возвращались на материк.

Александр II утвердил «Положение Комитета об устройстве каторжных работ». Документ официально определил Сахалин как место каторги и ссылки. Именно эту дату принято считать официальным началом каторги, «прославившей» остров в России и за ее пределами на долгие годы.

Сахалин казался властям Империи идеальным местом для каторги - отдаленность и труднодоступность территории сводили на нет все попытки побегов. Неосвоенный остров давал огромный простор для деятельности после освобождения заключенных. А появление здесь большого количества русских усиливало влияние Российской Империи на Дальнем Востоке, что тоже являлось неоспоримым плюсом. Кроме того, рабочие руки давали возможность получить наконец доступ к богатствам острова.

По масштабам ссылки Сахалин, несомненно, уступал Австралии. Первые годы каторжан доставляли сюда небольшими этапами: в 1870 году - 250, в 1871 - 165 человек. Целью ссылки было не столько наказание, сколько добыча угля для Сибирской флотилии. Пост Дуэ стал своеобразной каторжной «столицей» Сахалина. Здесь находилась канцелярия специального чиновника - заведующего ссыльнокаторжными Приморской области, и в 1875 году была построена первая тюрьма.

Наряду с учреждением каторги были и попытки переселения на Сахалин свободных крестьян. В том же 1869 году сюда доставили более 20 семей из Тобольской и Иркутской губерний. На юге острова они основали три селения: Воскресенское, Станционное (Такое) и Новоалександровское. В 1871 году в них побывал ученый-агроном М.С. Мицуль, который описал опыт крестьян по ведению сельского хозяйства.

Переселенцы принадлежали к малоимущей прослойке сибирской деревни. Их обустройство требовало немалых забот, но администрация не смогла создать условий для их закрепления на острове. В 1886 году они сбежали с Сахалина в Южно-Уссурийский край.

Антон Чехов, писатель, общественный деятель

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

Сначала каторга также не оказывала заметного влияния на заселение острова. С 1868 по 1878 гг. ссыльные основали всего два селения: Мало-Александровку (1869 год) и Ново-Михайловку (1872). Это объяснялось трудностями доставки ссыльных, которые шли этапами из Сибири полтора-два года. Поэтому в МВД возникла идея отправлять каторжников на Сахалин полукругосветным морским путем. Их доставку взяло на себя Общество Добровольного флота. Первый рейс, или, как тогда говорили, «сплав», на Дальний Восток сделал пароход «Нижний Новгород». Он вышел из Одессы 7 июня 1879 года, имея на борту 500 каторжан и казенные грузы для тюремного ведомства.

Начальник государственного тюремного управления М.Н. Галкин-Враской издал распоряжение, которое запрещало переводить на материк людей окончивших срок каторжных работ. Ссылка на Сахалин становилась практически безвозвратной. Каторжане, отбыв наказание в тюрьме, переходили в разряд ссыльнопоселенцев. Они-то и составляли основной «колонизационный элемент» заселения острова.

В дальнейшем «добровольцы» доставляли будущих сахалинских колонистов регулярно - весной и осенью. На линии Одесса - Сахалин курсировали пароходы «Нижний Новгород», «Кострома», «Петербург», «Владивосток». В 1893 году в Англии построили пароход «Ярославль», специально оборудованный для перевозки крупных партий заключенных. Это была настоящая плавучая тюрьма, приспособленная для кругосветных морских переходов.

Подневольное освоение

Выход каторжан на поселение в 80-90 гг XIX века составлял около 800 человек в год, и селения на Сахалине стали появляться одно за другим. Так, если за двенадцать лет (1874 - 1885 гг) было основано 21 селение, то за последующий аналогичный период (1886 - 1897 гг.) - ровно 100. К 1898 году на острове было более 130 русских селений, в том числе в Александровском округе - 37, Тымовском - 28, Корсаковском - 68 селений. После этого «увлечение колонизацией» закончилось, и новые селения почти не появлялись.

Жизнь в сахалинских поселениях, которые возникали среди нехоженой тайги, во многом зависела от дорог и связи. В 1881 году первый телеграфный кабель соединил Дуэ с материком. Через три года линию провели от поста Александровского до селения Рыковского, а в к 1892 году - до поста Корсаков. Но в целом сообщения внутри острова были развиты плохо. К 1900 году лишь 80 из более чем 130 селений соединялись проезжими дорогами - их общая протяженность составляла всего около 600 верст.

Без нормальных дорог, кроме узких лесных просек, оставались 52 селения. Они были отрезаны от цивилизации практически круглый год. Отсутствие дорог тормозило заселение Сахалина и ставило администрацию в безвыходное положение - снабжать поселенцев было практически невозможно.

По «Положению об управлении о. Сахалином» от 15 мая 1884 года главное руководство всеми сахалинскими делами принадлежало генерал-губернатору, а местное вверялось начальнику острова, назначаемому из военных генералов. Административно остров делился на три округа: Александровский, Тымовский и Корсаковский. В ведении начальников округов и окружных полицейских управлений находились поселения и тюрьмы.

По данным Первой Всеобщей переписи населения Российской империи 1897 года на Сахалине проживало 28,1 тысячи человек. В том числе в Александровском округе - 11,1 тысячи, Тымовском - 8,4 тысячи, Корсаковском - 8,6 тысячи человек. Влияние каторги отразилось на демографических характеристиках населения, 72,8 % которого составляли мужчины и только 27,2% - женщины. Этот факт неблагоприятно сказывался на «приживаемости» населения и его бытовом укладе.

По национальному признаку население Сахалина было представлено почти всеми народами империи. Большинство составляли русские - 56,3%, затем украинцы - 8,4%, поляки - 5,8 %. Всего на острове проживали представители 20 национальностей. Около 15% населения составляли коренные малочисленные народности: нивхи - 7,1%, айны - 5,1, уйльта - 2,5%.

Плейлист каторжанина:

  • Ах ты доля - Сергей Садовников
  • Прошальное слово - Сергей Садовников
  • Зачем я, мальчик, уродился - Сергей Садовников
  • Идёт он усталый - Сергей Садовников
  • Песня каторжника - Николай Шевелев
  • Скажи мне товарищ, как попал ты в рудник - Дмитрий Ершов
  • То не ветер ветку клонит - Хор каторжников тобольской каторги

Экономика стальных кандалов

Основной деятельностью каторжан была рубка угля. В начале XX века с Сахалина вывозилось 45-47 тысяч тонн угля, что составляло четверть его годового потребления в Приамурском крае. Развитие отрасли сдерживалось недостатком рабочей силы и отсутствием портов. Ввоз иностранных рабочих правительство не разрешало. Для расширения трудовых ресурсов использовалась все та же каторга.

Хотя хватало и других забот - заключенные трудились над строительством дорог, мостов и заготовке древесины. Каторга не отдыхала практически никогда - работы начинались с рассветом и могли продолжаться до глубокой ночи. Заключенным был положен один выходной день - воскресенье, но при наличии срочных работ им вполне могли пренебречь. Трудились даже на Пасху - православные в этот день, естественно, получали выходной - но на Сахалине хватало и представителей других конфессий.

Обилие дешевой и бесправной рабочей силы приводило к тому, что на Сахалине большинство шахт использовали исключительно ручной труд - механизация или отсутствовала полностью или была минимальна. Это порождало чудовищные условия труда - вырубка и подъем угля в шахтах велись вручную. За смену каторжник добывал 10-15 пудов твердого топлива. Основным местом угледобычи на Сахалине был Дуйский рудник - здесь трудилось 400 каторжан. Рабочей силой шахты обеспечивали две расположенные рядом тюрьмы - Воеводская и Дуйская. Современники отмечают крайне жестокое отношение к каторжанам и ужасающие условия их труда - за малейшее нарушение дисциплины заключенных наказывали - отправляли в карцер или избивали.

Следующей по значению отраслью экономики Сахалина была добыча рыбы и морепродуктов. Во второй половине 19 века сложился сахалинский рыбодобывающий район, который активно втягивался в общероссийский рынок. Но по сравнению с другими регионами Приамурского края доля его поставок на внутренний рынок была ниже. Причина проста - засилье японского капитала, вывозившего продукцию сахалинских морских промыслов в Японию.

Пытались развивать на острове и собственное сельскохозяйственное производство. Несмотря на огромные затраты в период каторги, прочной базы на Сахалине так и не сложилось. Местные хозяйства давали только 30% потребного количества зерна, и население почти полностью зависело от завоза продовольствия. Но несмотря на это, опыт ведения сельского хозяйства в условиях Сахалина был очень важен для последующих поколений.

Труд десятков тысяч ссыльных, крестьян, солдат, матросов, представителей интеллигенции стал материальной предпосылкой закрепления острова за Россией. Но Сахалин так и не стал российской «Австралией», то есть процветающей колонией могучей империи. Печален, прежде всего, итог заселения Сахалина с помощью каторги. Объяснялось это не столько географическим положением и природно-климатическими условиями, сколько плохой организацией переселенческого дела и неблагоприятным влиянием внешнеполитических факторов.

Кругом море, а посередине - горе

Ссыльная колония наложила неизбежный отпечаток на все стороны жизни острова. Ее мрачная слава отразилась в судьбе нескольких поколений сахалинцев, сложивших о том времени горькие пословицы: «Кругом море, а посередине - горе»; «Вокруг вода, а посередине - беда».

Но было бы неправильно воспринимать Сахалин той поры как сплошное «темное царство». Зачатки культурной жизни отмечались и здесь. Первая школа на острове появилась в 1875 году в посту Корсаковском (на год раньше, чем здесь появилась первая тюрьма). Ее учащимися были дети солдат и ссыльных, а учителями - офицеры местного гарнизона и священник Симеон Казанский.

Даже на каторге находились люди, которые пытались облегчить участь ссыльных. Так, например, в 1888 году в посту Александровском состоялась постановка пьесы Гоголя «Женитьба». Спектакль был благотворительным - вырученные средства распределили поровну на три школы: в Александровске, Дуэ и Рыковском, где обучались дети ссыльных.

В середине 90-х XIX века на острове было 39 школ, из них 23 сельских (5 двухклассных и 18 одноклассных). Только около половины детей имели возможность постоянно посещать школу. Тем не менее уровень грамотности сахалинцев был выше, чем в других регионах империи. Об этом свидетельствует и перепись 1897 года. Согласно документам 26,8% жителей Сахалина были грамотны. В то время как в Сибири грамотных было всего 11 процентов.

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

Например, в конце 1890-х годов театральный балаган в селении Рыковском содержала лавочница Софья Блювштейн, более известная как «Сонька Золотая ручка».

Не наши Курилы

Во второй половине XIX века Курильские острова полностью выпали из сферы влияния Российской империи. От части Курильских островов Россия отказалась еще в 1855 году - тогда был подписан Симодский договор о границах на Дальнем Востоке.

Симодский договор, 1855 год

«Отныне границы между Россией и Японией будут проходить между островами Итуруп и Уруп. Весь остров Итуруп принадлежит Японии, а весь остров Уруп и прочие Курильские острова к северу составляют владение России. Что касается Карафуто (Сахалина), то он остается неразделенным между Россией и Японией».

В 1875 году был подписан еще один договор о границах - Санкт-Петербургский. Теперь Россия полностью отказывалась от Курил - более важным для империи было закрепление на Сахалине.

Санкт-Петербургский договор, 1875 год

«Его величество император Японский, за себя и своих наследников, уступает его величеству императору всероссийскому часть территории острова Сахалин (Карафуто)... отныне означенный остров Сахалин (Карафуто) весь вполне будет принадлежать Российской империи и пограничная черта будет проходить в этих водах через Лаперузов пролив...

Взамен... император всероссийский, за себя и своих наследников, уступает его величеству императору японскому группу островов, называемых Курильскими... пограничная черта между империями Российскою и Японскою в этих водах будет проходить через пролив, находящийся между мысом Лопаткою полуострова Камчатки и островом Шумшу...»

После этого на Сахалин с удвоенной силой началась каторжная экспансия. Курилы же на первых порах Японией осваивались с трудом - особенно тяжело шло заселение центральных и северных островов. Тем не менее к концу XIX века на Курилах возникло множество поселений - были тут и небольшие деревеньки, и поселки-призраки, оживавшие лишь на время путины. Со временем на островах возникло мощное рыбоперерабатывающее и китобойное производства, колонисты занимались разведением пушного зверя. В начале XX на юге гряды появились первые подобия городов - Сяна (Курильск) и Томари (Головино). С ростом активности США и России на в Тихом океане Курилы стали важным стратегическим форпостом Японии.

Страна восходящего солнца использовала их как базу агрессии во Второй мировой войне - острова стали опорой для атаки на американские военные базы в Тихом океане.

В начале 20 века население Сахалина превысило 40 тысяч человек. При этом доля ссыльных уменьшилась и выросло число свободных крестьян и мещан из ссыльных, которыми становились бывшие каторжники. В 1904 году пришлось закрыть тюрьмы в Дуэ и Онорах. Каторга как средство освоения острова явно себя изжила, и правительство готовилось ее упразднить. 18 августа 1904 года наместник на Дальнем Востоке Е.И. Алексеев поручил Приамурскому генерал-губернатору подготовить вопрос об открытии Сахалина «для волной колонизации». Разработку мероприятий по отмене каторги поручили губернатору Сахалина М.Н. Ляпунову с участием представителей министерств юстиции, внутренних дел, финансов. Однако события русско-японской войны опередили планы бюрократической машины царизма - летом 1905 года японская армия оккупировала Сахалин.

Сахалинская колония - экономическая стратегия, цель которой, выжить. Игроку дается типовое, либо случайно сгенерированое игровое поле, поделенное на ячейки.

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





Когда-то давно, мне очень нравилась экономическая стратегия «Сахалинская колония» Григория Жмулевского. Сейчас именно с нее я решил написать свою первую доведенную до конца игру, и заодно изучить различные аспекты C#. Получив от автора лаконичное «Конечно» на вопрос о копировании его игры, я приступил к работе.
Исходники на C доступны на сайте автора, и я обращался к ним для копирования данных объектов - стоимость, сколько объект живет, в каких ситуациях разрушается сильнее или слабее и т.п. В остальном я старался полагаться только на себя.
Вместе с хромом размер оригинала - 640Х480. Я выбрал те же размеры приложения, но без хрома. За счет этого, а так же более оптимального использования пространства удалось увеличить размер ячейки карты на 2 пикселя. Немного, но тоже хорошо.
Внутренняя логика игры сохранена почти полностью. Добавлена краткая справка.

Краткая информация о ходе разработки.

Общее
Делать игру было решено на XNA в частности потому что для него у меня уже были наработки по gui.
Для реализации была выбрана довольно простая архитектура:
Игровые классы без использования специфических XNA классов, для простоты возможного порта на другой движок в будущем:

  • Класс игры со ссылкой на карту
  • Класс карты со ссылкой на массив ячеек
  • Ячейка со своими данными и ссылкой на строение
  • Строение со своими данными и индексом ячейки
  • Статичный класс содержащий все неизменные данные, в т.ч. перечисления.

Xna класс Game:
  • В update() - открытие / закрытие диалоговых форм, вызов update контролов.
  • В draw() - отрисовка игровых элементов, вызов draw контролов.

Класс event_handlers:
  • Класс-прослойка между Game и игровыми классами. Вызов игровых методов осуществляется только через него. Опять же для простоты возможного порта на другой движок. В нем же - работа с потоками.

Класс xml:
  • Работа по сохранению, чтению данных.


Сериализация
Сериализация в теории могла помочь отказаться от громоздкого класса сохранения / чтения данных с использованием XmlDocument.
Однако на практике при внедрении функционала сериализации я столкнулся с рядом задач без которых она не могла работать.
В частности пришлось большую часть статичных классов сделать публичными. В итоге получился статичный класс верхнего уровня, содержащий ссылку на публичный класс игры. Данный подход позволил с одной стороны сохранить простоту обращения к необходимым данным, с другой - использовать сериализацию. Во время программирования и промежуточных тестов я столкнулся со странным поведением программы при открытии и сохранении данных - на комьютере разработки все работало, но на другом игра все время вылетала на сериализации. Добавив в игру конструкции try catch удалось получить и вывести информацию о ошибках в файл. Выяснилось что сериализатор (только!) на клиентском компьютере не мог разобрать некие статичные классы. Выяснилось что проблема в полях - перечислениях, которые объявлены во вспомогательном статичном классе. После долгих поисков мне посоветовали исключить их из сериализации атрибутом . Тем не менее эти поля необходимы в логике, поэтому было принято решение дублировать их в строковые поля, и после чтения xml сразу парсить строковое представление в соответствующее перечисление. Это сработало.

Контент
Поначалу я планировал заполнить игру изображениями с пометкой free из интернета, т.к. сам никогда рисовать не умел, однако поиски подходящих картинок
оказались на удивление сложными. В итоге попробовав нарисовать иконки самостоятельно я увидел что получается нормально (на мой взгляд), и по времени быстрее чем искать их в интернете. На данный момент в игре лишь три картинки из интернета - деньги, еда, золото. Остальные нарисованы в пайнте. Постобработки в более серьезном редакторе довольно мало. Все иконки земли и строений по факту вдвое больше чем отображаются в игре - так их было проще рисовать. К тому же иконки такого размера проще будет использовать в дальнейшем. Уменьшать проще чем увеличивать.



Текстурные карты
Изначально весь графический контент был разбит - каждой кнопке один файл. Причем встроенный механизм контента XNA не использовался - все текстуры загружались в игру стандартным для C# способом и затем конвертировались в Texture2d через Stream. Хранились текстуры в именованном массиве. Большое количество файлов и сложности с публикацией заставили задуматься о текстурных картах. Собрав (почти) все
текстуры в карты удалось уменьшить потребление памяти приложением почти на 10 мегабайт (Значение колонки «выделенная память» в диспетчере уменьшалось с 69 до 60 мб). Именованный массив так же был заменен на n отдельных переменных.

Интерфейс
К сожалению в XNA нет своего графического интерфейса. Подключение win form или wpf накладывает свои ограничения. Т.к. одна из целей проекта - обучение программированию в C# в целом и конкретно в игровой среде, было принято решение вспомнить относительно старый велосипед - гуи под XNA.
Изначально этот гуи задумывался как очень мощный механизм - конструктор интерфейсов. Его мощь обратилась огромными блоками кода с трудно находимыми ошибками и медленной работой. Пришлось обрезать очень много кода, упростить работу, сократить количество вызовов вспомогательных функций в update.
Так же был написан контрол edit - принимающий только цифры, десятичную точку, знаки плюс и минус (исключая плюс и минус на дополнительной клавиатуре - не нашел их в списке клавиш XNA). Средствами гуи при необходимости происходит создание дополнительных текстур - нажатия, наведения, недоступного состояния. Получился небольшой, но вполне рабочий gui.




Потоки
Приложение использует окна, в т.ч. модальные. Окна-вопросы, сообщения, а так же форма торговли, должны пересылать в программу некую информацию, которая будет обрабатываться.
В ходе работы было найдено следующее решение: при активизации окна в отдельном потоке происходит вызов целевого метода, например ремонт строения. Идет расчет стоимости ремонта, в статичный класс вопроса передается флаг активации окна, текст самого вопроса.
Метод ремонта строения (вызванный поток) входит в цикл по флагу - признаку получению ответа пользователя. Параллельно исполнению этого цикла, в методе Update (главный поток) происходит открытие окна - диалога, исполнение gui, по нажатию пользователем клавиши да или нет происходит установка соответствующих флагов в статичном классе вопроса. Дочерний поток выходит из цикла, и продолжает исполнение метода ремонта строения ориентируясь уже на полученный ответ пользователя.
Для того что бы не порождать много параллельных потоков и экранировать другие возможные проблемы, все игровые кнопки блокируются при активации вопроса. Системные кнопки не блокируются, в частности потому что они используют стандартные диалоги windows, которые и так полностью блокируют приложение.

Приложение
Написано под win 7, требует установленных компонентов XNA, фреймворк.net 4.0 - все необходимое скачивается автоматически в процессе установки.

Статьи по теме: