Розробка ігрової програми "Багатостороння дуель"

 

Вступ

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

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

Інформаційна технологія - це технологія організації роботи інформаційної системи або взаємодії кількох інформаційних систем.

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

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

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



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


Програму реалізує модель багатосторонньої дуелі. Нижче подано її опис при трьох дуелянтах.

Сем, Білл і Джон (Нижче позначені буквами С,Б,Д) домовились битися на дуелі втрьох за такими правилами:

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

Далі вони розташовуються на однаковій відстані один від одного.

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

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

Відомо, що С - снайпер і ніколи не промахується з даної дистанції, Б - влучає лише в 80%, а Д - приблизно в 50% випадків. Яка найкраща стратегія для кожного із учасників і яка ймовірність їх виживання, якщо вони використовують оптимальні стратегії?

Розробити програму, яка буде виконувати це завдання. Програма повинна мати меню, мінімальний склад якого такий:

·Авторська заставка

·Робота програми

·Відомості про програму (інструкція)

·Вихід

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


2. Розробка алгоритму гри «Багатостороння дуель»


В розробленій програмі було реалізовано алгоритм, що складається з таких кроків:

.Жеребкування:)Вибір першого дуелянта:

)Оголошується генератор випадкових чилес (1-3). Кожному числу відповідає певний дуелянт.

)В результаті відмічання гравцем одного з трьох RadioButton-ів виконується одна з трьох умов (змінна приймає значення: 1/2/3).

)В результаті настиснення кнопки «Обрати 1-ого» відповідно до числа, що було присвоєно змінній в п.2) відображається імя першого дуелянта.)Вибір другого дуелянта:

)Оголошується генератор випадкових чилес (1-2). Кожному числу відповідає певний дуелянт (окрім обраного в п.а)).

)В результаті відмічання гравцем одного з двох RadioButton-ів виконується одна з двох умов (змінна приймає значення: 1/2).

)В результаті настиснення кнопки «Обрати 2-ого» відповідно до числа, що було присвоєно змінній в п.2) відображається імя другого дуелянта.)Третім оголошується дуелянт, якого не обрали в п.а) та п.b).

.Дуель:)Дуелянти розміщуються на своїх позиціях після натиснення кнопки «На позиції!»:

)Їх зображення та імена розміщуюються у вершинах правильного трикутника завдяки тому, що в залежності від порядку стрільби кожному елементу PictureBox із зображенням дуелянта присвоюються відповідні координати на формі, а елементам Label (що вже розміщенні у вершинах) - імена дуелянтів.

)У верхній правій частині вікна відображаються стратегії деулянта, що сріляє прешим. Оптиамальна стратегія оберається та відмічається зважаючи на ймовірності виживання дуелянта при виборі кожної стратегії (розрахунок ймовірностей описується нижче в пункті «2.5 Опис роботи програми»))Дуелянти перестрілюютсья:

)Під час натиснення кнопки «1-ша перестрілка»

.1)Виконується одна з 3-ох умов щодо імені першого дуелянта;

.2)Оголошується генератор випадкових чисел від 1 до 100;

.3)В залежності від ймовірності попадання дуелянта ставиться умова <ЙП (>ЙП) і при її виконанні жертва вмирає (виживає і стріляє у відповідь);

.3.1)Якщо дуелянт влучив у ціль:

.3.1.1)Алгоритм повторюється для дуелянта, що стріляє наступним (якщо наступний і є жетва даного стрільця, то алгоритм повторюється для наступного після жерви учасника дуелі);

.3.1.2)Елп.емент PictureBox із зображенням жертви замінюється на елемент із «перекресленим» зображенням жертви в наслідок присвоювання останньому координат першого елемента;

.3.1.3)Елементу із іменем жетви присвоються напис «імя жертви мертвий».

.3.2)Якщо дуелянт промахнувся, то для його жерви виконуються п.3) - п.1.4.2) (тільки тепер відповіді на невлучний постріл не буде, а виконається п.2)).

)Під час натиснення кнопки «2-га перестрілка»:

.1)Виконається одна з 10-и умов щодо ситуації на «полі дуелю» (хто з учасників застрелений, а хто живий);

.2)Для другого дуелянта повторюється алгоритм п.1.2) - п.1.3.2) (з врахуванням умови: якщо застрелено двоє дуелянтів, то елементу Label11 присвоюється значення «Дуель закінчено!»; а якщо застрелено тільки одного дуелянта - виконується п.3)).

)Під час натиснення кнопки «3-тя перестрілка»:

.1)Виконується одна з 4-ох умов щодо ситуації на «полі дуелю»;

.2)Для третього дуелянта повторюється алгоритм п.1.2) - п.1.3.2) (з врахуванням умови: якщо застрелено двоє дуелянтів, то елементу Label11 присвоюється значення «Дуель закінчено!»; а якщо застрелено тільки одного дуелянта - виконується п.1)).


3. Особливості мови C++


Відповідно до індивідуального завдання на курсову роботу на тему «Розробка ігрової програми Багатостороння дуель» розглянемо особливості С++.

C++ - проста, обєктно-орієнтована, інтерпретована, надійна, безпечна, архітектурно-нейтральна, переносна, високоефективна багатопотокова і динамічно-орієнтована мова. Цей набір слів достатньо точно описує мову С++. Розглянемо кожне з них.

O Безпечність. WorldWideWeb висунула C++ на передній план програмування, і C++, в свою чергу, сильно вплинула і навіть змінила обличчя Internet, розширивши спектр обєктів, які можуть розповсюджуватись у кібер-просторі. Програми нової форми - аплети -завантажуються з віддаленого сервера і можуть запускатися динамічно, тобто без участі користувача. До появи С++ такий підхід був неприпустимий з міркувань безпеки та переміщуваності. В архітектурі аплетів зроблено ряд штучних обмежень, які роблять їх цілком безпечними. Перш за все, С++ є інтерпретованою мовою і простір ресурсів С++-програми обмежений так званою віртуальною C++ машиною (VJM), яка може контролювати поведінку програми і захищати систему від побічних ефектів, які можуть виникати з вини аплета. Крім того, в мові С++ є додаткові обмеження, які не дозволять аплету стати «троянським конем». Зокрема, C++ аплет не може отримати доступ до локального жорсткого диску. При такій спробі генерується виключна ситуація.

O Ефективність. Оскільки аплети С++ інтерпретуються, а не компілюються, то їх виконання на різних платформах значно полегшується. В цьому випадку достатньо створити для кожної платформи виконуючу С++-систему. Якщо існує така система для даної операційної системи, то будь-яка С++-програма може виконуватись в даному середовищі без додаткової компіляції на цій платформі. Проте С++ не є інтерпретованою мовою в чистому розумінні. Програма на С++ компілюється. Результатом роботи компілятора С++ є байт-код (bytecode). В такий спосіб витрати на інтерпретацію зводяться до мінімуму, оскільки байт-код вже є оптимізованим, і досягається досить висока продуктивність С++-програм.

O Обєктно-орієнтована спрямованість. С++ успадкувала потужний механізм обєктно-орієнтованого програмування. Оскільки С++ розроблювався «на пустому місці», тобто не було потреби забезпечувати сумісність з попередніми версіями, розробники мали повну свободу мислення. В результаті був сформований ясний і прагматичний підхід до обєктів. Вільно переймаючи ідеї, які реалізовувалися протягом останніх десятирічь, мові С++ вдалося знайти рівновагу між парадигмою «все є обєктом» і прагматичним підходом. Обєктна модель С++ проста і легко розширюється, в той час як просі типи (як цілі) зберігаються як дані, що не є обєктами, дозволяють значно підвищити швидкість при їх обробці.

O Стійкість до помилок. Багатоплатформеність середовища Web висуває надзвичайно високі вимоги до надійності програм. Як наслідок, при розробці С++ пріоритет був відданий можливості створення стійких до помилок програм. С++ звільняє програміста від хвилювань з приводу багатьох поширених причин, які викликають помилки програмування. Як вже згадувалося, С++ є строго типізованою мовою програмування. Ще виконуюча система С++ бере на себе «прибирання сміття», тобто автоматично звільняє память, яка була розподілена динамічно. Звичайно, це дещо знижує ефективність коду, але запобігає типових помилок, коли програміст забуває звільнити виділену память, або, навпаки, звільняє память, яка ще використовується. С++ підтримує обєктно-орієнтовану обробку виключних ситуацій подібно до С. Але на відміну від С в С++ обробка виключних ситуацій є обовязковою. Тобто неможливо скомпілювати програму, яка відкриває файл, не обробивши можливі помилки типу «файл не знайдено», які виникають при цьому. Добре написана С++-програма може сама обробляти всі помилки часу виконання.

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

