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

Практична робота № 3

Тема: Створення логічної гри.

Мета: Вивчення можливостей використання властивості Tag і об'єкта Sender.

Короткі теоретичні відомості.

Метою даної лабораторної роботи є написання наступної програми. Ігрова дошка містить сім клітин. На трьох лівих клітинах стоять червоні фішки, на трьох правих - сині. Центральна клітина порожня. Завдання полягає в тому, щоб, роблячи допустимі ходи, поміняти фішки місцями. Вид робочого вікна гри представлений нижче.

Правила ходів такі:

    1. Червоні фішки можуть ходити тільки вправо, сині - тільки вліво.

    2. Ходити дозволяється тільки на вільне поле.

    3. Дозволені переміщення на сусіднє поле і «стрибок» через фішку. В ході вирішення головоломки кнопки будуть рухатися, а вид вікна змінюватися. Тому необхідно точно задати геометричні параметри об'єктів. Настроювати параметри будемо, змінюючи властивості Top, Left, Height, Width компонентів. Параметри повинні бути наступними:

У чому полягає хід гри? У тому, що одна з фішок-кнопок переноситься на вільне місце. Це означає, що достатньо вказати, ка ¬ кой фішкою треба піти. Якщо фішка може зробити хід, то він тільки один.Отже, користувач може вибрати хід, клацнувши на одній з кнопок. Тобто ми будемо обробляти подія OnClick (При клацанні).Але ми повинні розрізняти кнопки, а також знати, де вони знаходяться і де знаходиться вільна клітина. Тому ми поступимо так: будемо зберігати додаткові дані прямо у властивостях об'єкта-кнопки. Для цього нам потрібно «вільне» властивість. Така властивість є: всі компоненти системи Delphi надають властивість Tag, яке програміст може використовувати на свій розсуд.Властивість Tag може зберігати будь-яке ціле число. Нам потрібно зберігати два числа. По-перше, номер клітки, в якій знаходиться кнопка, а по друге, ознака «кольору» фішки (від нього залежить, в який бік вона може ходити). Ці дані легко «упакувати» в одне ціле число: помножимо номер клітки на 2 і, якщо фішка синя, додамо до нього одиницю. Таке значення легко «розібрати» назад на складові. Розділимо його на 2. Приватне дасть номер клітки, а залишок буде ознакою кольору фішки

Хід роботи.

  1. Запустіть Delphi. При цьому автоматично буде створений новий проект з формою.

  2. Збережіть проект у своїй папці, створивши в ній папку Логічна гра. Для чого виконайте команду Save All, Unit назвіть U_logic, проект - P_logic.

  3. Дайте назву формою: Йде гра.

  4. Додайте на формі компонент Panel (розміри і колір форми та компонента Panel підберіть самі).

  5. На панелі розташуйте 6 компонентів BitBtn (панель Additional) розміром 49 на 49. Властивість Top всіх компонентів дорівнюватиме 8, Left - приблизно: 64,120,232,288,344 (перерахуйте самостійно).

  1. Створіть за допомогою графічного редактора зображення червоного і синього трикутників або інших фігур на ваш смак і збережіть їх у форматі bmp. Потім, використовуючи властивість Glyph компонента, помістіть зображення на кнопки.

  2. Тепер можна задати значення властивості Tag для всіх кнопок. По черзі виберіть фішки зліва направо і задайте для властивості Tag значення, наведені в таблиці.

    Значення властивості Tag

    Коментарі

    2

    перша клітинка, червона фішка

    4

    друга клітинка, червона фішка

    6

    третя клітинка, червона фішка

    11

    п’ята клітинка, синя фішка

    13

    шоста клітинка, синя фішка

    15

    сьома клітинка, синя фішка

  3. 8. Опишіть глобальну змінну n, в якій будите зберігати номер порожній клітини і змінну win, в якій буде міститися кількість ходів.

var

Form1: TForm1;

n: integer = 4;

win: integer = 24;

Тут ми не тільки описуємо потрібні змінні, але і відразу присвоюємо їм початкове значення. Спочатку у нас пуста четверта клітка, звідси і вибір цього числа, 24 - максимально можливе число ходів.

  1. Виберіть першу кнопку і створіть обробник OnClick для неї.

procedure TForm1.BitBtn1Click(Sender: TObject);

var i,c,k,ak:integer;

begin

with Sender as TBitBtn do

begin

i:=Tag div 2;

c:=Tag mod 2;

k:=n-i;

ak:=abs(k);

if ak<3 then

if ((c=0) and (k>0)) or

((c=1) and (k<0)) then

begin

tag:=tag+2*k;

left:=left +56*k;

win:=win-ak;

n:=i;

end;

end;

if win=0 then

begin

caption:=’Vaw!!!!';

panel1.Color:=clFuchsia; //міняємо колір панелі

panel1.Enabled:=false; //всі кнопки на панелі становляться не дійсними

end;

end;

Зверніть увагу на те, що в процедуру передається параметр - об'єкт Sender. Він представляє саме той об'єкт, який викликав подія, і може дати доступ до його властивостей. Але безпосередньо це не вийде. Програмі треба спеціально вказати, що об'єкт Sender в даному випадку слід вважати кнопкою. Для цього служить ключове слово as. Після нього вказують тип, якому насправді належить об'єкт Sender: Sender as TBitBtn.

  1. Для кожної з кнопок на вкладці Події у вікні навпроти OnClick виберіть зі списку вже описану процедуру.

  1. Виконайте самостійно:

    1. 11 Додайте вікно: привітання з виграшем.

    2. Введіть лічильник кількості ходів і повідомте за скільки ходів виграли.

    3. Спробуйте виграти!

Результатом виконання даної практичної роботи є створений згідно із завданням програмний продукт. Виконане завдання повинне бути пред'явлено викладачеві в електронному вигляді. В ході захисту практичної роботи студент повинен продемонструвати свої навички роботи з вивченими компонентами і методами проектування інтерфейсу користувача.

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