Вгадай слово

Інформація про навчальний заклад

ВУЗ:
Національний технічний університет України Київський політехнічний інститут
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2011
Тип роботи:
Курсовий проект
Предмет:
Програмування та алгоритмічні мови

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ «КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ» Інститут прикладного системного аналізу Кафедра математичних методів системного аналізу КУРСОВИЙ ПРОЕКТ З дисципліни «ПРОГРАМУВАННЯ ТА АЛГОРИТМІЧНІ МОВИ» На тему «Вгадай слово» Перевірив Анотація Розроблений продукт є ігровою програмою, побудованою на правилах загальновідомої гри «Вгадай слово». Ця гра дуже поширена в студентських колах, але зазвичай в неї грають за допомогою паперу,олівця та наявності, як мінімум двох гравців, так як один загадує слово, а іншій вгадує. Мій програмний продукт дає можливість поринути у світ даної гри та самому грати в неї. Тим паче, мій програмній продукт не потребує великих потужностей комп’ютера и може працювати майже на будь-якому комп’ютері. Даний програмній продукт був розроблений на мові Pascal в середовищі Free Pascal 2.4.2. Зміст Вступ …………………………………………………………………………. 4 Основна частина Постановка задачі ………………………………………………………. 5 Метод розв’язку задачі …………………………………………………. 7 Опис алгоритму ……………………………………………………….. 10 Опис програми ………………………………………………………… 12 Опис інтерфейсу ………………………………………………………. 18 Висновки …………………………………………………………………… 23 Список використаної літератури …………………………………………. 25 Додаток A. Лістинг програми ……………………………………………….. 26 Вступ Основною задачею курсової роботи є реалізація програми-симулятора гри «Вгадай слово» . «Витоки гри «Вгадай слово» неясні, але, схоже, виникли у вікторіанську епоху», говорить Тоні Аугарже, автор книги " Керівництво по світовим іграм"(Oxford University Press). Гра згадується у Еліс Берта Гомме "традиційного гри" в 1894 році під назвою"Птахи, звірі і риби". Правила прості, гравець записує перші і останні букви словадля тварин, і інший гравець здогади літер між ними. В інших джерелах гра називається «Шибениця» або «вішалка». Шибениця була представлені в 1978 на Speak & Spell під назвою "ТаємницяСлова". Зараз існує чимало аналогів даної програми. Однак вони або реалізовані на інших мовах програмування з використанням складних алгоритмів, або ж розроблені на мові Pascal на доволі низькому рівні, тобто містять лише безпосередньо спрощений алгоритм гри без будь-яких необхідних ігрових функцій. Такі програми не дозволяють користувачу повноцінно відчути усю красу та захоплення від гри. Представлена робота має необхідні стандартні функції, притаманні більшості найвідоміших комп’ютерних ігор. Зокрема, це можливість продовжувати гру після її переривання, також за рахунок того, що в моєму програмному продукті реалізована можливість зчитувати данні з текстових файлів, то будь-який користувач може налаштувати цю гру під себе. Змінювати можна майже все, починаючи від кольору ліній та заливки закінчуючи розмірами букв, форм так інших речей. Також реалізована можливість задавати будь-який алфавіт для вгадування слова. Але найголовніше те, що всі ці маніпуляції можливо робити навіть не знаючи мови програмування. Аналогів даної програмами з такою реалізацією, мною не було знайдено. 2.1. Постановка задачі Постановка задачі полягає у створенні програми-симулятора реальної гри «Вгадай слово». Правила головоломки надзвичайно прості та інтуїтивно зрозумілі: Треба прочитати питання і вводити літери по одній; Якщо в слові є дві однакові літери, комп’ютер самостійно вводить її необхідну кількість, тобто Вам не треба вводити її самостійно декілька разів; Якщо ви помиляєтесь, починає малюватись малюнок; Ви маєте право допустити 7 помилок, якщо їх більше, в цьому разі ви програєте. Головною задачею користувача є за найменшу кількість кроків вгадати задане слово. Для кожного слова є своє власне пояснення чи питання «Що це?». Питання можна створювати самому та доповнювати бібліотеку. У разі, якщо користувач вийде з програми, не вгадавши слово до кінця, під час наступного запуску йому буде запропоновано продовжити розпочату гру (зі збереженням кількості ходів) або ж почати нову гру. У даному програмному продукті для користування використовуються клавіші клавіатури, насамперед клавіші курсора та ENTER. Таке керування на мою думку доволі просте і не викличе труднощів при роботі з програмою. Для реалізації програмного продукту використано операційну систему Windows 7 та середовище програмування Free Pascal. 2.2. Метод розв’язку задачі Дана програма є консольним додатком виконаним у середі розробки Free Pascal. Графічна оболонка реалізується з використанням допоміжного модуля Graph. Інтерфейсна частина гри виконана для клавіатури. Програма відповідно реагує на натиснення клавіш, обрання пунктів меню а також певних подій у грі. Наприклад, при правильному виборі букв програма сповіщає про перемогу. Для зручного розв’язку задачі її алгоритм було розбито на декілька модулів, що дозволяє використовувати окремі функції та процедури цих модулів і в інших програмах. Процедури та функції модулів безпосередньо пов’язані з тим, яку роль вони відіграють у розв’язку задачі та у якому місці алгоритму мають використовуватись. Велика кількість модулів в даному програмному продукті пов’язана з тим, що розв’язок даною програми побудована не стандартним шляхом. Тобто дана програма реалізована не для одного окремого випадку а може змінюватися, модернізуватися виходячи з його уподобань. 2.3. Опис алгоритму 2.4. Опис програми Програма Main є основною. Вона об’єднує роботу модулів та виконує почерговий виклик необхідних процедур та функцій з метою реалізації гри «Вгадай слово». Опис типів та змінних головної програми (файл main.pas): Усі типи, необхідні для роботи програми, оголошуються в модулях UManager, UMenu, UAbout. Menu^.Load('Data\Menu')- завантажує всі пункти меню Menu^.CompMountEnabledSingle(1,1)- робить активним першу кнопку. Manager^.Load('Data\Manager');- завантажує з дерик торії всі потрібну інформацію для роботи самої програми. About^.Load('Data\About');- завантажує файли атриббутов и сам текс в підменю About(інформація про автора). Menu^.Act(Manager,About)- виконую ту чи іншу дію при виборі певної кнопки. Модуль UCoord-даний модуль створений для визначення координат по Х та Y X, Y: word; - змінні для відповідних координат х та у procedure MountXY(const iX, iY: word);встановлення координат procedure TCoord.Load(Path: string); завантажуе координати с файла path Модуль UPoint- створює точку для того щоб потім для інших об’єктів зробити данну точку предком и наслідувати її в інших модулях procedure TPoint.MountParentColor(const iParentColor: word) задає так званий батьківський колір, тобто колір для того об’єкту який знаходиться на задньому фоні function TPoint.GetVisible: word; функція повертає видимість об’єкта. procedure TPoint.MountEnabled(const iEnabled: word); гамма кольорів видимої кнопки procedure TPoint.Load(Path: string); завантажує із файлу координати використовуючи модуль-предок UCoord и встановлює значення для відображення певного об’єкту . procedure TPoint.MoveTo(const iX, iY: word); прячу видимий об’єкт перемішаю та знову показую. function TPoint.MountInheritorsVisible: word;ховаю передній фон и задаю в нащадки що parentvisible схован procedure TPoint.DrawOut; виводить на екран об’єкт в залежності від того був відображений об’єкт чи ні. Модуль UTextAttr - створений для визначення, обробки та створення різних атрибутів тексту Font, Direction, Size, Color, AllignX, AllignY: word; Шрифт, напрямок,розмір, колір, горизонтальне, вертикальне вирівнювання. procedure TTextAttr.Load(const FileName: string); - завантажує з текстового файла всі потрібні атрибути текста. procedure TTextAttr.Apply –застосовуемо атрибути тексту procedure TTextAttr.ReNil; - обнуляемо всі атрибути SetTextJustify(AllignX,AllignY);- параметри виведення текста відносно координат х та у. Модуль UFillAttr- створений для визначення, обробки та створення різних атрибутів заливки Pattern,: word узор(тип) заливки procedure TFillAttr.MountPattern(iPattern: word) – для створення власних ліній для стандартніх 1 procedure TFillAttr.Load(const FileName: string); завантажує з текстового файла всі потрібні атрибути заливки. procedure TFillAttr.Mount(const iPattern, iColor: word);- привласнюе Pattern := iPattern; Color := iColor; Модуль ULineAttr- створений для визначення, обробки та створення різних атрибутів ліній. Thickness :word; змінна яка визначає товщину ліній SType: word; визначае тип ліній Всі процедурі аналогічні модулю UFillAttr, тільки зараз розроблено для ліній. Модуль UDim. Створений для задання розмірів об’єктів та передачу цих модулів різним нащадкам Width, Height: word ширина висота відповідно. procedure TDim.Draw(x0,y0: word)- малює об’єкт ; procedure TDim.ReNil – зануляе висоту та ширину; procedure TDim.MountWidth(const iWidth: word)- задає ширину; procedure TDim.MountHeight(const iHeight: word)- задає висоту. Модуль UBar – створений для побудови прямокутників. Depth: word;глубина. Top: boolean; чи видима верхня грань паралелепіпеда. procedure TBar.Draw(x0,y0: word);- малює прямокутник. procedure TBar.Load(Path: string)-завантажує данні з текстового файлу . Модуль UEllipse – створений для побудови фігури – еліпс. procedure TEllipse.Draw(x0,y0: word)- малює еліпс. x,y-координати центра, rx,ry координати від цента до еліпса по х та у відповідно. procedure TEllipse.Load(Path: string)- завантажує данні з текстового файлу . Модуль ULine- створений для побудови фігури – лінія procedure TLine.Draw(x0,y0: word)- малює еліпс. x,y-координати початку procedure TLine.Load(Path: string)- завантажує данні з текстового файлу . Модуль UPolyLine- модуль утворений для побудови основи шибениці. В даному модулі використав динамічній масив. Насамперед динамічним називається масив, розмір якого може змінюватися під час виконання програми. TCoordArr = array[1..maxint div sizeof(TCoord)] of TCoord; CoordCount – змінна для задання кількості елементів, та визначення якого розміру має бути створений динамічний масив. procedure TPolyLine.CoordDestroу-зануляє кількість елементів і звільняє пам'ять procedure TPolyLine.CoordCreate- задае потрібну кількість елементів та виділяє потрібну кількість пам'яті procedure TPolyLine.Draw(x0,y0: word)- передає першу координату procedure TPolyLine.Load(Path: string) – завантажує з текстового файлу інформацію, а саме про кількість елементів і задає координати елементам массиву Модуль UTitle – створений для виведення потрібного тексту Caption: string- змінна для задання певного тексту procedure TTitle.Load(Path: string)- завантаження потрібної інформації з текстового файла. procedure TTitle.Draw(const iVisible: word)- малює та робить видним потрібний текст. 2.4. Опис інтерфейсу Інтерфейс програми є доволі простим та інтуїтивно зрозумілим. Це дозволяє користувачу легко орієнтуватись серед численних функцій програми та легко виконувати потрібні дії. Керування відбувається за допомогою клавіатури. Для пересування по алфавіту та пересування по меню використовуються клавіші вверх, вниз, вправо та вліво. Для вибору правильної на вашу думку літери, пункту меню або переходу до наступного меню потрібно натиснути Enter. Натиснення клавіші Esc означатиме вихід з поточного меню або загалом з програми. При запуску програми користувач побачить меню. У якому є всі потрібні пункти для продовження його дій. В меню можна взнати інформацію про автора програми (About), вийти з програми(Exit), чи почати нову гру(New Game). Кнопка (Continue) спочатку не активна, так як не було розпочато жодної гри.  Коли користувач обере New Game. Меню зникне та відкриється сама програма на якій буде алфавіт, питання щодо слова, область правильно введених букв, та область малювання людини.  Пробігаючи по алфавіту, активна літера позначена з синьою заливкою, можна буде здійснити вибір відповідної літери. В залежності від правильності буде малюватися шибениця и данна буква буде не активна для повторного вибору, чи данна буква буде записано в спеціальну область введення слова під алфавітом. Після того як гравець допустить сім помилок, тобто сім раз не правильно введе букву шибинеця буде домальована до кінця и виведеться повідомлення про поразку  Або ж у разі правильності вгаданого слова за меншу кількість кроків виведеться повідомлення про перемогу.  Натиснення будь-якої клавіші поверне користувача до головного меню Висновки У даному проекті була реалізована гра «Вгадай слово». Аналогом даної гри и широковідома гра «Поле Чудес». Яка є захоплюючою та цікавою. Дружній інтерфейс дозволяє грати в дану гру користувачів з різних вікових категорій. Так як в даній грі все залежить від питання та слова-відповіді, а їх ви можете створювати самі в будь-якому обсязі Перевагами розробленої програми можна назвати такі: Керування програмою здійснюється за допомогою клавіатури, що дозволяє значно прискорити процес пересування по алфавіту та чіткого вибору необхідної букви, аніж при керуванні мишкою. Інтерфейс гри є інтуїтивно зрозумілим, що стане у пригоді користувачам будь-якого віку та досвіду роботи з комп’ютером. Інтерфейс виконано англійською мовою, що змушує користувача мати мінімальні знання англійської мови для повноцінної гри. Реалізована можливість не втручаючись в структуру коду програми змінювати майже всі частини інтерфейсу. Можливість додання питання до бібліотеки, та редагування їх. Недоліками програми можна назвати такі: Питання задаються на англійській мові, тобто користувач має володіти даною мовою. Велика кількість допоміжних модулів. Розроблена програма передбачає широкі можливості для покращення. Зокрема, доцільно розробити багатомовний інтерфейс, що дозволить повноцінно насолодитися грою значно більшій кількості людей. Також можливе наповнення бібліотеки питаннями значного об’єму. Гра дозволяє легко працювати при різних розподільних здатностях екрану (більше 800х600). Також данна гра не потребує великих потужностей від комп’ютера , а значить може бути завантажена майже на будь-якому комп’ютері Список використаної літератури Швачко Г. Г. Конспект лекцій з програмування. http://volvo71.narod.ru- сайт присвячений ООП на мові програмування Pascal. http://forum.pascal.net.ru/- форум «Все о Паскале» Додаток А. Лістинг програми unit ULetterBox; interface uses UShape, ULineAttr, UFillAttr, UTextAttr, UDim; type TLetterArr = array[1..maxint div sizeof(PTShape)] of PTShape; PLetterArr = ^TLetterArr; TAttr = record LineAttr: TLineAttr; FillAttr: TFillAttr; TextAttr: TTextAttr; end; //0 - nevibrana, 1 - vibrana, 2 - activna TAttrArr = array[0..maxint div sizeof(TAttr) -1] of TAttr; PAttrArr = ^TAttrArr;// динамический массив атрибуты PTLetterBox = ^TLetterBox;//динам объект TLetterBox = object(TShape) private procedure LoadSingleAttr(Path: string; var a: TAttr);//загрузка protected CompAttr: PAttrArr;//атрибуты компонентов AttrCount,//количество атрибутов LetterCount, ColCount,//количество квадратиков, максимальное количестово квадратиков в рядке ColDistance, RowDistance,// растояние между столбиками, между рядками Allign: word; //0 - pravo, 1 - centr, 2 - levo CompDim: PTDim;//размеры компонентов ActiveLetter: word; procedure Draw(const iVisible: word); virtual; procedure LetterCreate; virtual;//создание динам масива procedure LetterDestroy; virtual;//удаление динам масива procedure CompAttrCreate;//создание динам масива атрибутов procedure CompAttrDestroy;//удаление динам масива атрибутов procedure AllignApply; procedure CompAttrLoad(Path: string); virtual;//загрузить компоненты для атрибутов procedure Copy(var Dest: PTDim; const From : PTDim); virtual; public Letter: PLetterArr;//динам массив букв procedure ReNil; virtual; function MountInheritorsVisible: word; virtual; constructor Init; destructor Destroy; virtual; procedure Load(Path: string); procedure LetterLoad(Path: string); function GetLetterCount: word; procedure MountXY(const iX, iY: word); virtual; procedure ShowAllLetter; procedure ShowAllLetterTitle; procedure CompMountEnabledSingle(const i, iEnabled: word); procedure CompMountEnabledAll(const iEnabled: word); procedure CompMountAttrSingle(const i, iEnabled: word); procedure CompMountAttrAll(const iEnabled: word); function LetterSelect: word; end; implementation uses Crt, Graph; //------------------------------------------------------------------\\ function TLetterBox.LetterSelect: word; var PrevAL: word; c:char; begin if (ActiveLetter < 1) or (LetterCount < ActiveLetter) then ActiveLetter := 1; while Letter^[ActiveLetter]^.GetEnabled <> 0 do begin inc(ActiveLetter); if ActiveLetter>LetterCount then ActiveLetter := 1; end; CompMountAttrSingle(ActiveLetter,2);//установка атрибутов еденичного кубика repeat PrevAL := ActiveLetter; c := readkey; if c = #0 then c := readkey; case c of #72,#75: repeat dec(ActiveLetter); if ActiveLetter<1 then ActiveLetter := LetterCount; until Letter^[ActiveLetter]^.GetEnabled = 0; #77,#80: repeat inc(ActiveLetter); if ActiveLetter>LetterCount then ActiveLetter := 1; until Letter^[ActiveLetter]^.GetEnabled = 0; #27: ActiveLetter := 0; end; CompMountAttrSingle(prevAL,Letter^[PrevAL]^.GetEnabled); if ActiveLetter <> 0 then CompMountAttrSingle(ActiveLetter,2); until (c = #13)or(c = #27); LetterSelect := ActiveLetter; end; //------------------------------------------------------------------\\ procedure TLetterBox.Copy(var Dest: PTDim; const From : PTDim); begin end; //------------------------------------------------------------------\\ function TLetterBox.MountInheritorsVisible: word; var i: integer; w: word; begin w := inherited; for i := 1 to LetterCount do Letter^[i]^.MountParentVisible(w); if w = 0 then for i := 1 to LetterCount do Letter^[i]^.MountParentColor(FillAttr.GetColor); MountInheritorsVisible := w; end; //------------------------------------------------------------------\\ procedure TLetterBox.LoadSingleAttr(Path: string; var a: TAttr); var fconfig: text; FileName: string; begin Path := Path+'\'; assign(fconfig,Path+'config.txt'); reset(fconfig); readln(fconfig); readln(fconfig,FileName); a.LineAttr.Load(Path+FileName); readln(fconfig); readln(fconfig,FileName); a.FillAttr.Load(Path+FileName); readln(fconfig); readln(fconfig,FileName); a.TextAttr.Load(Path+FileName); close(fconfig); end; //------------------------------------------------------------------\\ procedure TLetterBox.CompAttrLoad(Path: string); var i: integer; fconfig: text; FileName: string; begin Path := Path+'\'; assign(fconfig,Path+'config.txt'); reset(fconfig); readln(fconfig); readln(fconfig,AttrCount); CompAttrCreate; for i := 0 to AttrCount-1 do begin readln(fconfig); readln(fconfig,FileName); LoadSingleAttr(Path+FileName,CompAttr^[i]); end; close(fconfig); end; //------------------------------------------------------------------\\ procedure TLetterBox.CompMountAttrSingle(const i, iEnabled: word);//установка атрибутов для отдельного элемента массива begin if (Letter^[i]^.GetParentVisible=1)and(Letter^[i]^.GetVisible=1)then Letter^[i]^.Draw(0); Letter^[i]^.LineAttr.Mount(CompAttr^[iEnabled].LineAttr); Letter^[i]^.FillAttr.Mount(CompAttr^[iEnabled].FillAttr); Letter^[i]^.Title.TextAttr.Mount(CompAttr^[iEnabled].TextAttr); if (Letter^[i]^.GetParentVisible=1)and(Letter^[i]^.GetVisible=1)then Letter^[i]^.DrawOut; end; //------------------------------------------------------------------\\ procedure TLetterBox.CompMountAttrAll(const iEnabled: word); var i: integer; begin for i := 1 to LetterCount do CompMountAttrSingle(i, iEnabled); end; //------------------------------------------------------------------\\ procedure TLetterBox.CompMountEnabledSingle(const i, iEnabled: word);//установка для отдельного элемента массива enable begin Letter^[i]^.MountEnabled(iEnabled); CompMountAttrSingle(i, iEnabled); end; //------------------------------------------------------------------\\ procedure TLetterBox.CompMountEnabledAll(const iEnabled: word); var i: integer; begin for i := 1 to LetterCount do CompMountEnabledSingle(i, iEnabled); end; //------------------------------------------------------------------\\ procedure TLetterBox.ShowAllLetter; var i: integer; begin for i := 1 to LetterCount do Letter^[i]^.Show; end; //------------------------------------------------------------------\\ procedure TLetterBox.ShowAllLetterTitle;//показать название букв var i: integer; begin for i := 1 to LetterCount do Letter^[i]^.Title.Show; end; //------------------------------------------------------------------\\ procedure TLetterBox.LetterDestroy;//удаление динам массива var i: integer; begin for i := 1 to LetterCount do Letter^[i]^.Destroy; FreeMem(Letter, LetterCount*sizeof(PTShape)); LetterCount := 0; end; //------------------------------------------------------------------\\ procedure TLetterBox.LetterCreate; var i: integer; begin GetMem(Letter, LetterCount*sizeof(PTShape)); end; //------------------------------------------------------------------\\ procedure TLetterBox.ReNil; begin inherited; LetterDestroy; CompAttrDestroy; CompDim^.ReNil; AttrCount := 0; LetterCount := 0; ColCount := 1; ColDistance := 0; RowDistance := 0; Allign := 1; end; //------------------------------------------------------------------\\ procedure TLetterBox.LetterLoad(Path: string);//загружаю название букв var finf: text; s: string; i: integer; begin LetterDestroy; assign(finf,Path); reset(finf); readln(finf,LetterCount); LetterCreate; for i := 1 to LetterCount do with Letter^[i]^ do begin ReNil; readln(finf,s); Title.MountCaption(s); Copy(Letter^[i]^.Dim,CompDim); Title.MountXY(Title.GetX+X+Dim^.GetWidth div 2,Title.GetY+Y+Dim^.GetHeight div 2);//установка букв по средине кубиков Letter^[i]^.LineAttr := CompAttr^[1].LineAttr; end; close(finf); AllignApply; ActiveLetter := 0; MountInheritorsVisible; end; //------------------------------------------------------------------\\ procedure TLetterBox.AllignApply;//применение выравнивания var LeftShift, TopShift: word; i: integer; RowCount: integer; s: string; begin RowCount := (LetterCount-1) div ColCount +1; LeftShift := GetX+(Dim^.GetWidth-ColCount*CompDim^.GetWidth-(ColCount-1)*ColDistance)div 2; TopShift := GetY+(Dim^.GetHeight-RowCount*CompDim^.GetHeight-(RowCount-1)*RowDistance)div 2; for i := 1 to ColCount*(RowCount-1) do Letter^[i]^.MountXY(LeftShift+((i-1) mod ColCount)*(CompDim^.GetWidth+ColDistance), TopShift+((i-1) div ColCount)*(CompDim^.GetHeight+RowDistance)); i := ColCount*RowCount-LetterCount;//храниться количество несуществуюших букв в последнем рядке case Allign of 0: ; 1: LeftShift := LeftShift + i div 2*(CompDim^.GetWidth+ColDistance); 2: LeftShift := LeftShift + i*(CompDim^.GetWidth+ColDistance)div 2; end; for i := ColCount*(RowCount-1)+1 to LetterCount do Letter^[i]^.MountXY(LeftShift+((i-1) mod ColCount)*(CompDim^.GetWidth+ColDistance), TopShift+((i-1) div ColCount)*(CompDim^.GetHeight+RowDistance)); end; //------------------------------------------------------------------\\ procedure TLetterBox.CompAttrDestroy; var i: integer; begin for i := 0 to AttrCount-1 do with CompAttr^[i] do begin LineAttr.Destroy; FillAttr.Destroy; TextAttr.Destroy; end; FreeMem(CompAttr, AttrCount*sizeof(TAttr)); AttrCount := 0; end; //------------------------------------------------------------------\\ procedure TLetterBox.CompAttrCreate; var i: integer; begin GetMem(CompAttr, AttrCount*sizeof(TAttr)); for i := 0 to AttrCount-1 do with CompAttr^[i] do begin //вызов конструкторов LineAttr.Init; FillAttr.Init; TextAttr.Init; end; end; //------------------------------------------------------------------\\ procedure TLetterBox.MountXY(const iX, iY: word);//задал Х У элипса и перемистил буквы если надо var i: integer; begin for i := 1 to LetterCount do Letter^[i]^.MountXY(Letter^[i]^.GetX+iX-GetX,Letter^[i]^.GetY+iY-GetY); inherited; end; //------------------------------------------------------------------\\ function TLetterBox.GetLetterCount: word; begin GetLetterCount := LetterCount; end; //------------------------------------------------------------------\\ procedure TLetterBox.Load(Path: string);//загружаю объект letterbox var finf, fconfig: text; FileName: string; begin Path := Path+'\'; assign(fconfig,Path+'config.txt'); reset(fconfig); readln(fconfig); readln(fconfig,FileName); inherited Load(Path+FileName); readln(fconfig); readln(fconfig,FileName); CompDim^.Load(Path+FileName); readln(fconfig); readln(fconfig,FileName); CompAttrLoad(Path+FileName); readln(fconfig); readln(fconfig,FileName); assign(finf,Path+FileName); reset(finf); readln(finf,ColDistance, RowDistance); readln(finf,ColCount); readln(finf,Allign); close(finf); close(fconfig); end; //------------------------------------------------------------------\\ procedure TLetterBox.Draw(const iVisible: word);//рисование letterbox var i: integer; begin inherited; for i := 1 to LetterCount do Letter^[i]^.DrawOut;//выводит на экран текуший видимий фон end; //------------------------------------------------------------------\\ constructor TLetterBox.Init; begin inherited; LetterCount := 0; ColCount := 1; ColDistance := 0; RowDistance := 0; Allign := 0; end; //------------------------------------------------------------------\\ destructor TLetterBox.Destroy; begin LetterDestroy; inherited; CompDim^.Destroy; CompAttrDestroy; end; end. unit ULine; interface uses UDim; type PTLine = ^TLine; TLine = object(TDim) public procedure Load(Path: string); virtual; constructor Init; destructor Destroy; virtual; procedure Draw(x0,y0: word); virtual; end; implementation uses Graph; //------------------------------------------------------------------\\ procedure TLine.Draw(x0,y0: word); begin Line(X0,Y0,Width,Height);//высота и шырина подгружаюсться с dim Width,Height-конечнии координати end; //------------------------------------------------------------------\\ procedure TLine.Load(Path: string); var finf: text; begin assign(finf,Path); reset(finf); readln(finf,Width,Height); close(finf); end; //------------------------------------------------------------------\\ constructor TLine.Init; begin inherited; end; //------------------------------------------------------------------\\ destructor TLine.Destroy; begin end; end. unit ULineAttr; interface type TLineAttr = object protected SType, Pattern, Thickness, Color: word; public procedure ReNil; procedure Load(const FileName: string); procedure Mount(const iSType, iPattern, iThickness, iColor: word); overload; procedure Mount(const iLineAttr: TLineAttr); overload; procedure Apply; procedure MountColor(iColor: word); function GetColor: word; constructor Init; destructor Destroy; virtual; end; implementation uses Graph; constructor TLineAttr.Init; begin ReNil; end; destructor TLineAttr.Destroy; begin end; procedure TLineAttr.MountColor(iColor: word); begin Color := iColor; end; function TLineAttr.GetColor: word; begin GetColor := Color; end; procedure TLineAttr.ReNil; begin SType := 0; Pattern := 0; Thickness := 1; Color := 0; end; procedure TLineAttr.Mount(const iLineAttr: TLineAttr); begin Self := iLineAttr; end; procedure TLineAttr.Mount(const iSType, iPattern, iThickness, iColor: word); begin SType := iSType; Pattern := iPattern; Thickness := iThickness; Color := iColor; end; procedure TLineAttr.Load(const FileName: string); var finf: text; begin assign(finf,FileName); reset(finf); readln(finf,SType, Thickness, Color, Pattern); close(finf); end; procedure TLineAttr.Apply; begin SetLineStyle(SType,Pattern,Thickness); SetColor(Color); end; end. unit UManager; interface uses UPoint, UUsedLet, UAnswer, UShape, UBar, UCanvas, UTitle; type PTManager = ^TManager; TManager = object(TPoint) protected LibPath: string;//путь к библиотеке вопросов Answer: PTAnswer; Question: PTShape; Canvas: PTCanvas; Winner: PTTitle; Looser: PTTitle; UsedLet: PTUsedLet; function MountInheritorsVisible: word; virtual; procedure LoadQuestion(Path: string); procedure Draw(const iVisible: word); virtual; procedure LoadGame;
Антиботан аватар за замовчуванням

08.02.2013 00:02-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!