Розробка гри "Хрестики-нулики" засобом об’єктно-орієнтованого програмування

Етапи розвитку об’єктно-орієнтованого підходу у створені програмного забезпечення, його основні переваги. Розробка консольного додатку - гри "Хрестики-нулики". Функціональні і нефункціональні вимоги. Інтерфейс та принцип відображення ходу користувача.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 28.03.2014
Размер файла 418,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

ЗМІСТ

ВСТУП

РОЗДІЛ 1. ЕТАПИ РОЗРОБКИ ГРИ

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

1.2 Інтерфейс користувача

1.3 Функціональні вимоги

1.4 Нефункціональні вимоги

1.5 Виняткові ситуації

РОЗДІЛ 2. ПОЕТАПНИЙ ОПИС СТВОРЕННЯ КОДУ ГРИ 3*3

2.1 Створення дошки в якій користувач будить вводити дані

2.2 Створення дошки "Game board"

2.3 Створення функції "get_move ()"

2.4 Принцип відображення ходу користувача

2.5 Створення функції void print_board () {...}

2.6 Створюється функція bool has_wonQ (char player)

2.7 Функція play_and_get_winner

2.8 Функція while

РОЗДІЛ 3. СТВОРЕННЯ ГРИ 4*4

3.1 Код створення гри

ВИСНОВКИ

СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ

ВСТУП

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

Початок розвитку об'єктно-орієнтованого підходу поклала мова Simula 67, яка була розроблена в кінці 60-х рр.. в Норвегії. Незважаючи на те, що мова набагато випередила свій час, сучасники (програмісти 60-х рр.) виявилися не готові сприйняти цінності мови Simula 67, і вона не витримала конкуренції з іншими мовами програмування (перш за все, з мовою Fortran).

Але переваги мови Simula 67 були помічені деякими програмістами, і в 70-і рр. було розроблено велику кількість експериментальних об'єктно-орієнтованих мов програмування. У результаті дослідження цих мов були розроблені сучасні об'єктно-орієнтовані мови програмування: C + +, Ada, Smalltalk та ін.

Найбільш поширеною об'єктно-орієнтованою мовою програмування є мова C++ . Вона виникла на базі з'єднання мов С і Simula.

Разом з розвитком об'єктно-орієнтованого програмування стали розвиватися і об'єктно-орієнтовані методи розробки програмного забезпечення, які охоплюють стадії аналізу і проектування. Серед загальновизнаних об'єктно-орієнтованих підходів до аналізу і проектування слід виділити методи Г. Буча, Д. Рамбо, А. Джекобсона, Шлеер - Меллора і Коуді - Йордона. В результаті об'єднання зусиль перших трьох авторів з'явилась на світ уніфікована мова моделювання UML, яка у 1997 р. була прийнята як стандарт, консорціумом Object Management Group і отримала широке поширення в сфері виробництва програмного забезпечення.

Основні ідеї об'єктно-орієнтованого підходу спираються на наступні положення:

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

- Модель реального світу або її частини може бути описана як сукупність взаємодіючих між собою об'єктів;

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

- Взаємодія між об'єктами здійснюється посилкою спеціальних повідомлень від одного об'єкта до іншого; повідомлення, отримане об'єктом, може вимагати виконання певних дій, наприклад зміни стану об'єкта;

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

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

Об'єктно-орієнтований підхід дає наступні основні переваги:

- Зменшення складності програмного забезпечення;

- Підвищення його надійності;

- Забезпечення можливості модифікації окремих компонент програм без зміни решти компонент;

- Забезпечення можливості повторного використання окремих компонент програмного забезпечення.

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

РОЗДІЛ 1. ЕТАПИ РОЗРОБКИ ГРИ

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

Розробляється консольний додаток, що представляє собою гру «Хрестики-нулики».

Сенс гри: полягає в тому, щоб грати хрестиками або нуликами і набрати більше виграшних комбінацій.

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

1.2 Інтерфейс користувача

Рис.1.1.1 Інтерфейс гри

У меню «Menu hodov» відображаються цифри в клітинах які відповідають за клітинки ігрової дошки. Користувачі вводять числа від 1 до 9 в рядку «Vvod chisla» і для відображення символу потрібно натиснути «Enter». Якщо користувач вводить 1 то символ ікси відобразиться в лівій нижній клітці, а якщо введе символ 5 нулика відобразиться в середній клітці і т.д. Користувач ввів виграшну комбінацію з хрестиків і відобразилося меню статистики в якому гравцеві, що грає хрестиком відобразився рахунок +1. Нижче відображається запит для користувача, чи бажає він продовжити гру і допустимі відповіді «y» або «n». Для продовження потрібно ввести «y» або для виходу з гри «n» натиснути «Enter».

Рис. 1.1.2 Запит на продовження гри після завершення

1.3 Функціональні вимоги

Для запуску гри потрібно двічі клікнути на файли з назвою гри з розширенням «exe». Для продовження потрібно ввести «y» або для виходу з гри «n» і натиснути «Enter». Для гри потрібно використовувати кнопки клавіатури від 1 до 9, якщо будуть введені інші числа то з'явиться повідомлення в якому говориться щоб користувач ввів число від 1 до 9.

Рис. 1.2.1 Повідомлення про помилку

1.4 Нефункціональні вимоги

Додаток гра працює під операційною системою Windows і Linux з встановленим «wine». Додаток працює швидко і оскільки ця невелика програма консольний додаток то вимоги для Персонального комп'ютера на якому будить використовуватися мінімальні.

1.5 Виняткові ситуації

Якщо ввести число більше 9 -и символів або символ літери програма перестає працювати і звалюється в " штопор ". Якщо таке трапиться то потрібно терміново закрити програму натиснувши червоний хрестик вгорі вікна

Чому програма реагує саме так, рішення не знайшов. Рішення: додати додаткову перевірку для символів букв, числа символів числа, самих символів, що б при введенні таких символів з'являлося повідомлення "Vvedite chislo ot < 1 do 9 >"

Рис. 5.1 Помилка вводу числа

РОЗДІЛ 2. ПОЕТАПНИЙ ОПИС СТВОРЕННЯ КОДУ ГРИ

2.1 Створення дошки, в якій користувач буде вводити дані

Підключається файл <iostream>, в якому оголошено об'єкт cout, за допомогою директиви include. Далі створюється функція main усередині якої розташовані інструкції обмежені фігурними дужками ({}). Перед назвою функції вказується тип значення. Ключове слово int означає, що функція повертає ціле число. Висновок рядка на екран за допомогою об'єкта cout. Щоб виключити конфлікт імен, всі стандартні ідентифікатори в мові С + + визначені в просторі імен std. Тому перед ім'ям об'єкта cout необхідно вказати назву простору імен. Між назвою простором імен і назвою об'єкта вказується дві двокрапки (std:: cout). За допомогою std:: cout у вікно виводиться заголовок Menu hodov: і номерацію осередків "-7 - | -8 - | -9 -" і т.д. Рядки закінчуються операторами \ n (оператор переходу на нову сходинку) і endl в кінці рядків (;) Оператор return повертає функції main () 0 (нуль).

КОД:

# include <iostream>

int main () {

std:: cout << " Menu hodov: \ n ";

std:: cout << " -7 - | -8 - | -9 - " << std:: endl;

std:: cout << " -4 - | -5 - | -6 - " << std:: endl;

std:: cout << " -1 - | -2 - | -3 - " << std:: endl;

std:: cout << " \ n \ n ";/ / два оператора \ n означає пропуск 2 -х рядків

return 0;

}

Консоль виводить:

Рис. 2.1.1

2.2 Створення дошки "Game board"

Виводиться нижче порожня дошка з заголовком "Game board" (ігрове поле) в якій і будуть відображатися X або О. Для введення X або О в осередках порожній дошки користувач вводить цифру в рядку нижче порожній дошки, по засобом введення цифр відповідають за дану клітку. Приміром увівши цифру 5 для осередку належить цифрі 5 в дошці "Menu hodov" і відобразиться X або О, але в порожній дошці розташованої нижче.

КОД:

# include <iostream>

int main () {

std:: cout << " Menu hodov: \ n ";/ / Меню ходів / вводів для користувача

std:: cout << " -7 - | -8 - | -9 - " << std:: endl;

std:: cout << " -4 - | -5 - | -6 - " << std:: endl;

std:: cout << " -1 - | -2 - | -3 - " << std:: endl;

std:: cout << " \ n \ n "

std:: cout << " Game board: \ n "; / / Ігрова дошка

std:: cout << " - | - | -" << std:: endl;

std:: cout << " - | - | -" << std:: endl;

std:: cout << " - | - | -" << std:: endl;

std:: cout << " Your move ";

return 0;

}

Консоль виводить:

Рис. 2.2.1 Дошка "Game board"

2.3 Створення функції " get_move ()"

Створюється своя функція яка і будить малювати дошку. У main залишиться головна логіка (почати програму, взяти у користувача його вибір, намалювати його на дошці). Функція будить називатися " get_move ()" (Отримати введення користувача). Переноситься в неї з main рядки дощок (у лістингу виділені червоним і в main залишиться тільки оператор return, який повертає нуль 0;) і розміщуються в {}, крапка з комою після закриває функцію фігурної дужки не ставиться. Щоб отримати вхід користувача створюється змінна "move" і просимо що б користувач ввів цю змінну (число) за допомогою " std:: cin >> " і повертаємо оператором return значення "move". Але користувач може ввести / описатися число менше 1 і більше 9. Щоб нагадати користувачеві що цифри менше 1 і більше 9 не грають, створюється цикл "while" який перевіряє: "поки вхід який дав користувач більше 9 (move > 9) або (| |) вхід менше 1 (move < 1). Якщо користувач ввів число менше 1 і більше 9 то виводиться на екран за допомогою std:: cout << повідомлення " Vvedite chislo ot 1 do 9: ". Запитується за допомогою std:: cin >> у користувача інший вхід move (введення числа від 1 до 9). У функції main пишеться кілька рядків що б протестувати функцію. int move = get_move (); std:: cout << " the move you intereted is: "

<<Move << std:: endl; Пишеться за допомогою std:: cout << в вікні консолі повідомлення " the move you intereted is: "

КОД: ()

# include <iostream>

int get_move () {/ / функція яка і будить малювати дошку

std:: cout << " Menu hodov: \ n ";/ / Меню Дошка наміраціі клітин

std:: cout << " -7 - | -8 - | -9 - " << std:: endl;/ / Дошка наміраціі клітин

std:: cout << " -4 - | -5 - | -6 - " << std:: endl;

std:: cout << " -1 - | -2 - | -3 - " << std:: endl;

std:: cout << " \ n ";/ / C допомогою оператора \ n пропускається один

рядок

std:: cout << " Game board: " << std:: endl;/ / Меню порожній дошки

std:: cout << " --- | --- | --- " << std:: endl;/ / Порожня дошка

std:: cout << " --- | --- | --- " << std:: endl;

std:: cout << " --- | --- | --- " << std:: endl;

std:: cout << " Vvod chisla ";

int move;/ / Що б отримати вхід користувача створюється змінна move

std:: cin >> move;/ / Просимо що б користувач ввів цю змінну (число)

while (move > 9 | | move < 1) {/ / Цикл while перевіряє вхід який дав

користувач більше 9 (move > 9) або (| |) вхід менше 1 (move < 1)

std:: cout << " Vvedite chislo ot 1 do 9: ";/ / Якщо користувач ввів число

менше 1 і більше 9 то виводиться на екран повідомлення " Vvedite

chislo ot 1 do 9: "

std:: cin >> move;/ / запитувані за допомогою std:: cin >> у користувача

інший вхід move (введення числа від 1 до 9)

}

return move;/ / Повертаємо оператором return значення " move "

}

int main () {

int move = get_move ();/ / Викликається функція

get_move () і поміщається те що вона поверне в змінну

std:: cout << " the move you intereted is: " << move << std:: endl;/ /

Пишеться за допомогою std:: cout << в вікні повідомлення " the move

you intereted is: "

return 0;

}

Консоль виводить:

Рис. 2.3.1 Захист від вводу невірного значення

2.4 Принцип відображення ходу користувача

Зараз програма отримує хід користувача і малює порожню дошку. Щоб відобразити хід (введення) користувача на дошці переписується нинішня. Дошка будить складатися з 9 - та однобуквених стрінгів char. Замінюється мінлива стринг (-) на змінну board [] з номером клітини, тому що змінні починаються з нуля, то замість 1 пишеться 0, замість 2 пишеться 1 і т.д. Пишеться простий цикл for (int i = 0; i < 9; i + +) для 9 ходів і два вирази ставляться в цикл int move = get_move () std:: cout <<

“the move you intereted is: " << move << std:: endl. Програма отримує вхід move, далі змінюється масив board [] і пишеться board [ move - 1 ] ([move - 1] тому, що коли вводиться 1 перша клітина / осередок по таблиці то зміняться повинен 0 (нульовий) елемент масиву, тому як клітина / осередок починаються з 1, а елемент тієї комірки в масиві починається з 0 (нуля)). Рядком if (i % 2 == 0) перевіряється парне чи непарне число ввів користувач тобто якщо i за модулем 2 дорівнює 1, то це парний хід, то для board [ move - 1] задається значення = 'X', а всі інші ходи будуть непарні і для board [ move - 1] задається значення = 'О'. У циклі while додається перевірка клітин / осередків на випадок якщо там вже встановлений символ. Додається | | board [move - 1] ! = '-' Тобто board [move - 1] (туди куди будить ставиться знак) ! = (Не дорівнює) '-' (пустушки).

КОД:

# include <iostream>

char board [ 9 ] = { '-', '-', '-', '-', '-', '-', '-', '-', '-' };/ / 9 елементів (' - ') char,

дошки (board)

int get_move () {

std:: cout << " Menu hodov: \ n ";

std:: cout << " -7 - | -8 - | -9 - " << std:: endl;

std:: cout << " -4 - | -5 - | -6 - " << std:: endl;

std:: cout << " -1 - | -2 - | -3 - " << std:: endl;

std:: cout << " \ n ";

std:: cout << " Game board: " << std:: endl;

std:: cout << " - " << board [ 6 ] << " - | -" << board [ 7 ] << " - | -" << board

[ 8 ] << " - \ n ";/ / Замінюється мінлива стринг (-) на змінну " board [] " з

номером клітини

std:: cout << " - " << board [ 3 ] << " - | -" << board [ 4 ] << " - | -" << board

[ 5 ] << " - \ n ";/ / Змінні починаються з нуля, тому замість 1 пишеться

0, замість 2 пишеться 1 і т.д.

std:: cout << " - " << board [ 0 ] << " - | -" << board [ 1 ] << " - | -" << board

[ 2 ] << " - \ n ";

std:: cout << " \ nVvod chisla:";

int move;

std:: cin >> move;

while (move > 9 | | move < 1 | | board [ move - 1 ] ! = '-') {/ / Додається " | |

board [ move - 1 ] ! = ' - '" тобто board [ move - 1 ] (туди куди будить

ставиться знак) ! = (Не дорівнює) '-' (пустушки)

std:: cout << " Vvedite chislo ot (1 do 9): \ n ";

std:: cin >> move;

}

return move;

}

int main () {

for (int i = 0; i < 9; i + +) {/ / Пишеться простий цикл для 9 ходів

int move = get_move ();

std:: cout << " the move you intereted is: " << move << std:: endl;

if (i % 2 == 0) {/ / Якщо i за модулем 2 дорівнює 1, то це парний хід,

board [ move - 1 ] = ' X';/ / то тоді задається значення = 'X'

}

else {/ / Всі інші ходи будуть непарні,

board [ move - 1 ] = '0 ';/ / то тоді задається значення = ' О '

}

}

return 0;

}

2.5 Створення функції void print_board () {...}

Створюється функція void print_board () {...} яка будить виводити дошку на екран. У фігурні дужки вирізається і переноситься 4 рядки:

std:: cout << " Game board: " << std:: endl;

std:: cout << " - " << board [ 6 ] << " - | -" << board [ 7 ] << " - | -" << board

[ 8 ] << " - \ n ";

std:: cout << " - " << board [ 3 ] << " - | -" << board [ 4 ] << " - | -" << board

[ 5 ] << " - \ n ";

std:: cout << " - " << board [ 0 ] << " - | -" << board [ 1 ] << " - | -" << board

[ 2 ] << " - \ n ";

І замінюється ці висновки, тобто місце від куди їх вирізали, висновком print_board (). У main прописується висновок повідомлення " the final board layout is: \ n " у вікні консолі " засобом " std:: cout << і нижче пишеться рядок print_board () тобто використовується функція щоб ще раз надрукувати дошку (board). Створюється функція void clearscreen () для очищення екрана консолі, для цього зводиться цикл for (int i = 0; i < 100; i + +) який відраховує від 0 до 100 і при кожному повторенні циклу виводить на екран std:: cout << std:: endl; нову сходинку.

Тепер функція clearscreen () в main ставиться в цикл. Створюється функція void clearboard () яка очищає дошку. Далі для цього зводиться ціклfor (int i = 0; i < 9; i + +)) який в циклі проходить по всіх 9 - й осередкам на дошці. board [ i ] поставить туди пустушку = '-'. Це повертає дошку в своє початкове стан. Для цього вона встановлюється на початку main. Залишається char board [ 9 ] порожній масив {} тому, що є функція clearboard () яка очистить дошку коли запуститься main.

КОД:

# include <iostream>

char board [ 9 ] = {};/ / Залишається порожній масив тому, що є функція

void clearboard () (почистити дошку) яка очистить дошку коли

запуститься main

void clearscreen () {/ / Очищає вікно консолі, функція clearscreen ні чого

не повертає

for (int i = 0; i < 100; i + +) {/ / Цикл for який відраховує від 0 до 100 і

при кожному повторенні циклу

std:: cout << std:: endl;/ / циклу виводить на екран нову сходинку

}

}

void clearboard () {/ / ця функція очищає дошку і ні чого не повертає

for (int i = 0; i < 9; i + +) {/ / для цього зводиться цикл for (for (int i = 0; i

< 9; i + +)) який в циклі проходить по всіх 9 - й осередкам на дошці

board [ i ] = '-';/ / і board [ i ] поставить туди пустушку = '-'

}

}

void print_board () {/ / В створену функцію void print_board () { }

std:: cout << " - " << board [ 6 ] << " - | -" << board [ 7 ] << " - | -" << board

[ 8 ] << " - \ n ";/ / переноситься 4 рядки:

std:: cout << " - " << board [ 3 ] << " - | -" << board [ 4 ] << " - | -" << board

[ 5 ] << " - \ n ";/ /

std:: cout << " - " << board [ 0 ] << " - | -" << board [ 1 ] << " - | -" << board

[ 2 ] << " - \ n ";/ /

}

int get_move () {

std:: cout << " \ nMenu hodov: \ n ";

std:: cout << " -7 - | -8 - | -9 - " << std:: endl;

std:: cout << " -4 - | -5 - | -6 - " << std:: endl;

std:: cout << " -1 - | -2 - | -3 - " << std:: endl;

std:: cout << " \ n ";

print_board ();/ / і замінюються ці висновки print_board ()

std:: cout << " \ nVvod chisla:";

int move;

std:: cin >> move;

while (move > 9 | | move < 1 | | board [ move - 1 ] ! = '-') {

std:: cout << " Vvedite chislo ot (1 do 9): \ n ";

std:: cin >> move;

}

return move;

}

int main () {

clearboard ();/ / Це повертає дошку в своє початкове стан, для цього

вона встановлюється на початку main

for (int i = 0; i < 9; i + +) {

clearscreen ();/ / функція clearscreen () в main ставиться в цикл

int move = get_move ();

std:: cout << " the move you intereted is: " << move << std:: endl;

if (i % 2 == 0) {

board [ move - 1 ] = ' x ';

}

else {

board [ move - 1 ] = '0 ';

}

}

std:: cout << " the final board layout is: \ n " / / Прописується висновок

повідомлення " the final board layout is: "

print_board ();/ / Використовується функція щоб ще раз надрукувати

дошку (board)

return 0;

2.6 Створюється функція bool has_wonQ (char player)

Створюється функція bool has_wonQ (char player), яка перевіряє коли гра закінчилася. Функція has_wonQ перевіряє bool (правда чи брехня, тобто bool це змінна з двома станами або 0 (нуль) якщо стан брехня і або 1 (одиниця) якщо стан правда) і передається знак (char player) гравця якого перевіряємо. Нижче створюється двомірний масив wins [ 8 ] [ 3 ] (8 по 3) в якому перераховуються всі виграшні варіанти і пишеться поруч / нижче з дошкою (функцією яка очищає дошку). Далі / нижче заводиться цикл for який повторюється 8 разів (int i = 0; i < 8; i + +) і в цьому циклі запускається ще цикл for який повторюється 3 рази (int j = 0; j < 3; j + +). Цими циклами перевіряється якщо в одного з гравців є фішки на всіх трьох місцях з якої-небудь з трійки. Приміром якщо один з гравців першого поставив хрестики або нулики в клітинах 1, 2, 3 (тому змінні відраховуються з 0 (нуля) тоді еквівалент клітин 1, 2, 3 у вікні консолі в коді { 0,1,2 }) то він виграв. Після / нижче першого циклу for [ i ] прописується перемінна int лічильника count і задається їй значення = 0. Грубо кажучи цикл for (int i = 0; i < 8; i + +) перевіряє масив [ 8 ], а цикл for (int j = 0; j < 3; j + +) перевіряє масив [ 3 ]. Далі: If (на board дошці на квадратику який заданий в масиві [ wins ] по елементу [ i ] і [ j ] будить рівнятися player (перевіряється X або О (char player)) Якщо на цьому місці в масиві дошка коштує X то збільшується count на одиницю + +. наприкінці циклу йдеться If (счетчик count рівняєтся == 3) тобто наприклад проходиться троєчка { 0,1,2 } і всі три рівняються хрестику (Х) або нулик (О) то повертається return правда true (він виграв), а якщо це не відбулося то повертається return брехня false (він не виграв). В int main створюється змінна turn (хід) типу int спочатку будить перше хід і рівнятися = 0. Нижче замість циклу for пишеться цикл while (не виграв користувач has_wonQ граючий іксом (X) (' x ') і && Не виграв користувач has_wonQ граючий ноликом (О) (' О')) то виконується код. В if (i % 2 == 0) замінюється i на turn (вхід). наприкінці циклу йдеться turn (хід) на одиницю + +

КОД:

# include <iostream>

char board [ 9 ] = {};

void clearscreen () {/ / очищає вікно консолі, функція clearscreen ні чого

не повертає.

for (int i = 0; i < 100; i + +) {

std:: cout << std:: endl;

}

}

void clearboard () {/ / ця функція очищає дошку і ні чого не повертає

for (int i = 0; i < 9; i + +) {

board [ i ] = '-';

}

bool has_wonQ (char player) {/ /

int wins [ 8 ] [ 3 ] { { 0,1,2 }, { 3,4,5 }, { 6,7,8 }, { 0,3,6 }, { 1,4,7 }, { 2,5,8

}, { 0,4,8 }, { 2,4,6 }};

for (int i = 0; i < 8; i + +) {

int count = 0;

for (int j = 0; j < 3; j + +) {

if (board [ wins ] [ i ] [ j ]] == player)

count + +;

}

if (count = 3) {

return true;

}

}

return false;

}

void print_board () {

std:: cout << " Game board: " << std:: endl;

std:: cout << " - " << board [ 6 ] << " - | -" << board [ 7 ] << " - | -" << board

[ 8 ] << " - \ n ";

std:: cout << " - " << board [ 3 ] << " - | -" << board [ 4 ] << " - | -" << board

[ 5 ] << " - \ n ";

std:: cout << " - " << board [ 0 ] << " - | -" << board [ 1 ] << " - | -" << board

[ 2 ] << " - \ n ";

}

int get_move () {

std:: cout << " \ nMenu hodov: \ n ";

std:: cout << " -7 - | -8 - | -9 - " << std:: endl;

std:: cout << " -4 - | -5 - | -6 - " << std:: endl;

std:: cout << " -1 - | -2 - | -3 - " << std:: endl;

std:: cout << " \ n ";

print_board ();

std:: cout << " \ nVvod chisla:";

int move;

std:: cin >> move;

while (move > 9 | | move < 1 | | board [ move - 1 ] ! = '-') {

std:: cout << " Vvedite chislo ot (1 do 9): \ n ";

std:: cin >> move;

}

return move;

}

int main () {

clearboard ();

int turn = 0;

while (! has_wonQ (' x ') && ! has_wonQ ('0 ')) {

clearscreen ();

int move = get_move ();

std:: cout << " the move you intereted is: " << move << std:: endl;

if (turn % 2 == 0) {

board [ move - 1 ] = ' x ';

}

else {

board [ move - 1 ] = '0 ';

}

turn + +;

}

std:: cout << " the final board layout is: \ n ";

print_board ();

return

}

2.7 Функція play_and_get_winner

програмний об'єктний орієнтовний гра

Головна функція виймається з main і переноситься вище. Створюється функція play_and_get_winner вона буде повертати char тобто зіграти в гру і отримати виграв. Після вибору Х або if (' X') користувач грає за 'X' якщо він виграв, то друкується привітання "X, Pozdravlyau vi vuigrali! "І повертає return з функціі 'X' що користувач який грає 'X' виграв. Теж саме прописується для користувача що грає 'O. Якщо введення дорівнює 10, то нічія. T.я. ставити хрестик або нулик нікуди тоді виводиться на екран повідомлення " nechya " і оператор return повертає значення D. Пишеться щоб функція print_board брала стрінг під назвою індент, void print_board (std:: string indent) { }. Знаходиться нижче print_board і в дужках пишеться порожній стрінг print_board (""), а в функції main \ t print_board ("\ t "). В головної функції main прописується виконання play_and_get_winner і дати char winner. char winner дорівнює = play_and_get_winner ()

КОД:

# include <iostream>

char board [ 9 ] = {};

void clearscreen () {/ / Очищає вікно консолі, функція clearscreen ні чого

не повертає

for (int i = 0; i < 100; i + +) {

std:: cout << std:: endl;

}

}

void clearboard () { / / Функція очищає дошку і ні чого не повертає

for (int i = 0; i < 9; i + +) {

board [ i ] = '-';

}

}

bool has_wonQ (char player) {

int wins [] [ 3 ] = { { 0,1,2 }, { 3,4,5 }, { 6,7,8 }, { 0,3,6 }, { 1,4,7 },

{ 2,5,8 }, { 0,4,8 }, { 2,4,6 }};

for (int i = 0; i < 8; i + +) {

int count = 0;

for (int j = 0; j < 3; j + +) {

if (board [ wins [ i ] [ j ]] == player)

count + +;

}

if (count == 3) {

return true;

}

}

return false;

}

void print_board (std:: string indent) {

std:: cout << " Game board: " << std:: endl;

std:: cout << indent << " - " << board [ 6 ] << " - | -" << board [ 7 ] << " - | -"

<< board [ 8 ] << " - \ n ";

std:: cout << indent << " - " << board [ 3 ] << " - | -" << board [ 4 ] << " - | -"

<< board [ 5 ] << " - \ n ";

std:: cout << indent << " - " << board [ 0 ] << " - | -" << board [ 1 ] << " - | -"

<< board [ 2 ] << " - \ n ";

}

int get_move () {

std:: cout << " \ nMenu hodov: \ n ";

std:: cout << " -7 - | -8 - | -9 - " << std:: endl;

std:: cout << " -4 - | -5 - | -6 - " << std:: endl;

std:: cout << " -1 - | -2 - | -3 - " << std:: endl;

std:: cout << " \ n ";

print_board ("");

std:: cout << " \ nVvod chisla:";

int move;

std:: cin >> move;

while (move > 9 | | move < 1 | | board [ move - 1 ] ! = '-') {

while (move > 9 | | move < 1 board [ move - 1 ] ! = '-' std:: cout << " Vvedite

chislo ot (1 do 9): \ n ";

std:: cin >> move;

}

return move;

}

char play_and_get_winner () { / / Функція отримати виграв

int turn = 1;

while (! has_wonQ (' X') && ! has_wonQ ('0 ')) {

clearscreen ();

int move = get_move ();/ / Введення

std:: cout << " the final board layout is: \ n "; / / Друкується вхід

if (turn % 2 == 1) {/ / Вибір Х або О

board [ move - 1 ] = 'X ';

if (has_wonQ ('X ')) {

std:: cout << " X, Pozdravlyau vi vuigrali ! \ n ";

return 'X';

}

else {

board [ move - 1 ] = '0 ';

if (has_wonQ ('0 ')) {

std:: cout << " Y, Pozdravlyau vi vuigrali ! \ n ";

return '0 '

}

turn + +;

if (turn == 10) {

std:: cout << " nechya \ n ";

return 'D ';

}

}

}

int main () {

clearboard ();

std:: cout << " the final board layout is: \ n ";

char winner = play_and_get_winner ();

print_board ("\ t ")

return

}

2.8 Функція while

У функції main першим рядком пишеться рядок для виведення вітальне повідомлення "Privetstvuyu" засобом std:: cout і оператором <<, і нижче продекламувати стрінг reply (відповідь). reply (відповідь) по початку "y" (чи то пак YES (так)). Будується цикл while поки відповідь позитивна, тобто поки відповідь == дорівнює "y". Пішеться перелік змінних типу int x_wins = 0 (це кількість разів, коли користувач грає іксами виграв), o_wins = 0 (це кількість разів коли користувач грає нуликами виграв), ties = 0 і всім присвоєне нульове значення. Перше значення 'X', якщо користувач грає іксами тоді змінна x_wins збільшується на одиницю і зупиняється break. Друге значення 'О', якщо користувач грає нуликами тоді переменная о_wins збільшується на одиницю і зупиняється break. Третє значення 'D', якщо нечія тоді змінна ties збільшується на одиницю і зупиняється break. Прописується статистика, виводиться статистика на екран / у вікно консолі за допомогою std:: cout <<

"Winer statistic \ nPlayer X:" << x_wins, це скільки разів користувач грає Х виграв, " Player 0: " << o_wins << "and Ties:" << ties << "це скільки разів користувач грає Програв. Скільки нічиїх,

"would you like to play again? (y / n): "задається питання: "Чи бажаєте продовжити гру?", а за допомогою об'єкту cin користувач може ввести значені еreply (відповідь) y, а якщо користувач не хоче грати то потрібно ввести n. Далі пишеться цикл while (поки значеніеreply (відповідь)! = Не дорівнює "y"або && поки значені еreply (відповідь)! = Не дорівнює "n") то цикл нескінченний. Наступний рядок просить користувача ввести ще значення, якщо до цього не було Введіння y або n. Наступний рядок за допомогою об'єкту cin виводить на екран введене користувачем значення і знову перевіряється в циклі.

КОД:

# include <iostream>

char board [ 9 ] = {};

void clearscreen () {/ / Очищає вікно консолі, функція clearscreen нічого

не повертає

for (int i = 0; i < 100; i + +) {

std:: cout << std:: endl;

}

}

void clearboard () {/ / ця функція очищає дошку і ні чого не повертає

for (int i = 0; i < 9; i + +) {

board [ i ] = '-';

}

}

bool has_wonQ (char player) {

int wins [] [ 3 ] = { { 0,1,2 }, { 3,4,5 }, { 6,7,8 }, { 0,3,6 }, { 1,4,7 },

{ 2,5,8 }, { 0,4,8 }, { 2,4,6 }};

for (int i = 0; i < 8; i + +) {

int count = 0;

for (int j = 0; j < 3; j + +) {

if (board [ wins [ i ] [ j ]] == player)

count + +;

}

if (count == 3) {

return true;

}

}

return false;

}

void print_board (std:: string indent) {

std:: cout << " Game board: " << std:: endl;

std:: cout << indent << " - " << board [ 6 ] << " - | -" << board [ 7 ] << " - | -"

<< board [ 8 ] << " - \ n ";

std:: cout << indent << " - " << board [ 3 ] << " - | -" << board [ 4 ] << " - | -"

<< board [ 5 ] << " - \ n ";

std:: cout << indent << " - " << board [ 0 ] << " - | -" << board [ 1 ] << " - | -"

<< board [ 2 ] << " - \ n ";

}

int get_move () {

std:: cout << " \ nMenu hodov: \ n ";

std:: cout << " -7 - | -8 - | -9 - " << std:: endl;

std:: cout << " -4 - | -5 - | -6 - " << std:: endl;

std:: cout << " -1 - | -2 - | -3 - " << std:: endl;

std:: cout << " \ n ";

print_board ("");

std:: cout << " \ nVvod chisla:";

int move;

std:: cin >> move;

while (move > 9 | | move < 1 | | board [ move - 1 ] ! = '-') {

while (move > 9 | | move < 1 board [ move - 1 ] ! = '-' std:: cout << " Vvedite

chislo ot (1 do 9): \ n ";

std:: cin >> move;

}

return move;

}

char play_and_get_winner () { / / Функція отримати виграв

int turn = 1;

while (! has_wonQ (' X') && ! has_wonQ ('0 ')) {

clearscreen ();

int move = get_move ();/ / Введення

std:: cout << "the final board layout is: \ n "; / / Друкується вхід

if (turn % 2 == 1) {/ / Вибір Х або О

board [ move - 1 ] = 'X';

if (has_wonQ ('X ')) {

std:: cout << " X, Pozdravlyau vi vuigrali ! \ n ";

return 'X ';

}

else {

board [ move - 1 ] = '0 ';

if (has_wonQ ('0 ')) {

std:: cout << " Y, Pozdravlyau vi vuigrali ! \ n ";

return '0 ';

}

turn + +;

if (turn == 10) {

std:: cout << " nechya \ n ";

return 'D ';

}

}

}

int main () {

std:: cout << " Privetstvuyu \ n \ n ";

std:: string reply = " y ";

while (reply == " y ") {

clearboard ();

/ / std:: cout << " the final board layout is: \ n ";

char winner = play_and_get_winner ();

print_board ("\ t ");

switch (winner) {

case 'X':

x_wins + +;

break;

case '0 ':

o_wins + +;

break;

case 'D':

ties + +;

break;

}

std:: cout << " \ n \ t * Winer statistic * \ nPlayer X: " << x_wins

<< ", Player 0: " << o_wins << " and Ties: " << ties << " \ n \ n ";

std:: cout << " \ n would you like to play again ? (y / n):";

std:: cin >> reply;

while (reply ! = " y " && reply ! = " n ") {

std:: cout << " please inter a valid reply (y / n):";

std:: cin >> reply;

}

} / / Кінець play_and_get_winner

return}

РО3ДІЛ 3. СТВОРЕННЯ ГРИ 4*4

3.1 Хрестики нулики 4 * 4

Зміни з первісним варіантом виділені

Код:

# include <iostream>

char board [ 16 ] = {};

void clearscreen () {/ / очищає вікно консолі, функція clearscreen ні чого

не повертаєть.

for (int i = 0; i < 100; i + +) {

std:: cout << std:: endl;

}

}

void clearboard () {/ / ця функція очищає дошку і ні чого не повертає

for (int i = 0; i < 17; i + +) {

board [ i ] = '-';

}

}

bool has_wonQ (char player) {

int wins [ 10 ] [ 4 ] = { { 0,1,2,3 }, { 4,5,6,7 }, { 8,9,10,11 }, { 12,13,14,15

}, {

0,4,8,12 }, { 1,5,9,13 },

{ 2,6,10,14 }, { 3,7,11,15 }, { 0,5,10,15 }, { 3,6,9,12 }};

for (int i = 0; i < 10; i + +) {

int count = 0;

for (int j = 0; j < 4; j + +) {

if (board [ wins [ i ] [ j ]] == player)

count + +;

}

if (count == 4) {

return true;

}

}

return false;

}

void print_board (std:: string indent) {

std:: cout << std:: endl;

std:: cout << indent << " - " << board [ 12 ] << " - | -" << board [ 13 ]

<< " - | -" << board [ 14 ] << " - | - "<< board [ 16 ] <<" - \ n ";

std:: cout << indent << " - " << board [ 8 ] << " - | -" << board [ 9 ] << "

- | -" << board [ 10 ] << " - | - "<< board [ 11 ] <<" - \ n ";

std:: cout << indent << " - " << board [ 4 ] << " - | -" << board [ 5 ] << "

- | -" << board [ 6 ] << " - | - "<< board [ 7 ] <<" - \ n ";

std:: cout << indent << " - " << board [ 0 ] << " - | -" << board [ 1 ] << "

- | -" << board [ 2 ] << " - | - "<< board [ 3 ] <<" - \ n ";

}

int get_move () {

std:: cout << " \ nMenu hodov: \ n ";

std:: cout << " 13 - | -14 | -15 | -16 " << std:: endl;

std:: cout << " -9 - | -10 | -11 | -12 " << std:: endl;

std:: cout << " -5 - | -6 - | -7 - | -8 - " << std:: endl;

std:: cout << " -1 - | -2 - | -3 - | -4 - " << std:: endl;

std:: cout << " \ n ";

print_board ("");

std:: cout << " \ nVvod chisla:";

int move;

std:: cin >> move;

while (move > 16 | | move < 1 | | board [ move - 1 ] ! = '-') {/ / | | move > = '

A' && move < = ' Z' | | move > = ' a ' && move < = ' z '

std:: cout << " Vvedite chislo ot (1 do 16): \ n ";

std:: cin >> move;

}

return move;

}

char play_and_get_winner () {

int turn = 1;

while (! has_wonQ (' X') && ! has_wonQ ('0 ')) {

clearscreen ();

int move = get_move ();

clearscreen ();

if (turn % 2 == 1) {

board [ move - 1 ] = 'X ';

if (has_wonQ ('X ')) {

std:: cout << " X, Pozdravlyau vi vuigrali ! \ n ";

return 'X ';

}

}

else {

board [ move - 1 ] = '0 ';

if (has_wonQ ('0 ')) {

std:: cout << " Y, Pozdravlyau vi vuigrali ! \ n ";

return '0 ';

}

}

turn + +;

if (turn == 17) {

std:: cout << " nechya \ n ";

return 'D ';

}

}

}

int main () {

std:: cout << " Privetstvuyu \ n \ n ";

std:: string reply = " y ";

int x_wins = 0, o_wins = 0, ties = 0;

while (reply == " y ") {

clearboard ();

char winner = play_and_get_winner ();

print_board ("\ t ");

switch (winner) {

case 'X':

x_wins + +;

break;

case '0 ':

o_wins + +;

break;

case 'D':

ties + +;

break;

}

std:: cout << " \ n \ t * Winer statistic * \ nPlayer X: " << x_wins

<< ", Player 0: " << o_wins << " and Ties: " << ties << " \ n \ n ";

std:: cout << " \ n would you like to play again ? (y / n):";

std:: cin >> reply;

while (reply ! = " y " && reply ! = " n ") {

std:: cout << " please inter a valid reply (y / n):";

std:: cin >> reply;

}

} / / Кінець

return 0;

}

Рис. 3.1.1 Кінцевий варіант

ВИСНОВКИ

В результаті виконання курсової роботи була розроблена гра «Хрестики-нулики», в які можуть грати 2 гравці, або гравець з комп'ютером. Розробка виконана відповідно до принципів об'єктно-орієнтованого програмування, в середовищі DEV C++ 4.9.9.2. Використано принцип роздільної компіляції, графічний режим роботи, російськомовний інтерфейс користувача.

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

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

СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ:

1. Початковий курс С і С + + : Підручник. / Б.І. Березін. Москва: "ДІАЛОГ- МІФІ", 1999р.

2. Мова програмування С + + : Підручник. / Страуструп. Київ: "ДіаСофт", 1993 р.

3. Введення в мову С + +: Підручник. / Бьярн Страуструп. - СПб.: 1995.

4. Структури та алгоритми обробки даних: Підручник. / Матьяш В.А., Путілов В.А., Фільчаков В.В., Щокін С.В. - Апатити, КФ Петро ГУ, 2000

5. С + + / Девіс Стефан Р.,4- е видання: Пер. з англ.: - М.: Видавничий дім «Вільямс», 2003

6. Основи програмування: Учеб. Для середовищ. проф. освіти / І.Г. Семакін, А.П. Шестаков. - М., 2006.

7. С + + експрес курс: Підручник. / Лаптєв В.В. - СПб.: БХВ - Петербург 2004.

8. С + + навчальний курс: Підручник. / Франка П. - СПб.: Пітер 2005.

9. Моделі і cтруктура даних / Навчальний посібник / Д. Далека, А.С. Дерев'янко, О.Г. Кравец, Л.Є. Тімановскій - Харків: ХДПУ, 2000

10. Высшая математика для экономистов: книга для студентов вузов / Н.Ш. Кремер, 3 - е издание. - М.: ЮНИТИ- ДАНА, 2006

Размещено на Allbest.ru

...

Подобные документы

  • Практична реалізація гри в "хрестики-нулики" в середовищі програмування Turbo C++ версії 3.0. Моделювання ігрового поля квадратною матрицею третього порядку. Процедури програми гри. Створення програми Tic_Tac, що дозволяє людині грати у гру з комп’ютером.

    курсовая работа [145,8 K], добавлен 23.04.2010

  • Концепції об'єктно-орієнтованого програмування. Методи створення класів. Доступ до методів базового класу. Структура даних, функції. Розробка додатку на основі діалогових вікон, програми меню. Засоби розробки програмного забезпечення мовами Java та С++.

    курсовая работа [502,5 K], добавлен 01.04.2016

  • Принципи об'єктно-орієнтованого підходу. Розробка програмного комплексу з використанням цього алгоритму і користувальницьких класів на мові програмування С++. Реалізація простого відкритого успадкування. Тестування працездатності системи класів.

    курсовая работа [98,0 K], добавлен 06.05.2014

  • Призначення гри в хрестики-нулики та програмне забезпечення, необхідне для її функціонування. Написання програми в середовищі Borland C++ Builder. Способи виклику програми. Характер вхідних та вихідних даних. Алгоритм та тестування роботи програми.

    курсовая работа [321,6 K], добавлен 01.04.2016

  • Особливості об'єктно-орієнтованого програмування. Розробка програми для елементарних математичних розрахунків, виведення результату на екран та запису у файлі. Сортування слів у рядку. Програма, яка реалізовує ходи шахових фігур. Програма-калькулятор.

    отчет по практике [2,0 M], добавлен 19.03.2015

  • Редагування за допомогою текстового редактора NotePad вхідного файлу даних. Програмна реалізація основного алгоритму з використанням засобів об'єктно-орієнтованого програмування. Об’ява та опис класів і об'єктів. Розробка допоміжних програмних засобів.

    курсовая работа [69,4 K], добавлен 14.03.2013

  • Класифікація об'єктно-орієнтованих мов програмування. Розробка алгоритмічного та програмного забезпечення комп'ютерної системи управління процесом випалювання будівельних матеріалів. Тестування програмного забезпечення, оцінка його ефективності.

    курсовая работа [1,6 M], добавлен 25.04.2015

  • Об’єктно-орієнтоване програмування мовою С++. Основні принципи об’єктно-орієнтованого програмування. Розробка класів з використанням технології візуального програмування. Розробка класу classProgressBar. Базовий клас font. Методи тестування програми.

    курсовая работа [211,3 K], добавлен 19.08.2010

  • Основні принципи об’єктно-орієнтованого програмування. Типові середовища програмування та особливості мови С++. Етапи проектування БД. Розробка програмного забезпечення для реалізації створення бази відеофільмів. Основні положення та моделі БД.

    курсовая работа [2,7 M], добавлен 24.03.2011

  • Визначення принципів розробки додатків для Windows 8 засобами об'єктно-орієнтованого програмування. Розробка програмного застосування для перегляду графічних файлів з функціями здобуття інформації про слайд-шоу. Інтерфейс користувача та лістинг програми.

    курсовая работа [2,8 M], добавлен 23.10.2014

  • Розробка програми імітації схеми життя лісового біому. Алгоритм пересування по головному полю. Основні глобальні функції програми. Динамічна ідентифікація типу даних. Вирішення завдань в області об’єктно-орієнтованого програмування засобами C++.

    курсовая работа [423,1 K], добавлен 26.11.2014

  • Концепції об'єктно-орієнтованого програмування. Спеціалізовані засоби розробки програмного забезпечення мовою Delphi. Загальні питання побудови та використання сучасних систем об’єктно-орієнтованного та візуального проектування програмних засобів.

    курсовая работа [201,4 K], добавлен 01.04.2016

  • Розробка програми для моделювання роботи алгоритму Дейкстри мовою C# з використанням об’єктно-орієнтованих принципів програмування. Алгоритм побудови робочого поля. Програмування графічного інтерфейсу користувача. Тестування програмного забезпечення.

    курсовая работа [991,4 K], добавлен 06.08.2013

  • Розроблення додатка за допомогою об'єктно-орієнтованого візуального проектування Delphi для виконання арифметичних операцій або з використанням меню. Створення інтерфейсу користувача з використанням компонентів SYSTEM і WIN32. Обробка двовимірного масиву.

    методичка [326,1 K], добавлен 13.01.2010

  • Розробка програми на мові програмування С++ з використанням об’єктно-орієнтованого програмування, яка включає в себе роботу з файлами, класами, обробку числової інформації і роботу з графікою. Структура класів і об’єктів. Лістинг та алгоритм програми.

    курсовая работа [104,4 K], добавлен 14.03.2013

  • Цілі і завдання розробки, її предмет і актуальність. Опис предметної області, цілі і завдання програми. Вибір методу рішення, опис процесу програмування і вибір інструментальних засобів для реалізації проекту, опис вхідних та вихідних даних, інтерфейсу.

    курсовая работа [327,1 K], добавлен 01.09.2014

  • Аналіз сучасного стану технологій програмування. Засоби реалізації об'єктів в мові C++, структура даних і функцій. Розробка програмного продукту - гри "трикутники", з використовуванням моделей, класів і функцій об’єктно-орієнтованого програмування.

    курсовая работа [117,8 K], добавлен 14.03.2013

  • Робота з клієнт-серверними додатками на основі сокетів. Розробка програм сервера та клієнта для обробки запитів клієнта сервером. Можливості програм сервера та клієнта. Створення гри "хрестики-нулики" на основі сокетів. Програмне забезпечення сервера.

    лабораторная работа [181,8 K], добавлен 23.05.2015

  • Реалізація, за допомогою технології Windows Forms, програми обліку даних про волонтерів та подій, на які вони зареєстровані. можливості об'єктно-орієнтованого програмування. Створення класів. Методи, властивості. Використання Multiple Document Interface.

    курсовая работа [1,5 M], добавлен 02.12.2015

  • Розробка програми для тренування швидкого десяти пальцевого набору тексту на клавіатурі за допомогою класів, які будуть містити в собі параметри об’єктів та їх методи. Аналіз об'єкту програмування. Основні принципи об'єктно-орієнтованого програмування.

    курсовая работа [1,8 M], добавлен 18.05.2017

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.