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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
#1

Класс шахматной фигуры - C++

01.01.2012, 19:22. Просмотров 2030. Ответов 2
Метки нет (Все метки)

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

И если уж так, написал пока класс "Короля", взгляните, пожалуйста:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class King
{
public:
    King( int = 1, int = 1 );               // конструктор по умолчанию
    
    void setCoordinates( int, int );        // установка координат
    int getX();                             // получение значения Х
    int getY();                             // получения значения Y
    
    short move( int, int );                 // ход короля. возврашает 0 если все хорошо
                                            //                        1 если сильно большой ход
                                            //                        2 если ход за границы поля
private:
    int x, y;                               // координаты фигуры
};
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
#include <cmath>
#include "King.h"
 
#define OUT_OF_MOVE  1
#define OUT_OF_FIELD 2
 
// конструктор по умолчанию
King::King( int X, int Y ) : x( X ), y( Y )
{
            
}
 
// установка координат
void King::setCoordinates( int X, int Y )
{
    x = X;
    y = Y;
}
 
// получение Х
int King::getX()
{
    return x;
}
 
// получение Y
int King::getY()
{
    return y;
}
 
// ход короля
short King::move( int X, int Y )
{
    if( ( X <= 0 || X > 8 ) || ( Y <= 0 || Y > 8 ) )        // если ход за пределы доски
        return OUT_OF_FIELD;                                // выдать ошибку
    else if( abs( X - x ) != 1 || abs( Y - y ) != 1 )       // если ход вне шага короля
        return OUT_OF_MOVE;                                 // выдать ошибку
    else {                                                  // иначе
        x = X;                                              // сделать ход королем
        y = Y;
        
        return 0;                                           // вернуть 0
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.01.2012, 19:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс шахматной фигуры (C++):

Класс для моделирования шахматной фигуры - C++
Разработайте класс для моделирования шахматной фигуры, позволяющий хранить вместе с экземпляром объекта его координаты на доске, цвет...

Вывод шахматной фигуры в консоль - C++
Уважаемые форумчане, подскажите пожалуйста как вывести шахматную фигуру на экран знаю HEX. Когда я пишу: ... char t = '\x2659'; ...

На шахматной доске 8х8 расположены три фигуры - C++
Задача: //На шахматной доске 8х8 расположены три фигуры: ферзь, ладья и конь. //Требуется определить количество пустых полей...

Определить бъют ли две фигуры на шахматной доске друг друга - C++
Привет. Помогите пожалуйста. Даны координаты двух фигур на шахматной доске. Определить бьют ли они друг друга. Фигуры могут быть или двое...

Найти возможные пути для шахматной фигуры «слон» от одной клетки до другой - C++
Найти возможные пути для шахматной фигуры «слон» от одной клетки до другой в пределах шахматной доски. Определить кратчайшие.

Используя стандартные правила шахматной игры, определить бьют фигуры друг друга или нет - C++
На шахматной доске расставлены три фигуры. Используя стандартные правила шахматной игры, определить бьют они друг друга или нет....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
FtarG
128 / 128 / 6
Регистрация: 02.11.2010
Сообщений: 316
01.01.2012, 19:37 #2
Не лучше ли создать один абстрактный базовый класс (Figure, например), где собрать общие для всех фигур параметры и методы, и от него наследовать все остальные переопределяя необходимые методы и добавляя необходимые параметры?
К примеру в базовом классе определить общие параметры, которыми обладают все фигуры: цвет, координаты положения на поле и т.д. и создать абстрактный метод Move переопределяемый для каждой фигуры.
Здесь конечно кому как удобнее, но ООП позволяет в таких случаях сократить код и упростить его изменение, если возникнет таковая необходимость.
При этом удобнее будет хранить все фигуры или фигуры одного цвета в одной структуре (например списке - List<Figure>).
Evg
Эксперт CАвтор FAQ
17624 / 5848 / 375
Регистрация: 30.03.2009
Сообщений: 16,124
Записей в блоге: 26
02.01.2012, 13:07 #3
Если что-то собираешься решить перебором, то у каждой фигуры должна быть возможность получить все возможные ходы на текущий момент. Список это будет, итератор или что-то ещё - не важно. Без этого сам смысл класса теряется, если ты ходы перебирать будешь вне класса.

Ну и, разумеется, в обязательном порядке работать через базовый класс и виртуальные методы (о чём писал предыдущий оратор)

Добавлено через 1 минуту
Хотя для начала ограничься, к примеру, тремя фигурами, реши хоть какую-то задачу и ты сразу же увидишь миллион проблем, которые теоретически можно рассказывать до бесконечности, а практически ты их поймёшь чуть ли не с ходу
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2012, 13:07
Привет! Вот еще темы с ответами:

На шахматной доске расставлены три фигуры. Определить бьют они друг друга или нет - C++
На шахматной доске расставлены три фигуры. Используя стандартные правила игры узнать бьют они друг друга или нет. Расположение фигур...

Описать структуру "Позиции шахматной фигуры" - C++
Необходимо задать описание структуры FigurePosition – позиции шахматной фигуры. Вопрос, казалось бы, элементарный,но дойти до истины не...

Построить класс для описания плоской геометрической фигуры квадрат - C++
Помогите написать программу в Борланд С++, вот условие: 1.Сложить целые и нецелые части двох действительных чисел. например: 1,8 и 5,3. ...

Построить класс для описания плоской геометрической фигуры прямоугольник - C++
Построить класс для описания плоской геометрической фигуры прямоугольник. Предусмотреть методы для создания объектов и изменения.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru