Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Профессиональное программирование


Информационный Канал Subscribe.Ru

В начало Клуб программистов Весельчак У Связаться со мной
a

Доброго дня...

Извинюсь в первую очередь перед теми, кто потратил много времени в поисках конпки для голосования. На движке форума голосовать анонимно оказалось невозможно :( Это расстроило меня но голоса многие отдали просто написав слово "да" в ответе. Поэтому такое голосование продолжается.

На данный момент из 13 000 проголосова 200 человек. Сами понимаете кворума так не наборать, но голосование я оставлю на неделю, дабы все кто может и хочет, смогли отметится в теме. Просто слова "да" будет достаточно...

Анализ всего я проведу по окончании всего процесса, а сегодня продолжение статьи "Советы по Windows"

Советы по Windows 7.3

Автор: Гром

4. Алгоритм.

Вернемся в начало и вспомним какие типы действий у нас были.

Начнем работу с отработки действий, коорые не зависят от пользователя и будут отрабатываться самостоятельно.
Возьмем наш объект 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:

void CreateBaseTetris(CDC * pDC);
void DestroyBaseTetris();

Первая естественно будет работать для создания базового поля вторая для его уничтожения...

Вот код...
void ATetris::CreateBaseTetris(CDC * pDC)
{
m_Place.CreateBasePlace(pDC);

}

void ATetris::DestroyBaseTetris()
{
m_Place.DestroyBasePlace();
}

Собственно все :). Ведь мы уже позаботились о том, что мы инициализируем и как еще при работе с APlace. Теперь нам в алгоритме надо позаботиться о вызове методов не более...

Очень нужная нам функция...

public:

CDC * GetTetrisDC(void);


CDC * ATetris::GetTetrisDC()
{
return m_Place.GetBaseDC();
}


Опять как видите запрос к APlace. Таким образом работа объекта ATetris - служить фильтром между данными и програмным интерфейсом, обеспечивая работу алгоритма.
Что собственно и требовалось доказать.

Если вы пойдете глубже то поймете, что мы возвращаем m_showDC - т.е. сформированный к показу на экране кадр...

Статья полностью: http://club.shelek.com/viewart.php?id=231

 

С уважением, Гром.

 

 


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.compu
Отписаться

В избранное