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

Как узнать, является ли заданная шахматная фигура Королем?

15.04.2014, 01:34. Показов 1258. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть класс Chessman (шахматная фигура). От нее наследуются классы фигур Pawn, King, Queen и тд. Есть доска - двумерный массив из Chessman-ов.
Вопрос: Как узнать, является ли данная фигура допустим Королем?
Пусть:
Brd - доска
Brd[x,y] - Нужный мне Chessman
kng - переменная типа King

Надо определить является ли фигура с координатами x,y королем.

Спасибо за внимание.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.04.2014, 01:34
Ответы с готовыми решениями:

Проверить, является ли заданная фигура прямоугольником
У меня есть подобная задача но только для прямоугольника...Помогите написать программу именно для ЧЕТЫРЕХУГОЛЬНИКА, заранее спасибо) ...

Выяснить, является ли заданная тремя точками фигура треугольником
вот еня заинтересовала така вот задачка, помогите ее решитть пользователь должен ввести координаты 3-х точек(в прямоугольной ДСК) ...

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

10
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
15.04.2014, 01:48
лучше сделать перечисление с именами фигур . и каждому классу призначить свое перечисление. или дополнительное поле имени фигуры. ( с перечислениями просто удобнее)
а так чтобы узнать какой тип объекта юзаем - GetType()

Добавлено через 1 минуту
Цитата Сообщение от fenix117 Посмотреть сообщение
Надо определить является ли фигура с координатами x,y королем.
и кстати зачем ? у объекта только нужно поле которое задает внешнйи вид фигуре (ссылка на картинку например ) а все остальное разруливается с полиморфизмом
1
162 / 154 / 73
Регистрация: 03.03.2014
Сообщений: 368
15.04.2014, 03:40
fenix117, Я бы сделал так:
Классы Фигуры, Короля, Пешки и тд.
Кликните здесь для просмотра всего текста
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
public enum Color
    {
        White, Black
    }
 
    public abstract class ChessFigure
    {
        public Color Color { get; set; }
        public bool isDead { get; set; }
        private int x;
        private int y;
        public int PositionX 
        { 
            get { return x; }
            set { if (value > 0 && value <= 8) x = value; }
        }
        public int PositionY 
        {
            get { return y; }
            set { if (value > 0 && value <= 8) y = value; }
        }
 
        protected ChessFigure(int x, int y, Color c)
        {
            PositionX = x;
            PositionY = y;
            isDead = false;
        }
 
    }
 
    public class Pawn:ChessFigure
    {
        public Pawn(int x, int y, Color c) : base(x,y,c){}
    }
 
    public class King:ChessFigure
    {
        public King(int x, int y, Color c) : base(x,y,c){}
    }
 
    public class Queen : ChessFigure
    {
        public Queen(int x, int y, Color c) : base(x,y,c){}
    }
 
    public class Bishop : ChessFigure
    {
        public Bishop(int x, int y, Color c) : base(x,y,c){}
    }
 
    public class Knight : ChessFigure
    {
        public Knight(int x, int y, Color c) : base(x, y, c){} 
    }
 
    public class Rook : ChessFigure
    {
        public Rook(int x, int y, Color c) : base(x,y,c){}
    }

Класс шахматной доски с требуемым методом
Кликните здесь для просмотра всего текста
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
public class ChessBoard
    {
        public List<ChessFigure> Bundle { get; set; }
 
        public ChessBoard()
        {
            Bundle = new List<ChessFigure>();
 
            for (int i = 1; i < 9; i++)
            {
                Bundle.Add(new Pawn(i, 2, Color.White));
                Bundle.Add(new Pawn(i, 7, Color.Black));
            }
            
            Bundle.Add(new Rook(1, 1, Color.White));
            Bundle.Add(new Rook(8, 1, Color.White));
            Bundle.Add(new Rook(1, 8, Color.Black));
            Bundle.Add(new Rook(8, 8, Color.Black));
 
            Bundle.Add(new Knight(2, 1, Color.White));
            Bundle.Add(new Knight(7, 1, Color.White));
            Bundle.Add(new Knight(2, 8, Color.Black));
            Bundle.Add(new Knight(7, 8, Color.Black));
 
            Bundle.Add(new Bishop(3, 1, Color.White));
            Bundle.Add(new Bishop(6, 1, Color.White));
            Bundle.Add(new Bishop(3, 8, Color.Black));
            Bundle.Add(new Bishop(6, 8, Color.Black));
 
            Bundle.Add(new Queen(4, 1, Color.White));
            Bundle.Add(new Queen(4, 8, Color.Black));
 
            Bundle.Add(new King(5, 1, Color.White));
            Bundle.Add(new King(5, 8, Color.Black));
        }
 
        public bool isKing(int x, int y)
        {
            ChessFigure fig = (this.Bundle.Where(f => f.PositionX == x && f.PositionY == y)).FirstOrDefault();
            if (fig == null) return false;
            if (fig is King) return true;
            return false;
        }
 
    }

