Гра "П’ятнашкина" на Delphi

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Постановка задачі

Створити гру «П'ятнашки» — яка являє собою набір однакових квадратних кісточок (кнопок) з нанесеними числами, укладених в квадратну полі 4×4. В наборі 15 елементів, відповідно в ігровому полі залишається незаповненим одне квадратне поле. Мета гри — переміщаючи кісточки (кнопки) по формі домогтися упорядкування їх за номерами, бажано зробивши якомога менше переміщень.

програма користувач гра

1. Алгоритм розробки проекту

Для розробки проекту я використав 12 форм. На них я розмістив наступні компоненти:

· На перший форми реалізований алгоритм гри та керування процесом (пауза, лічильник ходів, час гри та контекстне меню). На цій формі розміщені такі компоненти:

1) Label4−9, Edit1,2,3, Timer1 — здійснює функціонування підрахунку часу гри.

2) Label10 — містить cвойстро Caption «Ходов: «, Edit4 — відображає кількість ходів.

3) Image1,2,3 — поле Image показує картинку статі грака.

4) Label1 — містить cвойстро Caption «Игрок», Label 2 — відображає ім'я введене з клавіатури.

5) Label3 — містить Свойстро Caption «Возраст», Label 13 — Відображає вік грака.

6) Label11 — містить cвойстро Caption «Уровень», Label 12 — відображає рівень гри.

7) BitBtn1,2,3 — кнопка пауза та старт, які керують грою.

8) Компонент MainMenu1 має меню, яке містить 3 пункти: «Гра — Заново, Нова гра, Рекорди, Вихід»; «Справка — Проходження, Про гру, Правила гри»; «Про гру».

· На другій(головній) формі «Привітання» гра пропонує вказати наше ім'я, стать, вік та рівень гри і здійснити вхід. На цій формі розміщені такі компоненти:

1) Label — містить cвойстро Caption «Игра П’ятнашки».

2) Labe2 — містить cвойстро Caption «Введите ваше имя:».

3) Edit1 — компонент в який буде вводитися ім'я грака.

4) Labe3,5,6,7 — містить cвойстро Caption «Укажите ваш пол: «, «М», «Ж», «/».

5) RadioButton1,2 — компонент який відповідає за стать и відображення малюнка на першій формі в полі Image1,2,3.

6) Label4 — містить cвойстро Caption «Укажите ваш возраст:».

7) ComboBox1 — дає змогу вибрати вік грака в інтервалі від 1-го до 100 років.

8) Label8 — містить cвойстро Caption «Выберите уровень:».

9) ComboBox2 — пропонує обрати рівень гри.

10) BitBtn1 — кнопка «Вход» змінює видимість другої форми на «False» та переходить на третю форму.

· На третій формі «Авторизація» картинка та прогрес бар, після якого перехід на першу форму. На цій формі розміщені такі компоненти:

1) Image1 — показує картинку авторизації.

2) ProgressBar1 — відповідає за перехід до наступної форми.

3) Timer1 — за допомогою якого здійснюється функціонування прогрес бару.

· На четвертій формі діалогове вікно «Паузи» на якому картинка та кнопка продовжити. На цій формі розміщені такі компоненти:

1) Image1 — відображає в собі картинку «Чашка кофе», що символізує паузу.

2) Label — містить cвойстро Caption «Продолжить», при натисканні на яку здійснюється повертання до попередньої форми.

· На п’ятій формі «Принцип проходження» розміщений компонент Мемо1 — в параметрі Lines містить текстову інформацію про «Принцип проходження»

· На шостій формі «Про Гру» розміщений компонент Мемо1 — в параметрі Lines містить текстову інформацію про «Про гру».

· На сьомій формі «Правила гри». Розміщені компонент Мемо1 та малюнок з правильним розміщенням кнопок:

1) Memo1 — в параметрі Lines містить текстову інформацію про «Правила гри».

2) Image1 — відображає картинку з правильним розміщенням костяшок.

· На восьмій формі «О програмі» розміщена інформація про програму. На цій формі розміщені такі компоненти:

1) Image1 — відображає мою особисту картинку.

2) Labe1 — містить cвойстро Caption «Курсовая работа».

3) Labe2 — містить cвойстро Caption «Final версия».

4) Labe3 — містить cвойстро Caption «Автор: Shkurik (c)».

5) Labe4 — містить cвойстро Caption «2011».

· На дев’ятій формі «Програв» картинка яка вказує на ваш програш та кнопка — яка дозволяє зіграти ще. На цій формі розміщені такі компоненти:

1) Image1 — відображає картинку яка вказує на ваш програш.

2) BitBtn1 — кнопка яка дозволяє зіграти ще.

· На десятій формі «Перемога» картинка, вказане ім'я грака, за скільки часу та скільки ходів зроблено. На цій формі розміщені такі компоненти:

Image1 — відображає картинку, яка служить фоном всій формі.

Labe1 — містить cвойстро Caption «, вы победили!!» до якого буде добавлене ім'я грака.

Labe2 — містить cвойстро Caption «Чисте поле», куди буде вписана інформація за скільки ходів виграв.

Labe9 — містить cвойстро Caption «И за», куди буде дописано за який час виграли.

Labe10 — містить cвойстро Caption «Сыграть еще», при натисканні дозволяє зіграти ще.

Labe11 — містить cвойстро Caption «Выход», при натисканні закриває всю програму.

· На одинадцятій формі «Таблиця рекордів» відображена таблиця рекордів з базою даних Access. На цій формі розміщені такі компоненти:

1) ADOConnection1 — служить для підключення бази даних до форми.

2) ADOQuery1 — до цього компоненту підключається ADOConnection1 та в параметрі SQL пропишемо Select * From Rekord для відображення таблиці. Та ставимо параметр Active — True.

3) DataSource1 — до цього компоненту підключаємо ADOQuery1.

4) DBGrid1 — в параметрі DataSource підключаємо DataSource1 для відображення в DBGrid1 таблиці рекордів.

· На дванадцятій формі «Старт» відображена картинка з прапором. На цій формі розміщені такі компоненти:

Image1 — відображає картинку з прапорцем старту, після натискання на якій повертається до основної форми.

2. Практична реалізація

2.1 Опис структури даних та вимоги до них

Константи:

W = 80 — ширина фішки.

D = 10 — відстань між фішками.

L = D + W — відстань між «х» у фішці.

NXM = 4 — розмір поля 4×4.

N = 1; M = 16; - розмірність масиву фішек.

POLET = 10; POLEL = 10; - початкова позиція поля фішок на формі.

Змінні:

hour, min, sec: integer — змінні в які вносяться значення часу гри.

Go: integer — лічильник ходів.

Level: integer — змінна в яку записується рівень гри.

id: integer — зміна яка містить Query запрос з 11-й форми.

time: string — зміна відображуючи час грі при виграшу.

i, ty, lx: integer — лічильники.

Form2: TForm — форма типу TForm2.

Name_Igrok: String — зміна в яку записується ім'я грака.

Spisok: byte — зміна з ComboBox2 списку.

Levelof: byte — зміна з ComboBox1 списку.

Form3: TForm — форма типу TForm3.

i: integer — лічильник з таймеру.

2.2 Опис процедур і функцій користувача

Форма 1:

procedure FormCreate (Sender: TObject); - містить в собі глобальні змінні. Заповнює масив координатами які будуть випадковим чином ставитися. Фішки при початку нової гри.

procedure FormShow (Sender: TObject); - скидає всі елементи масиву в true, масив відповідає за неповторювані порядкові номери фішок які вибираються випадковим чином потрібно при ініціалізації нової гри

procedure F21Click (Sender: TObject); - Контекстне меню — гра — нова гра. Закінчує попередню і дозволяє зіграти ще.

procedure F101Click (Sender: TObject); - Контекстне меню — гра — рекорди. Показує таблицю рекордів відобразивши одинадцяту форму.

procedure N3Click (Sender: TObject); - Контекстне меню — гра — заново. Надає можливість зіграти ще.

procedure BitBtn1Click (Sender: TObject); - при натисканні зупиняє Timer1 та показує Form4 (Пауза) в модальному режимі.

procedure Timer1Timer (Sender: TObject); - відповідає за функціонування секундо мера (Час гри).

Procedure FormClose (Sender: TObject; var Action: TCloseAction); - при закриттю вікна закривається вся програма.

procedure N5Click (Sender: TObject); - Контекстне меню — гра — проходження. Показує п’яту форму «принцип проходження».

procedure N6Click (Sender: TObject); - Контекстне меню — гра — про гру. Показує шосту форму «О игре».

procedure N4Click (Sender: TObject); - Контекстне меню — гра — правила гри. Показує сьому форму «Правила гри».

procedure N7Click (Sender: TObject); - Контекстне меню — Про програму. Показує восьму форму «О програме» та зупиняє таймер.

procedure BitBtn3Click (Sender: TObject); - кнопка «Старт», працює тоді коли ми починаємо грати заново.

