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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    1,41 Мб
  • Опубликовано:
    2013-03-14
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

Зміст

Вступ

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

.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().


Програма буде розроблятися засобами мови 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;;.

Похожие работы на - Гра 'Пам’ять'

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!