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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,927
Записей в блоге: 1
#1

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

30.10.2011, 19:34. Просмотров 2415. Ответов 12
Метки нет (Все метки)

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

Игра в камень,ножницы бумага.Что можно улучшить\оптимизировать? - C++
// KamenNozhnicyBumaga.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include "time.h" #include...

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

Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день","Суббота" или "Воскресенье" - C++
Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день","Суббота" или...

Написать программу что меняло слово "кукушка" на "груша", с помощью стека - C++
Написать программу что меняло слово кукушка на груша , с помощью стека(1 программа) и очередь(2 программа) Помогите пожалуйста очень...

Написать программу, которая заменяет в указанном слове все буквы "b" на сочетание "ky" - C++
Написать программу, которая заменяет в указанном слове все буквы "b" на сочетание "ky". Использовать 2 массива: начальный и результирующий....

Написать простейшую программу по "перегрузке" и "наследованию" - C++
написать простейшую программу на СИ++ по "перегрузке" и "наследованию". заранее спасибо!

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
soon
2540 / 1305 / 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;
}
1
Сыроежка
Заблокирован
30.10.2011, 20:09 #3
Цитата Сообщение от Sylar9 Посмотреть сообщение
Прочитал четыри главы книги Бьярне Страуструп Программирование: принципы и практика использования C++, исправленное издание и приступил делать и здание не получаеться это сделать не знаю почему??? может я не удачник. прошел в этиг главах циклы веторы и все.
"Напишите программу для игры "Камень, бумага, ножницы". Если вы не знаете правил этой игры, попробуйте выяснить их у друзей или с помощью поисковой машины Google. Такие исследования— обычное занятие программистов. Для решения поставленной задачи используйте инструкцию switch. Кроме то¬го, машина должна давать случайные ответы (т.е. выбирать камень, бумагу или ножницы на следующем ходу случайным образом). Настоящий случайный дат¬чик написать довольно тяжело, поэтому заранее заполните вектор последова¬тельностью новых значений. Если встроить этот вектор в программу, то она все¬гда будет играть одну и ту же игру, поэтому целесообразно позволить пользова¬телю самому вводить некоторые значения. Попробуйте помешать пользователю легко угадывать следующий ход машины."
Может натолнети как это можно сделать. и ответи на вопрос тяжёлая ли задача
По своему опыту могу сказать,что порой выполнение всяких вычурных упражнений является пустой тратой временем! Больше времени тратится не на непосредственное программирование, а на понимание того, что же все-таки требуется.
3
bemol5
0 / 0 / 0
Регистрация: 22.06.2013
Сообщений: 8
03.08.2013, 16:16 #4
Задача в том, чтобы написать программу без использования rand().
0
Valentina
68 / 68 / 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;
}
1
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
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 победил компьютер
2
Misterkat
7 / 7 / 0
Регистрация: 16.11.2012
Сообщений: 83
04.08.2013, 13:26 #7
Цитата Сообщение от rangerx Посмотреть сообщение
На самом деле, без всех этих проверок можно легко обойтись. Если изобразить это условие "на бумаге"
К->H->Б->К->H->Б->К->H->Б...
мы получаем самый обыкновенный кольцевой список, следовательно победителя(или ничью) можно определить намного проще
Но ведь тогда игрок может разгадать последовательность и все время выигрывать.
Может лучше просто считывать некую системную переменную, которая выдает integer? И если она меньше или больше определенного значения, то ...
ЗЫ:Ну и к посту Valentina это тоже относится.
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
04.08.2013, 14:47 #8
Misterkat, то что я написал относится непосредственно к выявлению победителя, а не к тому, что выберет один из игроков. На всякий случай поясню как это работает(если кто не понял ):
у нас есть три числа 0 - камень, 1 - ножницы, 2 - бумага. Несложно заметить, что все три элемента побеждают друг друга по кругу(камень->ножницы, ножницы->бумага, бумага->камень), следовательно для выявления победителя достаточно посмотртеть не совпадает ли следующий за выбраным игроком1 элемент(более слабый) с элементом выбраным игроком2, если это так, то победил игрок1, в противном случае победил игрок2(естественно если элементы не равны). Ну а (i + 1) % n(в примере выше (user + 1) % 3), это просто формула вычисления следующего элемента в циклическом списке.
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 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
0
Karst
0 / 0 / 0
Регистрация: 13.08.2016
Сообщений: 18
18.08.2016, 09:30 #10
Подскажите...Что делает этот код в программе?

C++
1
2
do {cin>> user; } while (user > 3 || user < 1);
        user--;
