Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 14.06.2023
Сообщений: 18

Программа "Виселица"

18.07.2023, 10:35. Показов 1120. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал Виселицу, всегда пишет не правильно.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
#include <string>
#include <ctime>
#include <vector>
#include <algorithm>
#include <cctype>
#include <Windows.h>
 
using namespace std;
 
int main() {
    setlocale(LC_ALL, "RU");
    SetConsoleCP(1251);
 
    const short MAX_WRONG = 8;
    vector<string> words;
    words.push_back("Вилка");
    words.push_back("Мышь");
    words.push_back("Картина");
    words.push_back("Кровать");
    words.push_back("Дерево");
    words.push_back("Ботинок");
    words.push_back("Игра");
 
    srand(static_cast<unsigned int>(time(0)));
    random_shuffle(words.begin(), words.end());
    const string WORD = words[0];
    short wrong = 0;
    string soFar(WORD.size(), '_');
    string used = "";
 
    cout << "\tДобро пожаловть в игру Висилица. Удачи!\n";
    while ((wrong < MAX_WRONG) && (soFar != WORD)) {
        cout << "\n\nУ тебя осталось " << (MAX_WRONG - wrong);
        cout << " ошибок.\n";
        cout << "\nТы использовал:\n" << used << endl;
        cout << "\nОтгаданная часть слова:\n" << soFar << endl;
 
        char guess;
        cout << "\n\nВведи букву: ";
        cin >> guess;
        guess = toupper(guess);
 
        while (used.find(guess) != string::npos) {
            cout << "\nТы уже использовал " << guess << endl;
            cout << "Введи букву:";
            cin >> guess;
            guess = toupper(guess);
        }
        used += guess;
 
        if (WORD.find(guess) != string::npos) {
            cout << "Ты угадал, " << guess << " есть в слове!\n";
            for (short i = 0; i < WORD.length(); i++) {
                if (WORD[i] == guess)
                    soFar[i] = guess;
            }
        }
        else {
            cout << "Ты не угадал. " << guess << " нет в слове.";
            wrong++;
        }
    }
 
    if (wrong == MAX_WRONG)
        cout << "\n\nТебя повесили.";
    else
        cout << "\n\nТы угадал слово!";
    cout << "Загаданное слово: " << WORD;
 
    SetConsoleCP(850);
    return 0;
}
Помогите решить проблему, пожалуйста.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.07.2023, 10:35
Ответы с готовыми решениями:

Виселица
Помогите пожалуйста. Есть игра виселица. Как сделать так чтобы компьютер рандомно выбирал слово с файла? #include &lt;iostream&gt;...

Проблема с игрой Виселица
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; #include &lt;ctime&gt; #include &lt;cctype&gt; using...

Создайте консольную версию игры «Виселица»
Народ прошу помогите я с другими лабами к пятнице не успеваю а это самое сложное. Решил попросить потому что уже в отчаяни. Создайте...

17
 Аватар для Tanya2007
593 / 230 / 72
Регистрация: 13.05.2020
Сообщений: 412
18.07.2023, 10:59
Bogomol_ML,
C++
1
2
3
setlocale(LC_ALL, "RU");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
0
1 / 1 / 0
Регистрация: 14.06.2023
Сообщений: 18
18.07.2023, 11:17  [ТС]
не сработало

и что это на знаки вопроса

C:\...\lessons.exe (??????? 64956) ???????? ?????? ? ????? 0.
??????? ????? ???????, ????? ??????? ??? ????.
0
 Аватар для ram876
759 / 456 / 213
Регистрация: 19.12.2016
Сообщений: 1,815
18.07.2023, 11:44
Цитата Сообщение от Bogomol_ML Посмотреть сообщение
toupper
Вроде с кириллицей не работает
1
6 / 4 / 2
Регистрация: 14.03.2021
Сообщений: 62
18.07.2023, 13:20
Лучший ответ Сообщение было отмечено Bogomol_ML как решение

