Извинюсь в первую очередь перед теми, кто потратил много времени в поисках конпки для голосования. На движке форума голосовать анонимно оказалось невозможно :( Это расстроило меня но голоса многие отдали просто написав слово "да" в ответе. Поэтому такое голосование продолжается.
На данный момент из 13 000 проголосова 200 человек. Сами понимаете кворума так не наборать, но голосование я оставлю на неделю, дабы все кто может и хочет, смогли отметится в теме. Просто слова "да" будет достаточно...
Анализ всего я проведу по окончании всего процесса, а сегодня продолжение статьи "Советы по Windows"
Вернемся в начало и вспомним какие типы действий у нас были.
Начнем работу с отработки действий, коорые не зависят от пользователя и будут отрабатываться самостоятельно. Возьмем наш объект ATetris и опишем его задачи.
а) старт игры. б) выкладывание случайного нового элемента в стакан. в) сдвиг текущего элемента вниз с проверкой на уже окончательного достижения позиции в стакане. г) проверка на наличие заполненных линий в стакане и их стирание с последующим перемещением всего содержимого стакана.
Опишем старт игры. Для нее нам понядобятся следующие данные, дабы оптимизировать процесс старта.... Добавим: private: bool IsStart; // флаг стартовала игра уже или нет. int start_x,start_y; // стартовые значения для левого верхнего угла нового блока. int current_position; // позиция текущего блока (степень
его повернутости).
Если вы помните у нас есть все 4 позиции каждого блока, изначально она нулевая, и меняется в зависимости от колличества нужных поворотов. int current_block; // собственно номер текущего падающего блока в массиве ABlock объектов. int LinesOut[MAXY]; // Массив для обнаруженных полных линий. Его необходимость станет понятна чуть позже. int Error_subject; // виды ошибок при выходе из рабочих процедур. Похоже на LastError в Windows unsigned int Points; // Очки набранные игроком unsigned int Timeout; // текущий таймаут между шагами игры. unsigned int Level; // текущий уровень - ищначально 0.
Добавим теперь две первые после инициализации, функции public:
Собственно все :). Ведь мы уже позаботились о том, что мы инициализируем и как еще при работе с APlace. Теперь нам в алгоритме надо позаботиться о вызове методов не более...
Опять как видите запрос к APlace. Таким образом работа объекта ATetris - служить фильтром между данными и програмным интерфейсом, обеспечивая работу алгоритма. Что собственно и требовалось доказать.
Если вы пойдете глубже то поймете, что мы возвращаем m_showDC - т.е. сформированный
к показу на экране кадр...