O Незалежність від архітектури. Основним питанням для розробників С++ стало питання довготривалості та переміщуваності. Одна з головних проблем, із якою зустрілися програмісти, полягала в відсутності гарантій того, що написана сьогодні програма завтра працюватиме з тим же успіхом, причому на тій самій машині. Оновлення операційної системи, модернізація процесора та зміна обєму оперативної памяті можуть призвести до збою програми. Розробники С++ прагнули змінити цю ситуацію і прийняли декілька важких рішень відносно мови С++ та процесу виконання С++-програми. Їх мета полягала в тому, щоб «одного разу написане працювало всюди, в будь-який час і завжди». Внаслідок цього С++ є системою, яка легко розширюється за рахунок створення нових стандартних класів та бібліотек.

O Розподіленість. Мова С++ призначена для створення програм, які працюють в розподіленому середовищі Internet на базі протоколів TCP/IP. Насправді доступ до ресурсів за допомогою URL відрізняється від доступу к файлу. Крім того в С++ наявний засіб передачі повідомлень в межах внутрішнього адресного простору. Це дозволяє забезпечити віддалене виконання процедур. Ці інтерфейси включені у пакет RMI (remotemethodinvocation). Цей засіб привносить високий рівень абстракції в програмування для середовища клієнт/сервер.

С++-програми несуть у собі значний обсяг інформації про типи часу виконання (run-timetypeinformation), яка використовується для дозволу доступу до обєктів під час роботи програми. Це дозволяє забезпечити безпечну та оптимальну динамічну компоновку. В такий спосіб досягається захищеність середовища, виконання аплетів, доступність інструментарію та ефективність розробок.

Перспективи застосування. Програми на С++ можуть знайти різне застосування в навчальному процесі: інтерактивні навчаючі програми (HTML в поєднанні з С++), програми-тести і особливо ділові ігри. Додаткові переваги можна отримати, якщо писати ці програми у вигляді аплетів, які ініціалізуються з Web сервера внутрішньої мережі Intranet. В такий спосіб можна уникнути інсталяції програми на багатьох компютерах - користувач просто запускає Web-браузер і завантажує потрібну сторінку. Для тестових програм, написаних на С++ з використанням архітектури клієнт/сервер можна підвищити ступінь конфіденційності. База даних тестових запитань знаходиться на сервері в каталозі з обмеженим доступом. Коли користувач загружає аплет, він (аплет) автоматично підключається до програми-сервера, яка виконується на сервері і може видавати запитання з бази даних у відповідь на запит користувача. В такий спосіб унеможливлюється викрадення бази даних, за умови відсутності фізичного доступу до серверу у користувачів.

Таким чином С++ технологія є дуже перспективною для застосування в розробках некомерційного спрямування. Обмеженість інструментарію С++ не проявляється в проектах невеликого обсягу і легко компенсується простотою програмування розподілених програм, які працюють з мережею Internet/Intranet. Переносимість С++ програм спрощує обмін навчальними програмами між різними навчальними закладами, відкриває можливість сумісних розробок та створення стандартних навчальних програм, наприклад для шкіл.

Крім того, дуже привабливою з точки зору ефективності, залишається ідея втілення в навчальних закладах мережевих компютерів (NetworkComputers), які працюють на базі С++, замість звичних персональних компютерів (PersonalComputers). На останок можна згадати про те що С++ добре підтримує національні абетки, оскільки розроблялася для інтернаціональної мережі Internet. Ця обставина теж є важливою рисою в умовах України. [1,2]


4. Особливості середовища Microsoft Visual Studio C++ 2008 Express Edition


Visual Studio C++ 2008 Express Edition - вільне модульне інтегроване середовище розробки програмного забезпечення. Розробляється і підтримується Visual Studio С++ 2008 Foundation.

Microsoft Visual Studio C++ 2008 Express Edition являє собою фреймворк для розробки модульних кросс-платформових застосунків із низкою особливостей:

можливість розробки ПЗ на багатьох мовах програмування (рідною є С++);

крос-платформена;

модульна, призначена для подальшого розширення незалежним розробниками;

з відкритим вихідним кодом;

розробляється і підтримується фондом Visual Studio 2008, куди входять такі постачальники ПЗ, як IBM, Oracle, Borland.

Спочатку проект розроблявся в IBM як корпоративний стандарт IDE, настановлений на розробки на багатьох мовах під платформи IBM. Потім проект було перейменовано на Microsoft Visual Studio C++ 2008 Express Edition і надано для подальшого розвитку спільноті.

Microsoft Visual Studio C++ 2008 Express Edition, насамперед, повноцінна С++, націлена на групову розробку, має засоби роботи з системами контролю версій (підтримка CVS входить у поставку Microsoft Visual Studio C++ 2008 Express Edition, активно розвиваються кілька варіантів SVN модулів, існує підтримка VSS та інших). З огляду на безкоштовність, у багатьох організаціях Microsoft Visual Studio C++ 2008 Express Edition - корпоративний стандарт для розробки ПЗ на С++.

Друге призначення Microsoft Visual Studio C++ 2008 Express Edition - служити платформою для нових розширень. Такими стали C/C++ Development Tools (CDT), розроблювані інженерами QNX разом із IBM, засоби для підтримки інших мов різних розробників.

Microsoft Visual Studio C++ 2008 Express Edition написана на С++, тому є платформо-незалежним продуктом, крім бібліотеки графічного інтерфейсу SWT, яка розробляється окремо для більшості поширених платформ. Бібліотека SWT використовує графічні засоби платформи (ОС), що забезпечує швидкість і звичний зовнішній вигляд інтерфейсу користувача. [3,4,5]


5. Пояснення щодо змінних в схемі програмної реалізації алгоритму гри «Багатостороння дуель»


ЗміннаПоясненняaЗмінна для генератору випадкових чиселa1Змінна, що приймає значення «Сем»b1Змінна, що приймає значення «Білл»c1Змінна, що приймає значення «Джон»srand()Функція часового генератору чиселlabel3Напис, що приймає значення «Імя дуелянта, що стріляє першим»radioButton1Елементи «RadioButton», що імітують жеребкуванняradioButton2radioButton3radioButton4radioButton5kДопоміжна змінна для процесу жеребкуванняlabel6Напис, що приймає значення «Імя дуелянта, що стріляє другим»label7Напис, що приймає значення «Імя дуелянта, що стріляє третім»pictureBox2Зображення СемаpictureBox3Зображення БіллаpictureBox4Зображення ДжонаpictureBox5Зображення мертвого СемаpictureBox6Зображення мертвого БіллаpictureBox7Зображення мертвого Джонаlabel13Елементи для відображення стратегії та ймовірностей виживанняlabel14label15label16label8Елементи для відображення статусу дуелянтів (Сем/Білл/Джон/ Сем мертвий/Білл мертвий /Джон мертвий)label9label10label11Індикатор завершення дуелі

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

.Заголовні файли:


·Form1.h (Меню)

#pragma once

#include "Form2.h"

#include "Form3.h"Багатостороннядуель16 {

namespace System;namespace System::ComponentModel;namespace System::Collections;namespace System::Windows::Forms;namespace System::Data;namespace System::Drawing;

/// <summary>

/// </summary>ref class Form1: public System::Windows::Forms::Form

{:(void)

{();

}

:

/// <summary>

/// </summary>

~Form1()

{(components)

{components;

}

}: System::Windows::Forms::Button^ button1;: : System::Windows::Forms::Button^ button2;: System::Windows::Forms::Button^ button3;: System::Windows::Forms::PictureBox^ pictureBox1;: System::Windows::Forms::PictureBox^ pictureBox2;

:

/// <summary>

/// </summary>::ComponentModel::Container ^components;


#pragma region Windows Form Designer generated code

/// <summary>

/// </summary>InitializeComponent(void)

{::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));>button1 = (gcnew System::Windows::Forms::Button());>button2 = (gcnew System::Windows::Forms::Button());>button3 = (gcnew System::Windows::Forms::Button());>pictureBox1 = (gcnew System::Windows::Forms::PictureBox());>pictureBox2 = (gcnew System::Windows::Forms::PictureBox());

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox1))->BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox2))->BeginInit();>SuspendLayout();

//

// button1

// >button1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>button1->Location = System::Drawing::Point(560, 12);>button1->Name = L"button1";>button1->Size = System::Drawing::Size(112, 30);>button1->TabIndex = 0;>button1->Text = L"Гра!";>button1->UseVisualStyleBackColor = true;>button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);

//

// button2

// >button2->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>button2->Location = System::Drawing::Point(559, 48);>button2->Name = L"button2";>button2->Size = System::Drawing::Size(113, 44);>button2->TabIndex = 1;>button2->Text = L"Відомості про програму";>button2->UseVisualStyleBackColor = true;>button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click);

//

// button3

// >button3->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>button3->Location = System::Drawing::Point(560, 98);>button3->Name = L"button3";>button3->Size = System::Drawing::Size(113, 30);>button3->TabIndex = 2;>button3->Text = L"Вихід";>button3->UseVisualStyleBackColor = true;>button3->Click += gcnew System::EventHandler(this, &Form1::button3_Click);

