ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Допомога в навчанні програмуванню
         

     

    Інформатика, програмування

    Наша пропозиція для тих, хто хоче навчитися програмувати на Delphi,вивчаючи исходники інших програм!
    Ви можете безкоштовно завантажити саму гру (Тетріс), але зобов'язані заплатити 5доларів за исходник програми. Ви отримуєте повний текст програми на
    Delphi і коментарі до неї! Всього за 5 доларів ви зможете вивчити текстнайвідомішої програми і зрозуміти, як створюються ігри, такі як Tetris!
    Ми дамо вам математичний алгоритм програми! Тепер ви станете набагатодосвідченіше і зможете самостійно створювати програми і заробляти на цьомугроші як в реальному житті, так і в інтернеті!
    Уникайте своїх помилок, ми навчилися правильно програмувати і допоможемо

    навчити цьому вас!www.tetriswithsource.com
    Опис модулів
    TetrisP - Основний файл проекту
    Tetris00 - Модуль містить основну форму проекту (TMainForm). Виробляєзв'язку між натисканням гарячих клавіш і кнопок панелі управління з викликомпроцедур обробки відповідних подій знаходяться в модулі Tetris02 івикликам процедур промальовування поля.
    Tetris01 - Модуль містить визначення осередку поля (TFieldCell), як записипро колір і номер відображається в комірці текстури. А також реалізаціюігрового поля (клас TField) - дозволяє проводити відображення інайпростіші операції над ігровим полем.
    Tetris02 - Модуль містить реалізацію алгоритму гри (клас TTetrisGame),обробляє події від таймера, веде статистику (час гри, кількістьвипущених фігур, віддалених ліній). Створює фігуру випадковим чином фігуруяка буде активною протягом наступного проміжку часу і виробляєз нею безпосередню взаємодію. Відловлює всі логічні помилкищо відбуваються під час гри і пов'язані наприклад зі спробою запустити вжеактивну гру.
    Tetris03 - Модуль містить методи по роботі з усіма фігурами використовуванимив проекті і враховує всі їх особливості реалізації. (класи фігур
    TXXXXFigure).
    Tetris04 - Модуль містить визначення констант використовуються в програмі іпроцедуру генерації кольору випадковим чином з урахуванням того, що колір неповинен буде зливатися з порожньою осередком поля.
    Tetris05 - Модуль містить форму налаштувань (TOptionsForm) дозволяєвідображати список існуючих фігур читати і встановлювати їх властивість
    Enabled.
    Tetris06 - Модуль містить визначення структури (TFigureInfo) для зберіганнянеобхідної інформації про існуючу фігурі, масив записів цього типу зописом всіх фігур проекту (для можливості відображення у формі налаштуваньі вибору фігури випадковим чином), а також методи з доступу до цих даних
    Tetris07 - Модуль забезпечує багатомовну підтримку. Він містить у собівизначення всіх рядкових констант використовуються в повідомленнях проекту ідозволяє створювати здійснимих файл з повідомленнями як англійською так іросійською мовою.

    Опис класів
    TMainForm - клас основної форми проекту. Включає в себе такі об'єкти,як
    | MainToolBar | панель інструментів | Розташована на формі в правій частині і |
    | | (TToolBar *) | містить у собі набір кнопок (btnXXXX) |
    | btnXXXX | кнопки (TButton *) | Розташовані на панелі інструментів і |
    | | | Призначені для зручного виклику заданих |
    | | | Процедур |
    | MainImageList | список зображень | Містить зображення іконок використовуваних |
    | | (TImageList *) | кнопками (btnXXXX) |
    | MainActionList | список дій | Містить перелік дій (actXXXX) |
    | | (TActionList *) | використовується програмою |
    | actXXXX | дії (TAction *) | Призначена зв'язку кнопок (btnXXXX), |
    | | | Гарячих клавіш і виклику заданих процедур |
    | MainPanel | панель (TPanel *) | Розташована у верхній частині форми і |
    | | | Призначена для висновки статистичної |
    | | | Інфорамціі (час, кількість фігур, |
    | | | Кількість віддалених ліній) в процесі гри |
    | MainImage | зображення | Розташоване в центральній частині форми і |
    | | (TImage) * | призначена для показу ігрового поля на |
    | | | Екрані. (Але не його промальовування!) |
    | MainStatusBar | рядок стану | Розташована в нижній частині основної форми, |
    | | (TStatusBar) * | призначена для відображення статусу ігри |
    | | | (Активна, призупинено, закінчена й |
    | | | Т.д.) і підказки для кнопок над якими |
    | | | Знаходиться маніпулятор миша |
    | fReg | реєстр | Призначена для роботи з реєстром - |
    | | (TRegistryDef *) | збереженням настройок програми між |
    | | | Сеансами роботи |
    | fField | ігрове поле | Реалізує зберігання логічної інформації про |
    | | (TField) | стан поля і його промальовування тобто висновок |
    | | | В зображення (TImage) |
    | fOptionsForm | форма налаштувань | Призначена для можливості вибору фігур |
    | | (TOptionsForm) | використовуються у програмі |
    | fGame | гра (TTetrisGame) | Реалізує алгоритм ігри |


    (* - Позначені стандартні об'єкти Delphi)

    TFieldCell - запис містить інформацію про кожному осередку ігрового поля.
    | Color | longint | Колір у клітинці якщо не використовується |
    | | | Текстура |
    | FigureNum | integer | Номер фігури яка потрапляє в дану |
    | | | Клітинку. 0 - якщо фігури немає |
    | TextureNum | smallint | Номер текстури в комірці. Негативні |
    | | | Числа відповідають текстурам бомб |

    TField - клас ігрове поле. Включає в себе такі об'єкти, як
    | fBomb | Список об'єктів | Призначений для зберігання списку текстур |
    | | (TObjectList) | бомб |
    | fTexture | Список об'єктів | Призначений для зберігання списку текстур |
    | | (TObjectList) | непустих клітин |
    | fImage | Зображення (TImage) | Призначено для зберігання покажчика на |
    | | | Зображення основної форми |
    | fFieldMatrix | Матриця | Призначена для зберігання масиву з |
    | | (TFieldMatrix) | даними типу TFieldCell про клітини. |

    поля:
    | fFieldSize | Розмір чарунки | Зберігає розмір комірки поля у пікселях |
    | | (Integer) | |

    властивості:
    | FieldCountX | Число осередків по X | Дозволяє визначити розмір поля в |
    | | (Integer) | кількості клітинок уздовж X |
    | FieldCountY | Число осередків по Y | Дозволяє визначити розмір поля |
    | | (Integer) | пристосований для гри в кількості |
    | | | Осередків уздовж Y * |
    | FieldRealCountY | Число осередків по Y | Дозволяє визначити фактичний розмір |
    | | (Integer) | поля в кількості клітинок уздовж Y |
    | FieldVisibleCountY | Число осередків по Y | Дозволяє визначити видимий розмір поля в |
    | | (Integer) | кількості клітинок уздовж Y |


    * Фактично розмірність масиву по X збігається з тим що відображається наекрані, по Y ситуація інша. Фактично в пам'яті поле представлено по Y звеликим розміром (+ ReservedLines). Це викликано необхідністю зберігатидані про фігуру яка тільки почала падати і знаходиться поза межамивидимості у вірних рядках і тим що саме по зайнятості хоча б однієїосередку верхніх ReservedLines строк визначається закінчена гра чи ні.
    Фактичний розмір визначається FieldRealCountY, допустимий для знаходженняфігур FieldCountY. У той же час на екрані може відображатися будь-яке числострок від 1 до FieldRealCountY. Тому є ще одна властивість
    FieldVisibleCountY, що якраз і визначає, скільки рядків виднокористувачеві. Зокрема цей момент використовувався при налагодженні - коли наекрані було все поле цілком, фігура починала падати не з самого верху ігра закінчувалася коли постать застрявала на верхніх ReservedLinesрядках, а не обов'язково досягнувши верхньої межі.методи:
    | ClearAll | Очищення ігрового поля, шляхом занесення 0 в усі |
    | | Комірки |
    | ClearCell (x, y: integer) | Очищення комірки (x, y) шляхом занесення 0 в цю комірку |
    | SetAtCell (x, y: integer; const | Установка в клітинку (x, y) значення Cell. Тобто |
    | Cell: TFieldCell) | логічне отримання зайнятої комірки |
    | GetAtCell (x, y: integer) | Отримання значення з комірки (x, y) |
    | ClearAt | Визначає чи вільна комірка (x, y) логічно і якщо |
    | (x, y: integer; CurCell: PFieldCel | зазначений CurCell то осередок вважається вільною навіть |
    | l = nil) | коли там знаходиться значення збігається з CurCell. |
    | DelFullLine | Видалення однієї з повністю зайнятих рядків. |
    | IsOverflow | Перевірка на переповнення. Переповненим полем |
    | | Вважається поле для якого хоча б один осередок |
    | | Верхніх ReservedLines зайнята |
    | DeleteFigure (FigureNum: integer | Видалення з поля фігури з номером FigureNum. |
    |) | Використовується при падінні Бомби-2 |
    | DrawToImage | Промальовування поточного стану поля |

    Гра може знаходиться в одному з логічних станів:
    | gmNothing | Гра не розпочато |
    | gmActive = 1 | Гра йде |
    | gmSuspend = 2 | Гра призупинена |
    | gmEnded = 3 | Гра завершена |
    | gmAborted = 4 | Гра перервана користувачем |
    | gmGraphicErr | Гра завершена з помилкою під час малювання |
    | or | |
    | gmCreateFigu | Гра завершена з помилкою створення фігури |
    | reError | |

    TTetrisGame - клас реалізує алгоритм гри. Включає в себе такіоб'єкти, як:
    | fFiguresEnum | керування набором | Реалізує зберігання і доступ до масиву |
    | | Фігур | існуючих фігур |
    | | (TFigureEnumManager) | |
    | fField | ігрове поле | Призначено для зберігання покажчика на |
    | | (TField) | об'єкт ігрове поле |
    | fCurrentFigure | поточна фігура | Призначено для зберігання покажчика на |
    | | (TBaseFigure) | поточну фігуру і проведення з нею будь-яких |
    | | | Операцій типу обертання |
    | fTimer | таймер (TTimer *) | Призначений для появи подій в |
    | | | Програмі через певний проміжок |
    | | | Часу, щоб реалізовувати переміщення |
    | | | Фігури |

    поля:
    | fQuickCoef | коефіцієнт | Призначено для зберігання коефіцієнта, |
    | | Прискорення (integer) | який використовується при прискореному |
    | | | Падіння фігури при натисканні клавіші |
    | fInProcess | статус гри (byte) | Призначено для зберігання статусу ігри |
    | fFigNum | кількість фігур | Призначено для зберігання числа |
    | | (Integer) | випущених фігур і відображенні в |
    | | | Статистики |
    | fTimerClicks | час гри (integer) | Призначено для зберігання часу гри і |
    | | | Відображення у статистиці |
    | fDeletedLines | число віддалених | Призначено для зберігання числа віддалених |
    | | Ліній (integer) | ліній і відображення у статистиці |
    | fOldTimer | інтервал таймера | Інтервал таймера до прискорення або 0, якщо |
    | | (Integer) | таймер знаходиться не в прискореному режимі |

    події:
    | TimerTick (Sender: TObject) | Подія від таймера. Відбувається через заданий |
    | | Інтервал часу |

    методи:
    | SetInProcess (AInProcess: byte) | Встановлення статусу гри. Використання даного |
    | | Методу, а не безпосередній доступ до поля |
    | | Гарантує встановлення лише допустимих значень і |
    | | Своєчасне зміна рядка статусу в основний |
    | | Формі |
    | LogicalError (ErrMsg: PChar) | Викликається при необхідності повідомити користувачеві про |
    | | Сталася логічної помилку |
    | InitCurrentFigure; | Створення поточної фігури випадковим чином. Покажчик |
    | | На поточний фігуру залишається в fCurrentFigure |
    | Start | Запуск гри або продовження після припинення |
    | Stop | Зупинка ігри |
    | Pause | Призупинення ігри |
    | NotActive: boolean | Перевіряє не перебувати чи гра в стані ігор, |
    | | Якщо так видається повідомлення |
    | IsGoing (ShowMsg: boolean = true) | Перевіряє не активна чи гра. якщо немає і ShowMsg то |
    | | Видається повідомлення |
    | ClearAll | Виклик очищення ігрового поля, обнулення fFigNum, |
    | | FDeletedLines, fTimerClicks |
    | GetTextStatus: string | Отримання статистики по грі в текстовому вигляді для |
    | | Виведення на екран |
    | RotateAgainst | Перевірка активна чи гра і чи є поточна фігура, |
    | | Якщо так то відбувається поворот фігури |
    | RotateAlong | |
    | MoveLeft | Перевірка активна чи гра і чи є поточна фігура, |
    | | Якщо так то відбувається зсув фігури |
    | MoveRight | |
    | GetInfo | Отримання статусу гри в текстовому вигляді для |
    | | Відображення в рядку статусу |
    | DoFall | Реалізація методу падіння (викликається по клавіші |
    | | Вниз) |
    | StartQuickFall (Quick: boolean = t | Якщо Quick то його встановлення режиму прискореного падіння, |
    | rue) | немає повернення до звичайного |


    * Основними процедурами є: TimerTick, DoFall
    | TimerTick | Реакцію на подію від таймера можна представити |
    | | Таким чином: |
    | | Перевірити є поточна фігура |
    | | Assigned (fCurrentFigure) |
    | | Якщо є перевірити чи може вона зрушити на |
    | | Клітку вниз fCurrentFigure.CanDown |
    | | Якщо може, то зрушити fCurrentFigure.Down |
    | | Інакше обробляємо ситуацію впав (для бомб падіння |
    | | Передбачає очищення інших осередків поля) |
    | | FCurrentFigure.Falled |
    | | Якщо ні, то перевіряється заповненість хоча б однієї |
    | | З ліній поля повністю |
    | | Якщо така знаходиться то вона видаляється |
    | | FField.DelFullLine |
    | | Інакше перевіряється заповненість осередків з вірних |
    | | Рівня fField.IsOverflow |
    | | Якщо хоча б одна зайнята - гра закінчується |
    | | Інакше створюється чергова фігура випадковим чином |
    | | InitCurrentFigure |
    | DoFall | Реакцію на подію від користувача "відпускання |
    | | Фігури "можна представити наступним чином: |
    | | Перевірити є поточна фігура |
    | | Assigned (fCurrentFigure) |
    | | Якщо є то поки вона може рухатися вниз |
    | | (FCurrentFigure.CanDown) |
    | | Зрушувати її вниз (fCurrentFigure.Down) |
    | | Обробляємо ситуацію впав (для бомб падіння |
    | | Передбачає очищення інших осередків поля) |
    | | FCurrentFigure.Falled |
    | RotateAgainst, RotateAlong | Реакцію на подію від користувача "поворот фігури" |
    | | Можна представити наступним чином: |
    | | Перевірити чи йде гра і є поточна фігура IsGoing |
    | | And Assigned (fCurrentFigure) |
    | | Якщо є то повернути фігуру |
    | | FCurrentFigure: = fCurrentFigure.Rotate |


    При виконанні перерахованих операцій з фігурою абсолютно не важливо якавона насправді. Операції проводяться з базової фігурою, яка маєлише методи за своїм повороту, зрушення. Реалізація всіх цих дійвиконується в нащадках об'єкта базова фігура (TBaseFigure), перерахованихнижче. У нащадків навіть приходиться лише правильно визначити координатищодо базової точки, інше зробить TBaseFigure!
    TBaseFigure - клас базова фігура дозволяє задати обриси фігури іметоди по її переміщення, повороту. Включає в себе наступні поля
    | Cell | комірка (TFieldCell) | Опис основного осередку - колір, текстура, |
    | | | Номер що знаходиться в ній. |
    | Xbase | координата по X | Координати базової точки фігури на поле |
    | | (Integer) | |
    | Ybase | координата по Y | |
    | | (Integer) | |
    | DownLimit | відступ знизу | Відступи вниз, вліво, вправо від базової |
    | | (Integer) | точки до кордонів фігури, щоб не вилазити |
    | | | За межі поля при переміщенні. Тобто |
    | | | Загальні контури фігури завжди |
    | | | Прямокутник. Конкретно які клітинки вона |
    | | | Займає в цьому просторі опредялются |
    | | | Для нащадків індивідуально |
    | RightLimit | відступ справа | |
    | | (Integer) | |
    | LeftLimit | відступ зліва | |
    | | (Integer) | |

    методи:
    | Rotate (AlongClock: boolean) | Реалізує поворот фігури за або проти годинникової |
    | | Стрілки |
    | CanDown | Визначає - чи може фігура впасти на одну клітку |
    | | Вниз |
    | Down | Реалізує фактичного падіння фігури |
    | Move (Left: boolean; AField: TFiel | Реалізує фактичне переміщення фігури праворуч або |
    | d) | вліво. |
    | Falled | Реалізує реакцію після того, як постать впала. |
    | | Перекрито у бомбі і очищає клітку під нею |
    | MakeCurrent | Реалізує фактичне малювання фігури на поле |
    | IsEmptyCell | Визначає чи вільна клітина (i, j) на поле |
    | IsEmptyAndOnFieldCell | Визначає чи входить клітка (i, j) на полі і вільна |
    | | Чи вона. При такому підході працює швидше ніж два |
    | | Виклику - окрема процедура "чи входить на поле" і |
    | | "Вільна чи вона" |
    | ClearCell (i, j: integer) | Реалізує очищення однієї клітини (i, j) належної |
    | | Фігурі |
    | FillCell (i, j: integer) | Реалізує малювання в певну клітину (i, j) |
    | AfterInit | Забезпечує можливість зміни полів успадковане |
    | | Фігури |
    | CheckEach (Proc: TCheckProc; Xabs | Конкретно визначає які комірки використовуються |
    |, Yabs: integer) | фігурою. Процедура обов'язково перекривається в |
    | | Нащадках. |
    | ClearCurrent | Забезпечує стирання фігури з поля (перед кроком |
    | | Вниз/вліво/вправо/падіння) |
    | GetTwinFigure (AlongClock: boole | Забезпечує отримання фігури-близнюка. Т.е той |
    | an) | фігури, яка виходить після повороту даної під |
    | | Кутом 90 або -90 градусів. Перекрито в конкретних |
    | | Нащадках. Якщо ні, то поворот не здійснюється. |
    | | Наприклад для квадрата. |
    | SetBaseCell | Забезпечує встановлення конкретного номера текстури в |
    | | Нащадку, таким чином забезпечується одна фігура, |
    | | Один колір. |


    Основними методами є
    | Rotate | Отримати фігуру близнюк. (GetTwinFigure) |
    | | Якщо фігура близнюк є (TwinConstructornil) |
    | | То створюємо фігуру близнюк на основі своїх параметрів |
    | | TwinConstructor.CreateTwin |
    | | Перевіряємо не залазить чи створена фігура на клітини |
    | | Зайняті іншими фігурами Twin.CheckEach |
    | | Якщо не залазить то |
    | | Очистити всі клітини зайняті поточної фігурою |
    | | (ClearCurrent) |
    | | Намалювати у всі клітки фігури близнюка |
    | | (Twin.MakeCurrent) |
    | | Повернути як результат виконання функції |
    | | Створеного близнюка (Rotate: = Twin) |
    | | Звільнити ресурси зайняті поточної фігурою (Free) |
    | | Інакше якщо залазить то видалити створеного близнюка |
    | | (Twin.Free) |
    | | Повернути як результат виконання функції себе, |
    | | Так поворот не вдався і постать падає в колишньому вигляді |
    | | (Rotate: = self) |
    | CanDown | Перевірити не виходить чи нижня межа фігури за |
    | | Межі поля (Ybase> DownLimit) і перевірити не |
    | | Потрапляють чи в разі переміщення вниз клітини даної |
    | | Фігури на клітини іншої фігури |
    | | CheckEach (IsEmptyCell, Xbase, Ybase-1) |
    | Down | Очистити всі клітини зайняті фігурою (ClearCurrent) |
    | | Зменшити координату по Y базової точки |
    | | Намалювати у всі клітки фігури (MakeCurrent) |
    | Move | Якщо рух фігури наліво |
    | | Перевірити не виходить чи ліва межа фігури за |
    | | Межі поля (Xbase> LeftLimit) і перевірити не |
    | | Потрапляють чи в разі переміщення клітини даної |
    | | Фігури на клітини іншої фігури |
    | | CheckEach (IsEmptyCell, Xbase-1, Ybase) |
    | | Якщо не потрапляє то |
    | | Очистити всі клітини зайняті фігурою (ClearCurrent) |
    | | Зменшити координату по X базової точки |
    | | Намалювати у всі клітки фігури (MakeCurrent) |
    | | Якщо рух фігури направо |
    | | Перевірити не виходить чи права гра?? Особи фігури за |
    | | Межі поля (Xbase

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status