Розробка клавіатурного тренажера для поліпшення швидкості набору тексту
Розробка програми для тренування швидкого десяти пальцевого набору тексту на клавіатурі за допомогою класів, які будуть містити в собі параметри об’єктів та їх методи. Аналіз об'єкту програмування. Основні принципи об'єктно-орієнтованого програмування.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 18.05.2017 |
Размер файла | 1,8 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Зміст
Вступ
1. Загальна частина
1.1 Постановка задачі
1.2 Аналіз об'єкту програмування
1.3 Вимоги до ПК і ОС
1.4 Опис мови програмування
2. Спеціальна частина
2.1 Опис програмної реалізації
2.2 Опис власних класів
2.3 Розробка алгоритму та його опис
2.4 Інструкція програміста
2.5 Інструкція оператора
Висновок
Список використаних джерел
Додаток
Вступ
Клавіатурний тренажер - вид комп'ютерних програм або онлайн-сервісів, призначених для навчання набору на комп'ютерній клавіатурі. Різноманітність пропонованого програмного забезпечення, велика частина якого поширюється безкоштовно, дозволяє підібрати індивідуально найбільш підходящий тренажер з можливістю вибору не тільки рівня від новачка до просунутого користувача, але і в найдрібніших деталях налаштувати програму «під себе».
Зазвичай цілями тренажерів є: навчити сліпому методу друку, зокрема, задіяти для набору все десять пальців рук; збільшити швидкість набору; зменшити кількість помилок; поліпшити ритмічність набору (що дозволяє зменшити втому при наборі).
Деякі клавіатурні тренажери пропонують ряд уроків для вивчення розкладки та ведуть статистику навчання.
Метою роботи є розробити власний клавіатурний тренажер для покращення швидкості набору тексту.
Курсова робота виконана засобами Microsoft Visual Studio, мовою програмування С++ з використанням об'єктно-орієнтованого підходу.
Курсовий проект складається з двох розділів та додатку, який містить код програми.
1. Загальна частина
1.1 Постановка задачі
Основне завдання курсового проекту полягає в розробці програми для тренування швидкого десяти пальцевого набору тексту на клавіатурі за допомогою класів, які будуть містити в собі параметри об'єктів та їх методи.
Завершена програма повинна мати вигляд вікна, на якому знаходиться меню з пунктами вибору рівня складності:
*«1 рівень» -- користувачу надається 4 секунди для вводу одного слова
*«2 рівень» -- користувачу надається 3 секунди для вводу одного слова
*«3 рівень» -- користувачу надається 2 секунди для вводу одного слова
В програмі повинен бути реалізований клас з наступними функціями:
1 Конструктор гри.
2 Функція вибору та встановлення рівня складності.
3 Функція тренування користувача.
4 Функція виводу слів із масиву.
5 Функція для зчитування інформації з клавіатури.
6 Функція для перевірки правильності вводу.
7 Функція виводу результату користувача.
На виході користувач отримує рахунок, нарахований під час роботи програми (кількість введених слів за хвилину та скільки хвилин пройшло з початку тренування).
Користувачами даної програми можуть бути як учні, студенти чи викладачі, так і інші особи, які хочуть покращити свої навички швидкого набору текстів. Тестову програму можна використовувати в освітніх та дослідницьких цілях.
1.2 Аналіз об'єкту програмування
На даний момент на ринку програмних продуктів пропонується чимало хороших програм для навчання швидкого набору на клавіатурі. Найбільш солідним, функціональним та поширеним серед більшості користувачів рішенням є додаток «Соло на клавиатуре». Але не кожен може дозволити собі подібну програму через її ціну, тому велика кількість віддає перевагу більш прийнятним за ціною або навіть взагалі безкоштовним утилітам, таким як: Stamina, VerseQ, Typing Master, Bombina, BabyType 2000 та інші.
«Соло на клавиатуре». Це, мабуть, один з найвідоміших і популярних клавіатурних тренажерів. Програма платна. Навчання, крім російської та англійської мов, є також німецькою. З безперечних переваг відзначимо методологічний супровід протягом усього курсу (саме курсу, це не просто тренажер). Це і рекомендації по поставі, по правильності постановки кистей і пальців, мотивуюче введення до кожного уроку з порадами, листами від клієнтів і анекдотами.
При бажанні це все можна відключити. В цілому програма має багатий функціонал. З недоліків (можливо, вони багато в чому суб'єктивні) хотілося б відзначити дуже довгий процес навчання. Для людей з недоліком терпіння і посидючості пройти курс повністю буде нелегко.
В Інтернеті часто жартують, що ця програма є не тільки тренінгом сліпому десяти пальцевому друку, але і сили волі. Незручним також здається заборона на звичне друкування під час роботи з тренажером, особливо для людей, які кожен день працюють з набором величезних текстів, а також неможливість перейти до наступного уроку, поки не пройдений попередній. Програму можна купити та скачати на основних сайтах - ergosolo.ru та nabiraem.ru (див. рис. 1.1).
Рисунок 1.1. Головний сайт програми «Соло на клавіатурі»
Перед виконанням вправ потрібно виконати розминку, яка допомагає адаптуватися в «Соло». У режимі реального часу, а також після тренування можна ознайомитися зі статистикою: середній бал, швидкість набору, кількість помилок. Доступна статистика не тільки по вправах, а й по днях, по ній можна простежити динаміку виконання вправ. Клавіатурні тренінги не містять осмислених фраз, це заздалегідь підготовлені «синтетичні» вираження - на відміну, скажімо, від далі розглянутого VerseQ, де рядок для набору формується на основі помилок користувача. В «Соло» помилки вкрай не вітаються, часто доводиться по декілька разів переробляти завдання. Вимоги до проходження строгі, вправи ускладнюються з кожним новим рівнем, яких близько сотні. В програмі передбачені психологічні тести.
Інтерфейс програми справляє подвійне враження. Новий інтерфейс програми витриманий в сірій і зеленій гамі, не сильно поліпшив ергономіку програми.(див. рис. 1.2) З одного боку, він досить зручний для роботи, всі налаштування і елементи добре задокументовані в довідці. Але на віртуальній клавіатурі не вказано, яким пальцем натискати ту чи іншу клавішу, під час виконання вправи не відображаються підказки. У підсумку, не маючи достатнього досвіду, потрібно повертатися до опису вправи.
Рисунок 1.2. Головне вікно програми «Соло на клавіатурі»
Для внесення елементу розважальності в рутину навчання з «Соло» автори створили дочірній сайт, на якому можна перевіряти швидкість набору і змагатися в цьому показнику з іншими людьми (див. рис. 1.3).
Рисунок 1.3. Тест на швидкість набору в «Соло на клавіатурі онлайн»
«VerseQ». Нове покоління колись відомого клавіатурного тренажера «KeyTO». Програма платна, з можливістю безкоштовного тесту демо-версії. Режими - російська, англійська, німецька розкладки. Особливість її полягає в тому, що використовується нехарактерний для інших алгоритм навчання. Розробники очікують, що вже через годину після початку занять користувач зможе набирати текст наосліп, адже «VerseQ» вчить не поетапному освоєнню пар клавіш, а орієнтації одночасно по всій клавіатурі (див. рис. 1.4).
Перевагою тренажера є те, що під час набору не повторюються буквосполучення і фрази. Також вони побудовані за принципом реальних складів, що існують в російській мові, а не простого набору по типу «шгшгш». Плюсом є також те, що програма «запам'ятовує» зроблені вами помилки і частіше видає комбінації з тими ж поєднаннями для більшого тренування. Інтерфейс нейтральний, не відволікає. З мінусів можна відзначити тільки відсутність повної довідкової інформації по роботі з програмою, що робить її освоєння, в деякій мірі, інтуїтивним.
Рисунок 1.4 - Головне вікно програми «VerseQ»
Typing Master. За великим рахунком, цей тренажер можна було не включати в огляд, оскільки в ньому немає підтримки російськомовної розкладки, але все ж:
а) програма корисна для підвищення навичок сліпий друку на латиниці англійською, іспанською, німецькою, французькою або італійською мовами;
б) Typing Master є чудовим прикладом структурованого, вивіреного курсу.
Строгий підхід і консервативність Typing Master не кожному користувачеві припадуть до смаку, в той же час, в порівнянні з «Соло», програма представлена навіть стисліше. Typing Master пропонує наступні курси:
- Touch Typing Course - безпосередньо, курс по сліпого машинопису
- Speed Building Course - її розвиток
- Numbers Course - невеликий курс по набору на верхньому цифровому ряді
- Special Marks Course - експрес-курс по додаткових символів: дужки, математичні знакам і т. Д.
- Numeric Keypad Course - курс по використанню цифрової клавіатури
Кожен курс складається з теоретичних і практичних блоків. Спочатку вправи вказується час виконання завдання, також пропонується вибрати складність (від 90% до 98% правильних влучень). У режимі вивчення нових клавіш ( «new keys») літери для набору ніяк не пов'язані між собою фонетично, але в режимі «drill» потрібно вводити саме слова: передбачені окремі вправи для слів, речень, абзаців. По закінченню виконання завдання відображається статистика, з якої можна дізнатися, які клавіші викликають найбільшу складність.
Додатково варто відзначити TypingMaster Satellite - асистент, який працює в фоні і відстежує здійснюються помилки, а також створює індивідуальні вправи для найбільш складних поєднань.
Інтерфейс був створений розробниками, уважним до дрібниць. Перш за все, дуже інтуїтивно і буквально пояснюється, яким пальцем натискати ту чи іншу клавішу, з доданими схемами клавіатури (див. рис. 1.5). Дуже корисним виявляється те, що помилки на клавіатурі відображаються у вигляді перекреслених клавіш (в інших тренажерах цього немає, що призводить до виникнення кількох повторюваним помилок після одного невірного натискання).
Рисунок 1.5. Головне вікно програми «Typing Master»
TypingMaster не дозволяє відхилитися від заданої програми ні на крок і чимось нагадує сухі курси з мовної граматики. Однак це не можна назвати недоліком, скоріше - характерна особливість даного тренажера, яка або утримає користувача, або його відштовхне.
Stamina являється найбільш «несерйозним» тренажером в огляді. Програма не сподобається користувачам, які вважатимуть почуття гумору розробника недоречним і при цьому цілком налаштовані на навчання десятипальцевому методу друку. Несерйозність починається зі довідки, коментарів і закінчуючи озвученням. До звуку - особливі претензії, висловлені відвідувачами на домашній сторінці програми. Цей момент можна виправити за допомогою патча або за допомогою опції «Цензура» в настройках Stamina (див. рис. 1.6).
Програма має різноманітність режимів тренування - «Уроки», «Фрази», «Букви», «Все символи» і «Зовнішній файл». Усі уроки розбиті на базові вправи, поєднання букв, цифри і символи. Відносно уроків з цифровою клавіатурою: розробник заявляє, що «робив їх не особливо намагаючись» і пропонує користувачам самим взяти участь у процесі розробки (цитата: «Може зробите щось розумніше?»).
Автор Stamina помістив програму з її широкими можливостями в незручну оболонку, тому при запуску тренажера не зовсім зрозуміло, як і в якій послідовності з усім цим функціоналом потрібно розбиратися. З іншого боку, довідка досить зрозуміло пояснює методику курсу, основні поняття, техніку друку (положення пальців на клавіатурі і т.п.). Особлива увага приділяється альтернативним методам розташування пальців на клавіатурі.
Клавіатурний тренажер також можна радити для роботи з української чи білоруською розкладкою (що не зустрічається в інших тренажерах). У базовому дистрибутиві містяться уроки російською, англійською, українською, можливо підключення фраз на інших мовах.
Таким чином, головна особливість Stamina - свобода дій, яка надається користувачеві. Тому можна виконувати вправи в будь-якій послідовності, скласти власний курс. Мінус методу - невідомо, як скоро з таким підходом можна домогтися конкретних результатів.
Рисунок 1.6. Головне вікно програми «Stamina»
Bombina. Тренажер для наймолодших. «Bombina» займає вільну нішу, де немає конкурентів. Цей тренажер призначений для навчання школярів (скоріше навіть, дітей молодшого шкільного віку) сліпому десяти пальцевому методу друку.
Оболонка програми «мультяшна», оцінювати її повинні діти (див. рис. 1.7). Проте, резонні нарікання можуть виникнути і у дорослих. Інтерфейс не у всіх місцях інтуїтивно зрозумілий, і здається незручним те, що елементи навігації або, наприклад, кнопка «Старт» на початку вправи недостатньо чітко виділені і доводитися їх шукати. Наприклад: зображення ганчірки - це тутешній аналог кнопки «Вихід».
Виникає питання по методиці роботи тренажера: яким чином відбувається навчання, на що звернути увагу батькам і дітям. Є досить докладна довідка, яка існує окремо від програми. Почати «Bombina» рекомендується з вступного курсу, де детально роз'яснюється постановка пальців на клавіатурі, дається опис клавіш. Далі можна переходити до вправ.
Якщо в інших тренажерах опір робиться на переходи і клавіатурні акорди, тут потрібно звертати увагу на стрибаючі «фішки» і повторювати їх рухи. У «Bombina» передбачені рівні складності, які впливають на кількість допустимих помилок у вправі. Можна активувати автоперехід з одного рівня складності на інший: він спрацює після успішного проходження вправи з високою оцінкою не менше трьох разів. У підсумку : в програмі чимало інтерактивних елементів, режимів (присутня навіть логічна гра), її можна радити для навчання дітей комп'ютерним азам.
Рисунок 1.7. Головне вікно програми «Bombina»
1.3 Вимоги до ПК і ОС
Для запуску програми на виконання необхідно, щоб ПК працював під ОС Microsoft Windows 7/8/10. Програма не потребує додаткової інсталяції.
- Windows ХР / 7 / 8 /8.1/10
- Оперативна пам'ять: 64 МБ
- Наявність клавіатури
1.4 Опис мови програмування
Для курсового проектування обрано середовище розробки Microsoft Visual Studio 2013, мову програмування С++ та додаткову бібліотеку SFML.
Microsoft Visual Studio 2013 ? один з продуктів компанії Microsoft, що включають інтегроване середовище розробки програмного забезпечення і ряд інструментальних засобів.
C++ (Сі-плюс-плюс) -- мова програмування високого рівня з підтримкою декількох парадигм програмування: об'єктно-орієнтованої, узагальненої та процедурної. Розроблена Б'ярном Страуструпом (англ. Bjarne Stroustrup) в AT&T BellLaboratories (Мюррей-Хілл, Нью-Джерсі) у 1979 році та початково отримала назву «Сі з класами». Згодом Страуструп перейменував мову у C++ у 1983 р. Базується на мові С. Визначена стандартом ISO/IEC 14882:2003. У 1990-х роках С++ стала однією з найуживаніших мов програмування загального призначення. Мову використовують для системного програмування, розробки програмного забезпечення, написання драйверів, потужних серверних та клієнтських програм, а також для розробки розважальних програм таких як відео ігри. С++ суттєво вплинула на інші, популярні сьогодні, мови програмування: С# та Java.
При створенні С++ прагнули зберегти сумісність з мовою С. Більшість програм на С справно працюватимуть і з компілятором С++. С++ має синтаксис, заснований на синтаксисі С .
Нововведеннями С++ порівняно з С є:
- підтримка об'єктно-орієнтованого програмування через класи;
- підтримка узагальненого програмування через шаблони;
- доповнення до стандартної бібліотеки;
- додаткові типи даних;
- обробка винятків;
- простори імен;
- вбудовані функції;
- перевантаження операторів;
- перевантаження імен функцій;
- посилання і оператори управління вільно розподіленою пам'яттю.
Об'єктно-орієнтоване програмування - це метод програмування, заснований на поданні програми у вигляді сукупності взаємодіючих об'єктів, кожен з яких є екземпляром певного класу, а класи є членами певної ієрархії наслідування. Програмісти спочатку пишуть клас, а на його основі при виконанні програми створюються конкретні об'єкти (екземпляри класів). На основі класів можна створювати нові, які розширюють базовий клас і таким чином створюється ієрархія класів. Основу ООП складають три основні концепції: інкапсуляція, успадкування та поліморфізм.
Основні принципи ООП:
- Все є об'єктами.
- Всі дії та розрахунки виконуються шляхом взаємодії (обміну даними) між об'єктами, при якій один об'єкт потребує, щоб інший об'єкт виконав деяку дію. Об'єкти взаємодіють, надсилаючи і отримуючи повідомлення. Повідомлення -- це запит на виконання дії, доповнений набором аргументів, які можуть знадобитися при виконанні дії.
- Кожен об'єкт має незалежну пам'ять, яка складається з інших об'єктів.
- Кожен об'єкт є представником (екземпляром, примірником) класу, який виражає загальні властивості об'єктів.
- У класі задається поведінка (функціональність) об'єкта. Таким чином усі об'єкти, які є екземплярами одного класу, можуть виконувати одні й ті ж самі дії.
- Класи організовані у єдину деревоподібну структуру з загальним корінням, яка називається ієрархією успадкування. Пам'ять та поведінка, зв'язані з екземплярами деякого класу, автоматично доступні будь-якому класу, розташованому нижче в ієрархічному дереві.
Клас -- це спеціальна конструкція, яка використовується для групування пов'язаних змінних та функцій. При цьому згідно з термінологією ООП глобальні змінні класу (члени-змінні) називаються полями даних (також властивостями або атрибутами), а члени-функції називають методами класу. Створений та ініціалізований екземпляр класу називають об'єктом класу. На основі одного класу, можна створити безліч об'єктів, що відрізнятимуться один від одного своїм станом (значеннями полів). Усі примірники одного класу створені за одним шаблоном, тому мають один і той же набір полів та методів. Через методи реалізується поведінка об'єктів.
Об'єкт - окремий екземпляр класу (створюється після запуску програми і ініціалізації полів класу).
Практично вся робота з об'єктами відбувається через методи. Вони можуть змінювати стан об'єкта або ж просто надавати доступ до даних, які були інкапсульовані в об'єкті. Існує кілька видів методів, які мають деякі відмінності в різних мовах програмування. До методів та полів даних можна надавати різні права доступу, від яких залежатиме доступ до них з різних частин програмного коду. Права доступу та вид методів задаються модифікаторами при описі методів. Метод, який проводить створення та початкову ініціалізацію екземпляра класу називають конструктором класу. Метод, який проводить знищення об'єкта, називають деструктором класу.
Інкапсуляція - це приховування деталей про роботу класів від об'єктів, що їх використовують або надсилають їм повідомлення. Інкапсуляція досягається шляхом вказування, які класи можуть звертатися до членів об'єкта. Як наслідок, кожен об'єкт представляє кожному іншому класу певний інтерфейс -- члени, доступні іншим класам. Інкапсуляція потрібна для того, аби запобігти використанню користувачами інтерфейсу тих частин реалізації, які, швидше за все, будуть змінюватись. Це дозволить полегшити внесення змін, тобто, без потреби змінювати і користувачів інтерфейсу.
тренування клавіатура текст програмування
2. Спеціальна частина
2.1 Опис програмної реалізації
Реалізована у межах курсової роботи програма складається з двох частин: клас та демонстраційна програма, яка являє собою консольне застосування створене за шаблоном Console Application Win32 і використовує функції класу.
Розглянемо функції системи у вигляді UML діаграми прецедентів, на якій Виділено лише один користувач. Користувач може виконувати наступні функції (див. рис. 2.1) :
1 Почати тренування можна лише після вибору складності.
2 Вибрати рівень (рівень складності впливає на час, визначений для введення слова).
3 Вводити символи з клавіатури (введення одного некоректного символу одразу припиняє тренування з ознакою помилки).
4 Завершити роботу програми натиснувши клавішу ESC.
Рисунок 2.1. UML-діаграма прецедентів: користувач
Ядро системи виконує функції, представлені у вигляді діаграми прецедентів на рисунку 2.2. Нижче подано опис функцій системи:
1) Встановлювати рівень складності.
2) Встановлювати час на введення слова в залежності від рівня складності.
3) Перевіряти символ введений з клавіатури.
4) Вивід нового слова на екран.
5) Перевіряти правильність введеного слова.
6) Вивід кількості введених слів за хвилину.
Рисунок 2.2. UML-діаграма прецедентів: система
2.2 Опис власних класів
В межах курсової роботи для реалізації логіки гри реалізовано власну ієрархію класів. Нижче подано докладний опис класів.
Game - головний клас, який забезпечує взаємодію між усіма частинами програми.
У таблиці 2.1 представлено опис властивостей класу Game.
Таблиця 2.1. Опис властивостей класу Game
Властивість |
Опис |
|
int _DIFFICULTY_LEVEL |
Цілочисленна змінна для встановлення рівня складності |
|
int _DIFFICULTY_TIME |
Цілочисленна змінна для встановлення часу на введення слова |
|
const string _WORDS_ARRAY[25] |
Масив слів, які повинен вводити користувач |
|
string INDENT = " "; |
Змінна символьного типу для відступів |
У таблиці 2.2 представлено опис методів класу Game.
Таблиця 2.2. Опис методів класу Game
Метод |
Опис |
|
GameEngine() |
Конструктор класу |
|
~GameEngine() |
Деструктор класу |
|
void setDifficulty(int level = -1) |
Встановлює рівень складності |
|
bool play() |
Відповідає за процес тренування |
|
string ask() |
Зчитує текст з консолі |
|
void print(string str = "", bool same_line = false) |
Виводить віповідний текст з результатами |
2.3 Розробка алгоритму та його опис
Програма розпочинається з вводу користувачем рівня складності. Далі користувач повинен вводити слова які відображаються на екрані за той час, який встановлюється відповідно рівню складності. Система зчитує введені користувачем символи і порівнює із потрібним словом.
Якщо користувач ввів дані вірно, то виводиться наступне слово. Якщо він помилився, то на екран виводиться його результати та команда натиснути відповідну клавішу для повернення в головне меню програми для вибору рівня складності. Користувач може вибрати рівень складності і почати тренуватися знову, або вийти із програми.
Рисунок 2.2. Алгоритм загальної роботи програми
2.4 Інструкція програміста
Дана програма написана на мові програмування С++ в середовищі Microsoft Visual Studio 2015.
Для конкретної роботи програми на комп'ютері повинна бути встановлена ОС Windows XP/7/8/8.1/10. Комп'ютер повинен мати як 64 МБ оперативної пам'яті.
2.5 Інструкція оператора
Щоб взаємодіяти з програмою, використовується клавіатура. Для запуску програми необхідно знайти файли Keyboard.exe та натиснути двічі ЛКМ на ньому.
Механізм взаємодії: на екрані почергово з'являються запити, на які користувач має відповідати задля продовження, використовуючи клавіатуру.
Рисунок 2.3. Вікно головного меню програми для вибору рівня складності
Після вибору рівня складності користувачу відкривається вікно в якому виводиться слово, яке він повинен ввести за певний час, який залежить від рівня. (див. рис. 2.4)
Рисунок 2.4. Вікно для вводу слів
Як тільки користувач робить помилку, то відкривається вікно з результатами та проханням натиснути клавішу “y”.
Рисунок 2.5. Вікно з результатами
Висновок
В ході написання курсової роботи було реалізовано застосування для тренування швидкого десяти пальцевого набору.
Ця задача була реалізована за допомогою мови програмування С++. Мова С++ - мова програмування високого рівня з підтримкою декількох парадигм програмування: об'єктно-орієнтованої, узагальненої та процедурної.
Також було обрано середовище програмування: Microsoft Visual Studio на платформі Windows 10.
Під час виконання курсової роботи була розроблена програма для навчання сліпого методу друку, яка дозволяє задіяти для набору все десять пальців рук; збільшити швидкість набору; зменшити кількість помилок; поліпшити ритмічність набору (що дозволяє зменшити втому при наборі).
Список використаних джерел
1 Р. Лафоре. Обьектно-ориентированое программирование, 4-е издание.
Санкт-Петербург, 2004.
2 Бьерн Страуструп. Язык программирования С++ - специальное издание. Москва, 2006.
3 Березин Б.И., Березин С.Б. Начальний курс С и С++. 2001.
4 www.CyberForum.ru
Додаток
//game.class.h
#pragma once
class GameEngine{
private:
int _DIFFICULTY_LEVEL = 0;
int _DIFFICULTY_TIME = 0;
string INDENT = " ";
const string _WORDS_ARRAY[25] = {"forever", "instagram", "twitter", "darling", "stairs", "sky", "keyboard", "abuse", "tasty", "jellyfish", "library", "book", "developer", "love", "ball", "hold", "translate", "bottle", "baloon", "chess", "message", "closed", "news", "array", "cobweb"};
public:
GameEngine(){
}
void setDifficulty(int level = -1){
if(level != -1 AND level <= 3){
_DIFFICULTY_LEVEL = level;
_DIFFICULTY_TIME = -level + 5;
return;
}
system("CLS"); // Clearing the screen
setConsoleColor(14);
print("Let's test how fast are you typing\n");
setConseleDefaultColor();
printLine();
setConsoleColor(5);
print("Alright, now we need to choose the difficulty..");
print(INDENT + "1 - I could find the buttons on the keyboard");
print(INDENT + "2 - At least I can press some of them");
print(INDENT + "3 - How about the real typing?");
print();
setConseleDefaultColor();
// Getting data
int tmp = std::atoi(this->ask().c_str());
if(tmp < 1) tmp = 1;
if(tmp > 3) tmp = 3;
this->setDifficulty(tmp);
}
bool play(){
system("CLS");
string _word; // Current word
int _word_length; // Current word length
char tmp_char; // Entered symbol
string tmp_word = ""; // All entered symbols
int tmp_in_length = 0; // Letter position in the word
bool is_word_set = false; // Is word set (userd the we need to change the word)
bool is_game_over = false; // Is game over
// Counter
int c_minutes = 1;
int c_words_entered = -1;
time_t c_time_start = time(0);
// Difficulty timer
time_t d_time_start = time(0);
COORD dwPosition = {0, 0};
//CONSOLE_CURSOR_INFO cursor_info;
while(true){
if(!is_game_over) // Difficulty timer displaying
if((int) difftime(time(0), d_time_start) <= _DIFFICULTY_TIME){
dwPosition = {0, 0}; // Setting cursor position
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), dwPosition);
clearLine(); // Clear the line
print("Words per minute: ", true);
setConsoleColor(2);
print(std::to_string(c_words_entered / c_minutes), true);
setConseleDefaultColor();
print(", time left: ", true);
setConsoleColor(12);
print(std::to_string(_DIFFICULTY_TIME - (int) difftime(time(0), d_time_start) ));
setConseleDefaultColor();
}else{
system("CLS");
setConsoleColor(14);
print("Game over, you lost it! Here are your stats:");
print(INDENT + "Minutes passed - " + std::to_string(c_minutes));
print(INDENT + "Words per minute - " + std::to_string(c_words_entered / c_minutes));
setConseleDefaultColor();
print("\nPress \"y\" to cuntinue...");
is_game_over = true; // Game over flag
}
if(!is_word_set){ // If no more to input - set a new word
_word = _WORDS_ARRAY[getRand(0, 23)];
_word_length = strlen(_word.c_str());
is_word_set = true;
dwPosition = {0, 1}; // Setting cursor position
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), dwPosition);
clearLine(); // Clear the line
print("Word - ", true);
setConsoleColor(14);
print(_word + "\n");
setConseleDefaultColor();
c_words_entered++; // Words per minute counter
// Resetting the difficulty timer
d_time_start = time(0);
}
if(kbhit() AND !is_game_over){ // Waiting for input
tmp_char = getch(); // Reading last symbol
dwPosition = {0, 1}; // Setting cursor position
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), dwPosition);
clearLine(); // Clear the line
print("Word - ", true);
setConsoleColor(14);
print(_word + "\n");
setConseleDefaultColor();
if(_word.at(tmp_in_length) == tmp_char){ // If the symbol is correct
tmp_in_length++; // Moving to the next one
if(_word_length == tmp_in_length){
tmp_word = ""; // Resetting the symbols user have entered before
tmp_in_length = 0; // Setting input length to zero
is_word_set = false; // If the word has ended setting the flag to false to bring us a new word
}
// Displaying
dwPosition = {0, 4}; // Setting cursor position
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), dwPosition);
clearLine(); // Clear the line
if(tmp_in_length != 0){
tmp_word += tmp_char;
print(tmp_word);
}
}else{ // If the user made a mistake
system("CLS");
setConsoleColor(14);
print("Game over, you lost it! Here are your stats:");
print(INDENT + "Minutes passed - " + std::to_string(c_minutes));
print(INDENT + "Words per minute - " + std::to_string(c_words_entered / c_minutes));
setConseleDefaultColor();
print("\nPress \"y\" to cuntinue...");
setConseleDefaultColor();
is_game_over = true; // Game over flag
}
}
if(kbhit() AND is_game_over){ // Leaving the game loop
if(getch() == 'y') break;
}
if((int) difftime(time(0), c_time_start) == 60 AND !is_game_over){ // Counting minutes
c_time_start = time(0); // If we passed one minute - resetting the time
c_minutes++;
}
Sleep(100); // Delay (decreases lags by slowing down the loop iteration speed), default 10
}
return false; // Telling that the user has lost
}
string ask(){
string tmp = "";
getline(cin, tmp);
return tmp;
}
void print(string str = "", bool same_line = false){
cout << str << (!same_line ? "\n" : "");
}
~GameEngine(){
}
};
//util.h
#pragma once
// Defines
int getConsoleWidth();
void printLine();
void setConsoleColor(int);
int getConsoleWidth(){ // Get the console width in symbols
CONSOLE_SCREEN_BUFFER_INFO csbi;
if(GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi))
return csbi.srWindow.Right - csbi.srWindow.Left;
else return 0;
}
void clearLine(){
for(int i = 0; i < getConsoleWidth(); i++){
cout << " ";
}
cout << "\r";
}
void printLine(){
setConsoleColor(14);
for(int i = 0; i < getConsoleWidth(); i++){
cout << "-";
}
cout << endl;
setConsoleColor(7);
}
int getRand(int a, int b){
srand((unsigned)time(0));
return rand() % (b - 1) + a;
}
void setConsoleColor(int color){
/*
+ Console colors
2 - green
4 - dark red // Important data
5 - purple // Stuzer
6 - dark orange
7 - dark grey (default)
8 - grey
9 - blue
10 - green
12 - red
13 - pink
14 - yellow // Error
15 - white
*/
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, color);
}
void setConseleDefaultColor(){
setConsoleColor(7);
}
//main.cpp
#define elseif else if
#define null 0
#define OR ||
#define AND &&
// Common defines
#include <windows.h>
#include <iostream>
#include <string>
#include <conio.h>
#include <time.h>
#include <cstdlib>
#include <ctime>
using namespace std;
using std::cin;
using std::cout;
using std::endl;
using std::string;
// App includes
#include "util.h"
#include "game.class.h"
int main(char* argv[], int argc){
system("title The keyboard trainer");
GameEngine *Game = new GameEngine();
Game->setDifficulty();
bool TheGameLoop = true;
while(TheGameLoop){
if(!Game->play()){ // If user lost
Game->setDifficulty();
}
}
system("PAUSE");
}
Размещено на Allbest.ru
Подобные документы
Об’єктно-орієнтоване програмування мовою С++. Основні принципи об’єктно-орієнтованого програмування. Розробка класів з використанням технології візуального програмування. Розробка класу classProgressBar. Базовий клас font. Методи тестування програми.
курсовая работа [211,3 K], добавлен 19.08.2010Редагування за допомогою текстового редактора NotePad вхідного файлу даних. Програмна реалізація основного алгоритму з використанням засобів об'єктно-орієнтованого програмування. Об’ява та опис класів і об'єктів. Розробка допоміжних програмних засобів.
курсовая работа [69,4 K], добавлен 14.03.2013Клавіатурний тренажер - вид програмних додатків або онлайн-сервісів, призначених для навчання набору на комп'ютерній клавіатурі. Інкапсуляція - приховування деталей про роботу класів від об'єктів, що їх використовують або надсилають їм повідомлення.
курсовая работа [1,7 M], добавлен 20.05.2017Принципи об'єктно-орієнтованого підходу. Розробка програмного комплексу з використанням цього алгоритму і користувальницьких класів на мові програмування С++. Реалізація простого відкритого успадкування. Тестування працездатності системи класів.
курсовая работа [98,0 K], добавлен 06.05.2014Концепції об'єктно-орієнтованого програмування. Методи створення класів. Доступ до методів базового класу. Структура даних, функції. Розробка додатку на основі діалогових вікон, програми меню. Засоби розробки програмного забезпечення мовами Java та С++.
курсовая работа [502,5 K], добавлен 01.04.2016Розробка програми на мові програмування С++ з використанням об’єктно-орієнтованого програмування, яка включає в себе роботу з файлами, класами, обробку числової інформації і роботу з графікою. Структура класів і об’єктів. Лістинг та алгоритм програми.
курсовая работа [104,4 K], добавлен 14.03.2013Аналіз сучасного стану технологій програмування. Засоби реалізації об'єктів в мові C++, структура даних і функцій. Розробка програмного продукту - гри "трикутники", з використовуванням моделей, класів і функцій об’єктно-орієнтованого програмування.
курсовая работа [117,8 K], добавлен 14.03.2013Реалізація, за допомогою технології Windows Forms, програми обліку даних про волонтерів та подій, на які вони зареєстровані. можливості об'єктно-орієнтованого програмування. Створення класів. Методи, властивості. Використання Multiple Document Interface.
курсовая работа [1,5 M], добавлен 02.12.2015Програма на мові програмування С++. Аналіз стану технологій програмування та обґрунтування теми. Розробка програми виконання завдання, методу вирішення задачі. Робота з файлами, обробка числової інформації і робота з графікою. Розробка програми меню.
курсовая работа [41,0 K], добавлен 17.02.2009Розробка програми на мові програмування С++ з використанням об'єктно-орієнтованого програмування. Робота з файлами, графікою, класами, обробка числової інформації. Графічні засоби мови програмування. Алгоритм задачі та допоміжні програмні засоби.
курсовая работа [102,5 K], добавлен 14.03.2013