//

// pictureBox1

// >pictureBox1->BackgroundImage = (cli::safe_cast<System::Drawing::Image^ >(resources->GetObject(L"pictureBox1.BackgroundImage")));>pictureBox1->Location = System::Drawing::Point(1, 0);>pictureBox1->Name = L"pictureBox1";>pictureBox1->Size = System::Drawing::Size(552, 316);>pictureBox1->TabIndex = 3;>pictureBox1->TabStop = false;

//

// pictureBox2

// >pictureBox2->BackgroundImage = (cli::safe_cast<System::Drawing::Image^ >(resources->GetObject(L"pictureBox2.BackgroundImage")));>pictureBox2->Location = System::Drawing::Point(560, 170);>pictureBox2->Name = L"pictureBox2";>pictureBox2->Size = System::Drawing::Size(125, 145);>pictureBox2->TabIndex = 4;>pictureBox2->TabStop = false;

//

// Form1

// >AutoScaleDimensions = System::Drawing::SizeF(6, 13);>AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;>BackColor = System::Drawing::SystemColors::ButtonHighlight;>ClientSize = System::Drawing::Size(684, 311);>Controls->Add(this->pictureBox2);>Controls->Add(this->pictureBox1);>Controls->Add(this->button3);>Controls->Add(this->button2);>Controls->Add(this->button1);>Icon = (cli::safe_cast<System::Drawing::Icon^ >(resources->GetObject(L"$this.Icon")));>MaximumSize = System::Drawing::Size(700, 350);>MinimumSize = System::Drawing::Size(700, 350);>Name = L"Form1";>Text = L"Меню";>Load += gcnew System::EventHandler(this, &Form1::Form1_Load);

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox1))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox2))->EndInit();>ResumeLayout(false);


}

#pragma endregion: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {^form2 = gcnew Form2();->Show();

}: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {>Hide();^form3 = gcnew Form3();->Show();

}: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {::Show("МОДЕЛЬ, ЩО РЕАЛІЗУЄ ПРОГРАМА\n\nСем, Білл і Джон (нижче позначені буквами С, Б, Д) домовились битися на дуелі втрьох за такими правилами:\nЖеребкування визначає, хто стріляє першим, другим, третім. Далі вони розташовуються на однаковій відстані один від одного. Обмінюються вистрілами по черзі, визначеній жеребом, поки двоє не будуть убиті. Черговий стріляючий може стріляти в будь якого із інших, враховуючи йоміврність виживання та оптимальну для себе стратегію.\nВідомо, що С - снайпер і ніколи не промахується з даної дистанції, Б - влучає лише в 80%, а Д - приблизно в 50% випадків.\n\nОПИС ПРОГРАМИ 'Багатостороння дуель'\n\nКористувачу програми надається можливість:\n 1) Жеребкуванням обрати порядок, у якому розташуються учасники дуелі (С, Б, Д);\n 2) Відповідно до оптимальної стратегії, здійснювати постріли кожного дуелянта в порядку, визначеному жеребкуванням поки двоє дуелянтів не будуть вбиті.\nОбислення ймовірності виживання (далі - ЙВ) на кожен хід здійснюється наступним чином:\nЙВ того, у кого стріляють (Жертви [Ж]) дорівнює 100%-'ймовірність попадання (ЙП)' того, хто стріляє (Стрільця [Cт]).\nЙВ Ст дорівнює 'ЙП' Ст + (100% - 'ЙП' Ж). На основі даних про ЙВ дуелянта на кожен крок обирається опимальна стратегія (ОС) ведення дуелі (у вікні програми ОС позначається '+').\n\nІНСТРУКЦІЯ З УПРАВЛІННЯ\n\nЩоб розпочати гру, необхідно:\n 1) В пункті меню натиснути кнопку 'Гра!';\n 2) З'явиться вікно, де необхідно жеребкуванням обрати:\n 1. Дуелянта, який буде стріляти першим, відмітивши 1 з 3-ох пунктів (тобто витягнути жереб) і натиснувши кнопку 'Обрати 1-ого';\n 2. Дуелянта, який буде стріляти другим, відмітивши 1 з 2-ох пунктів і натистувши кнопку 'Обрати другого'.\nДуелянт, якого не вибрали при жеребкуванні, стає третім автоматично.\n 3) Натиснути кнопку 'На позиції!';\nУ вікні з'явиться графічна інтерпритація 3-сторонньої дуелі у вигляді 3-ох зображеннь дуелянтів з підписами, які відповідають індивідуальному стрільцеві, що розташовані по колу, в центрі якого знаходиться правильний трикутник (модель одинакової відстані між дуелянтами). Порядок стрільби визачений за годинниковою стрілкою. В верхній правій частині вікна будуть знаходитись можливі стратегії дуелянта, що стріляє першим, та ймовірності виживання усіх дуелянтів.\n 4) По черзі натискати кнопки '1-ша перестрілка', '2-га перестрілка' (та '3-тя перестрілка' якщо після другої перестілки загине тільки 1 дуелянт) поки не з'явиться напис:'Дуель закінчено!'\nДля виходу з програми натиснути кнопку 'Вийти' або 'Вийти з гри:(' і підтвердити своє бажання.");

}: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {>Location = System::Drawing::Point(300,150);

}

};

}


·Form2.h (Вихід)

#pragma once

#include "stdlib.h"namespace System;namespace System::ComponentModel;namespace System::Collections;namespace System::Windows::Forms;namespace System::Data;namespace System::Drawing;


Багатостороннядуель16 {


/// <summary>

/// </summary>ref class Form2: public System::Windows::Forms::Form

{:(void)

{();

//

//

}

:

/// <summary>

/// </summary>

~Form2()

{(components)

{components;

}

}: System::Windows::Forms::Label^ label1;: : System::Windows::Forms::Button^ button1;: System::Windows::Forms::Button^ button2;

:

/// <summary>

/// </summary>::ComponentModel::Container ^components;


#pragma region Windows Form Designer generated code

/// <summary>

/// </summary>InitializeComponent(void)

{>label1 = (gcnew System::Windows::Forms::Label());>button1 = (gcnew System::Windows::Forms::Button());>button2 = (gcnew System::Windows::Forms::Button());>SuspendLayout();

//

// label1

// >label1->AutoSize = true;>label1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>label1->Location = System::Drawing::Point(28, 24);>label1->Name = L"label1";>label1->Size = System::Drawing::Size(167, 16);>label1->TabIndex = 0;>label1->Text = L"Ви дійсно хочете вийти\?";

//

// button1

// >button1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>button1->Location = System::Drawing::Point(31, 65);>button1->Name = L"button1";>button1->Size = System::Drawing::Size(75, 23);>button1->TabIndex = 1;>button1->Text = L"Ні";>button1->UseVisualStyleBackColor = true;>button1->Click += gcnew System::EventHandler(this, &Form2::button1_Click);

//

// button2

// >button2->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>button2->Location = System::Drawing::Point(142, 66);>button2->Name = L"button2";>button2->Size = System::Drawing::Size(75, 23);>button2->TabIndex = 2;>button2->Text = L"Так";>button2->UseVisualStyleBackColor = true;>button2->Click += gcnew System::EventHandler(this, &Form2::button2_Click);

//

// Form2

// >AutoScaleDimensions = System::Drawing::SizeF(6, 13);>AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;>BackColor = System::Drawing::SystemColors::ButtonHighlight;>ClientSize = System::Drawing::Size(250, 112);>Controls->Add(this->button2);>Controls->Add(this->button1);>Controls->Add(this->label1);>FormBorderStyle = System::Windows::Forms::FormBorderStyle::SizableToolWindow;>MaximumSize = System::Drawing::Size(266, 151);>MinimumSize = System::Drawing::Size(266, 151);>Name = L"Form2";>Text = L"Вихід";>Load += gcnew System::EventHandler(this, &Form2::Form2_Load);>ResumeLayout(false);>PerformLayout();


}

#pragma endregion: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {>Close();

}: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {(0);

}: System::Void Form2_Load(System::Object^ sender, System::EventArgs^ e) {>Location = System::Drawing::Point(533,283);

}

};

}


·Form3.h (Дуель)

#pragma once

#include "stdlib.h"

#include "time.h"

#include "Form2.h"

namespace System;namespace System::ComponentModel;namespace System::Collections;namespace System::Windows::Forms;namespace System::Data;namespace System::Drawing;


Багатостороннядуель16 {

/// <summary>

/// </summary>ref class Form3: public System::Windows::Forms::Form

{:(void)

{();

}

:

/// <summary>

/// </summary>

~Form3()

{(components)

{components;

}

}: System::Windows::Forms::Label^ label1;: System::Windows::Forms::RadioButton^ radioButton1;: System::Windows::Forms::RadioButton^ radioButton2;: System::Windows::Forms::RadioButton^ radioButton3;: System::Windows::Forms::Button^ button1;: System::Windows::Forms::Label^ label2;: System::Windows::Forms::Label^ label3;: System::Windows::Forms::RadioButton^ radioButton4;: System::Windows::Forms::RadioButton^ radioButton5;: System::Windows::Forms::Button^ button2;: System::Windows::Forms::Label^ label4;: System::Windows::Forms::Label^ label5;: System::Windows::Forms::Label^ label6;: System::Windows::Forms::Label^ label7;: System::Windows::Forms::Button^ button3;

: System::Windows::Forms::Label^ label8;: System::Windows::Forms::Label^ label9;: System::Windows::Forms::Label^ label10;: System::Windows::Forms::Button^ button4;: System::Windows::Forms::Button^ button5;: System::Windows::Forms::Button^ button6;

: System::Windows::Forms::Label^ label11;: System::Windows::Forms::Label^ label12;: System::Windows::Forms::Label^ label13;: System::Windows::Forms::Label^ label14;: System::Windows::Forms::Label^ label15;: System::Windows::Forms::Label^ label16;: System::Windows::Forms::Button^ button7;: System::Windows::Forms::PictureBox^ pictureBox1;: System::Windows::Forms::PictureBox^ pictureBox2;: System::Windows::Forms::PictureBox^ pictureBox3;: System::Windows::Forms::PictureBox^ pictureBox4;: System::Windows::Forms::Button^ button8;: System::Windows::Forms::PictureBox^ pictureBox5;: System::Windows::Forms::PictureBox^ pictureBox6;: System::Windows::Forms::PictureBox^ pictureBox7;: System::Windows::Forms::PictureBox^ pictureBox8;: System::Windows::Forms::PictureBox^ pictureBox9;: System::Windows::Forms::PictureBox^ pictureBox10;: System::Windows::Forms::Button^ button9;

:

:

/// <summary>

/// </summary>::ComponentModel::Container ^components;


#pragma region Windows Form Designer generated code

/// <summary>

/// </summary>InitializeComponent(void)

{::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(Form3::typeid));>label1 = (gcnew System::Windows::Forms::Label());>radioButton1 = (gcnew System::Windows::Forms::RadioButton());>radioButton2 = (gcnew System::Windows::Forms::RadioButton());>radioButton3 = (gcnew System::Windows::Forms::RadioButton());>button1 = (gcnew System::Windows::Forms::Button());>label2 = (gcnew System::Windows::Forms::Label());>label3 = (gcnew System::Windows::Forms::Label());>radioButton4 = (gcnew System::Windows::Forms::RadioButton());>radioButton5 = (gcnew System::Windows::Forms::RadioButton());>button2 = (gcnew System::Windows::Forms::Button());>label4 = (gcnew System::Windows::Forms::Label());>label5 = (gcnew System::Windows::Forms::Label());>label6 = (gcnew System::Windows::Forms::Label());>label7 = (gcnew System::Windows::Forms::Label());>button3 = (gcnew System::Windows::Forms::Button());>label8 = (gcnew System::Windows::Forms::Label());>label9 = (gcnew System::Windows::Forms::Label());>label10 = (gcnew System::Windows::Forms::Label());>button4 = (gcnew System::Windows::Forms::Button());>button5 = (gcnew System::Windows::Forms::Button());>button6 = (gcnew System::Windows::Forms::Button());>label11 = (gcnew System::Windows::Forms::Label());>label12 = (gcnew System::Windows::Forms::Label());>label13 = (gcnew System::Windows::Forms::Label());>label14 = (gcnew System::Windows::Forms::Label());>label15 = (gcnew System::Windows::Forms::Label());>label16 = (gcnew System::Windows::Forms::Label());>button7 = (gcnew System::Windows::Forms::Button());>pictureBox1 = (gcnew System::Windows::Forms::PictureBox());>pictureBox2 = (gcnew System::Windows::Forms::PictureBox());>pictureBox3 = (gcnew System::Windows::Forms::PictureBox());>pictureBox4 = (gcnew System::Windows::Forms::PictureBox());>button8 = (gcnew System::Windows::Forms::Button());>pictureBox5 = (gcnew System::Windows::Forms::PictureBox());>pictureBox6 = (gcnew System::Windows::Forms::PictureBox());>pictureBox7 = (gcnew System::Windows::Forms::PictureBox());>pictureBox8 = (gcnew System::Windows::Forms::PictureBox());>pictureBox9 = (gcnew System::Windows::Forms::PictureBox());>pictureBox10 = (gcnew System::Windows::Forms::PictureBox());>button9 = (gcnew System::Windows::Forms::Button());

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox1))->BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox2))->BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox3))->BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox4))->BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox5))->BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox6))->BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox7))->BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox8))->BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox9))->BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox10))->BeginInit();>SuspendLayout();

//

// label1

// >label1->AutoSize = true;>label1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>label1->Location = System::Drawing::Point(24, 10);>label1->Name = L"label1";>label1->Size = System::Drawing::Size(102, 16);>label1->TabIndex = 0;>label1->Text = L"Тягніть жереб!";

//

// radioButton1

// >radioButton1->AutoSize = true;>radioButton1->Location = System::Drawing::Point(52, 34);>radioButton1->Name = L"radioButton1";>radioButton1->Size = System::Drawing::Size(14, 13);>radioButton1->TabIndex = 1;>radioButton1->TabStop = true;>radioButton1->UseVisualStyleBackColor = true;

//

// radioButton2

// >radioButton2->AutoSize = true;>radioButton2->Location = System::Drawing::Point(72, 34);>radioButton2->Name = L"radioButton2";>radioButton2->Size = System::Drawing::Size(14, 13);>radioButton2->TabIndex = 2;>radioButton2->TabStop = true;>radioButton2->UseVisualStyleBackColor = true;

//

// radioButton3

// >radioButton3->AutoSize = true;>radioButton3->Location = System::Drawing::Point(92, 34);>radioButton3->Name = L"radioButton3";>radioButton3->Size = System::Drawing::Size(14, 13);>radioButton3->TabIndex = 3;>radioButton3->TabStop = true;>radioButton3->UseVisualStyleBackColor = true;

//

// button1

// >button1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>button1->Location = System::Drawing::Point(27, 54);>button1->Name = L"button1";>button1->Size = System::Drawing::Size(104, 23);>button1->TabIndex = 4;>button1->Text = L"Обрати першого!";>button1->UseVisualStyleBackColor = true;>button1->Click += gcnew System::EventHandler(this, &Form3::button1_Click);

//

// label2

// >label2->AutoSize = true;>label2->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>label2->Location = System::Drawing::Point(13, 95);>label2->Name = L"label2";>label2->Size = System::Drawing::Size(18, 16);>label2->TabIndex = 5;>label2->Text = L"1.";

//

// label3

// >label3->AutoSize = true;>label3->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>label3->Location = System::Drawing::Point(26, 95);>label3->Name = L"label3";>label3->Size = System::Drawing::Size(45, 16);>label3->TabIndex = 6;>label3->Text = L"label3";

//

// radioButton4

// >radioButton4->AutoSize = true;>radioButton4->Location = System::Drawing::Point(57, 125);>radioButton4->Name = L"radioButton4";>radioButton4->Size = System::Drawing::Size(14, 13);>radioButton4->TabIndex = 7;>radioButton4->TabStop = true;>radioButton4->UseVisualStyleBackColor = true;

//

// radioButton5

// >radioButton5->AutoSize = true;>radioButton5->Location = System::Drawing::Point(82, 125);>radioButton5->Name = L"radioButton5";>radioButton5->Size = System::Drawing::Size(14, 13);>radioButton5->TabIndex = 8;>radioButton5->TabStop = true;>radioButton5->UseVisualStyleBackColor = true;

//

// button2

// >button2->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>button2->Location = System::Drawing::Point(27, 144);>button2->Name = L"button2";>button2->Size = System::Drawing::Size(104, 23);>button2->TabIndex = 9;>button2->Text = L"Обрати другого!";>button2->UseVisualStyleBackColor = true;>button2->Click += gcnew System::EventHandler(this, &Form3::button2_Click);

//

// label4

// >label4->AutoSize = true;>label4->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>label4->Location = System::Drawing::Point(11, 183);>label4->Name = L"label4";>label4->Size = System::Drawing::Size(18, 16);>label4->TabIndex = 10;>label4->Text = L"2.";

//

// label5

// >label5->AutoSize = true;>label5->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>label5->Location = System::Drawing::Point(11, 205);>label5->Name = L"label5";>label5->Size = System::Drawing::Size(18, 16);>label5->TabIndex = 11;>label5->Text = L"3.";

//

// label6

// >label6->AutoSize = true;>label6->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>label6->Location = System::Drawing::Point(24, 183);>label6->Name = L"label6";>label6->Size = System::Drawing::Size(45, 16);>label6->TabIndex = 12;>label6->Text = L"label6";

//

