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

Рандомное поле с роботом - C++

Восстановить пароль Регистрация
 
Kony
0 / 0 / 0
Регистрация: 20.04.2014
Сообщений: 7
20.04.2014, 16:50     Рандомное поле с роботом #1
Задача смоделировать поведение робота на прямоугольном поле NxM (где N и M задается пользователем). Робот может перемещаться на свободные клетки в четыре стороны (вверх, вниз, вправо, влево) и атаковать врагов в перекрестьи, центром которого является он сам (по одной клетке во се стороны). Робот имеет имя - один символ A-J.

В программа поле должно быть представлено классом Field, на нем могут находиться объекты - стена (Wall), враг (Enemy) и роботы (Robot). Класс Field предназначен для управления полем (двумерный массив типа char) и хранения объектов, находящихся на поле (несколько vector'ов, хранящих объекты соответствующих классов - Enemy, Wall ,Robot).

Реализовать все эти классы. Классы Enemy и Wall содержат также свои координаты, на поле они отображаются как E и W соответственно. Робот знает, где он находится и сколько успел убить врагов. На поле робот отображается в виде своего имени (буквы). Класс Robot содержит следующие методы:
Конструктор/Деструктор;
Конструктор копирования;
Операция присваивания;
Атаковать врагов;
GoUp (переместиться вверх по полю);
GoDown (переместиться вниз по полю);
GoLeft (переместиться влево по полю);
GoRight (переместиться вправо по полю).
Операции перемещения должны учитывать возможность перемещения. Если в клетке, куда желает переместиться робот, есть стена, или это граница поля, то робот переместиться не может и метод ничего не делает, а на экран выводится “Ошибка перемещения”.

В начале работы программы, случайным образом генерируется поле с 1 роботом, N стенами и N врагами. Поле аккуратно выводится на экран. Границы поля должны быть отмечены символом “*”. Пустые поля – символом ”.”. И выводится приглашение на ввод команды. По команде робот может переместиться в любую из 4 сторон, если это возможно или атаковать врага. (Команды: u - вверх, d - вниз, l - налево, r – направо, e - атаковать, q – перейти к следующему заданию) Если вводится команда, которую невозможно исполнить робот говорит «Неверная команда. Не могу двигаться *сторона*» (вместо *сторона* выведите куда). После убийства врага у робота увеличивается счетчик буитых врагов (фрагов) и он говорит "Цель уничтожена, ожидаю дальнейших указаний".

Пример:
*******
*.WW.E*
*W.E.E*
*...W.*
*.A.E.*
*.W..E*
*******

Введите команду: u

*******
*.WW.E*
*W.E.E*
*.A.W.*
*...E.*
*.W..E*
*******
итп

Помогите, пожалуйста.

Знаю, как можно с движением:
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
void Move(Direction dir)
{
    switch (dir)
    {
    case LEFT:
    {
                 if (EmptyX < 3)
                 {
                     Pole[EmptyX][EmptyY] = Pole[EmptyX + 1][EmptyY];
                     Pole[EmptyX + 1][EmptyY] = 0;
                     EmptyX++;
                 }
    } break;
    case UP:
    {
               if (EmptyY < 3)
               {
                   Pole[EmptyX][EmptyY] = Pole[EmptyX][EmptyY + 1];
                   Pole[EmptyX][EmptyY + 1] = 0;
                   EmptyY++;
               }
    } break;
    case RIGHT:
    {
                  if (EmptyX > 0)
                  {
                      Pole[EmptyX][EmptyY] = Pole[EmptyX - 1][EmptyY];
                      Pole[EmptyX - 1][EmptyY] = 0;
                      EmptyX--;
                  }
    } break;
    case DOWN:
    {
                 if (EmptyY > 0)
                 {
                     Pole[EmptyX][EmptyY] = Pole[EmptyX][EmptyY - 1];
                     Pole[EmptyX][EmptyY - 1] = 0;
                     EmptyY--;
                 }
    } break;
    }
}
Получается создать матрицу из случайных чисел, это как пример. Вот не знаю, как сгенерировать поле с N стенами и врагами и 1 роботом(
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
class Field //класс
{
    
 
public:
    int n;
    int m;
    Field(int N, int M) //эти параметры мы передадим при создании объекта в main
    {
        n = N;//присвоим нашим элементам класса значения параметров
        m = M;
        cout << "Тут сработал конструктор, который принимает параметры: " << endl;//и здесь же их отобразим на экран
        cout << "n = " << n << endl;
        cout << "m = " << m << endl << endl;
    }
 
    void setField()
    {
        cout << "Добро пожаловать! Введите размеры поля NxM:\n";
        cout << "Введите целое число N: ";
        cin >> n;
        cout << "Введите целое число M: ";
        cin >> m;
 
    }
 
    void getField()
    {
        srand(time(0));
        cout << "n = " << n << endl;
        cout << "m = " << m << endl << endl;
        double **z = new double*[n];
        for (int i = 0; i < n; i++)
            z[i] = new double[m];
 
        // заполнение массива
        for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            z[i][j] = (rand() % 10 + 1);
 
        // вывод массива
        cout << "Наше поле" << endl;
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
                cout << setw(4) << z[i][j] << "   ";
            cout << endl;
        }
    }
 
    ~Field() // это деструктор
    {
        // удаление двумерного динамического массива
        for (int i = 0; i < n; i++)
            delete[]z[i];
    }
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2014, 16:50     Рандомное поле с роботом
Посмотрите здесь:

Пройденный роботом путь C++
Рандомное распределения чисел C++
Рандомное заполнение C++
Управление мобильным роботом, построенным на базе Pololu. C++
C++ Задать рандомное число
Друзья, подскажите, как в классе создать константное поле, ссылочное поле и объектное поле? C++
C++ Рандомное заполнение массива
C++ Рандомное число

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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