Курсы по программированию

Формула программиста
основатель — Волосатов Евгений Витольдович
Вебинар «Мастер-класс. Как стать высокооплачиваемым программистом.» начнётся через 2 дня 22 час. 46 мин.

Шарики / Шарики. Поиск линий

  • Реализация последнего алгоритма.
    Поиск линий из 5+ шариков и анимация их удаления.
  • Дата отправки отчёта: 11 февраля 2016 г.
  • Задание выполнено: за 2 час. 00 мин.
  • Чему научился: Научился проверять наличие шариков одного цвета, стоящих в ряду, удалять шарики с анимацией в 4 шага.

  • Что было сложным: В основном, все было понятно.
  • Комментарии: Большое спасибо! Замечаний нет.
  • Оценка видео-уроку:
Отчёт от 7645 за Шарики / Шарики. Поиск линий




Оцени работу

 
Сохранить страницу:

  • Отчёт оценивали:
    7645Александр Львович+1   8886Михаил Ермишин+1   5760Мариша +1   6925Артём+1   2639Морозов Юрий Александрович+1   7157muxasio+1   8275Tekashnik+1   6195sergey+1   4395Денис+1   459Сергей Сергеевич+1   3747Сергей+1   8946inward+1   7276Ильшат+1   4467Alcatraz+1   1Евгений Волосатов+1   4992Николай+1   9160Сергій+1   6271Olly+1   3664данила+1   689Igorenzia+1  

Начинаем практику по языку 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, и во внешний файл таблица рекордов записывается в виде потока байтов, что в самом файле выглядит в виде набора шестнадцатеричных чисел. Т.е. особо такой файл не подделаешь. Так, что я очень доволен своей работой!:)))
Научился: Разбираться в ранее написанном коде и доводить дело до конца
Трудности: Запись результатов в файл. Ну на самом деле не сложно просто хотелось поместить файл в ресурсах. Нашел как правильно указать к нему путь но вот тут загвоздка. Из ресурса можно только читать, но не записывать так как программа в режиме дебага находится. Так что пришлось делать по старинке - заносить текстовый файл в папку с exe'шником
Добавил счетчик мячиков на поле, подсчет очей ( пришлось придумать формулу для расчета потому что в алгоритме программы находит пары по 5 мячей и потом суммирует их. то есть если всего в ряд 8 мячей то считает 20. вот для этого нужно было придумать метод подсчета). Добавил кнопку "Undo" - возвращает поле в положение предыдущего хода (не корректно работает если была удалена линия - не возвращает её на место, только мелкие шарики и последний перемещенный). Добавил статистику. При окончании игры результат автоматически записывается в файл и при нажатии S либо выбора пункта в меню выводятся все результаты которые были наиграны за время существования файла. При удалении файла не будет ошибки дебага т.к. он тут же создастся правда пустой. Ну и кнопка "New Game" | N - возвращает поле в исходное положение. Все очки будут утеряны и результат не появится в статистике. Крутая игрушка. На порядок выше написанных ранее.