Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_rab8_D.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
422.4 Кб
Скачать

Delphi 7. Лабораторна робота №8. Тема: Програмування гри «о, щасливчик!».

Мета роботи: Навчитись працювати з файлами.

Хід роботи.

Всі питання, а також правильні і неправильні відповіді будуть зберігатися не в коді програми, а в зовнішньому INI-файлі, в якому всі дані розбиті на розділи.

  1. Створіть в тому ж каталозі, що і майбутня програма, файл з ім'ям lucky.ini і введемо в нього наступний текст:

; початок файлу

[num]

num=3

[Questions]

1=Скільки клавіш на клавіатурі?

2=Основна несправність миші?

3=Основні файлові системи:

[Answers]

1=101

2=забруднення

3=FAT, NTFS

[Wrong]

1=100

11=96

111=116

2 =зависання

22=залипання

222=заїдання

3=AFX, KFX

33=ATF,NFTS

333=TAF,TNFS

Перший рядок - це коментар. Тут можна писати все, що завгодно. Перший розділ num містить тільки один параметр з таким же ім'ям, який вказує на кількість питань в тесті. Цей параметр знадобиться для того, щоб питання задавалися в довільній послідовності. Наступний розділ - Questions. У ньому знаходяться всі питання. У розділі Answers знаходяться правильні відповіді. У розділі Wrong знаходяться неправильні відповіді.

Для того щоб не створювати три розділи, кожен з яких містить неправильний варіант відповіді, використовуємо ідентифікацію за номером питання. Неправильні відповіді до першого питання знаходяться в параметрах 1, 11 і 111, до другого - в параметрах 2, 22 і 222, до п'ятнадцятого - в параметрах 15, 1515, 151 515 і т.д.

  1. Завантажте систему візуального програмування Delphi.

  2. Створіть новий проект програми: виконайте команду меню FileNew Application.

  3. Дайте значення деяким властивостям форми Form1 згідно з таблицею.

Властивості форми гри "О, щасливчик"

Властивість

Значення

Пояснення

BorderStyle

bsSingle

Тепер ніхто не зможе змінити розмір вікна і зробити нашу гру не привабливою.

Caption

Вітаємо вас на грі "О, счастливчик"!

Заголовок вікна

Height

414

Висота

Width

380

Ширина

  1. Розмістіть на формі ряд компонентів з вкладки Standard палітри компонентів:

  • три компоненти Button (кнопка) - кількість кнопок відповідає загальній кількості запитань (у нашому прикладі - 3);

  • RadioGroup (група перемикачів) ;

  • Memo (багаторядкове текстове поле) ;

  • два компоненти Label (напис) .

  • Тепер розмістимо на компоненті RadioGroup1 (не на формі!) Чотири компоненти RadioButton (перемикач) з тією ж вкладки Standard.

  • І, нарешті, розмістимо на формі шість компонентів Image (зображення) з вкладки Additional палітри компонентів.

  1. Змініть властивості перерахованих компонентів згідно з таблицею:

Компонент

Властивість

Значення

Пояснення

Buttonl, Button2

Caption

Наступне питання >>>>

Кнопка використовується для переходу до слідуючого питання

Left

104

Відступ зліва

Top

356

Відступ зверху

Button2

Visible

False

При запуску програми кнопка відповіді на друге питання не видна

RadioGroupl

Caption

Варианты ответов

Заголовок группи перемикачів

Font.Style

[fsBold]

Шрифт — напівжирний

Font.Color

clBlue

Колір шрифта — синій

Height

90

Висота

Left

12

Відступ зліва

Top

256

Відступ зверху

Width

348

Ширина

RadioButtonl

Name

an1

Перший варіант відповіді

Caption

Без надпису

Font.Style

[fsBold]

Шрифт — напівжирний

Font.Color

clNavy

Шрифт — темно-сиій

RadioButtonl

Left

24

Відступ зліва

Top

280

Відступ зверху

Width

160

Ширина

RadioButton2

Name

an2

Другий варіант відповіді

Caption

Без надпису

Font.Style

[fsBold]

Шрифт —напівжирний

Font.Color

clNavy

Шрифт — темно-синий

Left

192

Відступ зліва

Top

280

Відступ зверху

Width

160

Ширина

RadioButton3

Name

an3

Третій варіант відповіді

Caption

Без надпису

Font.Style

[fsBold]

Шрифт — напівжирний

Font.Color

clNavy

Шрифт — темно-синий

Left

24

Відступ зліва

Top

312

Відступ зверху

Width

160

Ширина

RadioButton4

Name

an4

Четвертий варіант відповіді

Caption

Без надпису

Font.Style

[fsBold]

Шрифт — напівжирний

Font.Color

clNavy

Шрифт — темно-синій

Left

192

Відступ зліва

Top

312

Відступ зверху

Width'

160

Ширина

Memol

Color

clActiveBorder

Замальовуєм поле питання

Height

90

Висота

Lines

Очистити вміст

Left

12

Відступ зліва

Top

156

Відступ зверху

Readonly

True

Заборона на зміну вмісту поля

Width

348

Ширина

Label1

Caption

О, счастливчик!

Назва гри

Align

a ITop

Розміщення вздовж верхнього краю форми

Alignment

taCenter

Вирівнювання тексту — по центру

Font.Style

[fsBold]

Шрифт — напівжирний

Font.Size

12

Размер шрифта — 12

Font.Color

clRed

Шрифт— червоний

Label2

Caption

Первый вопрос:

Відображає номер даного питання

Font.Style

[fsBold]

Шрифт — напівжирний

Left

16

Відступ зліва

Top

140

Відступ зверху

  1. Компоненти Image використовуються для відображення малюнків, які відповідають використаним і невикористаним підказок типу "50 на 50", "Дзвінок другу" і "Допомога залу" (три малюнки - для використаних підказок і три - для невикористаних).

    1. Присвойте властивостям кожного з компонентів Image значення згідно таблиці:

      Властивість

      Значення

      Пояснення

      AutoSize

      True

      Розмір компонену вибирається автоматично в залежності від властивостей Picture

      Тор

      32

      Відступ зверху

      Cursor

      crHelp

      При разміщенні над рисунком показник миші набуває форму ?

    2. Тепер присвойте властивості, унікальні для кожного з шести компонентів Image:

Компонент

Властивість

Значення

Пояснення

Image1

Name

yes50

Малюнок, що відповідає не використаній підказці типу "50 на 50"

Left

16

Відступ зліва

Picture

Відповідний малюнок

Image2

Name

yesZvonok

Малюнок, що відповідає не використаній підказці типу «Звонок другу»

Left

132

Відступ зліва

Picture

Відповідний малюнок

Image3

Name

yesZаl

Малюнок, що відповідає не використаній підказці типу «Помощь зала»

Left

252

Відступ зліва

Picture

Відповідний малюнок

Image4

Name

no50

Малюнок, що відповідає використаній підказці типу "50 на 50"

Left

16

Відступ зліва

Picture

Відповідний малюнок

Visible

False

Спочатку невидимий

Image5

Name

noZvonok

Малюнок, що відповідає використаній підказці типу «Звонок другу»

Left

132

Відступ зліва

Picture

Відповідний малюнок

Visible

False

Спочатку невидимий

Image6

Name

noZаl

Малюнок, що відповідає використаній підказці типу «Помощь зала»

Left

252

Відступ зліва

Picture

Відповідний малюнок

Visible

False

Спочатку невидимий

  1. Розробка програмного коду.

    1. Оголосіть всі змінні, які будуть використані в програмі:

var

Forml: TForml;

rang: boolean; // перевірка на наявність lucky.ini;

ss, dir: string; // для зберігання шляху до робочої папки і до файлу lucky.ini

i, a, n, pd: integer; // i - лічильник масивів;

// А - номер поточного питання;

// N - кількість питань у базі;

// Pd - для підказки 50/50, для того,

// Щоб випадково не прибрали 1 або 3 варіантів

win: TiniFile; // для роботи з ini-файлом

mass: array [1 .. 10] of integer; // масив містить номери питань, які вже були задані, щоб уникнути повторення питань

    1. Перша подія OnCreate форми:

procedure TForml.FormCreate (Sender: TObject);

label ran ; // оголошуємо мітку

begin

Randomize; // дізнаємося поточний каталог, з якого запускається наша програма

dir: = GetCurrentDir;

ss: = dir + '\ lucky.ini'; // розміщення бази даних

// Перевіряємо чи існує файл з питаннями

rang: = FileExists (ss);

if rang = False

then begin // якщо файлу немає виводимо повідомлення про його відсутність

MessageDlg ('Файл не знайдений: lucky.ini!', MtError, [mbok], 0);

halt; // і виходимо з програми

end;

win: = TIniFile.Create (ss);

// З розділу num дізнаємося кількість питань

ss: = win.ReadString ('num', 'num', ss);

n: = strtoint (ss);

ran: / / мітка

a: = random (n) + 1;

for i: = l to n do // порівнюємо з усіма, що були задані раніше

if mass [i] = a then goto ran; //і якщо таке питання вже був заданий, то згенерувати новий

for i: = 1 to n do

if mass [i] = 0 then begin mass [i]: = а; // запам'ятати, що це питання вже задавалося

break;

end;

// Заносимо в Memol випадково згенерований питання

Memol.Text: = win.ReadString ('Questions', IntToStr (a), Memol.text);

// Правильну відповідь

anl.Caption: = win.ReadString ('Answers', IntToStr (a), anl.Caption);

// Перший варіант

an2.Caption: = win.ReadString ('Wrong', IntToStr (a), an2.Caption);

/ / Другий

аn3.Caption: = win.ReadString ('Wrong', IntToStr (a) + IntToStr (a),

аn3.Caption);

/ / І третій

an4.Caption: = win.ReadString ('Wrong', IntToStr (a) + IntToStr (a) + IntToStr (a), an4.Caption);

win.Free;

end;

    1. Для роботи з ini-файлами необхідно підключити модуль IniFiles:

unit Unitl;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]