Проверка
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    class Program
    {
        static void Main(string[] args)
        {
            ChessBoard myBrd = new ChessBoard();
            
            Console.WriteLine(myBrd.isKing(4,5));
            Console.WriteLine(myBrd.isKing(1,1));
            Console.WriteLine(myBrd.isKing(5,1));
            Console.ReadLine();
 
        }
    }


Если лень разбираться в моем г-коде
C#
1
2
3
4
5
6
7
        public bool isKing(int x, int y)
        {
            ChessFigure fig = (this.Bundle.Where(f => f.PositionX == x && f.PositionY == y)).FirstOrDefault();
            if (fig == null) return false;
            if (fig is King) return true;
            return false;
        }
2
8 / 8 / 2
Регистрация: 16.03.2011
Сообщений: 257
15.04.2014, 14:38  [ТС]
Цитата Сообщение от Metall_Version Посмотреть сообщение
а так чтобы узнать какой тип объекта юзаем - GetType()
С GetType у меня так ничего не получилось. Пытался делать так :
C#
1
Brd.GetChessman(XPos + 1, YPos - 1).GetType().Equals(new King(false))
Но он сравнивает базовый класс, то есть возвращает истину какая бы фигура не стояла на данном поле.
Думал что решил проблему сравнением картинки фигуры:
C#
1
Brd.GetChessman(XPos - 1, YPos - 1).GetImage() != Properties.Resources.King_B
Тоже не вышло
Сделал так:
В базовый класс фигуры добавил:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string Name;
 
        public Chessman(bool whcol)
        {
            WhiteColor = whcol;
        }
 
        public void SetName(string nm)
        {
            Name = nm;
        }
 
        public string GetName()
        {
            return Name;
        }
А в классы фигур в конструкторах определял Name:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public King(bool whcol)
            : base(whcol)
        {
            SetName("Король");
            if (whcol)
            {
                SetImage(Chess.Properties.Resources.King_W);
            }
            else
            {
                SetImage(Chess.Properties.Resources.King_B);
            }
        }
Добавлено через 5 минут
Цитата Сообщение от Not_Jon_Skeet Посмотреть сообщение
Если лень разбираться в моем г-коде
Это у меня г-код))
Эх, Мне бы почитать пару книг по ООП и шарпу, и я бы не создавал подобных тем...Какой же я ленивый
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
15.04.2014, 14:48
fenix117, сделайте дружественное имя ( в каждом классе ) файла который отвечает за отображение фигуры(имя картинки) .

это ж вы раньше тему создавали . я писал как лучше по оопешному сделать
1
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
15.04.2014, 14:58
применительно к 1 сообщению... я может чего то путаю, но нельзя было разве сделать как-то так?
C#
1
if (item is King)
?
1
8 / 8 / 2
Регистрация: 16.03.2011
Сообщений: 257
15.04.2014, 15:11  [ТС]
Цитата Сообщение от valera_21 Посмотреть сообщение
применительно к 1 сообщению... я может чего то путаю, но нельзя было разве сделать как-то так?
Блин, вот как то так я и хотел с самого начала написать, но я оставлю так как сделал
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
15.04.2014, 15:16
fenix117, а зачем нам узнавать тип фигуры. у Chessman делаем виртуальные(абстрактные) методы, реальные фигуры загоняем в список(массив) Chessman и радуемся плюшкам ООП в виде полиморфизма(вызываем виртуальный(абстрактный) метод базового класса, а вместо него вызывается определенный перегруженный метод класса-наследника)
1
8 / 8 / 2
Регистрация: 16.03.2011
Сообщений: 257
15.04.2014, 16:21  [ТС]
Цитата Сообщение от Learx Посмотреть сообщение
fenix117, а зачем нам узнавать тип фигуры. у Chessman делаем виртуальные(абстрактные) методы, реальные фигуры загоняем в список(массив) Chessman и радуемся плюшкам ООП в виде полиморфизма(вызываем виртуальный(абстрактный) метод базового класса, а вместо него вызывается определенный перегруженный метод класса-наследника)
По сути я так и делаю, просто для большинства фигур мне надо знать, можно ее бить или нельзя (а нельзя бить только короля).
0
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
15.04.2014, 17:04
а вообще, что вы хотите сделать?
0
8 / 8 / 2
Регистрация: 16.03.2011
Сообщений: 257
15.04.2014, 17:12  [ТС]
Цитата Сообщение от valera_21 Посмотреть сообщение
а вообще, что вы хотите сделать?
...шахматы)
если серьезно, не понял вопроса, проблему, описанную выше уже решил, всем огромное спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.04.2014, 17:12
Помогаю со студенческими работами здесь

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

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

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

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

Программа для нахождения количества шагов которых может сделать шахматная фигура конь
Задание: Разработать программу для нахождения количества шагов которых может сделать шахматная фигура конь с определённой позиции, для...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru