Материал: Розробка проекту програми гри в хрестики нулики

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

З методів, властивих кнопках, має сенс відзначити один - Click. Виконання цього методу еквівалентно клацанню на кнопці, тобто викликає подія кнопки OnClick. Цим можна скористатися, щоб продублювати якимись іншими діями користувача клацання на кнопці. Нехай, наприклад, ви хочете, щоб при натисканні користувачем клавіші з символом "С" або "з" в будь-який момент роботи з додатком виконувалися операції, передбачені в обробнику події OnClick кнопки Button1. Оскільки невідомо, який компонент буде натискатися у фокусі в момент цієї події, треба перехопити його на рівні форми. Такий перехоплення здійснюється, якщо встановити властивість форми KeyPreview = true. Тоді в обробнику події форми OnKeyPresss можна написати оператор:((Кеу == 'С') || (Кеу == 'з'))-> Click ();

Якщо користувач ввів символ "С" або "з", то в результаті буде виконаний обробник клацання кнопки Button1.

. Edit

Компонент Edit призначений для введення тексту. Розташований він на вкладці Standard Палітри компонентів:

Основна його властивість - це Text. Воно дозволяє читати і записувати деякий текст в Edit. Зверніть увагу, що ця властивість має строковий тип (вірніше тип AnsiString, але зараз це уточнення не настільки важливо). Це означає, що якщо користувач вводить в edit деяке число, то необхідно додаткове перетворення. Робиться це пріблізітетльно так:z = StrToInt (Edit1-> Text);

Крім функції StrToInt є обернена до неї IntToStr. Вони переводять рядок в ціле число і ціле число в рядок відповідно. Крім цієї пари функцій є пара StrToFloat і FloatToStr, котрі працюють з речовими числами.

Основна подія для edit'а - це Change. Виникає при зміні властивості Text.

Крім того, часто використовуються такі події як KeyPress (виникає при введенні кожного символу), KeyDown і KeyUp (виникають при натисканні та відпусканні клавіші).

3.3 Структура програми з описом функцій складових частин і зв'язків між ними


Структура програми являє собою набір функцій. Наша програми містить 5 функцій.

.        void __fastcall TForm1::FormCreate(TObject *Sender)

Стандартна функція середовиша Borland C++ Builder. Під час виконання цієї функції відбувається створення об’єктів програми і початок відображення форми для взаємодії з користувачем.__fastcall TForm1::Button1Click(TObject *Sender)

Функція викликається шляхом натиснення клавішою миші на кнопку Зєднатись, розміщеної у вікні програми. Під час виконання цієї функції ми здійснюємо з’єднання с клієнтом за допомогою ІР-адреси..

.        void __fastcall TForm1::Button2-10Click(TObject *Sender)

Функція активізується шляхом натиснення клавішою миші на кнопку І відповідає за безпосередгній процес гри.

.        void __fastcall TForm1::Edit2KeyDown(TObject *Sender, WORD &Key, TShiftState Shift)

Ця функція відправляє повідомлення між гравцями.

.        void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,*Socket)

Функція відповідає за отримання повідомлень і їх обробку.

.        void __fastcall TForm1::ServerSocket1ClientDisconnect - ServerSocket1 ClientConnect (TObject *Sender,TCustomWinSocket *Socket)

Функції відповідають за статус з’єднання.

.        void __fastcall TForm1::test()

Функція призначена для перевірки на виграш.

3.4 Зв'язок програми з іншими програмами


Наш проект складається з двох частин: клієнтської частини і серверної, тобто два гравці, які під’єднуються один до одного для гри в хрестики нулики. Ці дві програми взаємодіють за допомогою мережі обмінюючись повідомленнями.

4. Необхідні технічні засоби


4.1 Типи комп'ютерів та пристроїв, що використовуються при роботі програми


При роботі програми використовується IBM-сумісний комп'ютер. Будь-яких інших специфічних чи додаткових пристроїв програма не потребує, окрім наявності мережі між двома чи більше ПК

5. Виклик і завантаження


5.1 Способи виклику програми


Виклик програми виконується завантаженням на виконання файлу server.exe та client.exe

.2 Адреса завантаження програми


Адреса завантаження визначається операційною системою автоматично.


Програма при роботі не ініціює запити на виділення оперативної пам’яті, крім тої, що виділена їй для роботи операційною системою.

5.4 Обсяг програми


Файл server.exe має обсяг 40 Кб , файл client.exe - 40 Кб

6. Вхідні дані


6.1 Характер вхідних даних


Вхідні дані для роботи програми являють IP-адрес клієнта

6.2 Організація вхідних даних


Вхідні дані організовуються у вигляді IP-адреси.

6.3 Попередня підготовка вхідних даних


Попередня підготовка вхідних даних не обов’язкова.

7. Вихідні дані


7.1 Характер вихідних даних


Вихідними даними є повідомлення і результати гри

7.2 Організація вихідних даних


Вихідні дані організовані у вигляді повідомлень

.3 Формат, описання та спосіб кодування даних


Текстові повідомлення, що виводяться на екран.

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


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

Тестування програмного забезпечення (англ. Software Testing) - це процес технічного дослідження, призначений для виявлення інформації про якість продукту відносно контексту, в якому він має використовуватись. Техніка тестування також включає як процес пошуку помилок або інших дефектів, так і випробування програмних складових з метою оцінки. Може оцінюватись:

·              відповідність вимогам, якими керувалися проектувальники та розробники

·              правильна відповідь для усіх можливих вхідних даних

·              виконання функцій за прийнятний час

·              практичність

·              сумісність з програмним забезпеченням та операційними системами

·              відповідність задачам замовника.

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

Тестування ПЗ може надавати об'єктивну, незалежну інформацію про якість ПЗ, ризики відмови, як для користувачів так і для замовників.

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

Тестування - це одна з технік контролю якості, що включає в себе

·              Планування робіт (Test Management)

·              Проектування тестів (Test Design)

·              Виконання тестування (Test Execution)

·              Аналіз отриманих результатів (Test Analysis).

Верифікація (Verification) - це процес оцінки системи або її компонентів з метою визначити чи задовольняють результати поточного етапу розробки умовам, сформованим на початку цього етапу. Тобто чи виконуються цілі, терміни, завдання з розробки проекту, визначені на початку поточної фази. Валідація (Validation) - це визначення відповідності розроблюваного програмного забезпечення між очікуваннями і потребами користувача, вимогам до системи.

План Тестування (Test Plan) - це документ, що описує весь обсяг робіт з тестування, починаючи з опису об'єкта, стратегії, розкладу, критеріїв початку і закінчення тестування, до необхідного в процесі роботи обладнання, спеціальних знань, а також оцінки ризиків з варіантами їх вирішення.

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

Тестовий випадок (Test Case) - це документ, що описує сукупність кроків, конкретних умов і параметрів, необхідних для перевірки реалізації тестованої функції або її частини.

Баг/Дефект Репорт (Bug Report) - це документ, що описує ситуацію або послідовність дій (Steps), що призвела до некоректної роботи об'єкта тестування (Misbehavior), із зазначенням причин та очікуваного результату (Expected Result).

Тестове Покриття (Test Coverage) - це одна з метрик оцінки якості тестування, що представляє із себе щільність покриття тестами вимог або коду, що виконується.

Деталізація Тест Кейсів (Test Case Specification) - це рівень деталізації опису тестових кроків і необхідного результату, при якому забезпечується розумне співвідношення часу проходження до тестового покриття.

Час Проходження Тест Кейса (Test Case Pass Time) - це час від початку проходження кроків тест кейса до отримання результату тесту.

Отже перейдемо до безпосередньої перевірки нашої програми на працездатність.

Для початку запускаємо серверну частину програми - server.exe/

Наша програма розпочинатиметься виводом на екран монітора комп’ютера головного вікна (див рис.8.1).

Рис.8.1. Головне вікно серверної програми

Після цього запускаємо клієнтську частину - client.exe (див рис 8.2)

Рис.8.2. Головне вікно клієнтської програми

Тепер в серверній програмі вводимо клієнтський IP - адрес і натискаємо на кнопку Зєднатись. В нижій частині вікно з’явиться напис, що інформує про статус підключення(див рис 8.3)

Рис.8.3. З’єднання сервера з клієнтом

Рис.8.4. Результати гри

Також під час гри суперники можуть обмінюватись повідомленнями (див. рис. 8.5).

Рис.8.5.Обмін повідомленнями

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

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

Висновок


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

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

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


1.   Інформатика. Мова програмування С++. Спецкурс. 10-12 класи. Навчальний посібник / Лєхан С.А. - Шепетівка, «Аспект», 2007 - 160 с.

2.      Об’єтно-орієнтоване програмування мовою С++, Навчальний посібник,Т.Є.Рак, Львів,2011 - 401с

.        Борис Пахомов - C C++ и MS Visual С++ 2010 для начинающих - БХВ-Петербург, 2011 - 736 с.

.        Сайт: www.google.com

.        Сайт: www.yandex.ua

.        Сайт: www.wikipedia.org

Додаток А


//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"*Form1;__fastcall TForm1::test()

