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

крестики-нолики, морской бой, карты...

21.05.2009, 16:32. Показов 5268. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
нужно написать на си++ какую нибудь игру, типа крестики-нолики, морсой бой, карты... ну в этом роде. Все программы, которые находила в интернете, не работают чота ((
может у каво нибудь было уже такое задание, напишите пожалуйста, и если есть, то с комментариями))
БУДУ ОЧЕНЬ БЛАГОДАРНА ! заранее спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.05.2009, 16:32
Ответы с готовыми решениями:

Морской бой C++
имеется следующий класс Text,в котором два метода drawText(...) который отвечает за прорисовку текста на экране i renderingText() - за...

Морской Бой
Люди прошу помогите....курсовую надо сдавать, а как решить задачу я не знаю... Вот такое условие: Дан двумерный массив размером 8х8,...

Морской бой
Есть поле 10 на 10, есть определенной расположение кораблей. Необходимо отобразить/напечатать имеющееся поле с кораблями

11
 Аватар для Бартимеус
181 / 33 / 7
Регистрация: 29.10.2008
Сообщений: 283
21.05.2009, 19:30
воспользуйся поиском, я писал эту программу и выкладывал код
0
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 25
21.05.2009, 19:45  [ТС]
а ссылки нету? я искала, не работает ни одна программа (
0
 Аватар для Бартимеус
181 / 33 / 7
Регистрация: 29.10.2008
Сообщений: 283
22.05.2009, 15:21
"Морской бой": нужны комментарии/замечания
1
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 25
24.05.2009, 12:23  [ТС]
а как сделать чтобы ето работало ? как в одну программу записать ?
0
 Аватар для Бартимеус
181 / 33 / 7
Регистрация: 29.10.2008
Сообщений: 283
28.05.2009, 18:11
новый проект создай)
0
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
28.05.2009, 18:26
Если хоть иногда читать книги то там можно найти примеры игр.
вот хрестики нолики
The_Game_XO.h
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
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
#ifndef The_Game_XO_h__
#define The_Game_XO_h__
 
 
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <stack>
#include <numeric>
 
const int       InitWeight      = 100;  // начальный вес.
const int       PrecCoeff       = 50;   // точность генератора случайных чисел.
const double    StepCoeff       = 0.65; // коэффициент обучения.
const int       LearningStep    = 20;   // шаг обучения.
 
char GameField[9];                      // Игровое поле.
 
enum OUTCOME { Xs, Os, DRAW, UNFINISHED };
 
struct TField
{
    char Field[9];
 
    TField(){ std::copy( GameField, GameField + 9, Field ); }
 
    bool operator < ( const TField &rhs ) const
    {
        return std::lexicographical_compare( Field, Field + 9, rhs.Field, rhs.Field + 9 );
    }
};
 
struct TWeight
{
    int Weight[9];
 
    TWeight() { std::fill( Weight, Weight + 9, InitWeight ); }
};
 
class Player
{
public:
    Player( char _symbol ) : Symbol( _symbol ) {}
    
    virtual void MakeMove() = 0;
    virtual void Learn( int ) {}
protected:
    char Symbol;
};
 
class HumanPlayer: public Player
{
public:
    HumanPlayer( char _symbol ) : Player( _symbol ) {}
 
    virtual void MakeMove()
    {
        int Cell;
        std::cout << "Input Position: ";
        std::cin >> Cell;
        GameField[Cell] = Symbol;
    }
};
 
class RandomPlayer: public Player
{
public:
    RandomPlayer( char _symbol ): Player( _symbol ) {}
    
    virtual void MakeMove()
    {
        std::vector<int> v;
 
        for(int i = 0; i < 9; ++i)
        {
            if( GameField[i] == ' ')
                v.push_back(i);
        }
 
        GameField[ v[rand()%v.size()] ] = Symbol;
    }
};
 
class SmartPlayer: public Player
{
public:
    SmartPlayer( char _sumbol ): Player( _sumbol ) {}
 
    virtual void MakeMove();
    void Learn( int );
private:
    struct HistoryElement
    {
        std::map<TField, TWeight>::iterator Situation;
        int Move;
        HistoryElement( std::map<TField, TWeight>::iterator s, int m)
            : Situation(s), Move(m) {}
    };
 
    std::stack<HistoryElement> History;
    std::map<TField, TWeight> Database;
 
    std::map<TField, TWeight>::iterator GetSituation();
    int GetRandom(std::map<TField, TWeight>::iterator s);
};
 
std::map<TField, TWeight>::iterator SmartPlayer::GetSituation()
{
    std::map<TField, TWeight>::iterator p = Database.find(TField());
 
    if(p == Database.end())
    {
        TWeight w;
 
        for(int i = 0; i < 9; ++i)
        {
            if( GameField[i] != ' ')
                w.Weight[i] = 0;
        }
 
        Database[TField()] = w;
        return Database.find(TField());
    }
 
    return p;
}
 
