Нужен смысл. В печеньке-кликере это был не только "рейтинг" (печенки пер секунд), но еще и АЧИВКИ! :) Вот и в этом кликере хотелось бы видеть ачивки или какую-то свою смысловую изюминку (здесь уже идей нет)
Чувак, сливай сразу куда-нть исходники, тогда можно будет давать более-менее предметные советы. Что могу сходу сказать: 1. Сразу убивай любые элементы оформления винды. Панель заголовка - к чёртовой матери и рисуй свою. Потому как ты сейчас заточишь под Aero интерфейс, а у меня классическое оформление - и прога будет выглядеть ущербно. 2. Не совсем понятная хрень внизу - это statusbar или нет? Если нет - то юзай его. Если да - то как-то он не удался... 3. Я тоже люблю делать из пользователей обезьянок, но запрещать масштабирование окна - это очень плохая практика. Как говорил известный комикс, "не надо так". 4. Кекс лучше увеличивать от центра при клике, то бишь равномерно во все стороны. А то как то не так он смотрится. Пока всё, что придумал за две минуты игры.
1. Можно поподробнее? 2. От него отказался в принципе 3. Не вижу смысла для масштабирования, я буду ориентироваться в пределах 800х600 или 1024х768 в будущем. 4. Я думаю над этим, возможно вы правы.
Итак... 1. Тебе там выше кидали статью на Хабре про WPF и прочее. Всерьёз задумайся, оно того стоит. А вообще, никогда не доверяй оформлению винды. У кого-нть вдруг внезапно может оказаться цвет фона окна зелёный, и интерфейс твоей проги будет выглядеть ровно не так, как ты его задумывал. Так же и строка заголовка - всюду (в том числе и просто под разными системами) она будет выглядеть по разному, и вполне может не вязаться с общей концепцией приложения. Лучше полностью весь интерфейс описать с нуля с точностью до деталей. Я бы вообще предложил прогу оформить в стиле оформления сайта: менюшка со статистикой в правом верхнем углу, ниже кнопки добавления элементов. Либо одна кнопка добавить (а ля "добавить новость"), по нажатию которой будет отображаться панель с возможными вариантами "новостей". Слева вверху собственно кекс, ниже ещё чего придумаешь. Цветовую гамму под сайт: белый фон и прочее. Чтоб издалека видно было, что Пикабу :) 2. Да, без statusbar'а стало лучше. 3. А вот с масштабом ты зря. Какой совет сразу могу дать: не привязывай компоненты к координатам, привязывай к сторонам. И у тебя не будет возникать вопросов с масштабированием (как они видимо возникают сейчас - это ведь надо OnResize описывать, все элементы переставлять; нет, не надо). И тогда, если ты захочешь (допустим) добавить нечто над кнопками, ты не будешь матюкаясь переставлять все кнопки и искать для них новое удобное положение, а изменишь пару параметров и вижла всё сделает за тебя. У всех (почти) компонентов есть свойство "Dock" (если ты вдруг не знаешь). Юзай, поможет. В идеале, надо чтобы окно умело уменьшаться до достаточно малого размера, при котором отображались бы только наиболее важные его элементы (например кексик и статистика), а остальное было скрыто. Плохой пример данного функционала - всеми любимый куки-кликер: если браузер начинаем уменьшать, вёрстка ползёт, пересекается и получается чёрти пойми что. Опять таки, у окна можно задать минимальный размер, до которого его можно уменьшить. А максимального размера быть не должно и вовсе: ориентируясь, как ты сказал, на 800х600 (хотя, как видим, уже не влез) ты подумай о экране 17" с разрешением FullHD (1920x1080). Как думаешь, интерфейс с маленькими буковками останется всё таким же дружелюбным? 4. Сейчас с кексиком вообще беда какая-то. Он по запуску программы относительно небольшой, а по первому клику перемещается и увеличивается.
И ещё пару советов: 5. Раз уж ты не делаешь инталлятора/деинсталлятора для проги, то никогда - это совет не только для этого проекта, а и в целом, запомни - НИКОГДА не пиши ничего в реестр или файлы пользователя. Все свои конфиги, сохранения и прочее такая прога должна хранить при себе. А если уж ты решил, что это необходимо сделать и другого пути нет (для кликера это не тот случай) - то нужно предусмотреть в самой проге функционал, позволяющий убрать за собой мусор. После удаления приложения от него не должно оставаться никаких следов. 6. Вижла приписывает к исполняемому файлу некоторую справочную информацию: описание, автора, версию и прочее. Всё это найдёшь в свойствах проекта. Так вот, сделай версию вроде 0.5 (альфа всё таки) и каждый раз перед публикацией инкрементируй ревизию. Чтобы в баг-репортах и прочих предложениях по улучшению можно было сослаться на версию 0.5.0.192 (например). И при этом, чтобы тебе самому было понятно, что отчёт основан на некоей старой версии, и баги в нём описанные возможно уже исправлены. 7. Неактивные label'ы на кнопках очень уже нехорошо смотрятся, особенно когда на эти кнопки нажимаешь. Возможно имеет смысл отказаться от стандартный кнопок вовсе, заменить их картинками. Если всё же нет, нужны кнопки, то нужно запретить фокус на них - рамка подсветки как-то вообще ни о чём. 8 Все данные по добавляемым элементам (начальная стоимость, RpS) возможно стоит захардкодить, из конфига их видно не должно быть уж точно, даже в зашифрованном виде. Это вроде как константы, они должны зависеть только от проги, тем паче если ты их захочешь поменять в следующей версии. 9. Что до хранения сохранений, то покуда хранишь их на пользовательском компе, нужно бы их шифровать (ну это я кэп, ты и сам понимаешь). Погляди в направлении банального XOR-шифрования, дёшево и сердито. Генеришь XML, выталкиваешь в поток, шифруешь, в бинарном виде толкаешь в файл. И обратно: как бинарник читаешь, дешифруешь, парсишь. Делов минут на 10-15, а уже проблем с изменяемым с блокноте конфигом не будет. 10. В качестве ачивок могу предложить Печеньку: http://pikabu.ru/story/vse_v_sbore_ili_nasyishchennyiy_den_p... Там есть ссылки на все картинки по отдельности. Только названия придумаешь и характерное описание - и считай ачивки готовы.
Походу всё, что на данный момент могу сказать. Итак много букв получилось. Прикреплю ещё скрин того, как кликер выглядит у меня (Win7, классический стиль оформления (короче считай Win98)). Может чего ещё заметишь и почерпнёшь.
Спасибо за адекватный и разжеванный отзыв, все же пока пишу на WinFormах, возможно скоро предстоит отпуск за свой счет я попробую пере-реализовать на WPF, с учетом того, что я уже сделал. Написать с 0 или адаптировать под новое будет не сложно.
По поводу лэйблов на кнопках - это временное решение, в идеале кнопку заменит картинка, текст будет автоматически генерироваться на картинку.
Про стоимости из базы не совсем понял. Что до "хранения мусора на компутерах юзеров" , для сохранения используется http://msdn.microsoft.com/ru-ru/library/bb397750.aspx , а хлам от них пока сам не удаляется, но я сделаю очистку. Можно про шифрование поподробнее? Я совсем новичек в вендокодинге, до этого кодил пэх и яваскриптик.
По стоимостям гляди: Начальные стоимости (как собственно и формулы вычисления второго, третьего и т.д. элементов) у тебя постоянны. Нет резона выносить их на хранение куда-то наружу (в конфиг), если их можно жёстко задать в коде (hardcode). Во-первых, это лишний простор для читерства, а во вторых это на самом деле просто не нужно. Конфиг у тебя по сути должен хранить: - текущий рейтинг - количество купленных элементов каждого типа - маску ачивок - маску апгрейдов А такие параметры, как текущий RpS (как суммарный, так и индивидуальный для разных типов постов), стоимость каждого элемента (с учётом количества уже купленых) и что-то там ещё, что нужно, ты будешь вычислять на старте программы каждый раз на основе данных из сохранения. Это временные переменные по сути, долговременно их хранить не нужно. Тем более, смотри какая может вылезти ошибка: когда ты решишь поменять баланс, изменишь цены и RpS для постов, эти параметры начнут конфликтовать с конфигом, то бишь по сути конфиг будет ошибочным. Как-то у меня получилось всё запутанно, но надеюсь идею ты понял.
Что до шифрования. Я сам плюсовик, с шарпами знаком весьма посредственно. Уверен, что там есть какие-то готовые решения и для шифрования, но я бы конечно всё делал по-своему. :) Хранение конфига в XML - это идеальное решение с точки зрения переносимости, расширяемости и обратной совместимости. Но он "слегка" избыточен, а в том конфиге, что создаёт (или создавал) твой кликер и подавно - вижла туда напихала чего только могла. Моя идея с XOR-шифрованием - это самое элементарное, что можно предложить. Для первого варианта, скажем так, прокатит. Суть в чём: Берём наш конфиг (будь-то XML, или какая-то своя реализация) -> сериализуем (приводим текстовое представление к бинарному, считай потоку [массиву] байт) -> шифруем его XOR'ом -> записываем как бинарник в файл. Придумываешь какой-нть офигенно сложный ключ из разных символов - и для читерства без декомпиляции уже не обойтись. Обратный процесс аналогичен: вычитываешь файл в бинарном виде -> дешифруешь его -> десериализуешь -> парсишь. Сложного ничего нет. Если надо, могу про XOR-шифрование слегка подробнее рассказать, но думаю гугл и тот же хабр справятся с этим лучше меня.
По поводу переполнения переменной: Там тебе верно подсказали long double, хранит нереальные значения, только истинный кармодрочер столько рейтинга сможет накрутить. :) Но если всё же боишься, что и этого не хватит, то как вариант можно отказаться от дробного рейтинга и использовать BigInteger - целочисленный тип, хранит абсолютно любые значения (он вроде на основе динамически расширяемого массива байт строится). Плюс - в принципе неисчерпаемый ресурс. Минусы - это отказ от дробной части (хотя не так уж она и нужна) и (насколько я помню, хотя могу ошибаться) очень долгие вычисления при больших значениях (с точки зрения процессора конечно, не на глаз). Я бы заюзал long double и не парился, но на всякий случай словил бы исключение overflow и перестал наращивать счётчик, покуда он не уменьшился бы хотя бы на порядок.
Ну и по реализации: Инсталлятор, насколько я понимаю, сгенерен средствами вижлы, она там позволяет вроде расставить галочки и сделать publish. Решение оригинальное, но очень плохое, на самом-то деле. Столько лишних телодвижений ради игры в 500Кб - это слишком сильно. Она должна быть абсолютно портативной, мол удалил исполняемый файл (ну или на крайняк папку с этим файлом и всем, что рядом) - и всё, забыл, игры не было. Нормальное решение с автообновлением - весь принципиальный функционал нужно вынести в отдельную библиотеку и по необходимости при запуске программы выкачивать новую версию именно библиотеки и заменять. Решение для альфы-беты (быдлокод): старая версия запускается, проверяет обновления, находит -> выкачивает новую версию, сохраняет рядом с собой -> запускает новую версию, выключает себя -> новая версия на старте проверяет наличие рядом старой, находит -> косит её (в идеале перед этим находит процесс старой и дожидается её завершения, если та ещё не завершилась) -> ну и дальше по стандартному сценарию, можно играть. Минус решения - у каждого нового исполняемого файла должна в имени присутствовать маркировка версии, отличная от предыдущей. Ну и да, повторюсь, это жуткий быдлокод. Но для начального решения сойдёт. Уж во всяком случае лучше того, что есть на данном этапе.
У нас тут праздник.. я чутка пьян) Сегодня не осилю, могу в кратце ответить на пункт о шифровании. http://msdn.microsoft.com/en-us/library/system.security.cryp... в будущем будет использоваться это для шифрования, но записи будут также храниться в "XML" т.к. 1 - это удобно, 2 - теперь они сносятся после удаления приложения (да-да, я чутка осваиваюсь в незнакомом "месте"(но все равно, слишком много нюансов о которых я не знаю, буду продолжать познавать) ;-))
раз уж пошла такая пьянка, , что думаешь по этому поводу?
DELETED
А как на счет путей развития по "лигам" (Леги, Добра, Зла и т.д.). Что бы я, например, вступил в лигу лени и медленно, лениво, верно и редко покликивая, сидя на работке, увеличивал свой РпС :D
А если ввести какой нибудь учет между пикабушниками? По рейтингу, кто больше всех помощи просит, кто самый ленивый, кто самый добрый(помочь на пикабу) ну и прочее? Такое возможно? И насчет эвентов, это круто! З.Ы. Если уже предлогали, извиняюсь, я с работы, тут комп собирали еще при Людовике14, а инет проводили шаманы.
Нет смысла в более дорогих улучшениях. Можно постоянно покупать первые улучшения, от этого получишь больше рейтинга. Нужен смысл покупать что-то более дорогое, пусть оно прибавляет немного больше.
Также было бы неплохо чтобы улучшение как то отображались, например как в печеньках когда покупаешь бабку то эта бабка появляется на экране. Думаю это можно реализовать в духе профиля на пикабу, где отображаются все твои посты. Например купил "сделать гифку" и появляется твой пост со случайной гифкой. Было бы прикольно если бы программа синхронизировалась с сайтом пикабу и брала оттуда эти случайные посты. В этом был бы свой отдельный интерес покупать улучшения чтобы посмотреть что же за пост создастся на этот раз)
Я разговаривал с админом, если бы можно было выдергивать "Свежее" - я бы примерно так и реализовал. А писать парсер сейчас не очень хочется... :) Но идея хорошая.
С первых секунд не заметил стоимости улучшений. Было бы неплохо чтобы сразу было видно что попросить помощи у пикабу стоит 25 кексов, разместить где-нибудь рядом с информацией и приносимых кексах.
Приношу извинения за свою невнимательность)) Просто больше отвлекся на запуск виртуальной винды для проверки этого чуда, хотя антивирус и показал, что файл пуст (да, я параноик). Про результаты на wine могу сообщить вечером. Если реализуется показ горячего в режиме реального времени в программе, может стать довольно интересной программкой. А потом на пике популярности программы сделать в ней возможной авторизацию на сайте при логина пароля для возможности комментирования и оценки постов. Из полученных логинов сделать бота, незаметно для владельцев плюсующего или минусующего определенный пост, что сделает этого бота решающим оружием в сражении лиг добра и зла.
Это вы загнули :) Ботов делать я не буду и никаких авторизаций тоже. Возможно добавлю ввод Имени для таблицы очков. Еще подумываю о Random Event. Пример: Написал пост, с случайным шансом за него можно будет получить "много" плюсов или минусов, в зависимости от корейского рандома и занятости лиги добра или зла. А насчет вайна, скорее всего не взлетит, т.к. дот нета в вайне нету.. Если конечно еще не портировали (я не в теме).
Ну Net FrameWork 4.0 портировали, но вроде как программы с его использованием взлетать пока не хотят. Просто стационарный комп на винде, ноут на линуксе, так что как обстоят дела у wine давно не интересовался т.к. нет необходимости, но ради эксперимента))
.Net кроссплатформенна. Mono - свободная реализация .Net для подавляющего большинства существующих ОС. Вопрос в том, что некоторые возможности до сих пор не реализованы или реализованы в полной мере, так что автору достаточно просто немного код оптимизировать, убрать инструкции, не реализованный в Mono, и вуаля - кроссплатформенная версия готова.
Зачем в рейтинге овер10 цифр после запятой? При моих-то 3 миллионах некрасиво смотрится) Сделай 2-3 ограничение, пожалуйста) А вообще, спасибо за убивалку времени: я работаю на клики, когда устаю: на меня работает время :)
А вот еще вопрос, если будет общепикабушный рейтинг, можно будет сделать регистрацию или акк там. Чтоб с работы играл и не потерялся?) Я конечно далеко заглядываю... Но я уже наркоманю по этой игре, умел бы что делать из нужного, помог бы)
Введите также счетчик сколько уже куплено различных улучшений, то есть 2 раза гифку сделал, 3 раза видео итд. Также у меня с прокачкой "попросить помощи у пикабу" рейтинг стал отображать цифры после запятой, то есть сначала был рейтинг, например, 50,4 а потом стал 60,25236346367. Сделайте округление какое нибудь.
Хмм... Странно, должно было прокатить округление до 0,01, хорошо разберусь. Вы использовали обновленную версию? , а насчет показа сколько-чего сделано - если я это реализую, то придется обнулять рейтинг всем, иначе у вас будет 100 гифок сделано, а показана будет лишь 1.
да, версия с коммента 20минутной давности. А счетчик в любом случае реализовать стоит пусть и с обнулением, все таки это альфа версия и ничего страшного в этом нет.