procedure N8Click (Sender: TObject); - Контекстне меню — гра — вихід. Здійснює вихід з гри.

procedure ButClicked (Sender: TObject); - переміщення фішки на нову позицію.

procedure CreatFishkas (); - Нова гра, створення ігрового поля.

procedure KillOldFihkas (); - знищує кнопки — фішки, потрібно перед началом нової гри.

procedure victopia (); - перевірка — перемога або граємо далі.

Форма 2:

procedure BitBtn1Click (Sender: TObject); - кнопка «Вход». Записує ведене ім'я в змінну, перевіряє значення RadioButton. Checked, включає таймер на першій формі, змінює значення видимості на False та відкриває першу форму.

procedure ComboBox1Change (Sender: TObject); - реагує на зміну поля, обравши вік передає на першу форму та робить доступним ComboBox2.

procedure ComboBox2Change (Sender: TObject); - реагує на зміну поля, задає рівень гри (кількість ходів).

Форма 3:

procedure Timer1Timer (Sender: TObject); - ця процедура двигає прогрес бар.

Форма 4:

procedure Label1Click (Sender: TObject); - включає таймер та закриває четверту форму (пауза).

Форма 8:

procedure FormClose (Sender: TObject; var Action: TCloseAction); - при закриттю форми на першій формі продовжується робота таймера.

Форма 9:

procedure BitBtn1Click (Sender: TObject); - закриває активну форму и надає нам шанс зіграти ще.

Форма 10:

procedure Label10Click (Sender: TObject); - закриває активну форму и надає нам шанс зіграти ще.

procedure Label11Click (Sender: TObject); - закриває активну форму та всю програму.

Форма 12

procedure Image1Click (Sender: TObject); - при на тисканні на малюнок активізує таймер і дозволяє нам грати.

2.3 Опис процедур і функцій, які використовувались в програмі

Function position (const x, y: integer): integer; - визначає позицію на якій стоїть фішка в даний момент по її координатам.

Function strtofloat (< Value>:string): real; - повертає рядок, що містить символьне значення Value.

Function floattostr (< Value>: real): string; - повертає рядок, що містить дійсне значення Value.

2.4 Опис файлів та їх призначення

Project1. dpr — файл проекту. Цей текстовий файл використовується для зберігання інформації про форми та модулі. На ньому містяться оператори ініціалізації та запуску файлів на виконання.

Project1. exe — Виконуваний файл проекту. Він є автономним виконуваним файлом, для якого більше нічого не треба.

Project1. res — бінарний файл, який містить використовувані проектом ресурси.

Unit1. pas — текстовий файл модуля, який відповідає формі Form1. Використовується для зберігання коду.

Unit1. dfm — файл, в якому зберігається інформація про зовнішній стан форми Form1, її розміри та розміщення на екрані.

Unit1. dcu — відкомпільований файл модуля Unit1. pas, який компонується в кінцевий робочий файл.

Unit1. dpp — файл діаграм, створений на сторінці діаграм вікна Редактора Коду. В даному проекті діаграми не використовувались.

Unit2. pas — текстовий файл модуля, який відповідає формі Form2. Використовується для зберігання коду.

Unit2. dfm — файл, в якому зберігається інформація про зовнішній стан форми Form2, її розміри та розміщення на екрані.

Unit2. dcu — відкомпільований файл модуля Unit2. pas, який компонується в кінцевий робочий файл.

Unit2. dpp — файл діаграм, створений на сторінці діаграм вікна Редактора Коду. В даному проекті діаграми не використовувались.

Unit3. pas — текстовий файл модуля, який відповідає формі Form3. Використовується для зберігання коду.

Unit3. dfm — файл, в якому зберігається інформація про зовнішній стан форми Form3, її розміри та розміщення на екрані.

Unit3. dcu — відкомпільований файл модуля Unit3. pas, який компонується в кінцевий робочий файл.

Unit3. dpp — файл діаграм, створений на сторінці діаграм вікна Редактора Коду. В даному проекті діаграми не використовувались.

Unit4. pas — текстовий файл модуля, який відповідає формі Form4. Використовується для зберігання коду.

Unit4. dfm — файл, в якому зберігається інформація про зовнішній стан форми Form4, її розміри та розміщення на екрані.

Unit4. dcu — відкомпільований файл модуля Unit4. pas, який компонується в кінцевий робочий файл.

Uni4. dpp — файл діаграм, створений на сторінці діаграм вікна Редактора Коду. В даному проекті діаграми не використовувались.