// label7

// >label7->AutoSize = true;>label7->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>label7->Location = System::Drawing::Point(24, 205);>label7->Name = L"label7";>label7->Size = System::Drawing::Size(45, 16);>label7->TabIndex = 13;>label7->Text = L"label7";

//

// button3

// >button3->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>button3->Location = System::Drawing::Point(27, 280);>button3->Name = L"button3";>button3->Size = System::Drawing::Size(104, 23);>button3->TabIndex = 14;>button3->Text = L"Вихід";>button3->UseVisualStyleBackColor = true;>button3->Click += gcnew System::EventHandler(this, &Form3::button3_Click);

//

// label8

// >label8->AutoSize = true;>label8->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>label8->Location = System::Drawing::Point(223, 34);>label8->Name = L"label8";>label8->Size = System::Drawing::Size(45, 16);>label8->TabIndex = 16;>label8->Text = L"label8";

//

// label9

// >label9->AutoSize = true;>label9->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>label9->Location = System::Drawing::Point(345, 245);>label9->Name = L"label9";>label9->Size = System::Drawing::Size(45, 16);>label9->TabIndex = 17;>label9->Text = L"label9";

//

// label10

// >label10->AutoSize = true;>label10->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>label10->Location = System::Drawing::Point(89, 245);>label10->Name = L"label10";>label10->Size = System::Drawing::Size(52, 16);>label10->TabIndex = 18;>label10->Text = L"label10";

//

// button4

// >button4->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>button4->Location = System::Drawing::Point(27, 251);>button4->Name = L"button4";>button4->Size = System::Drawing::Size(104, 23);>button4->TabIndex = 19;>button4->Text = L"На позиції!";>button4->UseVisualStyleBackColor = true;>button4->Click += gcnew System::EventHandler(this, &Form3::button4_Click);

//

// button5

// >button5->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>button5->Location = System::Drawing::Point(466, 125);>button5->Name = L"button5";>button5->Size = System::Drawing::Size(137, 23);>button5->TabIndex = 20;>button5->Text = L"1-ша перестрілка";>button5->UseVisualStyleBackColor = true;>button5->Click += gcnew System::EventHandler(this, &Form3::button5_Click);

//

// button6

// >button6->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>button6->Location = System::Drawing::Point(466, 154);>button6->Name = L"button6";>button6->Size = System::Drawing::Size(137, 23);>button6->TabIndex = 21;>button6->Text = L"2-га перестрілка";>button6->UseVisualStyleBackColor = true;>button6->Click += gcnew System::EventHandler(this, &Form3::button6_Click);

//

// label11

// >label11->AutoSize = true;>label11->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>label11->Location = System::Drawing::Point(463, 231);>label11->Name = L"label11";>label11->Size = System::Drawing::Size(60, 20);>label11->TabIndex = 23;>label11->Text = L"label11";

//

// label12

// >label12->AutoSize = true;>label12->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>label12->Location = System::Drawing::Point(380, 10);>label12->Name = L"label12";>label12->Size = System::Drawing::Size(263, 16);>label12->TabIndex = 24;>label12->Text = L"Стратегії та ймовірності виживання(%):";

//

// label13

// >label13->AutoSize = true;>label13->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>label13->Location = System::Drawing::Point(380, 32);>label13->Name = L"label13";>label13->Size = System::Drawing::Size(52, 16);>label13->TabIndex = 25;>label13->Text = L"label13";

//

// label14

// >label14->AutoSize = true;>label14->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>label14->Location = System::Drawing::Point(380, 51);>label14->Name = L"label14";>label14->Size = System::Drawing::Size(52, 16);>label14->TabIndex = 26;>label14->Text = L"label14";

//

// label15

// >label15->AutoSize = true;>label15->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>label15->Location = System::Drawing::Point(380, 68);>label15->Name = L"label15";>label15->Size = System::Drawing::Size(52, 16);>label15->TabIndex = 27;>label15->Text = L"label15";

//

// label16

// >label16->AutoSize = true;>label16->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>label16->Location = System::Drawing::Point(380, 86);>label16->Name = L"label16";>label16->Size = System::Drawing::Size(52, 16);>label16->TabIndex = 28;>label16->Text = L"label16";

//

// button7

// >button7->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>button7->Location = System::Drawing::Point(466, 183);>button7->Name = L"button7";>button7->Size = System::Drawing::Size(137, 22);>button7->TabIndex = 29;>button7->Text = L"3-тя перестрілка";>button7->UseVisualStyleBackColor = true;>button7->Click += gcnew System::EventHandler(this, &Form3::button7_Click);

//

// pictureBox1

// >pictureBox1->BackgroundImage = (cli::safe_cast<System::Drawing::Image^ >(resources->GetObject(L"pictureBox1.BackgroundImage")));>pictureBox1->Location = System::Drawing::Point(201, 144);>pictureBox1->Name = L"pictureBox1";>pictureBox1->Size = System::Drawing::Size(125, 125);>pictureBox1->TabIndex = 30;>pictureBox1->TabStop = false;

//

// pictureBox2

// >pictureBox2->Image = (cli::safe_cast<System::Drawing::Image^ >(resources->GetObject(L"pictureBox2.Image")));>pictureBox2->Location = System::Drawing::Point(201, 53);>pictureBox2->Name = L"pictureBox2";>pictureBox2->Size = System::Drawing::Size(125, 95);>pictureBox2->TabIndex = 31;>pictureBox2->TabStop = false;

//

// pictureBox3

// >pictureBox3->Image = (cli::safe_cast<System::Drawing::Image^ >(resources->GetObject(L"pictureBox3.Image")));>pictureBox3->Location = System::Drawing::Point(321, 264);>pictureBox3->Name = L"pictureBox3";>pictureBox3->Size = System::Drawing::Size(125, 95);>pictureBox3->TabIndex = 32;>pictureBox3->TabStop = false;

//

// pictureBox4

// >pictureBox4->Image = (cli::safe_cast<System::Drawing::Image^ >(resources->GetObject(L"pictureBox4.Image")));>pictureBox4->Location = System::Drawing::Point(82, 264);>pictureBox4->Name = L"pictureBox4";>pictureBox4->Size = System::Drawing::Size(125, 95);>pictureBox4->TabIndex = 33;>pictureBox4->TabStop = false;

//

// button8

// >button8->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>button8->Location = System::Drawing::Point(466, 339);>button8->Name = L"button8";>button8->Size = System::Drawing::Size(137, 30);>button8->TabIndex = 34;>button8->Text = L"Вийти з гри:(";>button8->UseVisualStyleBackColor = true;>button8->Click += gcnew System::EventHandler(this, &Form3::button8_Click);

//

// pictureBox5

// >pictureBox5->Image = (cli::safe_cast<System::Drawing::Image^ >(resources->GetObject(L"pictureBox5.Image")));>pictureBox5->Location = System::Drawing::Point(609, 34);>pictureBox5->Name = L"pictureBox5";>pictureBox5->Size = System::Drawing::Size(125, 95);>pictureBox5->TabIndex = 35;>pictureBox5->TabStop = false;

//

// pictureBox6

// >pictureBox6->Image = (cli::safe_cast<System::Drawing::Image^ >(resources->GetObject(L"pictureBox6.Image")));>pictureBox6->Location = System::Drawing::Point(332, 115);>pictureBox6->Name = L"pictureBox6";>pictureBox6->Size = System::Drawing::Size(125, 95);>pictureBox6->TabIndex = 36;>pictureBox6->TabStop = false;

//

// pictureBox7

// >pictureBox7->Image = (cli::safe_cast<System::Drawing::Image^ >(resources->GetObject(L"pictureBox7.Image")));>pictureBox7->Location = System::Drawing::Point(438, 29);>pictureBox7->Name = L"pictureBox7";>pictureBox7->Size = System::Drawing::Size(125, 95);>pictureBox7->TabIndex = 37;>pictureBox7->TabStop = false;

//

// pictureBox8

// >pictureBox8->Image = (cli::safe_cast<System::Drawing::Image^ >(resources->GetObject(L"pictureBox8.Image")));>pictureBox8->Location = System::Drawing::Point(645, 183);>pictureBox8->Name = L"pictureBox8";>pictureBox8->Size = System::Drawing::Size(109, 153);>pictureBox8->TabIndex = 38;>pictureBox8->TabStop = false;

//

// pictureBox9

// >pictureBox9->Image = (cli::safe_cast<System::Drawing::Image^ >(resources->GetObject(L"pictureBox9.Image")));>pictureBox9->Location = System::Drawing::Point(-1, -4);>pictureBox9->Name = L"pictureBox9";>pictureBox9->Size = System::Drawing::Size(157, 209);>pictureBox9->TabIndex = 39;>pictureBox9->TabStop = false;

//

// pictureBox10

