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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Как правильно вставлять диррективу .386 в ассемблерной вставке http://www.cyberforum.ru/cpp-beginners/thread1152355.html
привет)подскажите пожалуйста как правильно вставлять диррективу .386 в ассемблерной вставке?вот я пытался таким образом но не выходит asm{ .386 ...... ...... }
C++ Определить количество интересных элементов в массиве задание Дан массив, элементами которого являются целые числа. Интересными называются те элементы массива, которые являются нечётными и расположены до минимального элемента. Если массив содержит несколько минимальных элементов, следует рассматривать последний из них. Требуется определить количество интересных элементов в массиве, а также вывести сами интересные элементы. Входные данные... http://www.cyberforum.ru/cpp-beginners/thread1152339.html
C++ Оценочная функция для шашек
Подскажите пожалуйста, как организовать функцию оценки игры, которая будет возвращать цену игры для данной игровой ситуации. Расскажите конкретнее, что и как можно включить в эту оценку, помимо взятия максимального количества шашек противника? Прототип этой функции? Собираюсь организовывать ИИ так, как показано на картинке и изменять сложность(глубину дерева) во время игры. Что я прошу?...
Удалить из текста, находящегося в файле, каждое четное предложение C++
Help
C++ Задать массив размером N и вывести все четные числа. Ошибка выполнения http://www.cyberforum.ru/cpp-beginners/thread1152313.html
Здравствуйте :) Я решаю задачу, по сути она не сложная, надо задать массив размером N и вывести все четные числа. Когда написал, она вроди как работает, но меня смущает ошибка после выполнения программы. ( Прекращена работа проргаммы *.exe ) #include <iostream> #include <cstdlib> using namespace std; int main()
C++ Умные указатели на структуру с шаблоном #pragma once #include <vector> #include <memory> using namespace std; template <class T> struct Selem { подробнее

Показать сообщение отдельно
Kony
0 / 0 / 0
Регистрация: 20.04.2014
Сообщений: 7
20.04.2014, 16:50     Рандомное поле с роботом
Задача смоделировать поведение робота на прямоугольном поле 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];
    }
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 13:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru