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

Игры в камушки через классы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Lockiti
0 / 0 / 0
Регистрация: 20.05.2011
Сообщений: 6
20.05.2011, 23:54     Игры в камушки через классы #1
Условие задачи: Имеются три кучки камней. Двое играющих по очереди делают ходы. Каждый ход заключается в том, что из какой-то одной кучки берется произвольное, ненулевое число камней.
Выигрывает взявший последний камень.
Требуется написать с помощью классов - отдельно класс игрока, отдельно для кучек с камнями. Обязательна инкапсуляция внутри классов.

Не по теме:

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



Добавлено через 25 секунд
Исходный код:
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
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#include <iostream>
#include <string>
#include <conio.h>
 
using namespace std;
//======================================================// 
class KUCHA
{
public:
    int a[100],i,e,t;
    int n,n1,n2,n3;
 
    void intype();
    void init();
    void choosing();
 
    void input();
    void select();
    void unputed();
};
void KUCHA::select()                                //выбор количества изымаемых из кучи камней
{
    int k,m;
    cout<<"Select number of stones to put out: ";
    cin>>k;
    choosing();
    i=0;
    while (a[i]==0)
        i++;
    m=i;
    for (i=m; i<(m+k); i++)
        a[i]=0;
}
void KUCHA::choosing()                              //выбор обрабатываемой кучи
{
    int h;
    cout<<"Select kucha to use: ";
    cin>>h;
    if (h==1)
        n=n1;
    if (h==2)
        n=n2;
    if (h==3)
        n=n3;
}
void KUCHA::init()                                  //количество камней в куче
{
    int h;
    cout<<"Select kucha: ";
    cin>>h;
    cout<<"Number of ctones in kucha: ";
    if (h==1)
        cin>>n1;
    if (h==2)
        cin>>n2;
    if (h==3)
        cin>>n3;
}
void KUCHA::intype()                                //создание кучи
{
    for (i=0; i<n; i++)
        a[i]=1;
    for (i=0; i<n; i++)
        cout<<a[i]<<" ";
    cout<<endl<<"======"<<endl;
}
void KUCHA::input()                                 //вывод кучи на экран
{
    for (i=0; i<n; i++)
        cout<<a[i]<<" ";
    cout<<endl<<"Number of stones in kucha = "<<n<<endl;
}
void KUCHA::unputed()   
{   
    int t=0;
    for (i=0; i<n; i++)
        if (a[i]==1)
            t=t+1;
    cout<<"Number of lefted stones in kucha = "<<t<<endl;
    if (t==0)
        cout<<"Remember! Kucha is empty now!"<<endl;
    cout<<"======"<<endl;
}
 
//======================================================//
int main()
{   
    int h,k=1,d;
    string q;
    bool f=true;
    int p=0,p1=1,p2=2;
//==создание куч==//
    KUCHA kucha1,kucha2,kucha3; 
 
    kucha1.init();
    kucha1.choosing();
    kucha1.intype();
                        
    kucha2.init();
    kucha2.choosing();
    kucha2.intype();
                                
    kucha3.init();
    kucha3.choosing();
    kucha3.intype();
 
//==начало игры==//
    cout<<"Would you like to start the game? y/n"<<endl;
    cin>>q;
    if (q=="y")
        system("cls");
 
    cout<<"Inputing kuchas and terms befor starting:"<<endl;
        kucha1.choosing();
        kucha1.input();
        kucha1.unputed();
 
        kucha2.choosing();
        kucha2.input();
        kucha2.unputed();
 
        kucha3.choosing();
        kucha3.input();
        kucha3.unputed();
//игра//
cout<<"|||=====================================|||"<<endl;
 
cout<<"You play vs opponent. Choose your player: (1/2)"<<endl;
cin>>p;
    if (p==1)
    {
        p=p1;
        cout<<"You choose Player1. You will be named P1 next. Your oppenent is P2. You make gamestep first."<<endl;
    }
    if (p==2)
    {
        p=p2;
        cout<<"You choose Player2. You will be named P2 next. Your oppenent is P1. You make gamestep after P1."<<endl;
    }
cout<<endl<<endl;
while (f)
{
    if (k%2==1)
    {
        p=p1;
        cout<<"P1,";
    }
    if (k%2==0)
    {
        p=p2;
        cout<<"P2,";
    }
 
cout<<" make your step. Choose kucha to put out: ";
        cin>>h;
    if (h==1)
    {
        kucha1.select();
        kucha1.input();
        kucha1.unputed();
    };
    if (h==2)
    {
        kucha2.select();
        kucha2.input();
        kucha2.unputed();
    };
    if (h==3)
    {
        kucha3.select();
        kucha3.input();
        kucha3.unputed();
    };
cout<<"/=========/"<<endl;
 
cout<<"Are all kuchas empty now? y/n"<<endl;
cin>>q;
if (q=="y")
    f=false;
k++;
}
cout<<endl<<"END OF THE GAME!!!"<<endl;
d=k/2;
    if (p==p1)
    {
        cout<<"Congratulations! Player1 win the game!"<<endl;
        cout<<"Player1 made "<<d<<" steps during the game."<<endl;
    }
    if (p==p2)
    {
        cout<<"Congratulations! Player2 win the game!"<<endl;
        cout<<"Player2 made "<<d<<" steps during the game."<<endl<<endl;
    }
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2011, 23:54     Игры в камушки через классы
Посмотрите здесь:

как оформить задачу через классы C++
перевод в двоичную систему через классы C++
C++ Работа с файлом через классы
Табуляция через классы C++
C++ Сложение числа через классы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
21.05.2011, 00:20     Игры в камушки через классы #2
Ну ты бы хоть написал: класс куча, эта функция формирует кучу, эта функция принимает то-то и то-то делает то-то и то-то возвращает то-то и то-то. Я бы тогда брал функции и использовал их как мне надо без ковыряния- а чё они там делают. И было бы сокрытие даных- инкапсуляция во всей красе

Потом тебе надо этот код подправить, смотри, вот самое начало:
C++
1
2
3
Select kucha: 1
Number of ctones in kucha: 12
Select kucha to use: 2
Так, поле этого прога не работает. То есть я так понимаю, если у меня куча 2 не заполнена, то и не фиг её использовать. Хорошо, а тогда вообще зачем у меня показывается:
C++
1
Select kucha to use:
?
Если я выбрал только ОДНУ кучу (в данном случае 1) и заполнил её камнями, то не надо вообще "выбирать кучу для использования"
Lockiti
0 / 0 / 0
Регистрация: 20.05.2011
Сообщений: 6
21.05.2011, 08:21  [ТС]     Игры в камушки через классы #3
kravam
choosing - выбор обрабатываемой кучи для изъятия (некоему абстрактному n камней присваивается количество камней в выбранной куче и работа дальше идет с ним)
select - выбор количества изымаемых из кучи камней
init - создание кучи - ее номер, количество камней в ней
intype - присвоение элементам кучи 1 (наличие камня - 1, отсутствие - 0) и вывод на экран
input - итоговый вывод с количеством камней и заполненностью используется после начала игры
unputed проверяет количество изъятых и есть ли еще камни в кучке
====
Если я выбрал только ОДНУ кучу (в данном случае 1) и заполнил её камнями, то не надо вообще "выбирать кучу для использования"
Все работает, если на повторный select вводить тот же номер, что и в начале - функция после ввода числа распечатывает для этой кучки количество камней в ней.
Прикладываю скриншоты.

И спасибо, что взялись.
Миниатюры
Игры в камушки через классы   Игры в камушки через классы  
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
21.05.2011, 11:28     Игры в камушки через классы #4
Так, понятно. Ты алгоритм-то выигрывания придумал? (ну по-моему он один, надо просто его найти). Реализация интерфейса зависит от алгоритма. То есть: select и init это явно полезные функции. А вот intype под вопросом. Дело в том, что для выигрышного алгоритма крайне важно, существует в куче 1 камень или несклько. То есть состояния 3, а не два должно быть: нет камней, есть только один камень, есть более одного камня.

Но чтобы ты в этом убедился надо отталкиваться от алгоритма. Ели не знаешь, могу рассказать.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
21.05.2011, 15:27     Игры в камушки через классы #5
Цитата Сообщение от Lockiti Посмотреть сообщение
Каждый ход заключается в том, что из какой-то одной кучки берется произвольное, ненулевое число камней.
Выигрывает взявший последний камень.
Наверняка есть какое-то ограничение на максимальное кол-во камней. Иначе либо первый игрок берет сразу все камни и выигрывает, либо (если последний камень должен быть один) берет ВСЕ-2(минус два) камней, и на следующем ходу выигрывает.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
21.05.2011, 15:51     Игры в камушки через классы #6
правила такие: в любой кучке сколь угодно много (мало, но не ноль) камней, но брать можно только из ОДНОЙ кучки (Можно всю кучку сразу), кто ничё не взял, тот дурак.

Кстати, при правильной игре первый всегда выигрывает
Lockiti
0 / 0 / 0
Регистрация: 20.05.2011
Сообщений: 6
21.05.2011, 17:23  [ТС]     Игры в камушки через классы #7
Kastaneda
Как вам уже ответили, ограничение есть: за один ход брать только из одной кучи и ненулевое количество камней.
kravam
В данном случае не важно, кто победит - не ставилось цели отыграть именно за победившего игрока (в условии дано постольку поскольку - чтобы принцип игры был понятен). Важна сама реализация игры, так что не столько нужен алгоритм победы для какого-либо из игроков, сколько работоспособность программы.
То есть за обоих игроков вообще может отработать компьютер. Либо за обоих же отыграю я - не суть важно.
Свою проблему вижу в том, что не могу прописать адекватно взаимодействие между элементами двумя классов (игроками и кучами соответственно), точнее, между самими классами. В этом помощь и требуется.
Kastaneda
21.05.2011, 17:24
  #8

Не по теме:

не обратил внимание на "3 кучи" в условии.

kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
21.05.2011, 17:30     Игры в камушки через классы #9
щас я сделаю
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
22.05.2011, 15:43     Игры в камушки через классы #10
Дело в следующем: там создан классу куча, и игрок а от игрока два производных класса: машина и человек. Дело в том, что в классе игрок есть функция ход, но она для машины и для человека своя. Поэтому я сделал класс игрок виртуальным, а для машины и человека реализовал эту функцию по отдельности.

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

Там где-то написано, где взят алгоритм выигрыша. Первым ходит либо машина либо человек (рандомно)

Если ситуация выигрышная, то машина ходит по алгоритму, если проигрышная, то рандомно.
А человек ходит как хочет. Можно было бы написать подсказку-программу (как надо ходить), но это уже совсем другая история. Идём по ссыли и учимся правильно ходить.
Вложения
Тип файла: rar ним_игра_$_игры.rar (118.9 Кб, 51 просмотров)
Lockiti
0 / 0 / 0
Регистрация: 20.05.2011
Сообщений: 6
22.05.2011, 16:13  [ТС]     Игры в камушки через классы #11
kravam,
Спасибо.
===
Все cрр и заголовочные подключены, но компилятор все равно недоволен.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1>Compiling...
1>chelovek.cpp
1>mashina.cpp
1>h:\мои документы\visual studio 2008\projects\2\oop\new\new\mashina.cpp(56) : error C2668: 'pow' : ambiguous call to overloaded function
1>        d:\instal center\microsoft visual studio 9.0\vc\include\math.h(575): could be 'long double pow(long double,int)'
1>        d:\instal center\microsoft visual studio 9.0\vc\include\math.h(527): or       'float pow(float,int)'
1>        d:\instal center\microsoft visual studio 9.0\vc\include\math.h(489): or       'double pow(double,int)'
1>        while trying to match the argument list '(int, int)'
1>h:\мои документы\visual studio 2008\projects\2\oop\new\new\mashina.cpp(70) : error C2668: 'pow' : ambiguous call to overloaded function
1>        d:\instal center\microsoft visual studio 9.0\vc\include\math.h(575): could be 'long double pow(long double,int)'
1>        d:\instal center\microsoft visual studio 9.0\vc\include\math.h(527): or       'float pow(float,int)'
1>        d:\instal center\microsoft visual studio 9.0\vc\include\math.h(489): or       'double pow(double,int)'
1>        while trying to match the argument list '(int, int)'
1>Generating Code...
1>Build log was saved at "file://h:\Мои документы\Visual Studio 2008\Projects\2\OOP\new\new\Debug\BuildLog.htm"
1>new - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
22.05.2011, 16:19     Игры в камушки через классы #12
У меня DEV C++ если чё. Надо 2 среды иметь. Руки дойдут, попробую переделать под MSVC.

Добавлено через 1 минуту
Ксттати, если ругается на pow, то это функция возведения в степень,её можно заменить чем-нибудь, какая там есть в MSVC, ну и с типами поковыряться тоже
Lockiti
0 / 0 / 0
Регистрация: 20.05.2011
Сообщений: 6
22.05.2011, 16:32  [ТС]     Игры в камушки через классы #13
kravam
Попытаюсь.
И еще раз спасибо за решение.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
22.05.2011, 16:33     Игры в камушки через классы #14
Короче, делай так: где есть pow, там пиши:
(int)pow((float)2,k_);

А чё, самому вломы подумать?
Это в двух местах, по моему. Так-то прикольный компилятор, не может сам 2 привести к типу float
После этого у меня на MSVC заработало.
Чё русскоязычную версию не поставишь?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2011, 16:58     Игры в камушки через классы
Еще ссылки по теме:

Реализация матричных операций через классы C++
C++ Реализация списка через классы. Ошибка
C++ Моделирование автоматом через классы

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

Или воспользуйтесь поиском по форуму:
Lockiti
0 / 0 / 0
Регистрация: 20.05.2011
Сообщений: 6
22.05.2011, 16:58  [ТС]     Игры в камушки через классы #15
kravam
Для pow уже сам изменил, но все равно спасибо.
Чё русскоязычную версию не поставишь?
На английской привычнее.
Yandex
Объявления
22.05.2011, 16:58     Игры в камушки через классы
Ответ Создать тему
Опции темы

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