// >pictureBox10->BackgroundImage = (cli::safe_cast<System::Drawing::Image^ >(resources->GetObject(L"pictureBox10.BackgroundImage")));>pictureBox10->Location = System::Drawing::Point(101, 174);>pictureBox10->Name = L"pictureBox10";>pictureBox10->Size = System::Drawing::Size(90, 57);>pictureBox10->TabIndex = 40;>pictureBox10->TabStop = false;

//

// button9

// >button9->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>button9->Location = System::Drawing::Point(609, 339);>button9->Name = L"button9";>button9->Size = System::Drawing::Size(137, 30);>button9->TabIndex = 41;>button9->Text = L"Інструкція";>button9->UseVisualStyleBackColor = true;>button9->Click += gcnew System::EventHandler(this, &Form3::button9_Click);

//

// Form3

// >AutoScaleDimensions = System::Drawing::SizeF(6, 13);>AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;>BackColor = System::Drawing::SystemColors::ButtonHighlight;>ClientSize = System::Drawing::Size(754, 381);>Controls->Add(this->button9);>Controls->Add(this->pictureBox10);>Controls->Add(this->pictureBox9);>Controls->Add(this->pictureBox8);>Controls->Add(this->pictureBox7);>Controls->Add(this->pictureBox6);>Controls->Add(this->pictureBox5);>Controls->Add(this->button8);>Controls->Add(this->pictureBox4);>Controls->Add(this->pictureBox3);>Controls->Add(this->pictureBox2);>Controls->Add(this->pictureBox1);>Controls->Add(this->button7);>Controls->Add(this->label16);>Controls->Add(this->label15);>Controls->Add(this->label14);>Controls->Add(this->label13);>Controls->Add(this->label12);>Controls->Add(this->label11);>Controls->Add(this->button6);>Controls->Add(this->button5);>Controls->Add(this->button4);>Controls->Add(this->label10);>Controls->Add(this->label9);>Controls->Add(this->label8);>Controls->Add(this->button3);>Controls->Add(this->label7);>Controls->Add(this->label6);>Controls->Add(this->label5);>Controls->Add(this->label4);>Controls->Add(this->button2);>Controls->Add(this->radioButton5);>Controls->Add(this->radioButton4);>Controls->Add(this->label3);>Controls->Add(this->label2);>Controls->Add(this->button1);>Controls->Add(this->radioButton3);>Controls->Add(this->radioButton2);>Controls->Add(this->radioButton1);>Controls->Add(this->label1);>FormBorderStyle = System::Windows::Forms::FormBorderStyle::SizableToolWindow;>Icon = (cli::safe_cast<System::Drawing::Icon^ >(resources->GetObject(L"$this.Icon")));>MaximumSize = System::Drawing::Size(770, 420);>MinimumSize = System::Drawing::Size(175, 354);>Name = L"Form3";>Text = L"Дуель";>Load += gcnew System::EventHandler(this, &Form3::Form3_Load);

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox1))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox2))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox3))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox4))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox5))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox6))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox7))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox8))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox9))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox10))->EndInit();>ResumeLayout(false);>PerformLayout();


}

#pragma endregion: System::Void Form3_Load(System::Object^ sender, System::EventArgs^ e) {->Hide(); pictureBox8->Hide(); >Width = 175; pictureBox9->Hide();>Height = 354; pictureBox1->Show();->Hide(); label10->Hide();->Hide(); label8->Hide();->Hide(); label9->Hide();->Hide(); label13->Hide();->Hide(); label14->Hide();->Hide(); label15->Hide();->Hide(); label16->Hide();->Hide(); button5->Hide(); button6->Hide(); button7->Hide();->Hide(); pictureBox2->Hide(); pictureBox3->Hide();->Hide(); pictureBox5->Hide(); pictureBox6->Hide();->Hide(); button4->Hide();->Enabled = false; this->Location = System::Drawing::Point(550,150);->Enabled = false;->Enabled = false;

}: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {^form2 = gcnew Form2();->Show();

}: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {->Enabled = true;->Enabled = true;->Enabled = true;->Show();->Show();::String^ a1 = "Сем";::String^ b1 = "Білл";::String^ c1 = "Джон";a,b,c;(time(NULL));=rand()%3+1;(a==1)

{(radioButton1->Checked || radioButton2->Checked || radioButton3->Checked)->Text = a1;

}(a==2)

{(radioButton1->Checked || radioButton2->Checked || radioButton3->Checked)->Text = b1;

}(a==3)

{(radioButton1->Checked || radioButton2->Checked || radioButton3->Checked)->Text = c1;

}

}: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {->Show();->Show();->Show();->Show();->Show();::String^ g;k;=label3->Text;(g=="Сем")

{::String^ b1 = "Білл";::String^ c1 = "Джон";=rand()%2+1;(k==1)

{(radioButton4->Checked || radioButton5->Checked)

{->Text = b1;->Text = c1;

}

}(k==2)

{(radioButton4->Checked || radioButton5->Checked)

{->Text = c1;->Text = b1;

}

}

}(g=="Білл")

{::String^ b1 = "Сем";::String^ c1 = "Джон";=rand()%2+1;(k==1)

{(radioButton4->Checked || radioButton5->Checked)

{->Text = b1;->Text = c1;

}

}(k==2)

{(radioButton4->Checked || radioButton5->Checked)

{->Text = c1;->Text = b1;

}

}

}(g=="Джон")

{::String^ b1 = "Cем";::String^ c1 = "Білл";=rand()%2+1;(k==1)

{(radioButton4->Checked || radioButton5->Checked)

{->Text = b1;->Text = c1;

}

}(k==2)

{(radioButton4->Checked || radioButton5->Checked)

{->Text = c1;->Text = b1;

}

}

}

}: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) {>Width = 770;->Show();->Show(); ->Show();->Show();->Show();->Show();->Show();->Show();->Show();->Show();->Hide();->Show();>Location = System::Drawing::Point(280,150);->Show();->Show();>Height = 440;->Hide(); button2->Hide(); button4->Hide();->Hide(); radioButton2->Hide(); radioButton3->Hide();->Hide(); radioButton5->Hide(); label1->Hide();->Text = label7->Text; label2->Hide(); label3->Hide();->Text = label6->Text; label4->Hide(); label5->Hide();->Text = label3->Text; label6->Hide(); label7->Hide();->Enabled = false; button3->Hide();->Enabled = false; button8->Show();::String^ a=label8->Text;::String^ b=label9->Text;::String^ c=label10->Text;->Show();(a=="Сем")

{->Show();->Location = System::Drawing::Point(201, 53);(b=="Білл")

{->Show(); pictureBox4->Show();->Location = System::Drawing::Point(321, 264);->Location = System::Drawing::Point(82, 264);

}

{->Show(); pictureBox4->Show();->Location = System::Drawing::Point(321, 264);->Location = System::Drawing::Point(82, 264);

}->Text="1. Стріляти в Білла. С-50, Б-0, Д-50 +";->Text="2. Стріляти в Джона. С-30, Б-70, Д-0";->Hide(); label16->Hide();

}(a=="Білл")

{->Show();->Location = System::Drawing::Point(201, 53);(b=="Сем")

{->Show(); pictureBox4->Show();->Location = System::Drawing::Point(321, 264);->Location = System::Drawing::Point(82, 264);

}

{->Show(); pictureBox4->Show();->Location = System::Drawing::Point(321, 264);->Location = System::Drawing::Point(82, 264);

}->Text="1. Стріляти в Сема. С-20, Б-80, Д-100 +";->Text="2. Стріляти в Джона. С-100, Б-90, Д-20 ";->Text="Бо якщо вибрати 2, то Сем буде стріляти в Білла і тоді:";->Text="С-100, Б-0";

}(a=="Джон")

{->Show();->Location = System::Drawing::Point(201, 53);(b=="Білл")

{->Show(); pictureBox2->Show();->Location = System::Drawing::Point(321, 264);->Location = System::Drawing::Point(82, 264);

}

{->Show(); pictureBox2->Show();->Location = System::Drawing::Point(321, 264);->Location = System::Drawing::Point(82, 264);

}->Text="1. Стріляти в Білла. С-100, Б-50, Д-60";->Text="2. Стріляти в Сема. С-50, Б-100, Д-50 +";->Text="Бо якщо вибрати 1, то Сем буде стріляти в Джона і тоді:";->Text="C-100, Д-0";

}

}: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e) {->Enabled = false;->Enabled = true;::String^ a=label8->Text;::String^ b=label9->Text;::String^ c=label10->Text;(a=="Сем")

{(b=="Білл")

{->Text="Білл мертвий";->Show();->Location = System::Drawing::Point(321, 264);

}(c=="Білл")

{->Text="Білл мертвий";->Show();->Location = System::Drawing::Point(82, 264);

}

}(a=="Білл")

{(b=="Джон")

{v=rand()%100+1;(v<=80)

{->Text="Сем мертвий";->Show();->Location = System::Drawing::Point(82, 264);


}(v>=80)

{->Text="Білл мертвий";->Show();->Location = System::Drawing::Point(201, 53);

}

}(c=="Джон")

{v=rand()%100+1;(v<=80)

{->Text="Сем мертвий";->Show();->Location = System::Drawing::Point(321, 264);

}

{->Text="Білл мертвий";->Show();->Location = System::Drawing::Point(201, 53);

}

}

}(a=="Джон")

{(b=="Білл")

{v=rand()%100+1;(v<=50)

{->Text="Сем мертвий";->Show();->Location = System::Drawing::Point(82, 264);

}(v>=50)

{->Text="Джон мертвий";->Show();->Location = System::Drawing::Point(201, 53);

}

}(c=="Білл")

{v=rand()%100+1;(v<=50)

{->Text="Сем мертвий";->Show();->Location = System::Drawing::Point(321, 264);

}(v>=50)

{->Text="Джон мертвий";->Show();->Location = System::Drawing::Point(201, 53);

}

}

}

}: System::Void button6_Click(System::Object^ sender, System::EventArgs^ e) {->Enabled = false;::String^ a=label8->Text;::String^ b=label9->Text;::String^ c=label10->Text;(a=="Сем")

{(b=="Білл мертвий")

{v=rand()%100+1;(v<=50)

{->Text="Сем мертвий";->Text="Дуель закінчено!";->Show();->Enabled = false;->Show();->Location = System::Drawing::Point(201, 53);

}(v>=50)

{->Text="Джон мертвий";->Text="Дуель закінчено!";->Show();->Enabled = false;->Show();->Location = System::Drawing::Point(82, 264);

}

}(c=="Білл мертвий")

{v=rand()%100+1;(v<=50)

{->Text="Сем мертвий";->Text="Дуель закінчено!";->Show();->Enabled = false;->Show();->Location = System::Drawing::Point(201, 53);

}(v>=50)

{->Text="Джон мертвий";->Text="Дуель закінчено!";->Show();->Enabled = false;->Show();->Location = System::Drawing::Point(321, 264);

}

}

}(a=="Білл")

{(b=="Джон")

{v=rand()%100+1;(v<=50)

{->Text="Білл мертвий";->Text="Дуель закінчено!";->Show();->Enabled = false;->Show();->Location = System::Drawing::Point(201, 53);

}

{v1=rand()%100+1;(v<=80)

{->Text="Джон мертвий";->Text="Дуель закінчено!";->Show();->Enabled = false;->Show();->Location = System::Drawing::Point(321, 264);

}(v>=80)

{->Enabled = true;

}

}

}(c=="Джон")

{v=rand()%100+1;(v<=50)

{->Text="Білл мертвий";->Text="Дуель закінчено!";->Show();->Enabled = false;->Show();->Location = System::Drawing::Point(201, 53);

}

{v1=rand()%100+1;(v<=80)

{->Text="Джон мертвий";->Text="Дуель закінчено!";->Show();->Enabled = false;->Show();->Location = System::Drawing::Point(82, 264);

}(v>=0)

{->Enabled = true;

}

}

}

}(a=="Білл мертвий")

{(b=="Джон")

{v=rand()%100+1;(v<=50)

{->Text="Сем мертвий";->Text="Дуель закінчено!";->Show();->Enabled = false;->Show();->Location = System::Drawing::Point(82, 264);

}(v>=50)

{->Text="Джон мертвий";->Text="Дуель закінчено!";->Show();->Enabled = false;->Show();->Location = System::Drawing::Point(321, 264);

}

}(c=="Джон")

{->Text="Джон мертвий";->Text="Дуель закінчено!";->Show();->Enabled = false;->Show();->Location = System::Drawing::Point(82, 264);

}

}(a=="Джон")

{(b=="Білл")

{v=rand()%100+1;(v<=80)

{->Text="Джон мертвий";->Text="Дуель закінчено!";->Show();->Enabled = false;->Show();->Location = System::Drawing::Point(201, 53);

}(v>=80)

{v1=rand()%100+1;(v1<=50)

{->Text="Білл мертвий";->Text="Дуель закінчено!";->Show();->Enabled = false;->Show();->Location = System::Drawing::Point(321, 264);

}button7->Enabled = true;

}

}(c=="Білл")

{v=rand()%100+1;(v<=80)

{->Text="Джон мертвий";->Text="Дуель закінчено!";->Show();->Enabled = false;->Show();->Location = System::Drawing::Point(201, 53);

}(v>=80)

{v1=rand()%100+1;(v1<=50)

{->Text="Білл мертвий";->Text="Дуель закінчено!";->Show();->Enabled = false;->Show();->Location = System::Drawing::Point(82, 264);

}button7->Enabled = true;

}

}

}(a=="Джон мертвий")

{(b=="Білл")

{v=rand()%100+1;(v<=80)

{->Text="Сем мертвий";->Enabled = false;->Text="Дуель закінчено!";->Show();->Show();->Location = System::Drawing::Point(82, 264);

}(v>=80)

{->Text="Білл мертвий";->Enabled = false;->Text="Дуель закінчено!";->Show();->Show();->Location = System::Drawing::Point(321, 264);

}

}(c=="Білл")

{->Text="Білл мертвий";->Text="Дуель закінчено!";->Show();->Enabled = false;->Show();->Location = System::Drawing::Point(82, 264);

}

}



}