{(((Button2->Caption=="X") && (Button3->Caption=="X") && (Button4->Caption=="X")) ||

((Button5->Caption=="X") && (Button6->Caption=="X") && (Button7->Caption=="X")) ||

((Button8->Caption=="X") && (Button9->Caption=="X") && (Button10->Caption=="X")) ||

((Button2->Caption=="X") && (Button5->Caption=="X") && (Button8->Caption=="X")) ||

((Button3->Caption=="X") && (Button6->Caption=="X") && (Button9->Caption=="X")) ||

((Button2->Caption=="X") && (Button6->Caption=="X") && (Button10->Caption=="X")) ||

((Button4->Caption=="X") && (Button6->Caption=="X") && (Button8->Caption=="X")))

{("Ви виграли");->Socket->SendText("X");

}

}

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------__fastcall TForm1::ClientSocket1Connect(TObject *Sender,*Socket)

{->SimpleText="Connect";->Caption="Відєднатись";

}

//---------------------------------------------------------------------------__fastcall TForm1::ClientSocket1Disconnect(TObject *Sender,*Socket)

{->SimpleText="Disonnect";->Caption="Зєднатись";

}

//---------------------------------------------------------------------------__fastcall TForm1::Button1Click(TObject *Sender)

{->Address=Edit1->Text;->Active=true;

}

//---------------------------------------------------------------------------__fastcall TForm1::Button2Click(TObject *Sender)

{->Socket->SendText("b2");->Caption="X";->Enabled=false;

}

//---------------------------------------------------------------------------__fastcall TForm1::ClientSocket1Read(TObject *Sender,*Socket)

{s="";=Socket->ReceiveText();(s=="O")

{("Виграли нулики");

}(s=="b2")

{->Caption="O";->Enabled=false;

}

{(s=="b3")

{->Caption="O";->Enabled=false;

}

{(s=="b4")

{->Caption="O";->Enabled=false;

}

{(s=="b5")

{->Caption="O";->Enabled=false;

}

{(s=="b6")

{->Caption="O";->Enabled=false;

}

{(s=="b7")

{->Caption="O";->Enabled=false;

}

{(s=="b8")

{->Caption="O";->Enabled=false;

}

{(s=="b9")

{->Caption="O";->Enabled=false;

}

{(s=="b10")

{->Caption="O";->Enabled=false;

}

{->Lines->Insert(0,"Cуперник:"+s);

}

}}}}}}}}

}

//---------------------------------------------------------------------------__fastcall TForm1::Button3Click(TObject *Sender)

{->Socket->SendText("b3");->Caption="X";->Enabled=false;();

}

//---------------------------------------------------------------------------__fastcall TForm1::Button4Click(TObject *Sender)

{->Socket->SendText("b4");->Caption="X";->Enabled=false;();

}

//---------------------------------------------------------------------------__fastcall TForm1::Button5Click(TObject *Sender)

{->Socket->SendText("b5");->Caption="X";->Enabled=false;();

}

//---------------------------------------------------------------------------__fastcall TForm1::Button6Click(TObject *Sender)

{->Socket->SendText("b6");->Caption="X";->Enabled=false;();

}

//---------------------------------------------------------------------------__fastcall TForm1::Button7Click(TObject *Sender)

{->Socket->SendText("b7");->Caption="X";->Enabled=false;();

//---------------------------------------------------------------------------__fastcall TForm1::Button8Click(TObject *Sender)

{->Socket->SendText("b8");->Caption="X";->Enabled=false;();

}

//---------------------------------------------------------------------------__fastcall TForm1::Button9Click(TObject *Sender)

{->Socket->SendText("b9");->Caption="X";->Enabled=false;();

}

//---------------------------------------------------------------------------__fastcall TForm1::Button10Click(TObject *Sender)

{->Socket->SendText("b10");->Caption="X";->Enabled=false;();

}

//---------------------------------------------------------------------------__fastcall TForm1::Edit2KeyDown(TObject *Sender, WORD &Key,Shift)

{(Key==13)

{->Lines->Insert(0,"Ви:"+Edit2->Text);->Socket->SendText(Edit2->Text);->Text="";

}

}

//---------------------------------------------------------------------------

Додаток В


//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"*Form1;__fastcall TForm1::test()

{(((Button2->Caption=="O") && (Button3->Caption=="O") && (Button4->Caption=="O")) ||

((Button5->Caption=="O") && (Button6->Caption=="O") && (Button7->Caption=="O")) ||

((Button8->Caption=="O") && (Button9->Caption=="O") && (Button10->Caption=="O")) ||

((Button2->Caption=="O") && (Button5->Caption=="O") && (Button8->Caption=="O")) ||

((Button3->Caption=="O") && (Button6->Caption=="O") && (Button9->Caption=="O")) ||

((Button4->Caption=="O") && (Button7->Caption=="O") && (Button10->Caption=="O")) ||

((Button2->Caption=="O") && (Button6->Caption=="O") && (Button10->Caption=="O")) ||

((Button4->Caption=="O") && (Button6->Caption=="O") && (Button8->Caption=="O")))