Пишу курсовую, используя код из книги Мозгового "85 нетривиальных проектов, решений и задач". Вылазят ошибки, которые никак не могу исправить. Компилирую на Borland C++ 5.
Помогите, пожалуйста, кто чем сможет!!! Курсовую уже в понедельник сдавать....
Код:
//#include <cstdlib>
#include <iostream>
#include <vector>
#include <stack>
#include <map>
#include <iterator>
#include <math.h>
using namespace std;
const int InitWeight = 100; //начальный вес
const int PrecCoeff = 50; //точность генератора случайных чисел
const double StepCoeff = 0.65; // коэффициент обучения
const int LearningStep = 20; //шаг обучения
//Игровое поле (3 на 3 построчно). Может содержать
//символов-крестик "x" , "o" и пробел
char GameField[9];
//текущее состояние игры - выиграли крестики, выиграли нолики, ничья,
//игра еще не закончена
enum OUTCOME { Xs, Os, DRAW, UNFINISHED };
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 (find(GameField, GameField + 9, ' ') == GameField + 9 ) ? DRAW : UNFINISHED;
};
//вывести текущее положение игрового поля
void PrintField()
{
cout << GameField[0] << "|" << GameField[1] << "|" << GameField[2] << endl;
cout << GameField[3] << "|" << GameField[4] << "|" << GameField[5] << endl;
cout << GameField[6] << "|" << GameField[7] << "|" << GameField[8] << endl;
cout << endl;
};
//состояние игрового поля
struct TMyField
{
char MyField[9];
//конструктор: просто скопировать текущее содержимое
//реального поля
TMyField() { copy(GameField, GameField + 9, MyField); }
//для объядинения в коллекцию требуется функция
//упорядочивания
bool operator<<(const TMyField& rhs) const
{
return lexicographical_compare(MyField, MyField + 9, rhs.MyField, rhs.MyField +9 );
}
};
//матрица весов
struct TMyWeight
{
int MyWeight[9];
//изначально заполняется значениями веса InitWeight
TMyWeight() { fill(MyWeight, MyWeight +9, InitWeight); }
};
//абстрактный класс Player
class Player
{
protected:
//используемый игроком символ (крестик или нолик)
char Symbol;
public:
Player(char _symbol) : Symbol(_symbol) {}
//сделать очередной ход
virtual void MakeMove() = 0;
//выполнить одну итерацию обучения
virtual void Learn(int) {}
};
//игрок - человек
class HumanPlayer : public Player
{
public:
HumanPlayer(char _symbol) : Player(_symbol) {}
virtual void MakeMove()
{
int Cell;
//прочитать номер клетки и сделать ход
//корректность хода не проверяется
cin >> Cell;
GameField[Cell] = Symbol;
}
};
//игрок-компьютер, использующий рандомизированную стратегию
class RandomPlayer : public Player
{
public:
RandomPlayer(char _symbol) : Player(_symbol) {}
virtual void MakeMove() // <- ругается в этом месте
{
vector<int> v;
//запомнить номера всех пустых клеток
for ( int i =0 ; i < 9 ; i++)
if(GameField[i] == ' ')
v.push_back(i);
//записать символ в случайно выбранную пустую клетку
GameField[v[random(v.size())]] = Symbol; }
};