Unit5. pas — текстовий файл модуля, який відповідає формі Form5. Використовується для зберігання коду.

Unit5. dfm — файл, в якому зберігається інформація про зовнішній стан форми Form5, її розміри та розміщення на екрані.

Unit1. dcu — відкомпільований файл модуля Unit5. pas, який компонується в кінцевий робочий файл.

Unit1. dpp — файл діаграм, створений на сторінці діаграм вікна Редактора Коду. В даному проекті діаграми не використовувались.

Unit6. pas — текстовий файл модуля, який відповідає формі Form6. Використовується для зберігання коду.

Unit6. dfm — файл, в якому зберігається інформація про зовнішній стан форми Form6, її розміри та розміщення на екрані.

Unit6. dcu — відкомпільований файл модуля Unit6. pas, який компонується в кінцевий робочий файл.

Unit6. dpp — файл діаграм, створений на сторінці діаграм вікна Редактора Коду. В даному проекті діаграми не використовувались.

Unit7. pas — текстовий файл модуля, який відповідає формі Form7. Використовується для зберігання коду.

Unit7. dfm — файл, в якому зберігається інформація про зовнішній стан форми Form7, її розміри та розміщення на екрані.

Unit7. dcu — відкомпільований файл модуля Unit7. pas, який компонується в кінцевий робочий файл.

Unit7. dpp — файл діаграм, створений на сторінці діаграм вікна Редактора Коду. В даному проекті діаграми не використовувались.

Unit8. pas — текстовий файл модуля, який відповідає формі Form8. Використовується для зберігання коду.

Unit8. dfm — файл, в якому зберігається інформація про зовнішній стан форми Form8, її розміри та розміщення на екрані.

Unit8. dcu — відкомпільований файл модуля Unit8. pas, який компонується в кінцевий робочий файл.

Unit8. dpp — файл діаграм, створений на сторінці діаграм вікна Редактора Коду. В даному проекті діаграми не використовувались.

Unit9. pas — текстовий файл модуля, який відповідає формі Form9. Використовується для зберігання коду.

Unit9. dfm — файл, в якому зберігається інформація про зовнішній стан форми Form9, її розміри та розміщення на екрані.

Unit9. dcu — відкомпільований файл модуля Unit9. pas, який компонується в кінцевий робочий файл.

Unit9. dpp — файл діаграм, створений на сторінці діаграм вікна Редактора Коду. В даному проекті діаграми не використовувались.

Unit10. pas — текстовий файл модуля, який відповідає формі Form10. Використовується для зберігання коду.

Unit10. dfm — файл, в якому зберігається інформація про зовнішній стан форми Form10, її розміри та розміщення на екрані.

Unit10. dcu — відкомпільований файл модуля Unit10. pas, який компонується в кінцевий робочий файл.

Unit10. dpp — файл діаграм, створений на сторінці діаграм вікна Редактора Коду. В даному проекті діаграми не використовувались.

Unit11. pas — текстовий файл модуля, який відповідає формі Form11. Використовується для зберігання коду.

Unit11. dfm — файл, в якому зберігається інформація про зовнішній стан форми Form11, її розміри та розміщення на екрані.

Unit11. dcu — відкомпільований файл модуля Unit11. pas, який компонується в кінцевий робочий файл.

Unit12. pas — текстовий файл модуля, який відповідає формі Form12. Використовується для зберігання коду.

Unit12. dfm — файл, в якому зберігається інформація про зовнішній стан форми Form12, її розміри та розміщення на екрані.

Unit12. dcu — відкомпільований файл модуля Unit12. pas, який компонується в кінцевий робочий файл.

Tabl-records. mdb — база даних в якій зберігаються рекорди, та додаються нові.

3. Інструкція для роботи з програмою

Програма розроблялася на ПК з наступною конфігурацією:

· Операційна Система: Microsoft Windows ХР.

· Комп’ютер: Intel Celeron® CPU D 320, 2. 00 ГГц, 1. 00 ГБ ОЗП.

Програма була опротестована на комп’ютері з наступною конфігурацією:

· Система: Microsoft Windows 7.

· Комп’ютер: Intel Celeron, 2. 00 ГБ ОЗП.

Для початку роботи програми необхідно запустити файл Tag. exe.

Після чого з’явиться вікно програми. Потім потрібно ввести своє ім'я, обрати стать, вік, рівень гри та натиснути кнопку «Вход».

Після чого з’явиться вікно авторизація.

Після якої з’явиться вікно з грою

Натиснувши паузу з’являється діалогове вікно в модальному режими. Щоб повернутися треба натиснути «Продолжить»

