
Научился: Находить и исправлять недоделки в приложении. Проявлять фантазию))). Познакомился с сериализацией и десериализацией - ничего сложного и очень понравилось. Также могу сказать, что я понял одно из применений делегатов на практике.
Трудности: Самым сложным оказалось окончательно реализовать идею сохранения результатов игры. Подробности ниже:).
Что сделал/изменил в программе:
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 строчку написал - и теперь тебе всё равно на любые изменения с полем игры - всегда будет красиво и аккуратно.