Форум программистов, компьютерный форум CyberForum.ru

Написать программу для игры "Камень, бумага, ножницы" - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,888
Записей в блоге: 1
30.10.2011, 19:34     Написать программу для игры "Камень, бумага, ножницы" #1
Прочитал четыри главы книги Бьярне Страуструп Программирование: принципы и практика использования C++, исправленное издание и приступил делать и здание не получаеться это сделать не знаю почему??? может я не удачник. прошел в этиг главах циклы веторы и все.
"Напишите программу для игры "Камень, бумага, ножницы". Если вы не знаете правил этой игры, попробуйте выяснить их у друзей или с помощью поисковой машины Google. Такие исследования— обычное занятие программистов. Для решения поставленной задачи используйте инструкцию switch. Кроме то¬го, машина должна давать случайные ответы (т.е. выбирать камень, бумагу или ножницы на следующем ходу случайным образом). Настоящий случайный дат¬чик написать довольно тяжело, поэтому заранее заполните вектор последова¬тельностью новых значений. Если встроить этот вектор в программу, то она все¬гда будет играть одну и ту же игру, поэтому целесообразно позволить пользова¬телю самому вводить некоторые значения. Попробуйте помешать пользователю легко угадывать следующий ход машины."
Может натолнети как это можно сделать. и ответи на вопрос тяжёлая ли задача
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2011, 19:34     Написать программу для игры "Камень, бумага, ножницы"
Посмотрите здесь:

C++ Игра в камень,ножницы бумага.Что можно улучшить\оптимизировать?
Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день","Суббота" или "Воскресенье" C++
C++ Написать простейшую программу по "перегрузке" и "наследованию"
C++ разработать программу для работы со строками: найти и заменить в ней все символы "а" на "b"
C++ Написать программу что меняло слово "кукушка" на "груша", с помощью стека
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
30.10.2011, 19:58     Написать программу для игры "Камень, бумага, ножницы" #2
Я, возможно, дико туплю, но при чем тут вектора и изначально заданная последовательность?
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
#include <iostream>
#include <ctime>
#include <cstdlib>
 
int main()
{
    srand(time(NULL));
    char answ;
    do
    {
        std::cout << "Choose the weapon:" << std::endl
                  << "0 - rock" << std::endl
                  << "1 - scissors" << std::endl
                  << "2 - paper" << std::endl;
        int persWeapon;
        std::cin >> persWeapon;
        int compWeapon = rand() % 3;
        switch(compWeapon)
        {
            case 0:
                std::cout << "Great random selected rock... ";
                std::cout << ((persWeapon == 0) ? ("Draw...")
                                                : (persWeapon == 1) ? ("You lose. Pff...")
                                                                    : ("You win... You are lucky, no more"));
                break;
            case 1:
                std::cout << "Comuter selected scissors... ";
                std::cout << ((persWeapon == 1) ? ("Draw...")
                                                : (persWeapon == 2) ? ("You lose. Pff...")
                                                                    : ("You win... You are lucky, no more"));
                break;
            case 2:
                std::cout << "UFO selected paper... ";
                std::cout << ((persWeapon == 2) ? ("Draw...")
                                                : (persWeapon == 0) ? ("You lose. Pff...")
                                                                    : ("You win... You are lucky, no more"));
                break;
            case 3:
                std::cout << "WTF?!";
                return 0;
        }
        std::cout << std::endl
                  << "Retry?" << std::endl;
        std::cin >> answ;
    } while(answ == 'y');
    return 0;
}
Сыроежка
Заблокирован
30.10.2011, 20:09     Написать программу для игры "Камень, бумага, ножницы" #3
Цитата Сообщение от Sylar9 Посмотреть сообщение
Прочитал четыри главы книги Бьярне Страуструп Программирование: принципы и практика использования C++, исправленное издание и приступил делать и здание не получаеться это сделать не знаю почему??? может я не удачник. прошел в этиг главах циклы веторы и все.
"Напишите программу для игры "Камень, бумага, ножницы". Если вы не знаете правил этой игры, попробуйте выяснить их у друзей или с помощью поисковой машины Google. Такие исследования— обычное занятие программистов. Для решения поставленной задачи используйте инструкцию switch. Кроме то¬го, машина должна давать случайные ответы (т.е. выбирать камень, бумагу или ножницы на следующем ходу случайным образом). Настоящий случайный дат¬чик написать довольно тяжело, поэтому заранее заполните вектор последова¬тельностью новых значений. Если встроить этот вектор в программу, то она все¬гда будет играть одну и ту же игру, поэтому целесообразно позволить пользова¬телю самому вводить некоторые значения. Попробуйте помешать пользователю легко угадывать следующий ход машины."
Может натолнети как это можно сделать. и ответи на вопрос тяжёлая ли задача
По своему опыту могу сказать,что порой выполнение всяких вычурных упражнений является пустой тратой временем! Больше времени тратится не на непосредственное программирование, а на понимание того, что же все-таки требуется.
bemol5
0 / 0 / 0
Регистрация: 22.06.2013
Сообщений: 8
03.08.2013, 16:16     Написать программу для игры "Камень, бумага, ножницы" #4
Задача в том, чтобы написать программу без использования rand().
Valentina
66 / 66 / 3
Регистрация: 13.05.2012
Сообщений: 130
03.08.2013, 16:28     Написать программу для игры "Камень, бумага, ножницы" #5
вот еще вариант
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
#include <iostream>
#include <conio.h>
#include <clocale>
#include <ctime>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int user, comp;
    srand(time(NULL));
    char* x[3] = {"Камень", "Ножницы", "Бумага"};
    for(;;)
    {
        system("cls");
        cout<< "1. "<< x[0]
            << "\n2. "<< x[1]
            << "\n3. "<< x[2]
            << "\nВаш выбор: ";
        do {cin>> user; } while (user > 3 || user < 1);
        user--;
        comp = rand() % 3;
        cout<< "Вы: "<< x[user]
            << "\nКомп: "<< x[comp]<< endl;
        if (user == comp) cout<< "Ничья";
        else
        if ((user == 0 && comp == 1) ||
            (user == 1 && comp == 2) ||
            (user == 2 && comp == 0))
cout<< "Вы выиграли";
        else cout<< "Вы проиграли";
        if (getch()!= 'e') continue;
        else break;
    }
    return 0;
}
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
03.08.2013, 19:02     Написать программу для игры "Камень, бумага, ножницы" #6
Цитата Сообщение от Valentina Посмотреть сообщение
C++
1
2
3
4
5
6
7
        if (user == comp) cout<< "Ничья";
        else
        if ((user == 0 && comp == 1) ||
            (user == 1 && comp == 2) ||
            (user == 2 && comp == 0))
cout<< "Вы выиграли";
        else cout<< "Вы проиграли";
На самом деле, без всех этих проверок можно легко обойтись. Если изобразить это условие "на бумаге"
К->H->Б->К->H->Б->К->H->Б...
мы получаем самый обыкновенный кольцевой список, следовательно победителя(или ничью) можно определить намного проще
Код
if(user == comp) ничья
else if((user + 1) % 3 == comp) победил пользователь
else победил компьютер
Misterkat
 Аватар для Misterkat
7 / 7 / 0
Регистрация: 16.11.2012
Сообщений: 83
04.08.2013, 13:26     Написать программу для игры "Камень, бумага, ножницы" #7
Цитата Сообщение от rangerx Посмотреть сообщение
На самом деле, без всех этих проверок можно легко обойтись. Если изобразить это условие "на бумаге"
К->H->Б->К->H->Б->К->H->Б...
мы получаем самый обыкновенный кольцевой список, следовательно победителя(или ничью) можно определить намного проще
Но ведь тогда игрок может разгадать последовательность и все время выигрывать.
Может лучше просто считывать некую системную переменную, которая выдает integer? И если она меньше или больше определенного значения, то ...
ЗЫ:Ну и к посту Valentina это тоже относится.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
04.08.2013, 14:47     Написать программу для игры "Камень, бумага, ножницы" #8
Misterkat, то что я написал относится непосредственно к выявлению победителя, а не к тому, что выберет один из игроков. На всякий случай поясню как это работает(если кто не понял ):
у нас есть три числа 0 - камень, 1 - ножницы, 2 - бумага. Несложно заметить, что все три элемента побеждают друг друга по кругу(камень->ножницы, ножницы->бумага, бумага->камень), следовательно для выявления победителя достаточно посмотртеть не совпадает ли следующий за выбраным игроком1 элемент(более слабый) с элементом выбраным игроком2, если это так, то победил игрок1, в противном случае победил игрок2(естественно если элементы не равны). Ну а (i + 1) % n(в примере выше (user + 1) % 3), это просто формула вычисления следующего элемента в циклическом списке.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
04.08.2013, 15:34     Написать программу для игры "Камень, бумага, ножницы" #9
Цитата Сообщение от Sylar9 Посмотреть сообщение
Попробуйте помешать пользователю легко угадывать следующий ход машины
А! ну так проще не бывает!
C++
1
2
3
4
5
6
7
8
9
10
11
const char* cheat_result[]={"paper", "rock", "scissors"}
std::cout << "Choose the weapon:" << std::endl
          << "0 - rock" << std::endl
          << "1 - scissors" << std::endl
          << "2 - paper" << std::endl;
std::cin  >> persWeapon;
if (persWeapon>=0 && persWeapon<=2)
std::cout << "Comuter selected "<< cheat_result[persWeapon]<<endl;
          << "You lost";
else
std::cout << "Shame on you, cheater"<<endl;

Цитата Сообщение от soon Посмотреть сообщение
case 3:
std::cout << "WTF?!";
return 0;
soon, хотел сказать default
Karst
0 / 0 / 0
Регистрация: 13.08.2016
Сообщений: 16
18.08.2016, 09:30     Написать программу для игры "Камень, бумага, ножницы" #10
Подскажите...Что делает этот код в программе?

C++
1
2
do {cin>> user; } while (user > 3 || user < 1);
        user--;
Aymurat
90 / 84 / 25
Регистрация: 07.11.2014
Сообщений: 586
Завершенные тесты: 5
18.08.2016, 10:18     Написать программу для игры "Камень, бумага, ножницы" #11
Karst, получает user пока user больше 3 или меньше единицы, ибо камень ножницы бумага - 1,2,3, другие значения нам не нужны.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2016, 11:28     Написать программу для игры "Камень, бумага, ножницы"
Еще ссылки по теме:

C++ Написать программу которaя запрашиваeт у пользователя номер дня недели, затем выводит одно из сообщений "рабочий день", "суббота", "воскресенье"
Написать программу, которая заменяет в указанном слове все буквы "b" на сочетание "ky" C++

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

Или воспользуйтесь поиском по форуму:
Karst
0 / 0 / 0
Регистрация: 13.08.2016
Сообщений: 16
18.08.2016, 11:28     Написать программу для игры "Камень, бумага, ножницы" #12
Все понял, все же просто)
Yandex
Объявления
18.08.2016, 11:28     Написать программу для игры "Камень, бумага, ножницы"
Ответ Создать тему
Опции темы

Текущее время: 16:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru