Pull to refresh

ПаоПао 2.0 — история одного приложения ВКонтакте

Летом 2009 Бакибаев Нуржан, преподаватель моего университета, решил организовать бизнес-инкубатор, дабы студенты имели «возможность» прочувствовать на собственных детских спинках что такое создавать продукт.

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

Пропорционально нашим мечтам Бакибаев бросил нас на растерзание одному футуристическому проекту. Мы естественно загорелись, услышав фразы «секретно», «в Казахстане только три конкурента», «космические возможности», «актуальность на рынке». Осознание того, что как таковой ни одной технологией мы не владеем, быстро снизило температуру на парочку градусов. Изучить? Не проблема!

Изучить надо было Silverlight (на тот момент была уже 2-версия) так, как предполагалось использование технологии DeepZoom,. Около недели мы потратили на всякие скрин касты, документации, но ничего не могли понять- мы ведь никогда до этого не сталкивались с ООП, а тут С# — полный вынос мозга после Паскаля и С++. Один из нас в школьные годы участвовал в олимпиадах про программированию, позже в университете я и он сформировали команду для участия на ACM, в университете записались на курс «ICPC ACM олимпиадное программирование », доходили только до полуфинала в Ташкенте, потому можно сказать, что наши знания в программировании были скудными, немного алгоритмов и все.

Увидев наши мучения-учения, Нуржан посоветовал изучать Silverlight сразу в бою, предложил написать игру ПаоПао для разминки. Все же помнят старую игрушки, в которую рубились офисные люди.
image
Работа закипела, процедурное по объектно-ориентированному, я использовал лишь один класс, другой создал сам того не понимая, так в туториале было написано.
С горем пополам за 2 недели мы написали убогое подобие игры. Вот ссылочка. На этом и остановились, разъехались по домам. Мы забили на проект инкубатора, даже не начав его.

На 2-ом курсе во мне проснулось желание доделать ПаоПао, к тому времени я уже «прослушал» курс «Объектно-ориентированное программирование — C#». Но знаний все еще не хватало, читал книжки, смотрел скринкасты Techdays, в моей голове навсегда останется «Здравствуйте, меня зовут Михаил Черномордиков». Узнав новую (для себя новую) фичу, я спешил ее использовать в игре. Появился на свет целый ряд версий «PaoPaoWinter», «PaoPaoSpring», «PaoPaoSpring2» и так далее.

Подходил к концу 2 год курс, на июнь месяц намечалась практика в университете. Нам назначили руководителя, она дала неоригинальное задание — придумать и написать в команде какой нибудь проект. Это была эпоха PHP на нашем потоке, все его знали, но никто не знал, что в действительности не знает его. Мне не хотелось писать проект на этом языке (уже тогда во мне зарождалась любовь к строгой типизации, Intellisense). Предложил другу написать сайт мини-игр, одна то игра у нас есть. За две недели практики я переписал заново ПаоПао до нормального состояния, доделал все уровни, улучшил прорисовку. Проект сдали на 5.

В августе того года мне захотелось опубликовать игру ВКонтакте. Пришлось изучать ВКонтакте API. На тот момент Silverlight приложение ВКонтакте могло жить только как IFrame-приложение. Напрямую из Silverlight приложения запросы к API можно было делать только используя JSONP так, так вся проблема была в отсутствии нужного crossdomain.xml на api.vkontakte.ru. Только вышла сторонняя библиотека Silverlight vkontakte API. Тогда я не разобрался, как ее использовать, постоянно появлялись ошибки. Решил обращаться к API посредством PHP, запросив все нужное до загрузки приложения, раскидал мне данные (друзья, профайл пользователя, настройки приложения) по разным DIV-кам на странице, потом из Silverlight-приложения вытаскивал содержимое этих DIV-ок. Выглядит глупо, но работало. Дальше еще глупее. Мне необходимо было сохранять рекорды и ввести общий рейтинг и рейтинг друзей. Единственным вариантом было использование собственной MySql базы для рекордов. Место на сервере вместе с одной базой мне выделили преподаватели. Из самого приложения я не смог обратиться к базе, пришлось вызывать javascript-функцию, которая асинхронно делала запрос к другой php-страничке на моем сервере, сохраняя рекорд игрока. Я тогда не понимал, что это не безопасно. Но все же запустил приложение PaoPao, думал, что к октябрю наберу 1000 участников.
Ага. Прошел год, а число участников все еще 600 — пропал. Чего и следовало ожидал, приложение было ужасным, иногда рекорды не сохранялись, проблемы с версткой, я не запрашивал устанавливать игру. Но все равно я следил за кем, кто играет, как часто, вел свою статистику. Кому-то это игра пришлась по душе, играли по 20 раз за день.

На 3 курсе я серьезно взялся за изучение .NETa, перечитал множество книжек, пробовал себя в ASP.NET, потом увлекся на полгода ASP.NET MVC… метался из технологии в технологию. В апреле был HACKDay, снова пришлось взяться за Silverlight, написали игру «Чего хотят курицы», версия игры на момент презентации, нужно быстро разгадывать анаграммы, заняли 3-е место. В тот момент мне снова захотелось переписать ПаоПао, решил отложить на лето.

Наступило лето. Взялся за изучение ВКонтакте API, за пример подражания взял приложение «Балда», через файрбаг смотрел все запросы приложения к API. Нечаянно нашел баг, можно на время увеличить свои очки в игре, с введением OAuth, появился новый упрощенный метод запросов к API. Зная access_token, выполняем запросы от имени клиента. «Балда» хранит очки используя метод putVariable, заходим на страницу приложения, сморим код страницы, ищем access_token, и выполняем запрос через адресную строку браузера. Я как дикарь сразу поставил себе рекорд 58000, потом стало стыдно. Целый день потратил на то, чтобы вернуть все на место, никак не мог убрать себя из ТОП10.

Изучив немножко API, решил взяться за приложение. В этот использовал новую стороннюю библиотеку. Crossdomain.xm был добавлен на api.vkontakte.ru на радость всем. Новая библиотека делала напрямую запросы к API. Решено было хранить рекорды на сервере ВКонтакте, список друзей, установивших приложения, получал первым запросом, потом парсил URL страницы. А рекорды друзей доставал, используя метод execute, в таком виде
code=return {"96899965":API.getVariable({"user_id":96899965, "key":key}),"105575458":API.getVariable({"user_id":105575458, "key":key}),"126313781":API.getVariable({"user_id":126313781, "key":key}),"6773085":API.getVariable({"user_id":6773085, "key":key})};.

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

ПаоПао 2.0 вот новая версия игры.
Решил больше не переписывать, пора взяться за «куриц».
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.