: System::Void button7_Click(System::Object^ sender, System::EventArgs^ e) {->Enabled = false;::String^ a=label8->Text;::String^ b=label9->Text;::String^ c=label10->Text;(a=="Білл")

{(b=="Джон")

{v=rand()%100+1;(v<=80)

{->Text="Джон мертвий";->Text="Дуель закінчено!";->Show();->Show();->Location = System::Drawing::Point(321, 264);

}

{v1=rand()%100+1;(v<=50)

{->Text="Білл мертвий";->Text="Дуель закінчено!";->Show();->Show();->Location = System::Drawing::Point(82, 264);

}

{->Text="Джон мертвий";->Text="Дуель закінчено!";->Show();->Show();->Location = System::Drawing::Point(321, 264);

}

}

}(c=="Джон")

{v=rand()%100+1;(v<=80)

{->Text="Джон мертвий";->Text="Дуель закінчено!";->Show();->Show();->Location = System::Drawing::Point(82, 264);

}

{v1=rand()%100+1;(v<=50)

{->Text="Білл мертвий";->Text="Дуель закінчено!";->Show();->Show();->Location = System::Drawing::Point(201, 53);

}

{->Text="Джон мертвий";->Text="Дуель закінчено!";->Show();->Show();->Location = System::Drawing::Point(82, 264);

}

}

}

}(a=="Джон")

{(b=="Білл")

{v=rand()%100+1;(v<=50)

{->Text="Білл мертвий";->Text="Дуель закінчено!";->Show();->Show();->Location = System::Drawing::Point(321, 264);

}(v>=50)

{v1=rand()%100+1;(v1<=80)

{->Text="Джон мертвий";->Text="Дуель закінчено!";->Show();->Show();->Location = System::Drawing::Point(201, 53);

}

{->Text="Білл мертвий";->Text="Дуель закінчено!";->Show();->Show();->Location = System::Drawing::Point(321, 264);

}

}

}(c=="Білл")

{v=rand()%100+1;(v<=50)

{->Text="Білл мертвий";->Text="Дуель закінчено!";->Show();->Show();->Location = System::Drawing::Point(82, 264);

}(v>=50)

{v1=rand()%100+1;(v1<=80)

{->Text="Джон мертвий";->Text="Дуель закінчено!";->Show();->Show();->Location = System::Drawing::Point(201, 53);

}

{->Text="Білл мертвий";->Text="Дуель закінчено!";->Show();->Show();->Location = System::Drawing::Point(82, 264);

}

}

}

}

}

: System::Void button8_Click(System::Object^ sender, System::EventArgs^ e) {^form2 = gcnew Form2();->Show();

}: System::Void button9_Click(System::Object^ sender, System::EventArgs^ e) {

::Show("МОДЕЛЬ, ЩО РЕАЛІЗУЄ ПРОГРАМА\n\nСем, Білл і Джон (нижче позначені буквами С, Б, Д) домовились битися на дуелі втрьох за такими правилами:\nЖеребкування визначає, хто стріляє першим, другим, третім. Далі вони розташовуються на однаковій відстані один від одного. Обмінюються вистрілами по черзі, визначеній жеребом, поки двоє не будуть убиті. Черговий стріляючий може стріляти в будь якого із інших, враховуючи йоміврність виживання та оптимальну для себе стратегію.\nВідомо, що С - снайпер і ніколи не промахується з даної дистанції, Б - влучає лише в 80%, а Д - приблизно в 50% випадків.\n\nОПИС ПРОГРАМИ 'Багатостороння дуель'\n\nКористувачу програми надається можливість:\n 1) Жеребкуванням обрати порядок, у якому розташуються учасники дуелі (С, Б, Д);\n 2) Відповідно до оптимальної стратегії, здійснювати постріли кожного дуелянта в порядку, визначеному жеребкуванням поки двоє дуелянтів не будуть вбиті.\nОбислення ймовірності виживання (далі - ЙВ) на кожен хід здійснюється наступним чином:\nЙВ того, у кого стріляють (Жертви [Ж]) дорівнює 100%-'ймовірність попадання (ЙП)' того, хто стріляє (Стрільця [Cт]).\nЙВ Ст дорівнює 'ЙП' Ст + (100% - 'ЙП' Ж). На основі даних про ЙВ дуелянта на кожен крок обирається опимальна стратегія (ОС) ведення дуелі (у вікні програми ОС позначається '+').\n\nІНСТРУКЦІЯ З УПРАВЛІННЯ\n\nЩоб розпочати гру, необхідно:\n 1) В пункті меню натиснути кнопку 'Гра!';\n 2) З'явиться вікно, де необхідно жеребкуванням обрати:\n 1. Дуелянта, який буде стріляти першим, відмітивши 1 з 3-ох пунктів (тобто витягнути жереб) і натиснувши кнопку 'Обрати 1-ого';\n 2. Дуелянта, який буде стріляти другим, відмітивши 1 з 2-ох пунктів і натистувши кнопку 'Обрати другого'.\nДуелянт, якого не вибрали при жеребкуванні, стає третім автоматично.\n 3) Натиснути кнопку 'На позиції!';\nУ вікні з'явиться графічна інтерпритація 3-сторонньої дуелі у вигляді 3-ох зображеннь дуелянтів з підписами, які відповідають індивідуальному стрільцеві, що розташовані по колу, в центрі якого знаходиться правильний трикутник (модель одинакової відстані між дуелянтами). Порядок стрільби визачений за годинниковою стрілкою. В верхній правій частині вікна будуть знаходитись можливі стратегії дуелянта, що стріляє першим, та ймовірності виживання усіх дуелянтів.\n 4) По черзі натискати кнопки '1-ша перестрілка', '2-га перестрілка' (та '3-тя перестрілка' якщо після другої перестілки загине тільки 1 дуелянт) поки не з'явиться напис:'Дуель закінчено!'\nДля виходу з програми натиснути кнопку 'Вийти' або 'Вийти з гри:(' і підтвердити своє бажання.");

}

};

}

2.Файли вихідного коду


·AssemblyInfo.cpp

#include "stdafx.h"

namespace System;namespace System::Reflection;namespace System::Runtime::CompilerServices;namespace System::Runtime::InteropServices;namespace System::Security::Permissions;


[assembly:AssemblyTitleAttribute("Багатостороннядуель16")];

[assembly:AssemblyDescriptionAttribute("")];

[assembly:AssemblyConfigurationAttribute("")];

[assembly:AssemblyCompanyAttribute("")];

[assembly:AssemblyProductAttribute("Багатостороннядуель16")];

[assembly:AssemblyCopyrightAttribute("Copyright (c) 2015")];

[assembly:AssemblyTrademarkAttribute("")];

[assembly:AssemblyCultureAttribute("")];


[assembly:AssemblyVersionAttribute("1.0.*")];


[assembly:ComVisible(false)];


[assembly:CLSCompliantAttribute(true)];


[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)];



·Багатостороння дуель 1.6.cpp

// Багатостороння дуель 1.6.cpp: главный файл проекта.


#include "stdafx.h"

#include "Form1.h"

namespace Багатостороннядуель16;


[STAThreadAttribute]main(array<System::String ^> ^args)

{::EnableVisualStyles();::SetCompatibleTextRenderingDefault(false);


// Создание главного окна и его запуск::Run(gcnew Form1());0;

}


6. Опис роботи програми


Користувачу ігрової програми «Багатостороння дуель» надається можливість користуватись програмою відповідно до інструкції, поданої нижче.

При відкритті файлу під назвою «Багатостороння дуель 1.6» відкриється меню програми, де поряд з авторською заставкою будуть знаходитись 3 кнопки (рис. 2):

.«Гра!»

.«Відомості про програму»

.«Вихід»

Меню програми


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


Опис роботи програми


Далі, натиснувши кнопку «Гра!» користувачу програми надається можливість:

)Жеребкуванням обрати порядок, у якому розташуються учасники дуелі (С, Б, Д) (рис.):


Жеребкування


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


а)


б)

в)

Дуель


Обчислення ймовірності виживання (далі - ЙВ) на кожен хід здійснюється наступним чином:



де ЙВ(Ж) - ймовірність виживання жертви, ЙП(Ст) - ймовірність попадання стрільця.


де ЙВ(Ст) - ймовірність виживання стрільця, ЙП(Ж) - ймовірність попадання жертви.

На основі даних про ЙВ дуелянта на кожен крок обирається опимальна стратегія (ОС) ведення дуелі (у вікні програми ОС позначається '+').

Для виходу з програми необхідно натиснути кнопку «Вийти» або «Вийти з гриL» і підтвердити своє бажання (рис.):


Вихід


Аналіз результатів

Результатом проектування розробленого алгоритму на мові програмування С++ стала програма - модель «Багатостороння дуель».

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

Через суперечності первинних тестувань виявлялися помилки, і було знайдено такі недоліки у системі безпеки програми:

§Вразливість проведення жеребкування;

§Вразливість перевірки умов ситуації «на полі дуелі» після другої перестрілки;

üДописаний метод для перевірки умови відмічення елементів RadioButton при жеребкуванні;

üОптимізований код в блоці умов початку 3-тьої перевірки.

Усі протестовані функції працюють коректно за наявності вище зазначених змін - у структурі відповідного блоку коду.

Отже, в результаті аналізу можна зробити висновок що програма працює чітко і правильно. Результати тестування програми підтвердили її працездатність.



Висновок


У ході виконання даної роботи були описані основні переваги програмування та розробки ігрових програм на мові С++ в середовищі Visual Studio C++ 2008 Express Edition і аспекти роботи з графічним інтерфейсом користувача у даному середовищі на мові С++. Для закріплення викладеного матеріалу і демонстрації можливостей засобів підтримки С++ було розроблено гру «Багатостороння дуель»». У роботі представлено основний алгоритм системи, його блок-схема, зображення основних вікон програми, лістинг програми.

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

У ході виконання проекту було отримано наступні навички: робота із візуальним середовищем програмування Microsoft Visual Studio С++ 2008 Express Edition, змінними різних типів, класами та обєктами, файлами, WIN API, діалоговими вікнами, меню, формами.

Курсова робота присвячена розробці програми для роботи з основними принципами ООП. Початком виконання курсової роботи стало дослідження різного роду інформаційних джерел та ознайомлення з теоретичними засадами; спроектовано зовнішній вигляд інтерфейсу та розподілено функції між його елементами.

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

У ході тестування була перевірена коректність роботи додатку. У цілому, можна стверджувати, що індивідуальне завдання на курсову роботу на тему «Розробка ігрової програми Багатостороння дуель» виконане.


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


1.Стенлі Ліппман «Основи програмування на С++»

.Джеф Елджер - «Бібліотека програміста»

.Форум Учебники, исходники для программистов (Уроки Windows Forms C++) //olocoder.ru/VS25.html

.Інтернет-Університет Інформаційних Технологій // #"justify">.Інформаційні технології. Аналітичні матеріали // www.it.ridne.net/

.Електронний онлайн журнал Ігроманія // www.igromania.ru/

.Електронний журнал «Лучшие компьютерные игры» // www.lki.ru/

.Вільна енциклопедія Вікіпедія // #"justify">.Форум программистов и сисадминов CyberForum // www.cyberforum.ru/

.Microsoft Developer Network //msdn.microsoft.com/



Додаток А


Інструкція користувача


1. Вставити DVD-RW диск з грою в DVD-ROM дисковод компютера;

2. Відкрити ярлик гри під назвою «Багатостороння дуель»;

. У відкритому вікні натиснути кнопку «Відомості про програму» та уважно ознайомитись з інструкцією;

. Відповідно до інструкції насолоджуватись грою!

. Для бездискового використання програми:

.1. Скопіювати вміст DVD-RW диску на жорсткий диск компютера;

.2. Вийняти диск з дисководу;

.3. Відкрити скопійований ярлик гри «Багатостороння дуель»;

.4. Виконати п.3 та п.4.




Додаток Б


Системні вимоги


- Процесор: 200U (рекомендовано Pentium 333U і вище), розрядність х32/х64;

Оперативна память: 50 МБ (рекомендовано 120 МБ);

Розширення екрану: 640х480х16 (рекомендовано 800х600x32);

Вільне місце на HDD (для бездискового використання): 20 МБ;

Операційна система: Windows XP/7/8/8.1/10;

DVD-ROM дисковод;

- Встановлений продукт Microsoft Visual C++ 2008/2010 Redistributable x32/x64


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

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

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

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

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

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