int SmartPlayer::GetRandom(std::map<TField, TWeight>::iterator s)
{
    int sum = std::accumulate( s->second.Weight, s->second.Weight + 9, 0 );
 
    if( !sum )
        return std::find( GameField, GameField + 9, ' ') - GameField;
 
    std::vector<int> coords;
 
    for(int i = 0; i < 9; ++i)
        std::fill_n( std::back_inserter(coords), PrecCoeff * s->second.Weight[i] / sum, i);
 
    return coords[ rand()%coords.size() ];
 
}
 
void SmartPlayer::Learn( int Step )
{
    if( History.empty() )
        return;
 
    HistoryElement h = History.top();
    History.pop();
 
    TWeight &w = h.Situation->second;
 
    w.Weight[h.Move] += Step;
    if(w.Weight[h.Move] < 0)
        w.Weight[h.Move] = 0;
 
    Learn(Step * StepCoeff);
}
 
void SmartPlayer::MakeMove()
{
    std::map<TField, TWeight>::iterator s = GetSituation();
 
    int move = GetRandom(s);
    GameField[move] = Symbol;
    History.push(HistoryElement(s,move));
}
OUTCOME GetOutCome()
{
    int v[8][3] = { {0,1,2}, {3,4,5}, {6,7,8}, {0,3,6},
                    {1,4,7}, {2,5,8}, {0,4,8}, {2,4,6} };
 
    for(int i = 0; i < 8; ++i)
    {
        if( GameField[ v[i][0] ] == GameField[ v[i][1] ] &&
            GameField[ v[i][0] ] == GameField[ v[i][2] ] &&
            GameField[ v[i][0] ] != ' ' )
            return GameField[ v[i][0] ] == 'x' ? Xs : Os;
    }
 
    return ( std::find(GameField, GameField + 9, ' ') == GameField + 9 )
                                                    ? DRAW : UNFINISHED;
}
 
void PrintField()
{
    system("cls");
    std::cout << GameField[0] << '|' << GameField[1] << '|' << GameField[2] << std::endl;
    std::cout << GameField[3] << '|' << GameField[4] << '|' << GameField[5] << std::endl;
    std::cout << GameField[6] << '|' << GameField[7] << '|' << GameField[8] << std::endl;
    std::cout << std::endl;
}
 
 
 
void PlayGame(Player *Xp, Player *Op, bool Verbose)
{
    Player *Cp[] = { Xp, Op };
    int move = 0;
    std::fill( GameField, GameField + 9, ' ');
 
    while( GetOutCome() == UNFINISHED )
    {
        Cp[move++ % 2]->MakeMove();
        if(Verbose)
            PrintField();
    }
 
    if( GetOutCome() == Xs )
    {
        Xp->Learn(LearningStep);
        Op->Learn(-LearningStep);
    }else if( GetOutCome() == Os )
    {
        Xp->Learn(-LearningStep);
        Op->Learn(LearningStep);
    }
}
 
#endif // The_Game_XO_h__


main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "The_Game_XO.h"
using namespace std;
 
int main()
{
 
    RandomPlayer *r = new RandomPlayer('o');
    HumanPlayer *h = new HumanPlayer('o');
    SmartPlayer *s = new SmartPlayer('x');
 
    for (int i = 0; i < 10000; ++i)
        PlayGame(s,r,false);
 
    PlayGame(s,h, true);
    system("pause");
    return 0;
}
АИ самообучающийся.
2
 Аватар для Manifik
8 / 8 / 1
Регистрация: 13.05.2009
Сообщений: 31
02.06.2009, 22:31
ISergey, а можно с более подробным комментарием?
0
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
02.06.2009, 22:40
Цитата Сообщение от Manifik Посмотреть сообщение
а можно с более подробным комментарием?
Можно.
ищем книгу C++ Мастер-класс. 85 нетривиальных проектов, решений и задач.
там смотрим с полным описанием и комментариями.
1
 Аватар для Бартимеус
181 / 33 / 7
Регистрация: 29.10.2008
Сообщений: 283
03.06.2009, 19:39
ISergey, а можно проити по ссылке и прокоментировать мой код, указывая все мои недочеты и помочь исправить по возможности? а то утонула тема
0
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
03.06.2009, 19:57
Цитата Сообщение от Бартимеус Посмотреть сообщение
ISergey, а можно проити по ссылке и прокоментировать мой код, указывая все мои недочеты и помочь исправить по возможности? а то утонула тема
Где то на выходных посмотрю и прокомментирую.
Сейчас ни времени ни желания.
0
0 / 0 / 0
Регистрация: 25.02.2012
Сообщений: 10
16.04.2012, 23:00
А что у вас получилось в результате?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.04.2012, 23:00
Помогаю со студенческими работами здесь

Морской бой
Пытаюсь написать простейший морской бой на основе классов. В ходе работы программы игроки, стреляя по очереди, либо попадают -...

Морской Бой на C++
Помогите пожалуйста написать морской бой на C++ ,не сильно замороченный, простенький, можно даже с однопалубными кораблями, просто конец...

Морской Бой
прошу в помощи написания этой игры ,спасибо

Морской бой в С
Прошу,что-бы он был максимально упрощенным .А то я ток начинающий программист)

Морской бой
Входные данные двумерный массив 10х10, заполненный нолями и единицами, где 0-пустая клетка, а 1-занятая, найти наиболее длинную линию из...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru