С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Kony
0 / 0 / 0
Регистрация: 20.04.2014
Сообщений: 7
#1

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

20.04.2014, 16:50. Просмотров 256. Ответов 0
Метки нет (Все метки)

Задача смоделировать поведение робота на прямоугольном поле 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];
    }
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2014, 16:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Рандомное поле с роботом (C++):

Пройденный роботом путь - C++
Всем привет. Совсем недавно начала изучать язык С++ и попалась такая задача, никак не могу понять, как к ней подойти вообще, возможно,...

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

Разработать архитектуру программы управления роботом - C++
Робот принимает команды типа &quot;go north 1000&quot;, &quot;turn left&quot;, &quot;beep 5&quot;, &quot;analyze oxygen&quot;, &quot;analyze earth&quot; и так далее. Архитектура должна...

Управление мобильным роботом, построенным на базе Pololu. - C++
Доброе время суток. Нужно написать или заставить работать готовую программу для управления мобильным роботом построенного на базе Pololu. К...

Друзья, подскажите, как в классе создать константное поле, ссылочное поле и объектное поле? - C++
Препод на защите лабораторной по классам дал задание большое. В общем-то все пункты я знаю как делать, кроме этого. Вот что такое...

Рандомное число - C++
Здравствуйте, в общем я пытаюсь использовать ф-цию srand, но получается странно. Пример кода: int main() { ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2014, 16:50
Привет! Вот еще темы с ответами:

Рандомное заполнение - C++
Здравствуйте уважаемые жители форума. По ходу выполнения некоего задания столкнулся с таким вопросом: есть двумерный массив который нужно...

Рандомное назавние программы - C++
Как сделать так чтобы при запуске менялось название программы нa рандомное по типу NSRGOWEgre.exe Прога сделана на С++ через Visual...

Рандомное заполнение массива - C++
Здравствуйте,никак не получается сделать так что бы массив заполнялся рандомными числами. Вот работающий код ,но массив заполнен вручную....

Рандомное распределения чисел - C++
Доброго вам времени суток. Ребята, помогите с программой, собственно, нужно создать 12к равномерно распределенных чисел, потом из этих 12к...


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

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

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