0
Aymurat
99 / 93 / 29
Регистрация: 07.11.2014
Сообщений: 632
Завершенные тесты: 5
18.08.2016, 10:18 #11
Karst, получает user пока user больше 3 или меньше единицы, ибо камень ножницы бумага - 1,2,3, другие значения нам не нужны.
0
Karst
0 / 0 / 0
Регистрация: 13.08.2016
Сообщений: 18
18.08.2016, 11:28 #12
Все понял, все же просто)
0
Дример
0 / 0 / 0
Регистрация: 25.05.2017
Сообщений: 4
25.05.2017, 18:02 #13
Вот, я тоже новичок, написал такой код:

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
int main ()
{
    vector<char> moves;
    char i_move;
    char move;
 
 
    bool proccess = true;
    bool proccess_1 = true;
 
 
    int i = 0;
 
 
    int scores_1 = 0;
    int scores_2 = 0;
 
    int wins_1 = 0;
    int wins_2 = 0;
 
    int draws = 0;
 
    int total_amount_1 = 0;
    int total_amount_2 = 0;
 
    cout << "Vvedite 1 - esli hotite vnesti bymagy v vector znachenii, 2 - esli kamen, 3 - esli noshnici, i 4 - esli hotite prekratit vnesenya: " << endl;
 
    while (proccess) 
    {
 
        cin >> i_move;
 
        if (i_move == '1')
            moves.push_back('p');
        else if (i_move == '2')
            moves.push_back('r');
        else if (i_move == '3')
            moves.push_back('s');
        else if (i_move == '4')
            proccess = false;
        else
            cout << "Vi vveli ne vernoe znachenie!" << endl;
    }
 
    cout << "Vash hod('r' - camen, 's' - noshnici, 'p' - bymaga, 'f' - dlya zavershenya): " << endl;
 
    while (proccess_1)
    {
        cin >> move;
 
        switch (move)
        {
            case 'p':
                if (move == moves[i])
                {
                    scores_1+=0; scores_2+=0;
                    cout << "Score: " << scores_1 << "\t" << scores_2 << " - Nichya!" << endl;
                    draws++; 
                }
                else if (moves[i] == 'r')
                {
                    scores_1+=0; scores_2+=1;
                    cout << "Score: " << scores_1 << "\t" << scores_2 << " - ochko vam!" << endl; 
                }
                else if (moves[i] == 's')
                {
                    scores_1+=1; scores_2+=0;
                    cout << "Score: " << scores_1 << "\t" << scores_2 << " - ochko protivniky!" << endl; 
                }
                else
                {
                    cout << "Y protivnika ne ostalos hodov:(" << endl << endl << endl;
                    proccess_1 = false;
                }
                break;
 
            case 'r':
                if (move == moves[i])
                {
                    scores_1+=0; scores_2+=0;
                    cout << "Score: " << scores_1 << "\t" << scores_2 << " - Nichya!" << endl;
                    draws++;  
                }
                else if (moves[i] == 'p')
                {
                    scores_1+=1; scores_2+=0;
                    cout << "Score: " << scores_1 << "\t" << scores_2 << " - ochko protivniky!" << endl; 
                }
                else if (moves[i] == 's')
                {
                    scores_1+=0; scores_2+=1;
                    cout << "Score: " << scores_1 << "\t" << scores_2 << " - ochko vam!" << endl; 
                }
                else
                {
                    cout << "Y protivnika ne ostalos hodov:(" << endl << endl << endl;
                    proccess_1 = false;
                }
                break;
 
            case 's':
                if (move == moves[i])
                {
                    scores_1+=0; scores_2+=0;
                    cout << "Score: " << scores_1 << "\t" << scores_2 << " - Nichya!" << endl;
                    draws++;  
                }
                else if (moves[i] == 'r')
                {
                    scores_1+=1; scores_2+=0;
                    cout << "Score: " << scores_1 << "\t" << scores_2 << " - ochko protivniky!" << endl; 
                }
                else if (moves[i] == 'p')
                {
                    scores_1+=0; scores_2+=1;
                    cout << "Score: " << scores_1 << "\t" << scores_2 << " - ochko vam!" << endl; 
                }
                else
                {
                    cout << "Y protivnika ne ostalos hodov:(" << endl << endl << endl;
                    proccess_1 = false;
                }
                break;
            case 'f':
                proccess_1 = false;
                cout << "\n\n\n" << " --- Conec igri --- " << "\n\n\n";
                break;
            default:
                cout << "Poshaluista, vvodite normalnii znachenya!" << endl;
                scores_1+=0; scores_2+=0;
                break;
        }
 
        if (scores_1 == 3)
        {
            cout << "Protivnik pobedil!" << endl;
            total_amount_1+=scores_1;
            total_amount_2+=scores_2;
            scores_1 = 0;
            scores_2 = 0;
            wins_1++;
 
        }
        else if (scores_2 == 3)
        {
            cout << "Vi pobedili!" << endl;
            total_amount_1+=scores_1;
            total_amount_2+=scores_2;
            scores_1 = 0;
            scores_2 = 0;
            wins_2++;
        }
        else
        {
 
        }
 
        i++;
    }
 
    cout << "Pobed y protivnika: " << wins_1 << endl
    << "Pobed y vas: " << wins_2 << endl
    << "Obshee col-vo balov y protivnika: " << total_amount_1 << endl
    << "Obshee col-vo balov y vas: " << total_amount_2 << endl
    << "Vsego sigranno: " << i << " igr, " << draws << " nichih" << endl << endl
    << "\n\n\n" << " --- Ydachi! :) --- " << "\n\n\n";
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2017, 18:02
Привет! Вот еще темы с ответами:

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Написать функцию поиска человека по полю "фамилия" в массиве структур "Note" ("Персональная информация") - C++
Вывести из структуры информацию о человеке, чья фамилия введена с клавиатуры #include &lt;iostream&gt; #include &lt;locale&gt; #include...

Написать функцию "Факториал" и программу, использующую эту функцию для вывода таблицы факториалов - C++
Написать функцию &quot;Факториал&quot; и программу, использующую эту функцию для вывода таблицы факториалов. В С++ пожалуйста.

Задача "Цветная бумага" - C++
N прямоугольников (1 ≤ N ≤ 1000) из цветной бумаги положили на лист белой бумаги шириной A и длиной B. Стороны прямоугольников параллельны...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.05.2017, 18:02
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru