Міністерство освіти та науки України
Закарпатський Державний Університет
Факультет інформатики
Кафедра загальної інформатики та математичного моделювання
Реєстраційний №________
Дата___________________
“___”_____________2005р.
Робота захищена
“___”_____________2005р.
з оцінкою
_______________________
Підписи членів комісії
Студента 2-го курсу
заочного відділення
Ісака І.І.
Науковий керівник:
викл. Дробнич О.В.
2005
Зміст
Вступ……………………………………………………….3
1.Постановка задачі...……………………………………4
2.Вибір методу розв’язку та структура бази даних.....6
3.Опис алгоритму розв’язку……………………………7
4. Опис основних функцій програми………………….9
5.Лістинг програми…………………………………….11
Висновки………………………………………………...29
Список використаної літератури…………………….30
Додаток…………………………………………………..31
Вступ.
Декілька років тому двоє британських журналістів вигадали нову телевізійну гру, відому тепер у всьому світі як "WHO WANTS TO BE A MILLIONAIRE?" - "ХТО ХОЧЕ СТАТИ МІЛЬЙОНЕРОМ?".
З'явившись у ефірі у вересні 1998 року на каналі ITV, ця гра одразу стала сенсацією британського телебачення, потім приголомшила Америку, а нині ліцензію на показ шоу продано вже понад 52 країнам світу.
Задум авторів програми полягав у тому, щоб учасник, подолавши всі інтелектуальні перешкоди, мав шанс виграти неймовірно привабливий приз. Якщо гравець правильно відповідає на 15 запитань, то в результаті отримує чек на 1.000.000. Сенс гри полягає у тому, що гравцеві доводиться задіяти весь свій розумовий потенціал.
На кожне запитання є чотири варіанти відповіді, але правильний - тільки один. Вибір правильного варіанта - і є суттю гри.
Запитання поділяються на кілька рівнів складності: перші п'ять, як правило, досить прості, п'ять наступних вимагають уже не тільки кмітливості, а й ґрунтовних знань, а останні п'ять - найскладніші. Утім, гравець має право скористатися трьома підказками - "50/50" (комп'ютер знімає дві неправильні відповіді), "Допомога залу" (гравець може звернутися по допомогу до глядачів у студії), "Допомога друга" (можна подзвонити другові й порадитися з ним). Проте в кожному разі без грошей ніхто не залишається, а розмір суми прямо залежить від інтелектуального рівня гравця. Правила гри дуже прості, і дозволяють гравцеві у будь-який момент часу забрати виграну суму грошей.
Тому написавши комп’ютерну гру “Перший мільйон”, ми зможемо надати кожному бажаючому можливість відчути себе гравцем популярної телевізійної гри.
Постановка задачі.
Мета даної курсової роботи – написати на одній з мов програмування гру “Перший мільйон”.
Задача полягає в тому, що алгоритм програми повинен відповідати правилам телевізійної гри “Перший мільйон”. Тобто вона повинна містити такі основні компоненти: питання та чотири варіанти відповіді на нього, три підсказки (50/50, допомога залу, дзвінок другу). За кожну правильну відповідь учасник отримує право на певний грошовий приз. Рівень складності запитань поступово наростає, зате кожне наступне "коштує" більше, ніж попереднє, і задається воно тільки після одержання правильної відповіді на попереднє. Таким чином, розмір призу наростає від ста до 1 мільйона гривень.
У ході гри гравець має право на 3 підказки: "50/50" (комп'ютер знімає дві хибні відповіді), "Допомога залу" (гравець може звернутися по допомогу до глядачів у студії), "Допомога друга" (можна зателефонувати другові й порадитися з ним). Кожну з трьох підказок гравець має право використати лише один раз. Ці підказки він може використати в будь-якій послідовності і на будь-якому етапі гри, відповідаючи на різні запитання чи на одне й те ж будь-якого рівня складності. Використання підказок ніяк не впливає на розмір належного грошового призу.
Якщо гравець сумнівається, чи зможе правильно відповісти на запитання,програма повинна дозволити йому відмовитися від подальшої участі у грі, перед тим як він зробить свій вибір і одержати приз, який відповідає вартості останнього запитання, на яке гравець відповів.
У випадку, якщо гравець дасть неправильну відповідь на запитання в діапазоні 1-5, він вибуває з гри без призу. Якщо це станеться у проміжку 6-10, він одержить приз, який відповідає 5-му запитанню, якщо ж він дістався до діапазону 11-15, то в разі невдалої відповіді на котресь із запитань він "відкочується" лише до 10-го рівня, тобто він вибуває з гри, одержавши приз за 10-е запитання.
Зважаючи на те, що програма – лише аналог телевізійної гри, а гравець тільки один, у програмі буде відсутній відбірковий тур, буде тільки основний етап. Так як реального залу та друга, якому можна зателефонувати, у комп’ютерному варіанті гри не існує, роль залу та друга, якому телефонуємо, буде виконувати програма.
Вибір методу розв’язку.
Дану задачу зручно вирішити методами об’єктно–орієнтованого програмування на мові BorlandC++ Builder 6. Мова С++є універсальною, має широку вигоду в області використовування графіки, а концепція ООП, підтримувана нею дозволить максимально наблизити рішення задачі до образу людського рішення, спростивши тим самим задачу. З допомогою даної візуальної мови програмування, можна легкостворити потрібний інтерфейс, звукове та візуальне оформлення гри “Перший мільйон”.
Структура бази даних.
Для збереження питань у програмі використовуються 3 бази:
Level1.dbf, Level2.dbf, Level3.dbf. Три бази потрібні для того, щоб зберігати питання трьох рівней складності.
Для зчитування питань програма використовує ще 3 бази: Temp1.dbf, Temp2.dbf, Temp3.dbf, які служать для тимчасового збереження в них питань та відповідей; тому, що після того, як програма зчитає питання, воно видаляється (це зроблено для того, щоб питання не повторювались)
Кожна з баз складається з 6 полів: VOPROS, A, B, C, D, PR_OTV. Поле VOPROS служить для збереження питання, у полях A, B, C, D містяться варіанти відповідей, у полі PR_OTV зберігаються номери правильних варіантів відповідей.
Структура таблиці баз даних.
Назва поля | VOPROS | A | B | C | D | PR_OTV |
Тип і розмір | C [128] | C [32] | C [32] | C [32] | C [32] | N [1] |
Опис аглоритму розв’язку.
Суть алгоритму, що описує зчитування питань з бази та їх перевірки можна описати наступним чином:
1.Відповідь на питання правильна? Якщо так, то п.2, інакше перехід на п.9.
2.Перевіряємо чи досягнуто 15 питання. Якщо так, то перехід на п.10, інакше п.3.
3.Якщо номер питання дорівнює 1, то зчитуємо питання з першої бази, якщо дорівнює 2 – зчитуємо з другої бази, якщо 3 – зчитуємо з третьої.
4.Збільшуємо позицію досягнутого питання.
5.Виводимо мітку досягнутої суми.
6.Обновляємо панелі з питанням та відповідями.
7.Перевіряємо чи досягнуто неспалимої суми. Якщо досягнуто, то п.11, інакше п.8.
8.Виводимо інформаційне вікно з інформацією про досягнуту суму виграшу.Перехід на п.1.
9.Позначаємо червоним кольором панель з варіантом, обраним користувачем, подаємо звукове повідомлення. Якщо досягнуто першої неспалимої суми, то виграш дорівнює 1 000 грн., якщо другої неспалимої суми, то виграш – 100 000 грн., інакше виграш дорівнює 0 грн. Виводимо вікно з інформацією про виграну суму та кінець гри. Перехід на п.12.
10.Виводимо вікно з привітанням про виграш 1 000 000 грн. Перехід на п.12.
11.Якщо досягнуто 5 питання, то досягнуто першої неспалимої суми. Якщо досягнуто 10 питання, то досягнуто другої неспалимої суми. Вивід вікна з інформацією про досягнення неспалимої суми. Перехід на п.8.
12. Кінець гри
Алгоритм підказки “допомога залу” побудований таким способом:
1.Дана підказка вже використовувалася? Якщо так, то п.5, інакше п.2.
2.Зчитуємо з бази номер правильного варіанту відповіді.
3.Для стовбчика з правильним варіантом відповіді генеруємо випадкове
число з діапазону 50-100 та додаємо до нього 50. Таким чином стовпчик з правильним варіантом відповіді завжди буде більшим за 50%.
4.Числа для інших трьох стовпчиків генеруємо так, щоб відсотки всіх чотирьох стовпчиків в сумі дорівнювали 100.
5.Повернення в основну програму.
Алгоритм підказки “дзвінок другу”:
1.Дана підказка вже використовувалася? Якщо так, то п.5, інакше п.2.
2.Довжина числа, введеного в якості номера телефону, дорівнює 6 символів? Якщо так, то перехід на п.4, інакше п.3.
3.Вводимо наступну цифру. Перехід на п.2.
4.Звіряємо введений номер з одним із запропонованих номерів абонентів, виводимо відповідь в залежності від обраного абонента.
5.Повернення в основну програму.
Алгоритм підказки “50 на 50”:
1.Дана підказка вже використовувалася? Якщо так, то п.4, інакше п.2.
2.Зчитуємо з бази номер правильного варіанту відповіді.
3.Забираємо з панелей два неправильних варіанти відповідей.
4. Повернення в основну програму.
Опис основних функцій програми.
void init_form ()
– виконує ініціалізацію глобальних змінних, та присвоює їм початкове значення. Встановлює вікно програми в початковий стан.
void verify (int p)
– перевіряєвідповідьгравця та виконує певні функції в залежності від істинності відповіді на питання.
void nepravilno (int panel)
– визивається при неправильній відповіді, виводить вікно з інформацією про кінець гри.
void score (int s)
– виводить вікно з інформацією про досягнуту суму.
void next (void)
– перміщає мітку досягнутого питання на одну позицію вверх та збільшує досягнуту суму.
void no_fire ()
– виконує перевірку на досягнення неспалимої суми та виводить вікно з інформацією про досягнення неспалимої суми.