Online обучение c#

Формула программиста

основатель — Волосатов Евгений Витольдович
Поздравляю с 1 сентября! Система начисления Байтов работает.

Статистика по видеоурокам

  • Всего просмотрено уроков: 47
  • Всего выполнено уроков: 46

Отчёты по видеоурокам

Дата Видеоурок Результат
2015-09-12 20:21 Микроигры 2048 - Смещение + 20 24 час. 00 мин.
Повышать скорость работы программы. И рекурсия. Хотя здесь как раз быстро смекнул что к чему:)))))))
Наверное рекурсия.
Наконец-то я доделал это приложение! Подробности ниже!)))
1. Добавил статистику игры в виде таблицы рекордов. За формирование таблицы рекордов отвечает отдельный класс "Statistics". В нем инкапсулирована вся работа с таблицей. При сохранении таблицы я использовал сериализацию и десериализацию. Это неимоверно удобно и выливается в итоге в меньший объем кода, чем при использовании System.IO c той же целью.
Данный класс является моим первым шаблоном, который очень удобно интегрировать в любое приложение, требующее какой-то подобной статистики.
2. Добавил какой-никакой интерфейс игры - поле для ввода имени игрока, поле отображение текущего счета игры и кнопку рестарта игры. Данные текстБоксы как раз и используются при сохранении игры в таблицу рекордов.
3. Добавил вероятность появления цифр на игровое поле - где-то в описании игры в интернете вычитал, что цифры появляются не с равной вероятностью (да и сам замечал подобное при игре на смартфоне): 2-ка с вероятностью 80%-ами, 4-ка же с оставшимися 20%-ами.
4. Добавил "диалог" между программой и игроком при завершении игры с вопросами о сохранении игры и о создании новой игры.
5. Добавил кнопку рестарта игры.
Я очень рад своим доделкам/переделкам.
Именно так повышается скилл программирования - когда ты сам находишь решения своим же идеям:)))
2015-09-12 19:44 Шарики Шарики. Поиск линий + 1 24 час. 00 мин.
Находить и исправлять недоделки в приложении. Проявлять фантазию))). Познакомился с сериализацией и десериализацией - ничего сложного и очень понравилось. Также могу сказать, что я понял одно из применений делегатов на практике.
Самым сложным оказалось окончательно реализовать идею сохранения результатов игры. Подробности ниже:).
Что сделал/изменил в программе:
1. Исправил/доделал функцию сокращения линий шариков - ранее, при сокращении нескольких линий одновременно за 1 ход (т.е. одним шариком за 1 ход сокращается несколько линий), количество шариков, подлегаемых сокращению, подсчитывалось неправильно. Допустим, сокращается две линии - 5 шариков и 6 шариков - ранее, в массив удаляемых шариков записалось бы 11 шариков, что является неправильным. Или при сокращении линий из 5-ти и 5-ти шариков, в массив записалось бы 10 шариков. Правильно нужно было бы записать в первом случае в массив 10 шариков (11-1 шариков), а во втором случае 9 шариков. Так получается за счет того, что 1 шарик является общим для обоих линий, и он заносился в массив шариков дважды - с каждой линией по разу. Что самое интересное - на ход игры этот факт никак не влиял. Но мне для анимации прогресса игры в виде счета сокращенных линий (общее количество сокращенных шариков) это было критично. Поэтому пришлось переделать эту функциональность.
2. Добавил анимацию прогресса игры в виде счета сокращенных линий (общее количество сокращенных шариков) и отображения имени игрока.
3. Добавил "диалог" между программой и игроком при завершении игры с вопросами о сохранении игры и о создании новой игры.
4. Добавил возможность сохранения результата игры, статистику результатов сохраненных игр в виде таблицы рекордов,
просмотр таблицы рекордов. Таблица рекордов автоматически сортируется при добавлении новой записи. Данная функциональность реализована в виде отдельного класса, специально для удобного интегрирования в другие приложения,
требующие подобной функциональности.
При реализации данной функциональности изначально хотел работать с пространством имен System.IO. В принципе все работало, но я захотел чтобы у меня был 1 файл, exe-шник и всё (чтобы нельзя было подделать таблицу рекордов через редактирование самого файла), но уперся в проблему, когда приложение во время выполнения пытается изменить само себя (ведь текстовый файл находится в ресурсах приложения). Долго бился с этим. В итоге вспомнил про сериализацию - в моем случае это является аналогом System.IO - также в итоге таблица рекордов сохраняется во внешний файл. НО - в итоге это вылилось в намного меньший объем кода, чем при использовании System.IO, и во внешний файл таблица рекордов записывается в виде потока байтов, что в самом файле выглядит в виде набора шестнадцатеричных чисел. Т.е. особо такой файл не подделаешь.
Так, что я очень доволен своей работой!:)))
2015-07-30 16:48 Шарики Шарики. Поиск пути + 1 2 час. 30 мин.
Новому ничему.
Быть предельно внимательным.
Всё ок.
2015-07-29 21:38 Шарики Шарики. Логика игры + 1 3 час. 30 мин.
Использовать делегат - мне понравилось.
До конца понять принцип работы с делегатами - с этим у меня до сих пор проблемы - по памяти врядли смогу правильно их использовать. Но эта сложность не урока как такового, а моего понимания.
Всё ок.
2015-07-27 21:03 Шарики Шарики. Анализ игры + 10 1 час. 30 мин.
Абсолютно новому ничему.  Закрепил навык размещения pictureBox'ов на panel'e.  Данный способ мне кажется самым "полезным".
Не запутаться во вложенных switch'ах.
С картинками у меня проблемы. Но я качаю Photoshop, сделаю в нем клевейшие шарики! Всё будет замечательно!:))
Ещё, кстати, я сделал, чтобы размер формы подстраивался под размер поля игры. Очень удобно получилось. 1 строчку написал - и теперь тебе всё равно на любые изменения с полем игры - всегда будет красиво и аккуратно.
2015-07-27 16:04 Шарики Шарики. Вступление + 1 20 мин.
Составлять алгоритм к программе.
Ничего.
Я пока подготовил картинки шарика только 1-го цвета, зато самых разных размеров. Хочу в следующем уроке уже четко понять какой размер картинки нужен, и тогда сразу все остальные подготовлю. Скрин папки шариков приложу.
2015-07-23 00:41 Микроигры VIP урок. Формула 1 + 1 1 час. 30 мин.
Попрактиковался в описании координат, обработке событий.
Немного в координатах напутался..
Игра по логике похожа на арканоид.
P.s.: ох.....арканоид....его ж нужно ещё доделать..(facepalm).
2015-07-18 23:59 Игры со словами Виселка. Алгоритм помощника + 10 1 час. 15 мин.
Писать программу по заранее составленному алгоритму.
Понять и запомнить алгоритм.
Крутой бот!)))))))))))))) Очень понравился!
2015-07-18 19:27 Игры со словами Виселка. Блоксхема помощника + 10 40 мин.
Ничему новому.
Проследить алгоритм. На первый взгляд казалось, что он должен работать немного по-другому.
Всё ок.
2015-07-16 14:55 Микроигры 2048 - Учимся играть + 10 24 час. 00 мин.
Играть в 2048.
Набрать достаточное количество очков.
Всё отлично.
P.s.: скриншот со смартфона.
2015-07-16 14:36 Микроигры ПОЛУФИНАЛЬНЫЙ УРОК + 10 40 мин.
Ничему новому.
Также записать видео-обзор.
Всё ещё тяжело говорить на запись.
2015-07-08 14:05 Микроигры 2048 - Интерфейс + 20 3 час. 00 мин.
Работать с цветом контролов формы. Запомнил наконец-то в чем отличие KeyPress от KeyDown и от KeyUp.
Не скажу, что именно сложно, но кропотливо.
Я цвета подобрал максимально похожими к оригинальной игре на смартфоне. По крайней мере тех чисел, которые у меня были доступны на момент выполнения задания.
2015-07-06 16:07 Микроигры Игра 15 - Картинка + 20 2 час. 00 мин.
Работе с элементами пространства имен System.Drawing. Ну и конечно динамическое расположение картинок.
Понять как мы располагаем картинки.
Всё хорошо.
2015-07-06 13:13 Микроигры Игра 15 - Алгоритм + 20 3 час. 00 мин.
Работе с разными малоизвестными контролами.
Долго не мог понять алгоритм отрисовки надписей на кнопках. Но в конце всё-таки разобрался.
Всё хорошо.
2015-07-04 17:13 Микроигры Игра 15 - Кнопки + 20 30 мин.
Вспомнил про контрол TablePanelLayout.
Nothing.
Everything is alright!
2015-07-04 16:09 Игры со словами Игры со словами + 1 1 час. 00 мин.
Придумывать и применять новые алгоритмы.
Ничего.
Вчера, Евгений Витольдович предложил ещё 1 вариант алгоритма поиска - найти нужно самое длинное слово из не повторяющихся букв.
Вуаля)))
2015-07-04 00:32 Игры со словами Виселка. Поле чудес + 20 2 час. 00 мин.
Рисовать картинки))).
Ничего.
В программе после видео-урока есть ошибочка: если отгадать слово, допустим, с 3-мя ошибками, то при отгадавании следующего слова у тебя будет на эти 3 ошибки меньше. Т.е. мы нигде не обнуляем переменную errors.
2015-07-02 16:40 Нано-игры Арканоид - Шарик и кирпичики + 3 3 час. 00 мин.
Работать с координатами формы и контролов на форме. Долго сбивало отличие между координатной сеткой формы (и соответственно координат контролов на ней) от привычной декартовой системы координат, знакомой ещё со школьного курса геометрии. Насколько я понял - координаты (будь-то самой формы или какого-либо контрола на форме) начинают свой отсчет из верхнего левого угла. Очень прошу подтвердить или опровергнуть моё понимание.
Разобраться с координатами.
Арканоид - одна из самых моих любимых игр ещё со времен игровых приставок Денди. Рубился в неё - просто огромное количество времени. Знаю какие фишки в неё можно добавить - это и жизни, и очки, и разные выбивающиеся из кирпичиков бонусы, и разные типы самих кирпичиков, и алгоритм отскока шарика от ракетки, на который влияет сам игрок в процессе игры. Чуть позже обязательно её доделаю. Да и визуальное оформление нужно более красивое сделать.
2015-06-27 14:43 Сокобан ФИНАЛЬНЫЙ урок. Видео-обзор проекта Сокобан + 2 3 час. 00 мин.
Делать видео-обзоры.
Сделать видео-обзор.
Всё замечательно.
2015-06-27 00:26 Сокобан Сокобан - Завершение + 3 2 час. 20 мин.
Искать и находить свои ошибки.
Ничего.
Я это сделал! Я в восторге! Уже есть что-то такое - что можно показать в качестве продукта своего навыка программирования!
Спасибо большое за такую возможность, Евгений Витольдович!:)
2015-06-26 19:22 Сокобан Сокобан - Игра - На двоих по сети + 20 1 час. 40 мин.
Опять делегаты. Опять потоки. Для любое использование их является "+" в мою копилку. Ещё вспомнил про свойство IsBackground.
Всё было настолько сложно, насколько и интересно.:)
Интересен тот факт, что когда мы запускали на прошлом уроке (когда сделали класс Phone) 2 приложения (и клиент и сервер), то тогда не было проблем с незакрывающимся вторым потоком, хотя там мы не используем свойство IsBackground.
2015-06-25 15:46 Сокобан Сокобан - Телефон - TCP/IP протокол + 10 2 час. 00 мин.
Использовать потоки("нити")(наконец-то много поточность..))))..) и ещё немножко закрепил умения пользоваться делегатами, что тоже очень хорошо для меня.
Делегаты и многопоточность - это тёмный-тёмный лес для меня, в котором водятся непойми кто или непойми что. Вроде в теории всё просто и понятно, а вот как и когда на практике их применять - ооооохххххх.......
Но после этого урока парочку "зверей" из этого леса я узнал и понял как можно и когда нужно их использовать.
Всё замечательно! Я впервые написал программу, которая хоть как-то, даже так примитивно, но уже работает по сети! Круто! Я действительно в восторге! Спасибо за урок, Евгений Витольдович!
Попеременное отключение/включение то сервера, то клиента работает.
2015-06-24 15:43 Сокобан Сокобан - Игра - На двоих + 10 30 мин.
Играть за 2 игроков в Сокобан.:))))
Ничего.
Удивлен, что так легко и быстро получилось переделать игру под 2 игроков.
2015-06-24 14:28 Сокобан Сокобан - Редактор - На двоих + 10 1 час. 30 мин.
Проявлять фантазию.
Придумать свои собственные уровни, которые реально можно пройти только с помощью 3-ух игроков.
Мне показалось, что 1 из Ваших уровней невозможно пройти.
2015-06-24 11:57 Нано-игры Арканоид - Уровень и ракетка + 10 1 час. 40 мин.
Понял отличие KeyPress от KeyDown. Также поработал по-больше с координатами различных контролов на форме.
Ничего.
Всё отлично!
P.s.: к правой стенке ракетка также присоединяется.
2015-06-23 22:40 Сокобан Сокобан - Игра - Автоходы + 1 2 час. 30 мин.
Мониторить код и искать у себя ошибки, будь они неладны...
Найти ошибку у себя, из-за которой ходы игрока как буд-то обрывались наполовине.
Всё в порядке.
2015-06-23 16:38 Сокобан Сокобан - Решалка - Оптимизация + 10 20 мин.
Использовать 4-мерные массивы. Я так понял, что он представляет собой перечень комбинаций положений мышки и яблока относительно друг друга в координатах поля (x, y). И высокая скорость его работы состоит в том, что каждый мы не перебираем все варианты (как было до этого со списком List и Dictionary), а смотрим 1 конкретный вариант исходя из наших координат мышки и яблока.
Понять как именно мы используем 4-мерный массив.
Всё хорошо.
Время работы программы при использовании Dictionary было 1500-1600 мс. После применения массива время уменьшилось до 7-11 мс.
2015-06-23 01:59 Сокобан Сокобан - Решалка - Яблоко + 10 2 час. 00 мин.
Находить и устранять свои ошибки.
Не знаю насколько это сложное, но у меня в итоге тестер при правильном решении выдает в конце надпись "Solution INcorrect", хотя на самом деле все очень даже correct. Думаю, что дело в самом тестере, а не в солвере. Разберусь с этим уже завтра.
Всё отлично и замечательно. Приятно видеть результаты своего кодинга, особенно когда эти результаты совпадают с твоими ожиданиями.:)
2015-06-22 15:45 Сокобан Сокобан - Решалка - Мышка + 10 2 час. 00 мин.
Как открывать командную строку из определенной папки:)))))))
Придумать свой лабиринт.
Вот такой кусочек кода map[x, y] = lines[y+1][x] из нашей программы - я так понял он вытягивает x-вый элемент char из y+1-го string-элемента массива lines[]? Т.е. такая конструкция применима для любой переменной string, если мы хотим вытянуть из него определенный по номеру char-элемент?
2015-06-22 01:34 Сокобан Сокобан - Решалка - Тестер + 10 1 час. 30 мин.
В принципе ничему новому.
Ничего.
Непонятен 1 момент - когда мы передвинули "норку" для мышкиного "яблока", и потом мышка двигала "яблоко", то она передвигала его как раз через свою норку в новом месте. И получается, что как бы задача решена - "яблоко" уже в норке, но решение не засчитывается и мышка продолжает его двигать до места, где с самого начала была "норка" до изменения. Я понимаю, что в любом случае программа должна отработать всю последовательность решения из файла Solution.txt, но все же - как-то странно. Видимо, мы этот алгоритм будем ещё совершенствовать.
2015-06-20 18:31 Сокобан Сокобан - Игра - Управление + 10 5 час. 30 мин.
Новое применение делегатов увидел.
Понимать логику программы во время написания кода. ОООЧень долго приходилось разбираться в том, что именно ты кодишь и почему оно работает, и почему оно работает именно так как ты кодишь.:))) Вообщем, самый трудный урок из всех предыдущих.
Всё хорошо, спасибо.
2015-06-19 14:36 Сокобан Сокобан - Игра - Интерфейс + 10 1 час. 30 мин.
Нового ничего. Жду использование делегатов - интересно.
Ничего сложного.
Всё в порядке.
2015-06-10 22:17 Сокобан Сокобан - Создаём свои уровни + 10 30 мин.
Проявлять фантазию, тесно переплетенную с логикой.:)
Придумать свои уровни.
Всё ок.
2015-06-10 21:39 Сокобан Сокобан - Редактор - Улучшение + 10 2 час. 00 мин.
Нового ничего.
Не сразу сработало прямоугольное заполнение лабиринта.
Всё ок.
2015-06-09 21:35 Сокобан Сокобан - Редактор - Сохранение + 10 2 час. 30 мин.
В принципе ничему новому. Просто пытаюсь абсолютно полностью вникать в логику построения игры и понять логику написания кода этой игры.
Выловить ошибку в конце.
Всё в порядке, всё хорошо.
2015-06-08 17:35 Сокобан Сокобан - Редактор - Редактирование + 10 2 час. 00 мин.
Свойство Tag.
Опять же - полностью вникнуть в логику построения программы.
В этом уроке мы написали функцию IsGoodLevel() для проверки перед сохранением уровня игры, но так и не использовали её.
2015-06-08 14:22 Сокобан Сокобан - Редактор - Интерфейс + 10 1 час. 20 мин.
Работать с новыми контролами на форме. Динамически добавлять pictureBox'ы.
Не сразу понял логику расположения pictureBox'ов на панели. Именно саму формулу, по которой они располагаются. В остальном всё ок.
И конечно ооооочень долго искал подходящие картинки.
Если есть у кого-нибудь какой-нибудь ресурс с большим количеством разных картинок разных размеров, буду признателен если поделитесь. А то рисовать ну очень не хочеться.:)
2015-06-07 15:18 Сокобан Сокобан - Редактор - Загрузка + 1 2 час. 00 мин.
Логике построения уровней в игре.
Ничего.
Хотелось бы увидеть в будущих уроках построение другого редактора уровней в самой игре, а не через файл. В некотором роде в таком подходе получается двойная работа.
2015-05-31 17:31 Сокобан Сокобан - Вступление + 1 1 час. 00 мин.
Играть в игру Мир Сокоба.
Пройти некоторые уровни.
Игру проходил онлайн в инете. Правда, не сделал скрин с последнего уровня.
2015-05-30 17:47 Демо игры Игра Быстрощёлк + 1 30 мин.
Отличию между событиями mouseClick и mouseDown.
Свойству DateTime.Now.Ticks и функции TimeSpan.FromTicks().
Сложного, в принципе, ничего не было. Неизвестным было то, чем научился на уроке.
Всё в порядке.
Рекорд - 22,3 клика в секунду.
2015-05-26 17:13 Демо игры Лабиринт 2D - игра + 2 3 час. 00 мин.
Загружать новые формы, работе с событиями mouseEnter и mouseLeave.
Придумать логику для третьего (своего) уровня лабиринта. И, собственно говоря, реализовать её. Долгая кропотливая работа была с кучей разных лейблов.
Всё замечательно. Меня всё устраивает.:)
2015-05-19 18:06 Демо игры Лабиринт 2D - меню + 10 20 мин.
Подключать звуки к контролам на форме.
В принципе ничего.
Всё хорошо.
2015-05-16 16:56 Демо игры Картинка с секретом + 1 40 мин.
Расширил свои познания об инфраструктуре VS.
Ничего сложного.
Всё в порядке. Задание хорошее, видео хорошее, подробное.
2015-05-09 18:08 Демо софт Вступительное слово + 10 5 мин.
Делать "скриншот" без рабочего стола:)
Вспомнить и найти свою последнюю программу. Это мне так и не удалось сделать. Надеюсь, в ближайшем будущем найду её и выложу её (программы) скриншот.
Начало как минимум интригующее. Идеи, заложенные в основу процесса обучения, интересные и (!!!ГЛАВНОЕ!!!) с основополагающим практическим подходом!
  Нано-игры Скорость реакции. Блок-схема   Открыто


Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Научился: Находить и исправлять недоделки в приложении. Проявлять фантазию))). Познакомился с сериализацией и десериализацией - ничего сложного и очень понравилось. Также могу сказать, что я понял одно из применений делегатов на практике.
Трудности: Самым сложным оказалось окончательно реализовать идею сохранения результатов игры. Подробности ниже:).
Что сделал/изменил в программе: 1. Исправил/доделал функцию сокращения линий шариков - ранее, при сокращении нескольких линий одновременно за 1 ход (т.е. одним шариком за 1 ход сокращается несколько линий), количество шариков, подлегаемых сокращению, подсчитывалось неправильно. Допустим, сокращается две линии - 5 шариков и 6 шариков - ранее, в массив удаляемых шариков записалось бы 11 шариков, что является неправильным. Или при сокращении линий из 5-ти и 5-ти шариков, в массив записалось бы 10 шариков. Правильно нужно было бы записать в первом случае в массив 10 шариков (11-1 шариков), а во втором случае 9 шариков. Так получается за счет того, что 1 шарик является общим для обоих линий, и он заносился в массив шариков дважды - с каждой линией по разу. Что самое интересное - на ход игры этот факт никак не влиял. Но мне для анимации прогресса игры в виде счета сокращенных линий (общее количество сокращенных шариков) это было критично. Поэтому пришлось переделать эту функциональность. 2. Добавил анимацию прогресса игры в виде счета сокращенных линий (общее количество сокращенных шариков) и отображения имени игрока. 3. Добавил "диалог" между программой и игроком при завершении игры с вопросами о сохранении игры и о создании новой игры. 4. Добавил возможность сохранения результата игры, статистику результатов сохраненных игр в виде таблицы рекордов, просмотр таблицы рекордов. Таблица рекордов автоматически сортируется при добавлении новой записи. Данная функциональность реализована в виде отдельного класса, специально для удобного интегрирования в другие приложения, требующие подобной функциональности. При реализации данной функциональности изначально хотел работать с пространством имен System.IO. В принципе все работало, но я захотел чтобы у меня был 1 файл, exe-шник и всё (чтобы нельзя было подделать таблицу рекордов через редактирование самого файла), но уперся в проблему, когда приложение во время выполнения пытается изменить само себя (ведь текстовый файл находится в ресурсах приложения). Долго бился с этим. В итоге вспомнил про сериализацию - в моем случае это является аналогом System.IO - также в итоге таблица рекордов сохраняется во внешний файл. НО - в итоге это вылилось в намного меньший объем кода, чем при использовании System.IO, и во внешний файл таблица рекордов записывается в виде потока байтов, что в самом файле выглядит в виде набора шестнадцатеричных чисел. Т.е. особо такой файл не подделаешь. Так, что я очень доволен своей работой!:)))


Научился: Абсолютно новому ничему. Закрепил навык размещения pictureBox'ов на panel'e. Данный способ мне кажется самым "полезным".
Трудности: Не запутаться во вложенных switch'ах.
С картинками у меня проблемы. Но я качаю Photoshop, сделаю в нем клевейшие шарики! Всё будет замечательно!:)) Ещё, кстати, я сделал, чтобы размер формы подстраивался под размер поля игры. Очень удобно получилось. 1 строчку написал - и теперь тебе всё равно на любые изменения с полем игры - всегда будет красиво и аккуратно.