Решение

Функция toupper из стандартной библиотеки C++ не работает с символами кириллицы. Она предназначена только для работы с символами латинского алфавита.
Используйте стандартную библиотеку <locale>, которая предоставляет средства для локализации и преобразования символов. Ниже приведен пример, демонстрирующий преобразование символов кириллицы в верхний регистр с использованием std::toupper и локали:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <locale>
 
int main() {
    std::wstring str = L"Привет, Мир!";
    
    std::wstring upperStr;
    std::locale loc(""); // Используем текущую локаль
    
    for (wchar_t ch : str) {
        upperStr += std::toupper(ch, loc);
    }
    
    std::wcout << upperStr << std::endl;
    
    return 0;
}
0
 Аватар для ram876
759 / 456 / 213
Регистрация: 19.12.2016
Сообщений: 1,815
18.07.2023, 13:33
Цитата Сообщение от AvRu Посмотреть сообщение
std::locale loc(""); // Используем текущую локаль
а если текущая локаль не русская, то программа полетит?
0
6 / 4 / 2
Регистрация: 14.03.2021
Сообщений: 62
18.07.2023, 13:42
Цитата Сообщение от ram876 Посмотреть сообщение
а если текущая локаль не русская, то программа полетит?
Не полетит, но приведет к непредсказуемому поведению. Можно указать локаль самостоятельно, например
C++
1
std::locale loc("ru_RU.UTF-8");
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
18.07.2023, 13:54
Цитата Сообщение от AvRu Посмотреть сообщение
Функция toupper из стандартной библиотеки C++ не работает с символами кириллицы. Она предназначена только для работы с символами латинского алфавита.
Конечно же работает.
Локаль тоже используется, только глобальная.
Также нужно учитывать нюанс, что функция toupper (и другие ей подобные) заимствованная из библиотеки С, принимает int, а не char. По этой причине, если char знаковый, то перед передачей его в функцию нужно приведение к unsigned char, чтобы избежать расширения знакового бита. Об этом и в документации тоже сказано:
To use these functions safely with plain chars (or signed chars), the argument should first be converted to unsigned char:
https://en.cppreference.com/w/... te/toupper
1
1 / 1 / 0
Регистрация: 14.06.2023
Сообщений: 18
18.07.2023, 13:57  [ТС]
А как привести в unsigned char
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
18.07.2023, 13:58
Bogomol_ML, а там по ссылке на доку есть пример
C++
1
2
3
4
char my_toupper(char ch)
{
    return static_cast<char>(std::toupper(static_cast<unsigned char>(ch)));
}
2
4 / 4 / 0
Регистрация: 20.06.2023
Сообщений: 107
24.07.2023, 15:57
Братва !! код рабочий !!

я отсюда добавилв код примера

C++
1
2
3
4
    setlocale(LC_ALL, "RU");
    SetConsoleCP(1251);
    
    SetConsoleOutputCP(1251)
;

И фишка !!!

в консоли пришось поменять шрифт на третий из выбра в свойствах окна консоли .

И ... первая буква то заглавная .а это в наборе надо учесть ...
0
1 / 1 / 0
Регистрация: 14.06.2023
Сообщений: 18
24.07.2023, 16:00  [ТС]
Я разобрался, надо было все букву заглавными сделать, я же после ввода игроком их перевожу в заглавную
1
4 / 4 / 0
Регистрация: 20.06.2023
Сообщений: 107
24.07.2023, 16:02
Погоди . так у тебя по условию все заглавные или все прописные ???
0
1 / 1 / 0
Регистрация: 14.06.2023
Сообщений: 18
24.07.2023, 16:05  [ТС]
Я недавно начал учиться, так что немного не понял вопрос
0
4 / 4 / 0
Регистрация: 20.06.2023
Сообщений: 107
24.07.2023, 17:02
И я ввел праильное слово Игра . а она программа ещё просит буквы