В контекстному меню «Игра» можна побачити:

Обравши «заново» з’явиться діалогове вікно в модальному режимі з картинкою:

Патиснувши на нього ми маємо звогу зіграти ще не змінюючи свої данні, а якщо «нова игра», то нам прийдеться повернутися до головної форми та за ново вводити наши данні. Натиснувши на «Выход», мі закінчимо гру.

В контекстному меню «Справка» можна побачити:

Обравши:

«Правила игри» відкриеться вікно в якому описано правила гри.

«Прохождение» — відкриється діалогове вікно в якому докладніше описано принцип проходження гри.

«О игре» — Відкриється діалогове вікно в якому описана історія гри.

Натиснувши в контекстному меню «О программе«. Можна побачити діалогове вікно в модальному режимі де представлена інформація про назву курсової роботи, версію, логотип автора, рік створення та копірайт.

4. Результати роботи програми

Коли в процесі гри роставити кості в правильному порядку (так я к на малюнку)

Одразу з’явиться діалогове вікно «Победа!» в якому будуть відобразатись наши дані. Ім'я, скільки зроблено ходів та за скільки часу. Також ми можемо обрати «Сыграть еще» та «Выход».

Переглянути переможців можна в таблиці рекордів скориставшись контекстним меню «Игра — Рекорды» в вікню гри.

Обравши «рекорди», з’явиться діалогове вікно «Таблица рекордов» де відображаються інформація про всіх переможців нашої гри.

Висновок

Під час виконання курсового проекту я створив гру головоломку «П'ятнашки», яка рахує кількість ходів, час, гру можна ставити на паузу та продовжувати її. Також гра П’ятнашки записує переможців до бази даних Microsoft Access, потім їх можна переглядати з контекстного меню. Є чотири рівні складності проходження. В справці є все необхідне таке як правила гри, принцип проходження про історію гри. орив. Гра П’ятнашки сподобається як дорослим так і дітям, адже її віковий діапазон віх 1 до 100 років. При розробці цього проекту я використав знання здобуті на лекціях та практичних заняттях з дисципліни «Основи програмування та алгоритмічні мови» та при роботі з мовою програмування і компілятором «Borland Delphi».

Література

1. Дарахвелидае П. Г., Марков Е. П. Программирование в Delphi 7,2007 p. -320c.

2. Джулиан Бакнелл. Фундаментальные алгоритмы и структуры данных в Delphi — ДиаСофтЮП, 2003p. — 560 с

3. Кэнту М. Delphi 7. Для профессионалов, 2007 p. -250c.

4. Трепалин С. В., Тенцер А., Елманова Н. З. Delphi 6 и технология COM, 2006p. — 470c.

5. Шупрута В. В. Delphi 2005. Учимся программировать, 2005 p. -550c.

Додаток А

Лістинг модуля Unit1

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Menus, XPMAN, ExtCtrls, Buttons, jpeg;

type

TForm1 = class (TForm)

MainMenu1: TMainMenu;

N3: TMenuItem;

F21: TMenuItem;

F101: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

Label1: TLabel;

Image1: TImage;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

BitBtn1: TBitBtn; Timer1: TTimer; Label10: TLabel; Edit4: TEdit; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Image2: TImage; Image3: TImage; BitBtn3: TBitBtn; Button1: TButton; N8: TMenuItem; procedure FormCreate (Sender: TObject); procedure FormShow (Sender: TObject); procedure F21Click (Sender: TObject); procedure F101Click (Sender: TObject); procedure N3Click (Sender: TObject); procedure BitBtn1Click (Sender: TObject); procedure Timer1Timer (Sender: TObject); procedure FormClose (Sender: TObject; var Action: TCloseAction); procedure N5Click (Sender: TObject); procedure N6Click (Sender: TObject); procedure N4Click (Sender: TObject); procedure N7Click (Sender: TObject); procedure BitBtn3Click (Sender: TObject); procedure Button1Click (Sender: TObject); procedure N8Click (Sender: TObject);

Private procedure ButClicked (Sender: TObject); procedure CreatFishkas (); procedure KillOldFihkas (); function position (const x, y: integer): integer; procedure victopia (); {Private declarations}

public {Public declarations} end;

type Tfish = TButton; // указываем тип наших фишек, не нравится бутон — укажите другой

const W = 80; D = 10; L = D + W; NXM = 4; N = 1; M = 16; POLET = 10; POLEL = 10;

prefix = 'Fishka';

var

Form1: TForm1;

btn: array [N. M] of Tfish;

sorseAr: array [N. M] of boolean;

zeroX, zeroY: integer;

XYmatrix: array [1. M, 1. 2] of integer;

hour, min, sec, go, level, id: integer;

time: string;

implementation

uses Unit2, Unit4, Unit3, Unit5, Unit6, Unit7, Unit8, Unit9, Unit10,

Unit11, Unit12; {$R *. dfm}

procedure TForm1. FormCreate (Sender: TObject);

var i, ty, lx: integer;

begin

hour: =0; min: =0; sec: =0; go: =0; time: =''; id: =0; randomize; i:= 0;

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

ty:= POLET; lx:= POLEL;

for i:= N to M do begin

XYmatrix [i, 1]:= lx;

XYmatrix [i, 2]:= ty;

lx:= lx + L;

if i mod NXM = 0 then begin

ty:= ty + L;

lx:= POLEL;

end; end; end;

procedure TForm1. FormShow (Sender: TObject);

begin CreatFishkas (); end;

{сбрасывает все элементы массива в true,

массив отвечает за неповторяющиеся порядковые номера фишек

которые выбираются случайным образом

нужно при иницилизации новой игры}

function dump (): boolean;

var i: integer;

begin

i:= 0; for i:= N to M do sorseAr[i]:= true;

end;

// непосредственно алгоритм выборки неповторяющихся значений случайным образом

function choose (): integer;

var i: integer;

begin

i:= 0; result:= random (M) + 1; while sorseAr[result] = false do result:= random (M) + 1; sorseAr[result]:= false;

end;

procedure TForm1. CreatFishkas;

// НОВАЯ ИГРА, создание игрового поля

var i, ty, lx, ch: integer;

begin

randomize; dump (); ty:= POLET; lx:= POLEL; for i:= N to M do begin

btn[i]:= Tfish. Create (Self); btn[i]. Width:= W; btn[i]. Height:= W; btn[i]. Font. Size:= 26; btn[i]. Font. Style:= [fsBold]; ch:= choose (); // получаем случайным образом число 1−16, числа не повторяються btn[i]. Left:= XYmatrix [ch, 1]; // получаем коорденату Х btn[i]. Top:= XYmatrix [ch, 2]; // получаем коорденату У

btn[i]. Tag:= ch; // в Tag будем держать текущее положение фишки

btn[i]. Name:= prefix + inttostr (i);

if i < > M then begin

btn[i]. Caption:= inttostr (i);

btn[i]. OnClick:= ButClicked;

end else begin

btn[i]. Caption:= «;

zeroX:= btn[i]. Left; zeroY:= btn[i]. Top;

end;

btn[i]. Parent:= Self;

end;

end;

function TForm1. position (const x, y: integer): integer;

var i: integer;

begin

i:= 0;

result:= -32;

for i:= N to M do begin

if ((XYmatrix [i, 1] = x) and (XYmatrix [i, 2] = y)) then

begin

result:= i; break;

end;

end;

end;

procedure TForm1. ButClicked (Sender: TObject);

var X, Y, ps: integer;

begin

X:= Tfish (Sender). left; Y:= Tfish (Sender). Top;

if ((X = zeroX + L) and (Y = zeroY)) or

((X = zeroX — L) and (Y = zeroY)) or

((X = zeroX) and (Y = zeroY + L)) or

((X = zeroX) and (Y = zeroY — L)) then

begin

Tfish (Sender). Left:= zeroX;

Tfish (Sender). Top:= zeroY;

Tfish (FindComponent (prefix + inttostr (M))). left:= X;

Tfish (FindComponent (prefix + inttostr (M))). top:= Y;

ps:= position (zeroX, zeroY);

if ps < > -32 then

Tfish (Sender). Tag:= ps else

ShowMessage ('Ошибка в логике проги. КООРДЕНАТЫ');

zeroX:= X; zeroY:= Y;

// Счетчик ходов Begin

go: =go+1;

Edit4. Text: =inttostr (go);

if go=level Then

Begin

{KillOldFihkas (); CreatFishkas ();} Timer1. Enabled: =False; Form9. ShowModal; End; victopia (); end; end;

procedure TForm1. victopia;

var i: integer; b: boolean;

begin

b:= true; i:= 0; for i:= N to M — 1 do

begin

if strtoint (Tfish (FindComponent (prefix +inttostr (i))). Caption)

Tfish (FindComponent (prefix + inttostr (i))). Tag then

begin b:= false; break; end; end;

if b then // победа

Begin

