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

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

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

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

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

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

Морской бой Visual С++ - C++
//Ship.h #include "stdafx.h" # ifndef SHIP_H # define SHIP_H #include <windows.h> #include <set> #include...

Морской бой С++ в консоли - C++
Морской Бой С++ Кому интересно вот код морского боя в консоли, не судите строго только учусь.... #include<iostream> using...

Консольный морской бой - C++
Доброй ночи, уважаемые форумчане! Собственно, нашел код на просторах интернета, вроде как рабочий, пытаюсь его завести. Не выходит, выдает...

Морской бой на Turbo C - C++
у кого есть исходники морского боя на с++ в консоле гуглил ничего не мог найти

Консольный морской бой - C++
Занялся написанием консольного морского боя на с++, вроде бы уже написал мат модель(хотя и простейшую), но возникли проблемы с оформлением ...

Игра Морской Бой - C++
#include <conio.h> #include <stdlib.h> #include <iostream.h> #include <dos.h>Kletka {:Pustaya_kletka, Vistrel, X, Y;:(int x, int...

Морской бой (комбинаторика) - C++
Морской бой. Совсем недавно появилась в продаже новая компьютерная игра «Морской бой–3». Вася купил себе эту игру и теперь играет в нее...

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

Консольный морской бой - C++
Привет всем. Вот поле: int Matrix; Размещаем корабль на х = 5, y = 5: Matrix = 0; 0 значит на эту координату больше нельзя...

Расстановка кораблей (морской бой) - C++
Доброго времени суток, при расстановке 2х палубных кораблей возникает проблема... При выборе точки уже занятой, система ломается и...

Список списков.Морской бой - C++
Здравствуйте, форумчане. Прошу вашей помощи. Я новичок, и это моя первая программа. Есть курсовая, морской бой. Написал уже...

Морской бой для консоли - C++
Морской Бой в консоли на С++ на русском с комментированными исходниками.

Морской бой. С чего начать? - C++
Хочу написать игру. И не консольную, а с красивым графическим интерфейсом: плавные анимации, иконки, поле красивое... Проблем в написании...


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

Или воспользуйтесь поиском по форуму:
sve-tanya
0 / 0 / 0
Регистрация: 25.02.2012
Сообщений: 10
16.04.2012, 23:00     крестики-нолики, морской бой, карты... #12
А что у вас получилось в результате?
Yandex
Объявления
16.04.2012, 23:00     крестики-нолики, морской бой, карты...
Ответ Создать тему
Опции темы

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