Добавлено через 4 минуты
Вообщем ещё ку ча проблем е сть ... даже если подглядываешь
в код слово и воодишь верно . определяет не верно ...

Добавлено через 3 минуты
Слово Картина , две буквы а , а програ две ввеести непозволет увы ...

Добавлено через 6 минут
Ввел верно слово мышь и на тебе подвай ей ещё буквы ...

Добавлено через 8 минут
Ввел Вилка правильно и она резко свернулась и врубиралсь ....

Добавлено через 13 минут
все же .. надобно правила и алгоритм программы .

вот пример ее в тырнете : https://vseigru.net/igry-kross... litsa.html

Добавлено через 5 минут
наивный вопрос .. вввел верную букву и она считает колиство ошбок ... ?? зачем ???

Добавлено через 2 минуты
Че - то ваще с алоритмом игры не то ... Даже ввел верное слово Игра .. простит снова буквы !!!

Добавлено через 9 минут
и все же ...

надобно сначала алгоритм ...


«Виселица» — это популярная игра для двух и более человек. Один игрок придумывает слово примерно из пяти или шести букв. Он рисует столько черточек, сколько букв в данном слове. Затем остальные игроки начинают угадывать буквы слова, называя по одной за раз.

Если буква угадана правильно, первый игрок вписывает ее над соответствующим штрихом — если она появляется в слове несколько раз, то одновременно вписываются все. Однако, если догадка оказалась неправильной, первый игрок начинает рисовать виселицу — по одной черточке на каждую неверно названную букву.

Остальные участники должны попытаться отгадать слово до того, как первому игроку удастся дорисовать виселицу. Если один из игроков угадал слово (в ходе игры это становится все легче), следующее слово загадывает он. Если первый игрок дорисовал виселицу до того, как слово угадано, следующее слово загадывает он же.

Чтобы усложнить игру, можно брать более длинные слова в качестве варианта: игрок может загадать группу слов, составляющую пословицу, или название книги, либо фильма — и должен дать остальным игрокам подсказку относительно того, к какой теме они относятся.

истчник : https://gamerules.ru/viselitsa
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6222 / 2923 / 1046
Регистрация: 01.06.2021
Сообщений: 10,820
24.07.2023, 17:25
Цитата Сообщение от Python 27
Погоди . так у тебя по условию все заглавные или все прописные ???
Заглавная буква это то же самое, что и прописная буква.
Большие буквы = заглавные буквы = прописные буквы.
Маленькие буквы = строчные буквы.
1
1 / 1 / 0
Регистрация: 14.06.2023
Сообщений: 18
24.07.2023, 18:04  [ТС]
Я учусь по книге, вопросы по алгоритмам не ко мне
0
4 / 4 / 0
Регистрация: 20.06.2023
Сообщений: 107
24.07.2023, 18:25
Я тоже не волшебник , я только учусь ...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.07.2023, 18:25
Помогаю со студенческими работами здесь

Как добавить в статистику скок время ушло и сколько попыток (Виселица)
#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;unordered_set&gt; #include &lt;algorithm&gt; #include &lt;iterator&gt; #include &lt;set&gt; #include...

Как лучше реализовать графику для игры "Виселица"?
Есть игра &quot;Виселица&quot;, написанная на С++, нужно реализовать графику. Но как лучше это сделать и что для этого использовать? Нельзя...

Реализовать консольную игру "Виселица"
В игре &quot;Виселица&quot; один игрок загадывает слово, а другой пытается угадать его, называя по одной букве. Если буквы нет в этом слове, то...

Игра "Виселица" в консоли
Не понимаю почему победа не может нормально выводиться #include&quot;Param.h&quot; using namespace std; string pickRandomWord(int...

Игра "Виселица" в консоли
буквы не сравниваются ,при вводе буквы пишет что буква неугадана хотя она есть в слове #include &lt;iostream&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru