Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 24.11.2021
Сообщений: 104

Создать объекты типа «Шахматная Фигура»

05.07.2022, 22:43. Показов 2210. Ответов 12
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Тип «Позиция на шахматной доске» определить как класс, содержащий:
- закрытые поля с координатами точки, значения которых будут соответствовать нумерации
шахматного поля;
- все функции реализовать в соответствии с общими требованиями.
Тип «Фигура» определить как класс, содержащий:
- закрытые поля с позицией на шахматной доске соответствующего типа и реализовано в виде
символьной строки произвольной длины поле с названием цвета;
- предусмотреть функцию "ход" на одну позицию в одном из четырех направлений;
- остальные функции реализовать соответственно общим требованиям.
В тестовом примере создать объекты типа «Фигура» соответственно общим
требованиям и вывести информацию о них в полном и сокращенном виде.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.07.2022, 22:43
Ответы с готовыми решениями:

Создать иерархию классов Шахматная фигура – абстрактный класс, содержащий поле – цвет. Создать производные классы
Создать иерархию классов Шахматная фигура – абстрактный класс, содержащий поле – цвет. Создать производные классы все фигуры, содержащие...

Шахматная фигура конь
Шахматная фигура конь ходит на 1 клетку по горизонтали и на 2 клетки по вертикали или наоборот на 2 клетки по горизонтали и на 1 по...

Определить класс «Шахматная фигура» и производные классы
Лабораторная работа по ОП. Если кто может помогите с кодом. Условие таково: "Определить класс «Шахматная фигура» и унаследовать от него...

12
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
06.07.2022, 20:10
а что конкретно вызывает трудности? У меня вот трудности вызывает расписывать однообразные классы, в которых мало содержания, но много одинаковых объявлений одного и того же.

Вы могли бы сэкономить мне и всем тут время и просто
- скопировать то, что уже написано на форум
- задать конкретный вопрос, который мешает вам продвинуться дальше
0
1 / 1 / 0
Регистрация: 24.11.2021
Сообщений: 104
07.07.2022, 22:36  [ТС]
Покажите мне один пример такой работы
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
07.07.2022, 23:07
C++
1
2
3
4
5
6
7
8
9
class Square{
   char rank, file;
}
 
class Piece{
    string name;
    string color;
    Square square;
}
Цитата Сообщение от Darklight_sun Посмотреть сообщение
- предусмотреть функцию "ход" на одну позицию в одном из четырех направлений;
Коня, пешку, ферзя тоже в четыре направления двигать только ? ))

Добавлено через 3 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
- предусмотреть функцию "ход" на одну позицию в одном из четырех направлений;
можно создать функцию, для каждого класса фигуры,
bool Piece::move_to(Square square); которая вернет возможность перемещения на заданную точку.
0
1 / 1 / 0
Регистрация: 24.11.2021
Сообщений: 104
07.07.2022, 23:07  [ТС]
Я просто не понимаю суть задания. Я напишу эти классы. А какой должен быть результат? Мне не понять
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
07.07.2022, 23:24
Цитата Сообщение от Darklight_sun Посмотреть сообщение
Я напишу эти классы. А какой должен быть результат?
Вы напишите их. Задача то не в том что бы понять суть
А в том что бы выполнить его.

Ну вот сделаем клетку и фигуры.
Дальше сможем осуществлять проверку хода, боя фигур на реальном примере доски.

Добавлено через 2 минуты
Потом сделать хот сит игру шахматы, потом научить гАндроида играть в нее.
И заставить два доходяги гАндроида, на 40-ка градусной жаре, при загрузке фильма(ххх), играть друг с другом по СинемуЗубу

Добавлено через 12 минут
Цитата Сообщение от Darklight_sun Посмотреть сообщение
Покажите мне один пример такой работы
Определить класс «Шахматная фигура» и унаследовать от него классы, соответствующие шахматным фигурам
0
1 / 1 / 0
Регистрация: 24.11.2021
Сообщений: 104
07.07.2022, 23:28  [ТС]
Это по сути, решение моей задачи?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
08.07.2022, 00:03
Лучший ответ Сообщение было отмечено Darklight_sun как решение

Решение

Цитата Сообщение от Darklight_sun Посмотреть сообщение
Это по сути, решение моей задачи?
Нет, но похоже.
Базовый абстрактный класс, интерфейс для всех фигур.
Далее 6 типов фигур наследуются от этого интерфейса.

Ваша задача настолько размыта что я немного в замешательстве.
Поэтому конкретизируйте каждый пункт.

Начните с клетки. Опишите ее, реализуйте, сделайте работоспособной и жизнеспособной.
Потом начинайте с базовой фигуры. С простой фигуры, например Офицер, Ладья.
Пешка, к примеру, ни разу не простая фигура

Цитата Сообщение от Darklight_sun Посмотреть сообщение
В тестовом примере создать объекты типа «Фигура» соответственно общим
требованиям и вывести информацию о них в полном и сокращенном виде.
В итоге создать несколько фигур, и просто взять из них данные, имя, цвет, позицию.
Полный вид, вольный, все данные.
Сокращенный, как при записи хода в шахматной партии. Например.

Цитата Сообщение от Darklight_sun Посмотреть сообщение
Это по сути, решение моей задачи?
Я так понял вы желаете : придти и взять готовенькое ? )) ню-ню.

Добавлено через 3 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
Сообщение от Darklight_sun
Это по сути, решение моей задачи?
Нет, но похоже.
Очень похоже. ДОбавтье туда свою шахматную клетку. И можете с умным видом сдавать.
И на все вопросы отвечать : живой я старался!
1
1 / 1 / 0
Регистрация: 24.11.2021
Сообщений: 104
08.07.2022, 01:00  [ТС]
Спасибо за объяснения. Ибо задачу мне дали слишком муторную. Как напишу скину сюда ответ. Может пригодится кому

Добавлено через 54 минуты
Проблема в Классе Queen

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
#include <iostream>
using namespace std;
enum coord1 { a, b, c, d, e, f, g, h };
enum  color { black, white };
class Figure
{
protected:
    coord1 letter;  //a..h
    int number; //1..8
    color colour;   //цвет
public:
    Figure(coord1 x, int y, color z)
    {
        letter = x;
        number = y;
        colour = z;
    }
 
    virtual int Turn(coord1 new_letter,int new_number) = 0;
};
 
class Castle : public virtual Figure {
public:
    int Turn(coord1 new_letter,int new_number) {
        if (((new_letter == letter) &&
            (new_number != number)) ||
            ((new_letter != letter) &&
                (new_number == number))) {
            letter = new_letter;
            number = new_number;
            return 1;
        }
        else return 0;
    }
};
 
class Bishop : public virtual Figure {
public:
    int Turn(coord1 new_letter,int new_number) {
        if ((abs((new_letter - letter) ==
            abs(new_number - number)) &&
            (new_letter != letter))) {
            letter = new_letter;
            number = new_number; return 1;
        }
        else return 0;
    }
};
class Queen : public Bishop, public Castle {
    int Queen::Turn(coord1 new_letter,
        int new_number) {
        if (Castle::Turn(coord1 new_letter, int new_number) != 0)
            return 1;
        else if (Bishop::Turn(coord1 new_letter, int new_number) != 0)
            return 1;
        else return 0;
    }
};
 
int main() {
    Queen q(e, 5, white);
    q.Turn(h, 8);
    system("pause");
    return 0;
}
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
08.07.2022, 02:06
Цитата Сообщение от Darklight_sun Посмотреть сообщение
Проблема в Классе Queen
Ромбовидное наследование.

Добавлено через 3 минуты
Darklight_sun,
раз
https://ru.wikipedia.org/wiki/... следование
два
Наследование в C++

Добавлено через 9 минут
Цитата Сообщение от SmallEvil Посмотреть сообщение
Ромбовидное наследование.
Там до него еще дожить нужно ...

Добавлено через 1 минуту
Виртуальное наследование, тут не уместно.
Ибо все фигуры, будут иметь одни и те же данные, расположение, цвет.
0
1 / 1 / 0
Регистрация: 24.11.2021
Сообщений: 104
12.07.2022, 01:36  [ТС]
  • Вывод этого кода

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
#include <iostream>
#include <iomanip>
#include <cmath>
 
enum class coord { a, b, c, d, e, f, g, h };
enum class color { black, white };
 
struct s_coord
{
    coord x_letter{};
    int y_number{}; //1..8
 
    friend bool operator==(const s_coord& l, const s_coord& r)
    {
        return l.x_letter == r.x_letter && l.y_number == r.y_number;
    }
 
    friend bool operator!=(const s_coord& l, const s_coord& r)
    {
        return !(l == r);
    }
 
    bool ifSomePartsAreEqual(const s_coord& r) const
    {
        return (x_letter == r.x_letter || y_number == r.y_number);
    }
 
    bool ifAbsDifferencesAreEqual(const s_coord& r) const
    {
        return std::abs(((int)x_letter) - ((int)r.x_letter)) == std::abs(y_number - r.y_number);
    }
};
 
class Figure
{
protected:
    s_coord m_coord;
    color m_color; //цвет
public:
    Figure(const s_coord m_coord, color z)
        :m_coord(m_coord)
        , m_color(m_color)
    {
    }
};
 
class Castle : public Figure
{
public:
    using Figure::Figure;
 
    bool Turn(const s_coord new_coord)
    {
        if (m_coord != new_coord)
        {
            if (m_coord.ifSomePartsAreEqual(new_coord))
            {
                m_coord = new_coord;
                return true;
            }
        }
 
        return false;
    }
};
 
class Bishop : public Figure
{
public:
    using Figure::Figure;
 
    bool Turn(const s_coord new_coord)
    {
        if (m_coord != new_coord)
        {
            if (m_coord.ifAbsDifferencesAreEqual(new_coord))
            {
                m_coord = new_coord;
                return true;
            }
        }
 
        return false;
    }
};
 
 
class Queen : public Figure
{
public:
    using Figure::Figure;
 
    bool Turn(const s_coord new_coord)
    {
        if (m_coord != new_coord)
        {
            if (m_coord.ifSomePartsAreEqual(new_coord))
            {
                m_coord = new_coord;
                return true;
            }
 
            if (m_coord.ifAbsDifferencesAreEqual(new_coord))
            {
                m_coord = new_coord;
                return true;
            }
        }
 
        return false;
    }
};
 
int main()
{
    Queen q({ coord::e, 5 }, color::white);
    q.Turn({ coord::h, 8 });
    return 0;
};
0
1 / 1 / 0
Регистрация: 24.11.2021
Сообщений: 104
12.07.2022, 02:26  [ТС]
SmallEvil, Подскажи как мне сделать вывод
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
#include <iostream>
#include <iomanip>
#include <cmath>
 
enum class coord { a, b, c, d, e, f, g, h };
enum class color { black, white };
 
struct s_coord
{
    coord x_letter{};
    int y_number{}; //1..8
 
    friend bool operator==(const s_coord& l, const s_coord& r)
    {
        return l.x_letter == r.x_letter && l.y_number == r.y_number;
    }
 
    friend bool operator!=(const s_coord& l, const s_coord& r)
    {
        return !(l == r);
    }
 
    bool ifSomePartsAreEqual(const s_coord& r) const
    {
        return (x_letter == r.x_letter || y_number == r.y_number);
    }
 
    bool ifAbsDifferencesAreEqual(const s_coord& r) const
    {
        return std::abs(((int)x_letter) - ((int)r.x_letter)) == std::abs(y_number - r.y_number);
    }
};
 
class Figure
{
protected:
    s_coord m_coord;
    color m_color; //цвет
public:
    Figure(const s_coord m_coord, color z)
        :m_coord(m_coord)
        , m_color(m_color)
    {
    }
};
 
class Castle : public Figure
{
public:
    using Figure::Figure;
 
    bool Turn(const s_coord new_coord)
    {
        if (m_coord != new_coord)
        {
            if (m_coord.ifSomePartsAreEqual(new_coord))
            {
                m_coord = new_coord;
                return true;
            }
        }
 
        return false;
    }
};
 
class Bishop : public Figure
{
public:
    using Figure::Figure;
 
    bool Turn(const s_coord new_coord)
    {
        if (m_coord != new_coord)
        {
            if (m_coord.ifAbsDifferencesAreEqual(new_coord))
            {
                m_coord = new_coord;
                return true;
            }
        }
 
        return false;
    }
};
 
 
class Queen : public Figure
{
public:
    using Figure::Figure;
 
    bool Turn(const s_coord new_coord)
    {
        if (m_coord != new_coord)
        {
            if (m_coord.ifSomePartsAreEqual(new_coord))
            {
                m_coord = new_coord;
                return true;
            }
 
            if (m_coord.ifAbsDifferencesAreEqual(new_coord))
            {
                m_coord = new_coord;
                return true;
            }
        }
 
        return false;
    }
};
 
int main()
{
    Queen q({ coord::e, 5 }, color::white);
    q.Turn({ coord::h, 8 });
    return 0;
};
0
Модератор
Эксперт С++
 Аватар для zss
13772 / 10965 / 6491
Регистрация: 18.12.2011
Сообщений: 29,242
12.07.2022, 09:10
Лучший ответ Сообщение было отмечено Darklight_sun как решение

Решение

Для вывода надо перегрузить operator<<.
Кроме этого, метод Turn явно должен быть виртуальным.
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
#include <iostream>
#include <iomanip>
#include <cmath>
 
enum coord { a, b, c, d, e, f, g, h };
enum color { black, white };
 
struct s_coord
{
    coord x_letter;
    int y_number; //1..8
    bool ifSomePartsAreEqual(const s_coord& r) const
    {
        return (x_letter == r.x_letter || y_number == r.y_number);
    }
 
    bool ifAbsDifferencesAreEqual(const s_coord& r) const
    {
        return std::abs(((int)x_letter) - ((int)r.x_letter)) == std::abs(y_number - r.y_number);
    }
    friend std::ostream& operator<<(std::ostream& os,const s_coord& f)
    {
        os<<f.x_letter<<":"<<f.y_number;
        return os;
    }
};
 
bool operator==(const s_coord& l, const s_coord& r)
{
    return l.x_letter == r.x_letter && l.y_number == r.y_number;
}
 
bool operator!=(const s_coord& l, const s_coord& r)
{
    return !(l == r);
}
 
 
class Figure
{
protected:
    s_coord m_coord;
    color m_color; //цвет
public:
    Figure(const s_coord m_coord, color z):m_coord(m_coord), m_color(z){}
    virtual bool Turn(const s_coord new_coord)=0;
    friend std::ostream& operator<<(std::ostream& os,const Figure& f)
    {
        os<<"coord: "<<f.m_coord<<",color: "<<f.m_color<<std::endl;
        return os;
    }
};
 
class Castle : public Figure
{
public:
    Castle(const s_coord m_coord, color z):Figure(m_coord,z){}
    bool Turn(const s_coord new_coord)
    {
        if (m_coord != new_coord)
        {
            if (m_coord.ifSomePartsAreEqual(new_coord))
            {
                m_coord = new_coord;
                return true;
            }
        }
 
        return false;
    }
};
 
class Bishop : public Figure
{
public:
    Bishop(const s_coord m_coord, color z):Figure(m_coord,z){}
    bool Turn(const s_coord new_coord)
    {
        if (m_coord != new_coord)
        {
            if (m_coord.ifAbsDifferencesAreEqual(new_coord))
            {
                m_coord = new_coord;
                return true;
            }
        }
 
        return false;
    }
};
 
 
class Queen : public Figure
{
public:
    using Figure::Figure;
    Queen(const s_coord m_coord, color z):Figure(m_coord,z){}
    bool Turn(const s_coord new_coord)
    {
        if (m_coord != new_coord)
        {
            if (m_coord.ifSomePartsAreEqual(new_coord))
            {
                m_coord = new_coord;
                return true;
            }
 
            if (m_coord.ifAbsDifferencesAreEqual(new_coord))
            {
                m_coord = new_coord;
                return true;
            }
        }
 
        return false;
    }
};
 
int main()
{
    Figure* pf;
    s_coord te={e,5};
    s_coord th={h,8};
 
    pf=new Queen(te, white);
    std::cout<<*pf;
    pf->Turn(th);
    std::cout<<*pf;
    delete pf;
    std::cout<<std::endl;
 
    pf=new Bishop(th, black);
    std::cout<<*pf;
    pf->Turn(te);
    std::cout<<*pf;
    delete pf;
    std::cout<<std::endl;
 
    pf=new Castle(te, black);
    std::cout<<*pf;
    pf->Turn(th);
    std::cout<<*pf;
    delete pf;
    std::cout<<std::endl;
    std::cin.get();
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.07.2022, 09:10
Помогаю со студенческими работами здесь

Определить класс «Шахматная фигура» и производные классы «Ферзь»
Дело в том, что начал изучать ООП не так давно и тут попалась задачка, которая заинтересовала. Условие таково: &quot;Определить класс...

Определить сможет ли шахматная фигура съесть пешку по ее координатам
Помогите пожалуйста. Задачу не принимает. Пишет, что неправильный ответ на каком-то тесте. Задача: Нужно найти сможет ли...

Определить, бьет ли одна шахматная фигура другую сейчас или на следующем ходу
Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит 8: первое – номер вертикали, второе – номер...

Определить класс «Шахматная фигура» и унаследовать от него классы, соответствующие шахматным фигурам
Здравствуйте. Помогите реализовать алгоритм решения задачи. Определить класс «Шахматная фигура» и унаследовать от него классы,...

Одиночное наследование, иерархия классов "Шахматная фигура"
Люди добрые помогите пожалуйста написать программу на с++. Создать иерархию классов шахматная фигура - абстрактный класс, содержащий...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru