Гра "Пам’ять"

 

Зміст


Вступ

. Розробка і обґрунтування технічного завдання

.1 Вимоги користувача

.2 Вимоги до програмної реалізації

.3 Функціональні можливості програми

.4 Можливі зміни програми з метою вдосконалення

.5 Варіантний аналіз і вибір методу вирішення основної задачі

. Розробка структури програмної системи

.1 Початок загального алгоритму вирішення задачі

.2 Деталізація хвильового алгоритму

.3 Структурні звязки між функціями програми

. Програмна реалізація

. Тестування і перевірка програми

.1 Розробка тестів

.2 Аналіз результатів роботи програми

Висновки

Список використаної літератури

Додаток А Текст програми

програма гра память алгоритм

Вступ


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

Отож ігрова індустрія розросталася у всіх напрямах. Зокрема на компютер переносили ігри які були в реальному житті в карточному або іншому графічному варіанті. Зараз на компютері ми можемо побачити ігри - замінники шахів, шашок, карточних ігор, настільних ігор і .т.д.

Однією з таких ігор є гра Память.

Дана гра розрахована на широке різноманіття гравців - від дітей до дорослих. Окрім звичайної мети - пройти гру, гравець покращує свою память граючи в дану гру.

В теперішній час дана гра вже не одноразово імпортована на цифрову техніку (зокрема на мобільні телефони, електронні міні-іграшки, мобільні ПК і т.д.) і існує в багатьох різних варіаціях.


1. Розробка і обґрунтування технічного завдання


.1 Вимоги користувача


Потрібно розробити гру, яка б відображала на вікні десять пар малюнків у довільному порядку. На протязі гри користувач повинен знаходити кожному малюнку пару серед решти, після чого однакові картинки повинні зникати. Гра ведеться доти, поки на екрані не залишиться жодного малюнку.

При запуску програми, на екрані повинно зявитися головне вікно, на якому будуть розміщенні: головне меню з «Рестарт», «Вихід», «Автор» та вільне місце для відображення малюнків. В головному меню користувач може розпочати нову гру, при виборі підменю «Рестарт» розпочинається нова гра, при виборі підменю «Вихід» відбувається вихід з гри. Меню «Автор» можна побачити інформацію про розробника та версію програми».


1.2 Вимоги до програмної реалізації


Програма повинна відповідати вимогам користувача.

Мовою програмування обрана мова Delphi. Вона забезпечить програміста усіма необхідними, для реалізації програмної частини роботи засобами (написання класів, використання об'єктів).

Середовищем програмування обраноBorland Developer Studio, через те, що вона втілює новітні технології, які дозволяють програмісту розробляти програмні продукти більш швидкими та надійними, має дуже великий запас засобів для побудови прикладних програм та приємна у користуванні.

Програміст може використовувати стандартні функції мови програмування та створювати власні, підключати заготовочні файли даного компілятора та включати власні файли. Основна бібліотека, яка буде використовуватися у розробці програми - Visual Component Library (VCL).

Програма розробляється під операційні системи Microsoft Windows, а тому повинна мати стандартний графічний інтерфейс властивий усім Windows-програмам. Програмний комплекс повинен містити стандартні модулі і модулі користувача, процедури і функції користувача, файл, в якому міститиметься інформація про застосування програми.


.3 Функціональні можливості програми


Програма повинна відобразити головне вікно з меню. При запуску програми повинно зявитись вікно і розміститись двадцять закритих малюнків. Серед двадцяти малюнків є десять різних малюнків, які повторюються два рази. При натисненні мишкою на якийсь малюнок він повинен «відкритись» (відобразити справжній зміст). На екрані одночасно можуть бути зображені лише два перевернутих малюнки. Коли на екрані відображається два однакових перевернутих малюнка - вони обидва повинні зникнути. Коли на екрані не залишиться жодного малюнка (тобто кожному малюнку знайдена відповідна «пара») гра рахуватиметься завершеною і буде виведено на екран повідомлення «Ви перемогли!!!» з виведеним часом перемоги. При виборі підменю «Рестарт» гра повинна розпочатись заново. При виборі підменю «Вихід» програма завершиться.


.4 Можливі варіанти зміни та вдосконалення програми


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

Друге - удосконалення програми, видалення помилок програмістів та неоднозначностей, удосконалення безпосередньо існуючих алгоритмів, або заміна на нові - більш прогресивні.

З варіантів зміни та вдосконалення можна розробити план що до подальшого вдосконалення програмного проекту:

Оновлення та розробка більш сучасного інтерфейсу з врахуванням ергономіки. Розробка стилю програми;

Вдосконалення програми, видалення прихованих помилок, розробка більш сучасних алгоритмів (оптимізація).

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

Написання додаткових новацій них вдосконалень: до гри можна застосувати інноваційні графічні технології з підключенням компютерного гравця який веде паралельну гру до користувача з протистоянням в часі.


.5 Варіантний аналіз та вибір методу вирішення основної задачі


Дослідження алгоритмів є однією з основ програмування, а також багатим полем елегантних технологій і складних математичних досліджень. І це - щось більше, ніж розвага для теоретично підготовлених: хороший алгоритм або структура даних можуть дозволити вирішити протягом декількох секунд проблему, яка без них вирішувалася б роки.

У таких спеціальних областях, як графіка, бази даних, синтаксичний розбір, цифровий аналіз і моделювання, можливість рішення задачі цілком і повністю залежить від наявності спеціальних алгоритмів і структур даних. Я розробляв програму в новій для мене області програмування, тому я з'ясував, які напрацювання вже існують, і по ним вже розробляв свою.

Кожна програма залежить від алгоритмів і структур даних, але рідко буває потрібно винаходити нові алгоритми. Навіть у складній програмі, наприклад в компіляторі або web-браузері, структури даних здебільшого є масивами, списками, деревами і хеш-таблицями. Коли програмі потрібна витонченіша структура, вона, швидше за все, грунтуватиметься на цих простіших структурах. Відповідно, завдання програміста - знати, які алгоритми і структури доступні, а також розуміти, як вибрати серед них потрібні [1]. Є лише невелика частина основних алгоритмів, які застосовуються практично в кожній програмі, - це, перш за все, пошук і сортування, і навіть ці алгоритми часто включені в бібліотеки. Майже всі структури даних також зроблені на основі декількох фундаментальних структур. При виборі алгоритму потрібно зробити декілька кроків. По-перше, слід вивчити існуючі алгоритми і структури даних. Подумайте, який об'єм даних може обробити програма. Якщо завдання припускає скромні розміри даних, то вибирайте прості технології; якщо кількість даних може рости, то виключите рішення, що погано пристосовуються до цього зростання. Там, де можливо, використовуйте бібліотеку або спеціальні засоби мови. Якщо нічого готового не немає, то напишіть або дістаньте коротку, просту, зрозумілу реалізацію. Спробуйте її у дії. Якщо вимірювання показують, що вона дуже повільна, тільки тоді вам варто перейти до більш просунутих технологій. [3] Хоча є багато структур даних, частина яких просто необхідна для прийнятної продуктивності в певних умовах, більшість програм заснована на масивах, списках, деревах і хеш-таблицях. Кожна з цих структур підтримує набір операцій-примітивів, що зазвичай включає: створення нового елементу, пошук елемента, додавання елементу куди-небудь, можливо, видалення елементу і застосування деякої операції до всіх елементів. [2] Для виконання поставленої задачі я придумував власний алгоритм.

2. Розробка структури програмної системи


.1 Початок загального алгоритму вирішення задачі


Початок;

Ініціалізація і об'явлення змінних;

Запуск основної форми;

Перевірка використання пунктів меню з подальшим викликом відповідних їм функціям.

Кінець.


.2 Деталізація алгоритму


Виконаємо деталізацію роботи програми, загальна ідея якої подана в попередньому пункті.

Основними задачами програми є відображення на формі малюнків та подальшого використання впливу на них.

Спочатку ми створюємо масив m_nA який складається з двадцяти одного елемента. Двадцять елементів відповідають за збереження в них ідентифікатора відповідного малюнка. У двадцять першому записаний ідентифікатор пустого малюнка.

Також створимо змінну Result в яку записуватимемо кількість відкритих пар. Коли змінна досягне значення 10 гра буде завершеною.

Імя проекту - Kyrsova. Отже функція яка відповідає за відображення промальовки вікна знаходиться у класі CKyrsovaDlg і називається OnPaint(). Отже в ній робимо перевірку на попередні зміни на малюнки: ті малюнки які зараз перевернуті, відображають свій істинний зміст. Ті малюнки яким знайдені пари - не відображаються. У функції CKyrsovaDlg::OnMenuAbout() відбувається виклик відображення вікна About. У функції CKyrsovaDlg::OnMenuHelp() відбувається виклик відображення вікна Help. У функції CKyrsovaDlg::OnMenuNew() відбувається виклик відображення вікна New Game. В ній ми обнуляємо значення змінної ResultПотім у цій же функції ми заповняємо масив m_nA ідентифікаторами пустого (або вже знищеного) малюнка. Потім за допомогою функції rand() ми у довільному порядку заповняємо масив m_nA малюнками і виводимо на головне вікно з попереднтою перевіркою щоб у один і той самий елемент масива не було записане значення двічі та щоб кожен малюнок повторювався два рази. Далі у нас описана функція CKyrsovaDlg::OnLButtonUp яка визивається при натисненні лівої кнопки миші на головному вікні. У ній ми перевіряємо де натиснутв ліва кнопка миші і вираховуємо номер елемента масиву m_nA і вписуємо цей номер в змінну і. Якщо ліва кнопка миші натиснута на малюнку то ми перевіряємо що було записано у елементі масиву з попередньо визначеним номером. Якщо там записано ідентифікатор пустого малюнку чи натиснуто на той малюнок, який вже відкритий то проводиться вихід з функції. Якщо попередні умови не виконуються то ми перевертаємо малюнок і звіряємо значення m_nA[i] з попередньо натиснутим малюнком. Якщо ці значення рівні то забираємо обидва малюнки. У функції CKyrsovaDlg::TimerProc1() виконується теж саме що і в функції OnPaint(), а також перевіряється значення змінної Result, і якщо воно рівне десятьом то виводиться повідомлення про перемогу.


.3 Структурні звязки між функціями програми


На початку програми робимо доступними бібліотеки за допомогою заголовних файлів: stdafx.h, CkyrsovaDlg.h, Kyrsova.h, afxwin.h, afxcall.h. Потім об'являємо класи, та описуємо методи цих класів.

Заголовочні stdafx.h, afxwin.h, afxcall.h файли підключаються автоматично середою при створенні каркасу програми. В них міститься прототипи функцій бібліотеки MFC та деякі значення-макроси зарезервовані директивою define.

В заголовочному файлі Kyrsova.h міститься головний клас програми CKyrsovaApp (наслідується від CWinApp). В цьому класі описаний метод InitInstance. Своїм запуском він активує головне вікно програми.

В KyrsovaDlg.h - клас головного вікна програми, в ньому містяться також методи для обробки отриманої інформації.

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

При натисканні кнопки «Вихід», викликається метод Close().


3. Програмна реалізація


Програма буде розроблятися засобами мови Delphi, в середовищі Borland Developer Studio.

Основний файл, з якого починається робота програми - MainMemoryForm.pas, в ньому створюється обєкт класу CKyrsovaDlg (опис класу знаходиться у заголовочному файлі KyrsovaDlg.h). Цей клас наслідує усі властивості та методи класу CDialog, тобто отриманий клас - нащадок і являє собою модернізований клас діалогового вікна. dlg;Створення обєкту даного класу..DoModal();„Запуск форми - тобто показ її користувачеві на екрані.

В програмі підключаються заголовочні файли stdafx.h, Kyrsova.h, KyrsovaDlg.h, CMySocket.h, afxwin.h, afxcall.h..h, afxcall.h, stdafx.h - в цих фалах містяться прототипи функцій, які потрібні для роботи з VCL (Visual Components Library) та деякими функціями операційної системи, в них також містяться директиви підключення інших заготовочних файлів..h - в цьому заголовочному фалі міститься опис класу програми - CKyrsovaApp, який наслідується від базового класу CWinApp (основний базовий клас програми)..h - містить опис класу головного вікна програми. Це клас наслідує методи і властивості від базового класу діалогових вікон CDialog.


4. Тестування і перевірка програми


.1 Розробка тестів


Більша частина програмного забезпечення, що створюється сьогодні, верифікується при допомозі тестування. Один з методів тестування заснований на спостереженні того, що помилки у програмному забезпеченні мають тенденцію до групування (принцип Парето). Завжди існує певна кількість модулів, які є більш проблематичними, ніж інші. Тому, якщо ми виявимо ці модулі і перевіримо їх більш ретельно, то виявимо більшу частину існуючих у системі помилок. Найбільш проблематичним у даній програмі є модуль CKyrsovaDlg, а точніше методи прийому та відправлення повідомлень.

Для такого роду програм не існує якихось однозначних тестів. Їх роботу можна перевірити тільки на практиці.

Наприклад можна перевірити розроблену програму не тільки на компютері, на якому вона розроблялася, а й на інших системах.

При запуску програми, на екрані зявляється головне вікно, на якому розміщенні: головне меню з елементами «Вихід», «Рестарт» та «Автор» та вільне місце для відображення малюнків. При виборі підменю «Рестарт» розпочинається нова гра, при виборі підменю «Вихід» відбувається вихід з гри. Меню «Автор» містить підменю «Про програму» та «Довідка». При виборі підменю «Довідка» інформацію про розробника та версію програми.


4.2. Аналіз результатів роботи програми


Сама програма являє собою гру з візуальним інтерфейсом, яка спрямована на поліпшення зорової памяті.

Помилок у програмі не виявлено.


Мал. 1.1 - Заставка і автор програми


Мал 1.2 - Головне меню програми

Мал к 1.3 - Вихідні дані, запит на рестарт гри



Висновки


Засобами мови програмування Delphi була cтворена гра Память, що спрямована на поліпшення зорової памяті.

Переваги - програма розроблена на мові Delphi, що забезпечило швидкодію програми та незначні її розміри.

Недоліки - великий обсяг необхідної пам'яті.



Список використаної літератури


Андре Ла Мот „Секрети програмування ігор

Електронне видання „Ілюстрований самовчитель по практиці програмування

Т.И. Зугельман Москва 2006г. „Полный справочник по Delphi

С.В. Тополев BDS - Руководство разработчика



Додаток А


Лістинг програми

.pasMainMemoryFormUnit;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ImgList, ExtCtrls, StdCtrls, Buttons, ZastUnit;= class(TForm): TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImage;: TImageList;: TTimer;: TTimer;: TTimer;: TLabel;: TLabel;: TTimer;: TSpeedButton;: TSpeedButton;: TSpeedButton;FormCreate(Sender: TObject);clicktimerTimer(Sender: TObject);secTimer(Sender: TObject);minTimer(Sender: TObject);showtimerTimer(Sender: TObject);SpeedButton1Click(Sender: TObject);SpeedButton2Click(Sender: TObject);SpeedButton3Click(Sender: TObject);FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

{ Private declarations }_started : boolean;_ImgnumList : TList;_object, m_object2 : TObject;_x : longint;_block, m_showpoints : boolean;_min, m_sec : longint;_CurTime : string;RandomizeList(var ExceptList : TList; count, minvalue, maxvalue : longint) : boolean;FindObjectInItemsOfList(l:TList; n:longint):longint; // поиск объекта в спискеOnNewGame;ApplyImages(toShow : boolean = false);OnClick2(Sender : TObject);CheckForFinish : boolean;OnFinish;OnStart;OnShowTime;OnRestart;StartTimers;StopTimers;;: TMainMemoryForm;

{$R *.dfm}TMainMemoryForm.FormCreate(Sender: TObject);_ImgnumList := TList.Create;_object := TObject.Create;_object2 := TObject.Create;.Enabled := false;.Enabled := false;.Enabled := false;.Enabled := false;;;TMainMemoryForm.FormKeyDown(Sender: TObject; var Key: Word;: TShiftState);key of

: close;

: OnRestart;

: ZastFormN.Run;;;TMainMemoryForm.minTimer(Sender: TObject);m_min > 58 then_min := 0(m_min);;TMainMemoryForm.RandomizeList(var ExceptList: TList; count, minvalue, maxvalue: Integer) : boolean; //Перемішування списку, x2, i, n : longint;;.clear;i := 1 to Count doTrue do:= random(maxvalue) + minvalue;:= FindObjectInItemsOfList(ExceptList, x);n < 0 then.Add(Tobject(x));;;;;;TMainMemoryForm.secTimer(Sender: TObject);m_sec > 58 then_sec := 0(m_sec);;TMainMemoryForm.showtimerTimer(Sender: TObject);;;TMainMemoryForm.SpeedButton1Click(Sender: TObject);;;TMainMemoryForm.SpeedButton2Click(Sender: TObject);;;TMainMemoryForm.SpeedButton3Click(Sender: TObject);.Run;;TMainMemoryForm.clicktimerTimer(Sender: TObject);.GetBitmap(0, TImage(m_object2).Picture.Bitmap);(m_object2).Repaint;(m_object2).Tag := 0;.GetBitmap(0, TImage(m_object).Picture.Bitmap);(m_object).Repaint;(m_object).Tag := 0;_x := -1;_block := false;.Enabled := false;CheckForFinish then;;TMainMemoryForm.FindObjectInItemsOfList(l:TList; n:longint):longint; // пошук обєкта в списку:longint;:= -1;i:=0 to l.count-1 dolongint(l[i])=n then:=i;;;;TMainMemoryForm.OnNewGame;: longint;: string;_started := false;_block := false;.Caption := '00:00';_min := 0;_sec := 0;(m_ImgnumList, 20, 1, 20);;;TMainMemoryForm.ApplyImages(toShow : boolean = false);, n, i, j : longint;_x := -1;i := 1 to 20 doj := 0 to self.ControlCount - 1 doself.Controls[j].Name = 'Image' + inttostr(i) then:= longint(TObject(m_ImgnumList[i-1]));x < 11 then:= x:= x - 10;toShow then.GetBitmap(x, TImage(self.Controls[j]).Picture.Bitmap).GetBitmap(11, TImage(self.Controls[j]).Picture.Bitmap);(self.Controls[j]).Tag := x;(self.Controls[j]).OnClick := OnClick2;(self.Controls[j]).Repaint;;;;TMainMemoryForm.OnClick2(Sender: TObject);, x : longint;: string;not m_started then;m_block then;:= TImage(Sender).Tag;x = 0 then;TImage(m_object).Name = Timage(sender).Name then;m_x = -2 then.GetBitmap(11, TImage(m_object).Picture.Bitmap);(m_object).Repaint;.GetBitmap(11, TImage(m_object2).Picture.Bitmap);(m_object2).Repaint;_x := -1;;m_x = -1 then.GetBitmap(x, TImage(Sender).Picture.Bitmap);(Sender).Repaint;_object := Sender;_x := x;;;m_x = x then_object2 := Sender;.GetBitmap(x, TImage(Sender).Picture.Bitmap);(Sender).Repaint;_block := true;.Enabled := true;.GetBitmap(x, TImage(Sender).Picture.Bitmap);(Sender).Repaint;_object2 := m_object;_object := Sender;_x := -2;;;;TMainMemoryForm.CheckForFinish : boolean;: longint;:= false;i := 0 to self.ControlCount - 1 do(Tcontrol(self.Controls[i]).ClassType = TImage) and

(Tcontrol(self.Controls[i]).Tag <> 0) then;:= true;;TMainMemoryForm.OnFinish;: longint;_started := false;;_ShowPoints := true;;(true);:= MessageDlg('Гру завершено. Ви відкрили всі зображення за '+ #13 +(m_min)+ ' хвилин і ' + inttostr(m_sec) + ' секунд.' + #13 +

'Бажаєте спробувати знову?', mtInformation, mbyesno, 6);but = 6 then;;TMainMemoryForm.OnStart;_started := true;;;TMainMemoryForm.OnShowTime;,s : string;m_min < 10 then:= '0' + inttostr(m_min):= inttostr(m_min);m_sec < 10 then:= '0' + inttostr(m_sec):= inttostr(m_sec);m_showpoints then_CurTime := m + ':' + s_CurTime := m + ' ' + s;.Caption := m_curTime;_showpoints := not m_showpoints;;TMainMemoryForm.OnRestart;_started := false;.Enabled := false;.Enabled := false;.Enabled := false;;;TMainMemoryForm.StartTimers;.Enabled := true;.Enabled := true;.Enabled := true;;TMainMemoryForm.StopTimers;.Enabled := false;.Enabled := false;.Enabled := false;;..pasZastUnit;,,,,Messages, Mask, SysUtils, Variants, Classes, Controls,, ExtCtrls, stdctrls, checklst, comctrls, grids;= class(TForm): TImage;: TTimer;Image1Click(Sender: TObject);FormCreate(Sender: TObject);FormKeyPress(Sender: TObject; var Key: Char);Label1Click(Sender: TObject);Timer1Timer(Sender: TObject);FormCloseQuery(Sender: TObject; var CanClose: Boolean);

{ Public declarations }:trect;_Path, m_FileName, m_AddText: string;_BackColor : TColor;_StartMode : boolean;_ToClose : boolean;Run(FileName:string = '');Run2;;: TZastFormN;_Validations: array [1..10] of string;

{$R *.dfm}TZastFormN.Image1Click(Sender: TObject);not m_ToClose then;;;TZastFormN.Run(FileName:string = '');_ToClose := true;;;TZastFormN.Run2;_ToClose := false;;.Enabled := true;;TZastFormN.Timer1Timer(Sender: TObject);m_ToClose := true;;.Enabled := false;;TZastFormN.Label1Click(Sender: TObject);;;TZastFormN.FormCloseQuery(Sender: TObject; var CanClose: Boolean);CanClose := m_ToClose;;TZastFormN.FormCreate(Sender: TObject);: string;_ToClose := false;:=true;;TZastFormN.FormKeyPress(Sender: TObject; var Key: Char);(key = #27) and m_ToClose then;;.


Зміст Вступ . Розробка і обґрунтування технічного завдання .1 Вимоги користувача .2 Вимоги до програмної реалізації .3 Функціональні можливос

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