time: =IntToStr (hour)+':'+IntToStr (min)+':'+IntToStr (sec); Timer1. Enabled: =False; Form10. Label1. Caption: =Name_Igrok+Form10. Label1. Caption; Form10. Label2. Caption: ='За'+time+'времени'; Form10. Label9. Caption: ='И за '+inttostr (go)+' ходов'; Form10. Show;

Begin Form11. ADOQuery1. Recordset. MoveLast; id: =Form11. ADOQuery1. Recordset. Fields[0]. Value; Form11. ADOQuery1. InsertRecord ([IntToStr (id+1), Name_Igrok, IntToStr (go), time, Label3. Caption]); End; End; end;

procedure TForm1. KillOldFihkas;

var i: integer;

begin for i:= N to M do FreeAndNil (btn[i]); end;

procedure TForm1. F21Click (Sender: TObject);

begin KillOldFihkas (); CreatFishkas (); Timer1. Enabled: =False; hour: =0; min: =0; sec: =0; go: =0; BitBtn1. Visible: =True; BitBtn3. Visible: =False; Edit1. Text: ='00'; Edit2. Text: ='00'; Edit3. Text: ='00'; Edit4. Text: ='0000'; Label13. Visible: =True; Label3. Caption: ='Возраст'; Label12. Caption: ='Не указан'; Label14. Caption: =''; Image1. Visible: =True; Image2. Visible: =False; Image3. Visible: =False; Form2. Edit1. Text: =''; Form2. RadioButton1. Checked: =False; Form2. RadioButton2. Checked: =False; Form2. ComboBox1. Text: ='Укажите ваш возраст'; Form2. ComboBox2. Text: ='не указано'; Form2. BitBtn1. Enabled: =False; Form2. ComboBox2. Enabled: =False; Form2. ShowModal; end;

procedure TForm1. F101Click (Sender: TObject);

begin Form11. Show; end;

procedure TForm1. N3Click (Sender: TObject);

begin KillOldFihkas (); CreatFishkas (); Timer1. Enabled: =False; hour: =0; min: =0; sec: =0; go: =0; BitBtn1. Visible: =False; Edit1. Text: ='00'; Edit2. Text: ='00'; Edit3. Text: ='00'; Edit4. Text: ='0'; Form12. ShowModal; end;

procedure TForm1. BitBtn1Click (Sender: TObject);

begin Timer1. Enabled: =False; Form4. ShowModal; end;

procedure TForm1. Timer1Timer (Sender: TObject);

begin sec: =sec+1; if sec> =60 thenbegin sec: =0; min: =min+1 end; if min> =60 then begin min: =0; hour: =hour+1 end; Edit1. Text: =IntToStr (hour); Edit2. Text: =IntToStr (min); Edit3. Text: =IntToStr (sec); end;

procedure TForm1. FormClose (Sender: TObject; var Action: TCloseAction);

begin Form2. Close; Form3. Close; Form4. Close; end;

procedure TForm1. N5Click (Sender: TObject);

begin Form5. Show; end;

procedure TForm1. N6Click (Sender: TObject);

begin Form6. Show; end;

procedure TForm1. N4Click (Sender: TObject);

begin Form7. Show; end;

procedure TForm1. N7Click (Sender: TObject);

begin Timer1. Enabled: =False; Form8. ShowModal; end;

procedureTForm1. BitBtn3Click (Sender: TObject); begin KillOldFihkas (); CreatFishkas (); hour: =0; min: =0; sec: =0; go: =0; Timer1. Enabled: =True; BitBtn1. Visible: =True; BitBtn3. Visible: =False; end; procedureTForm1. Button1Click (Sender: TObject); begintime: =IntToStr (hour)+':'+IntToStr (min)+':'+IntToStr (sec); Timer1. Enabled: =False; Form10. Label1. Caption: =Name_Igrok+Form10. Label1. Caption; Form10. Label2. Caption: ='За'+time+'времени'; Form10. Label9. Caption: ='Иза'+inttostr (go)+'ходов'; Form10. Show; Begin Form11. ADOQuery1. Recordset. MoveLast; id: =Form11. ADOQuery1. Recordset. Fields[0]. Value; Form11. ADOQuery1. InsertRecord ([IntToStr (id+1), Name_Igrok, IntToStr (go), time, Label3. Caption]); End; end; procedure TForm1. N8Click (Sender: TObject); beginApplication. Terminate (); end; end.

Додаток Б

Лістинг модуля Unit2

unit Unit2;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls, Buttons, XPMAN;

type

TForm2 = class (TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; BitBtn1: TBitBtn; Image1: TImage; Edit1: TEdit; RadioButton1: TRadioButton; RadioButton2: TRadioButton; Label5: TLabel; Label6: TLabel; Label7: TLabel; ComboBox1: TComboBox; Label8: TLabel; ComboBox2: TComboBox; procedure BitBtn1Click (Sender: TObject); procedure ComboBox1Change (Sender: TObject);

procedure ComboBox2Change (Sender: TObject);

private {Private declarations} public {Public declarations} end;

var

Form2: TForm2; Name_Igrok: String; implementation

uses Unit1, Unit3, Unit4, Unit10, Unit11, Unit12, Unit5, Unit6, Unit7, Unit8, Unit9; {$R *. dfm}

procedure TForm2. BitBtn1Click (Sender: TObject);

begin Begin if Edit1. Text='' Then Edit1. Text: ='Аноним'; Name_Igrok: =Edit1. Text; Form1. Label2. Caption: =Name_Igrok; End; if RadioButton1. Checked=True then Begin Form1. Image2. Visible: =True; Form1. Image1. Visible: =False; Form1. Image3. Visible: =False; End; if RadioButton2. Checked=True then Begin Form1. Image3. Visible: =True; Form1. Image1. Visible: =False; Form1. Image2. Visible: =False; End; Form3. Timer1. Enabled: =True; Form3. ShowModal; end; procedure TForm2. ComboBox1Change (Sender: TObject);

var Spisok: byte;

begin

ComboBox2. Enabled: =True; Spisok: =ComboBox1. ItemIndex;

case Spisok of

0: begin Form1. Label3. Caption: ='1Год'; Form1. Label3. Font. Color: =clpurple; Form1. Label13. Visible: =False; end;

16: begin Form1. Label3. Caption: ='17лет'; Form1. Label3. Font. Color: =clpurple; Form1. Label13. Visible: =False; end;

17: begin Form1. Label3. Caption: ='18лет'; Form1. Label3. Font. Color: =clpurple; Form1. Label13. Visible: =False; end;

18: begin Form1. Label3. Caption: ='19лет'; Form1. Label3. Font. Color: =clpurple; Form1. Label13. Visible: =False; end;

19: begin Form1. Label3. Caption: ='20лет'; Form1. Label3. Font. Color: =clpurple; Form1. Label13. Visible: =False; end;

99: begin Form1. Label3. Caption: ='99лет'; Form1. Label3. Font. Color: =clpurple; Form1. Label13. Visible: =False; end else

Begin Form1. Label3. Caption: ='100лет'; Form1. Label3. Font. Color: =clpurple; Form1. Label13. Visible: =False; end; end; end;

procedure TForm2. ComboBox2Change (Sender: TObject);

Var Levelof: byte;

begin

BitBtn1. Enabled: =True;

Levelof: =ComboBox2. ItemIndex;

case Levelof of

0: begin Form1. Label12. Caption: ='Легкий'; Form1. Label14. Caption: ='1000 ходов'; Form1. Label12. Font. Color: =clGreen; level: =1000; end;

1: begin Form1. Label12. Caption: ='Нормальный'; Form1. Label14. Caption: ='500 ходов'; Form1. Label12. Font. Color: =clBlue; level: =500; end; 2: begin Form1. Label12. Caption: ='Тяжелый'; Form1. Label14. Caption: ='150 ходов'; Form1. Label12. Font. Color: =clOlive; level: =150; end elsebeginForm1. Label12. Caption: ='Нереальний'; Form1. Label14. Caption: ='1ход'; Form1. Label12. Font. Color: =clOlive; level: =1; end; end; end; end.

Додаток В

Лістинг модуля Unit3

unit Unit3;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, XPMAN, ComCtrls, ExtCtrls, jpeg;

type

TForm3 = class (TForm)

Image1: TImage;

Timer1: TTimer;

ProgressBar1: TProgressBar;

procedure Timer1Timer (Sender: TObject);

private

{Private declarations} public {Public declarations} end;

var

Form3: TForm3; i: integer;

implementation

uses Unit1, Unit2, Unit4, Unit10, Unit11, Unit12, Unit5, Unit6, Unit7,

Unit8, Unit9;

{$R *. dfm}

procedure TForm3. Timer1Timer (Sender: TObject);

begin

i: =i+1; ProgressBar1. Position: =i;

if i=100 then begin Timer1. Enabled: =False; i: =0;

Form1. Show; Form2. Visible: =False; Form3. Close;

Form1. Timer1. Enabled: =True;

end; end; end.

ПоказатьСвернуть
Заполнить форму текущей работой