Дата | Видеоурок | Результат | |
---|---|---|---|
Микроигры 2048 - Смещение | + 20 | ||
Повышать скорость работы программы. И рекурсия. Хотя здесь как раз быстро смекнул что к чему:))))))) Наверное рекурсия. Наконец-то я доделал это приложение! Подробности ниже!))) 1. Добавил статистику игры в виде таблицы рекордов. За формирование таблицы рекордов отвечает отдельный класс "Statistics". В нем инкапсулирована вся работа с таблицей. При сохранении таблицы я использовал сериализацию и десериализацию. Это неимоверно удобно и выливается в итоге в меньший объем кода, чем при использовании System.IO c той же целью. Данный класс является моим первым шаблоном, который очень удобно интегрировать в любое приложение, требующее какой-то подобной статистики. 2. Добавил какой-никакой интерфейс игры - поле для ввода имени игрока, поле отображение текущего счета игры и кнопку рестарта игры. Данные текстБоксы как раз и используются при сохранении игры в таблицу рекордов. 3. Добавил вероятность появления цифр на игровое поле - где-то в описании игры в интернете вычитал, что цифры появляются не с равной вероятностью (да и сам замечал подобное при игре на смартфоне): 2-ка с вероятностью 80%-ами, 4-ка же с оставшимися 20%-ами. 4. Добавил "диалог" между программой и игроком при завершении игры с вопросами о сохранении игры и о создании новой игры. 5. Добавил кнопку рестарта игры. Я очень рад своим доделкам/переделкам. Именно так повышается скилл программирования - когда ты сам находишь решения своим же идеям:))) |
|||
Шарики Шарики. Поиск линий | + 1 | ||
Находить и исправлять недоделки в приложении. Проявлять фантазию))). Познакомился с сериализацией и десериализацией - ничего сложного и очень понравилось. Также могу сказать, что я понял одно из применений делегатов на практике. Самым сложным оказалось окончательно реализовать идею сохранения результатов игры. Подробности ниже:). Что сделал/изменил в программе: 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, и во внешний файл таблица рекордов записывается в виде потока байтов, что в самом файле выглядит в виде набора шестнадцатеричных чисел. Т.е. особо такой файл не подделаешь. Так, что я очень доволен своей работой!:))) |
|||
Шарики Шарики. Поиск пути | + 1 | ||
Новому ничему. Быть предельно внимательным. Всё ок. |
|||
Шарики Шарики. Логика игры | + 1 | ||
Использовать делегат - мне понравилось. До конца понять принцип работы с делегатами - с этим у меня до сих пор проблемы - по памяти врядли смогу правильно их использовать. Но эта сложность не урока как такового, а моего понимания. Всё ок. |
|||
Шарики Шарики. Анализ игры | + 10 | ||
Абсолютно новому ничему. Закрепил навык размещения pictureBox'ов на panel'e. Данный способ мне кажется самым "полезным". Не запутаться во вложенных switch'ах. С картинками у меня проблемы. Но я качаю Photoshop, сделаю в нем клевейшие шарики! Всё будет замечательно!:)) Ещё, кстати, я сделал, чтобы размер формы подстраивался под размер поля игры. Очень удобно получилось. 1 строчку написал - и теперь тебе всё равно на любые изменения с полем игры - всегда будет красиво и аккуратно. |
|||
Шарики Шарики. Вступление | + 1 | ||
Составлять алгоритм к программе. Ничего. Я пока подготовил картинки шарика только 1-го цвета, зато самых разных размеров. Хочу в следующем уроке уже четко понять какой размер картинки нужен, и тогда сразу все остальные подготовлю. Скрин папки шариков приложу. |
|||
Микроигры VIP урок. Формула 1 | + 1 | ||
Попрактиковался в описании координат, обработке событий. Немного в координатах напутался.. Игра по логике похожа на арканоид. P.s.: ох.....арканоид....его ж нужно ещё доделать..(facepalm). |
|||
Игры со словами Виселка. Алгоритм помощника | + 10 | ||
Писать программу по заранее составленному алгоритму. Понять и запомнить алгоритм. Крутой бот!)))))))))))))) Очень понравился! |
|||
Игры со словами Виселка. Блоксхема помощника | + 10 | ||
Ничему новому. Проследить алгоритм. На первый взгляд казалось, что он должен работать немного по-другому. Всё ок. |
|||
Микроигры 2048 - Учимся играть | + 10 | ||
Играть в 2048. Набрать достаточное количество очков. Всё отлично. P.s.: скриншот со смартфона. |
|||
Микроигры ПОЛУФИНАЛЬНЫЙ УРОК | + 10 | ||
Ничему новому. Также записать видео-обзор. Всё ещё тяжело говорить на запись. |
|||
Микроигры 2048 - Интерфейс | + 20 | ||
Работать с цветом контролов формы. Запомнил наконец-то в чем отличие KeyPress от KeyDown и от KeyUp. Не скажу, что именно сложно, но кропотливо. Я цвета подобрал максимально похожими к оригинальной игре на смартфоне. По крайней мере тех чисел, которые у меня были доступны на момент выполнения задания. |
|||
Микроигры Игра 15 - Картинка | + 20 | ||
Работе с элементами пространства имен System.Drawing. Ну и конечно динамическое расположение картинок. Понять как мы располагаем картинки. Всё хорошо. |
|||
Микроигры Игра 15 - Алгоритм | + 20 | ||
Работе с разными малоизвестными контролами. Долго не мог понять алгоритм отрисовки надписей на кнопках. Но в конце всё-таки разобрался. Всё хорошо. |
|||
Микроигры Игра 15 - Кнопки | + 20 | ||
Вспомнил про контрол TablePanelLayout. Nothing. Everything is alright! |
|||
Игры со словами Игры со словами | + 1 | ||
Придумывать и применять новые алгоритмы. Ничего. Вчера, Евгений Витольдович предложил ещё 1 вариант алгоритма поиска - найти нужно самое длинное слово из не повторяющихся букв. Вуаля))) |
|||
Игры со словами Виселка. Поле чудес | + 20 | ||
Рисовать картинки))). Ничего. В программе после видео-урока есть ошибочка: если отгадать слово, допустим, с 3-мя ошибками, то при отгадавании следующего слова у тебя будет на эти 3 ошибки меньше. Т.е. мы нигде не обнуляем переменную errors. |
|||
Нано-игры Арканоид - Шарик и кирпичики | + 3 | ||
Работать с координатами формы и контролов на форме. Долго сбивало отличие между координатной сеткой формы (и соответственно координат контролов на ней) от привычной декартовой системы координат, знакомой ещё со школьного курса геометрии. Насколько я понял - координаты (будь-то самой формы или какого-либо контрола на форме) начинают свой отсчет из верхнего левого угла. Очень прошу подтвердить или опровергнуть моё понимание. Разобраться с координатами. Арканоид - одна из самых моих любимых игр ещё со времен игровых приставок Денди. Рубился в неё - просто огромное количество времени. Знаю какие фишки в неё можно добавить - это и жизни, и очки, и разные выбивающиеся из кирпичиков бонусы, и разные типы самих кирпичиков, и алгоритм отскока шарика от ракетки, на который влияет сам игрок в процессе игры. Чуть позже обязательно её доделаю. Да и визуальное оформление нужно более красивое сделать. |
|||
Сокобан ФИНАЛЬНЫЙ урок. Видео-обзор проекта Сокобан | + 2 | ||
Делать видео-обзоры. Сделать видео-обзор. Всё замечательно. |
|||
Сокобан Сокобан - Завершение | + 3 | ||
Искать и находить свои ошибки. Ничего. Я это сделал! Я в восторге! Уже есть что-то такое - что можно показать в качестве продукта своего навыка программирования! Спасибо большое за такую возможность, Евгений Витольдович!:) |
|||
Сокобан Сокобан - Игра - На двоих по сети | + 20 | ||
Опять делегаты. Опять потоки. Для любое использование их является "+" в мою копилку. Ещё вспомнил про свойство IsBackground. Всё было настолько сложно, насколько и интересно.:) Интересен тот факт, что когда мы запускали на прошлом уроке (когда сделали класс Phone) 2 приложения (и клиент и сервер), то тогда не было проблем с незакрывающимся вторым потоком, хотя там мы не используем свойство IsBackground. |
|||
Сокобан Сокобан - Телефон - TCP/IP протокол | + 10 | ||
Использовать потоки("нити")(наконец-то много поточность..))))..) и ещё немножко закрепил умения пользоваться делегатами, что тоже очень хорошо для меня. Делегаты и многопоточность - это тёмный-тёмный лес для меня, в котором водятся непойми кто или непойми что. Вроде в теории всё просто и понятно, а вот как и когда на практике их применять - ооооохххххх....... Но после этого урока парочку "зверей" из этого леса я узнал и понял как можно и когда нужно их использовать. Всё замечательно! Я впервые написал программу, которая хоть как-то, даже так примитивно, но уже работает по сети! Круто! Я действительно в восторге! Спасибо за урок, Евгений Витольдович! Попеременное отключение/включение то сервера, то клиента работает. |
|||
Сокобан Сокобан - Игра - На двоих | + 10 | ||
Играть за 2 игроков в Сокобан.:)))) Ничего. Удивлен, что так легко и быстро получилось переделать игру под 2 игроков. |
|||
Сокобан Сокобан - Редактор - На двоих | + 10 | ||
Проявлять фантазию. Придумать свои собственные уровни, которые реально можно пройти только с помощью 3-ух игроков. Мне показалось, что 1 из Ваших уровней невозможно пройти. |
|||
Нано-игры Арканоид - Уровень и ракетка | + 10 | ||
Понял отличие KeyPress от KeyDown. Также поработал по-больше с координатами различных контролов на форме. Ничего. Всё отлично! P.s.: к правой стенке ракетка также присоединяется. |
|||
Сокобан Сокобан - Игра - Автоходы | + 1 | ||
Мониторить код и искать у себя ошибки, будь они неладны... Найти ошибку у себя, из-за которой ходы игрока как буд-то обрывались наполовине. Всё в порядке. |
|||
Сокобан Сокобан - Решалка - Оптимизация | + 10 | ||
Использовать 4-мерные массивы. Я так понял, что он представляет собой перечень комбинаций положений мышки и яблока относительно друг друга в координатах поля (x, y). И высокая скорость его работы состоит в том, что каждый мы не перебираем все варианты (как было до этого со списком List и Dictionary), а смотрим 1 конкретный вариант исходя из наших координат мышки и яблока. Понять как именно мы используем 4-мерный массив. Всё хорошо. Время работы программы при использовании Dictionary было 1500-1600 мс. После применения массива время уменьшилось до 7-11 мс. |
|||
Сокобан Сокобан - Решалка - Яблоко | + 10 | ||
Находить и устранять свои ошибки. Не знаю насколько это сложное, но у меня в итоге тестер при правильном решении выдает в конце надпись "Solution INcorrect", хотя на самом деле все очень даже correct. Думаю, что дело в самом тестере, а не в солвере. Разберусь с этим уже завтра. Всё отлично и замечательно. Приятно видеть результаты своего кодинга, особенно когда эти результаты совпадают с твоими ожиданиями.:) |
|||
Сокобан Сокобан - Решалка - Мышка | + 10 | ||
Как открывать командную строку из определенной папки:))))))) Придумать свой лабиринт. Вот такой кусочек кода map[x, y] = lines[y+1][x] из нашей программы - я так понял он вытягивает x-вый элемент char из y+1-го string-элемента массива lines[]? Т.е. такая конструкция применима для любой переменной string, если мы хотим вытянуть из него определенный по номеру char-элемент? |
|||
Сокобан Сокобан - Решалка - Тестер | + 10 | ||
В принципе ничему новому. Ничего. Непонятен 1 момент - когда мы передвинули "норку" для мышкиного "яблока", и потом мышка двигала "яблоко", то она передвигала его как раз через свою норку в новом месте. И получается, что как бы задача решена - "яблоко" уже в норке, но решение не засчитывается и мышка продолжает его двигать до места, где с самого начала была "норка" до изменения. Я понимаю, что в любом случае программа должна отработать всю последовательность решения из файла Solution.txt, но все же - как-то странно. Видимо, мы этот алгоритм будем ещё совершенствовать. |
|||
Сокобан Сокобан - Игра - Управление | + 10 | ||
Новое применение делегатов увидел. Понимать логику программы во время написания кода. ОООЧень долго приходилось разбираться в том, что именно ты кодишь и почему оно работает, и почему оно работает именно так как ты кодишь.:))) Вообщем, самый трудный урок из всех предыдущих. Всё хорошо, спасибо. |
|||
Сокобан Сокобан - Игра - Интерфейс | + 10 | ||
Нового ничего. Жду использование делегатов - интересно. Ничего сложного. Всё в порядке. |
|||
Сокобан Сокобан - Создаём свои уровни | + 10 | ||
Проявлять фантазию, тесно переплетенную с логикой.:) Придумать свои уровни. Всё ок. |
|||
Сокобан Сокобан - Редактор - Улучшение | + 10 | ||
Нового ничего. Не сразу сработало прямоугольное заполнение лабиринта. Всё ок. |
|||
Сокобан Сокобан - Редактор - Сохранение | + 10 | ||
В принципе ничему новому. Просто пытаюсь абсолютно полностью вникать в логику построения игры и понять логику написания кода этой игры. Выловить ошибку в конце. Всё в порядке, всё хорошо. |
|||
Сокобан Сокобан - Редактор - Редактирование | + 10 | ||
Свойство Tag. Опять же - полностью вникнуть в логику построения программы. В этом уроке мы написали функцию IsGoodLevel() для проверки перед сохранением уровня игры, но так и не использовали её. |
|||
Сокобан Сокобан - Редактор - Интерфейс | + 10 | ||
Работать с новыми контролами на форме. Динамически добавлять pictureBox'ы. Не сразу понял логику расположения pictureBox'ов на панели. Именно саму формулу, по которой они располагаются. В остальном всё ок. И конечно ооооочень долго искал подходящие картинки. Если есть у кого-нибудь какой-нибудь ресурс с большим количеством разных картинок разных размеров, буду признателен если поделитесь. А то рисовать ну очень не хочеться.:) |
|||
Сокобан Сокобан - Редактор - Загрузка | + 1 | ||
Логике построения уровней в игре. Ничего. Хотелось бы увидеть в будущих уроках построение другого редактора уровней в самой игре, а не через файл. В некотором роде в таком подходе получается двойная работа. |
|||
Сокобан Сокобан - Вступление | + 1 | ||
Играть в игру Мир Сокоба. Пройти некоторые уровни. Игру проходил онлайн в инете. Правда, не сделал скрин с последнего уровня. |
|||
Демо игры Игра Быстрощёлк | + 1 | ||
Отличию между событиями mouseClick и mouseDown. Свойству DateTime.Now.Ticks и функции TimeSpan.FromTicks(). Сложного, в принципе, ничего не было. Неизвестным было то, чем научился на уроке. Всё в порядке. Рекорд - 22,3 клика в секунду. |
|||
Демо игры Лабиринт 2D - игра | + 2 | ||
Загружать новые формы, работе с событиями mouseEnter и mouseLeave. Придумать логику для третьего (своего) уровня лабиринта. И, собственно говоря, реализовать её. Долгая кропотливая работа была с кучей разных лейблов. Всё замечательно. Меня всё устраивает.:) |
|||
Демо игры Лабиринт 2D - меню | + 10 | ||
Подключать звуки к контролам на форме. В принципе ничего. Всё хорошо. |
|||
Демо игры Картинка с секретом | + 1 | ||
Расширил свои познания об инфраструктуре VS. Ничего сложного. Всё в порядке. Задание хорошее, видео хорошее, подробное. |
|||
Демо софт Вступительное слово | + 10 | ||
Делать "скриншот" без рабочего стола:) Вспомнить и найти свою последнюю программу. Это мне так и не удалось сделать. Надеюсь, в ближайшем будущем найду её и выложу её (программы) скриншот. Начало как минимум интригующее. Идеи, заложенные в основу процесса обучения, интересные и (!!!ГЛАВНОЕ!!!) с основополагающим практическим подходом! |
|||
Нано-игры Скорость реакции. Блок-схема | |||
|