Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 23.04.2025
Сообщений: 2

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

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

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

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

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

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

3
 Аватар для andrey_f
882 / 535 / 228
Регистрация: 21.02.2011
Сообщений: 5,706
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
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,037
Записей в блоге: 2
27.04.2025, 17:07
andrey_f, не по коду, а по шахматной терминологии:
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,037
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru