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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.92
NatasheJkeeenatashka
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 25
#1

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

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

нужно написать на си++ какую нибудь игру, типа крестики-нолики, морсой бой, карты... ну в этом роде. Все программы, которые находила в интернете, не работают чота ((
может у каво нибудь было уже такое задание, напишите пожалуйста, и если есть, то с комментариями))
БУДУ ОЧЕНЬ БЛАГОДАРНА ! заранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2009, 16:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос крестики-нолики, морской бой, карты... (C++):

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

C++ Морской бой - C++
Недавно начал изучать c++ и вот решил написать консольный морской бой, но вот в чём возникли проблемы: 1.Как сделать стрельбу для игрока...

Морской бой - C++
Написал морской бой. Просьба прокоменнтировать, улучшить где возможно и помочь написать ИИ. Вот исходники: #include <iostream> ...

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

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

Морской бой - C++
Нужна игра Морской бой. Месяц провалялся в больнице, ничего не выучил, а курсач горит. Надеюсь на ваше понимание:)

11
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
21.05.2009, 19:30 #2
воспользуйся поиском, я писал эту программу и выкладывал код
0
NatasheJkeeenatashka
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 25
21.05.2009, 19:45  [ТС] #3
а ссылки нету? я искала, не работает ни одна программа (
0
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
22.05.2009, 15:21 #4
Морской бой
1
NatasheJkeeenatashka
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 25
24.05.2009, 12:23  [ТС] #5
а как сделать чтобы ето работало ? как в одну программу записать ?
0
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
28.05.2009, 18:11 #6
новый проект создай)
0
ISergey
Maniac
Эксперт С++
1376 / 887 / 53
Регистрация: 02.01.2009
Сообщений: 2,663
Записей в блоге: 1
28.05.2009, 18:26 #7
Если хоть иногда читать книги то там можно найти примеры игр.
вот хрестики нолики
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 #8
ISergey, а можно с более подробным комментарием?
0
ISergey
Maniac
Эксперт С++
1376 / 887 / 53
Регистрация: 02.01.2009
Сообщений: 2,663
Записей в блоге: 1
02.06.2009, 22:40 #9
Цитата Сообщение от Manifik Посмотреть сообщение
а можно с более подробным комментарием?
Можно.
ищем книгу C++ Мастер-класс. 85 нетривиальных проектов, решений и задач.
там смотрим с полным описанием и комментариями.
1
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
03.06.2009, 19:39 #10
ISergey, а можно проити по ссылке и прокоментировать мой код, указывая все мои недочеты и помочь исправить по возможности? а то утонула тема
0
ISergey
Maniac
Эксперт С++
1376 / 887 / 53
Регистрация: 02.01.2009
Сообщений: 2,663
Записей в блоге: 1
03.06.2009, 19:57 #11
Цитата Сообщение от Бартимеус Посмотреть сообщение
ISergey, а можно проити по ссылке и прокоментировать мой код, указывая все мои недочеты и помочь исправить по возможности? а то утонула тема
Где то на выходных посмотрю и прокомментирую.
Сейчас ни времени ни желания.
0
sve-tanya
0 / 0 / 0
Регистрация: 25.02.2012
Сообщений: 10
16.04.2012, 23:00 #12
А что у вас получилось в результате?
0
16.04.2012, 23:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2012, 23:00
Привет! Вот еще темы с ответами:

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

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

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

Морской бой - C++
народ помогите нарисовать решётку (поле боя ) для морского боя никак не выходит через двухмерный массив


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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