0 / 0 / 0
Регистрация: 23.04.2025
Сообщений: 2

Описать классы «Шахматная фигура», «Легкая фигура», «Тяжелая фигура», «Пешка», «Король», «Слон», «Ладья»

25.04.2025, 05:53. Показов 1384. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Описать классы «Шахматная фигура», «Легкая фигура», «Тяжелая фигура», «Пешка», «Король», «Слон», «Ладья». Выстроить правильную иерархию наследования этих классов, определить какие из классов должны быть абстрактными, какие
методы абстрактными или виртуальными. Описать конструкторы и деструкторы разработанных классов. Создать по одному объекту каждого класса, для которого это возможно, поместить их в один массив. Считать, что все элементы массива — это фигуры
на доске. Для объекта класса «Король» метод Сastling (возможность рокировки) и вывести на экран все свойства каждого из объектов.C#
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.04.2025, 05:53
Ответы с готовыми решениями:

Функции. Определить могут сделать ход шахматная фигуры ладья, слон и конь
Добрый вечер. Помогите пожалуйста написать функции (три разных функции), которые по информации о...

Разработать библиотеку классов для генерации дерева ходов шахматного этюда «белые король и слон против черного короля»
Здравствуйте! Нужно добавить необходимые классы и переделать операции Generate_Pos и...

Задача шахматная ладья
Шахматная ладья за один ход может переместиться с одного заданного поля на другое,если каждое поле...

3
 Аватар для andrey_f
884 / 537 / 228
Регистрация: 21.02.2011
Сообщений: 5,705
25.04.2025, 09:57
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
using System;
 
// Базовый класс "Шахматная фигура"
abstract class ChessPiece
{
    public string Color { get; protected set; }
    public string Position { get; protected set; }
 
    public ChessPiece(string color, string position)
    {
        Color = color;
        Position = position;
    }
 
    // Абстрактный метод для отображения информации о фигуре
    public abstract void DisplayInfo();
 
    // Виртуальный метод для перемещения фигуры
    public virtual void Move(string newPosition)
    {
        Position = newPosition;
        Console.WriteLine($"{GetType().Name} перемещена на {Position}");
    }
 
    // Виртуальный метод для вывода свойств
    public virtual void ShowProperties()
    {
        Console.WriteLine($"Тип: {GetType().Name}, Цвет: {Color}, Позиция: {Position}");
    }
 
    // Деструктор
    ~ChessPiece()
    {
        // Освобождение ресурсов, если необходимо
    }
}
 
// Легкая фигура (например, Пешка, Слон)
abstract class LightPiece : ChessPiece
{
    public LightPiece(string color, string position) : base(color, position) { }
 
    public override void DisplayInfo()
    {
        Console.WriteLine($"Легкая фигура: {GetType().Name}, Цвет: {Color}, Позиция: {Position}");
    }
}
 
// Тяжелая фигура (например, Ладья, Король)
abstract class HeavyPiece : ChessPiece
{
    public HeavyPiece(string color, string position) : base(color, position) { }
 
    public override void DisplayInfo()
    {
        Console.WriteLine($"Тяжелая фигура: {GetType().Name}, Цвет: {Color}, Позиция: {Position}");
    }
}
 
// Пешка
class Pawn : LightPiece
{
    public Pawn(string color, string position) : base(color, position) { }
 
    public override void DisplayInfo()
    {
        Console.WriteLine($"Пешка, Цвет: {Color}, Позиция: {Position}");
    }
}
 
// Король
class King : HeavyPiece
{
    public bool CanCastle { get; private set; }
 
    public King(string color, string position) : base(color, position)
    {
        CanCastle = true;
    }
 
    public override void DisplayInfo()
    {
        Console.WriteLine($"Король, Цвет: {Color}, Позиция: {Position}, Возможность рокировки: {CanCastle}");
    }
 
    // Метод рокировки
    public void Castling()
    {
        if (CanCastle)
        {
            Console.WriteLine("Выполняется рокировка...");
            // Пример логики рокировки (обновление позиции)
            Position = (Color == "White") ? "g1" : "g8"; // пример
            CanCastle = false;
        }
        else
        {
            Console.WriteLine("Рокировка невозможна");
        }
    }
 
    // Переопределение метода ShowProperties
    public override void ShowProperties()
    {
        base.ShowProperties();
        Console.WriteLine($"Возможность рокировки: {CanCastle}");
    }
}
 
// Слон
class Bishop : LightPiece
{
    public Bishop(string color, string position) : base(color, position) { }
 
    public override void DisplayInfo()
    {
        Console.WriteLine($"Слон, Цвет: {Color}, Позиция: {Position}");
    }
}
 
// Ладья
class Rook : HeavyPiece
{
    public Rook(string color, string position) : base(color, position) { }
 
    public override void DisplayInfo()
    {
        Console.WriteLine($"Ладья, Цвет: {Color}, Позиция: {Position}");
    }
}
 
// В основном методе создадим объекты и продемонстрируем работу
class Program
{
    static void Main()
    {
        // Создаем по одному объекту каждого класса
        ChessPiece[] pieces = new ChessPiece[]
        {
            new Pawn("White", "a2"),
            new King("Black", "e8"),
            new Bishop("White", "c1"),
            new Rook("Black", "a8")
        };
 
        // Вызов методов для каждого объекта
        foreach (var piece in pieces)
        {
            piece.DisplayInfo();
            piece.ShowProperties();
            Console.WriteLine();
 
            // Если это король, вызываем рокировку
            if (piece is King king)
            {
                king.Castling();
                Console.WriteLine("После рокировки:");
                king.ShowProperties();
            }
 
            // Демонстрация перемещения
            piece.Move("newPosition");
            Console.WriteLine();
        }
    }
}
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
27.04.2025, 17:07
andrey_f, не по коду, а по шахматной терминологии:
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
27.04.2025, 17:30
andrey_f, ещё мелки замечания:
Фигура не может менять цвет после создания.
Поэтому свойство цвета должно быть только для чтения:
C#
6
    public string Color { get; /* protected set; */ }
Конструктор в абстрактных классах не имеет смысла делать публичным:
C#
9
    /* public */ protected ChessPiece(string color, string position)
Цитата Сообщение от andrey_f Посмотреть сообщение
Абстрактный метод для отображения информации о фигуре
Такой метод должен возвращать string и обычно указываться в атрибуте. Пример из моего кода:
C#
1
2
3
4
    [DebuggerDisplay($"{{{nameof(GetDisplay)}(),nq}}")]
    public class Card
    {
        public string GetDisplay() => $"{nameof(Rank)}: {Rank}; {nameof(Suit)}: {Suit}";
Фигура - это бизнес-логика.
А вывод на устройство - это представление.
Это два разных уровня архитектуры и совмещать их в одном типе "не есть хорошо".
А вот вернуть строку для упрощения понимания значения экземпляра - это совсем другое.
Как эта строка дальше будет использована (для показа в редакторе Студии или вывода на Консоль) для бизнес-логики фигуры уже не важно.

Это касается и других методов где есть вывод на консоль.
Как минимум нужно их заменить на вывод в Дебагер (Окно Вывода в Студии):
C#
22
        Debugger.WriteLine($"{GetType().Name} перемещена на {Position}");
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.04.2025, 17:30
Помогаю со студенческими работами здесь

Выяснить можно ли составить такие пары чисел, чтобы они обозначали поля шахматной доски, по которым может ходить ладья
Нет времени сильно углубляться. Буду премного благодарен,если поясните с примерами и с подробным...

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

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

Находится ли пешка под боем коня?
Задание по ООП C# windows forms .net Белая лошадь расположена на поле (x,n).Черная пешка...


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

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

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru