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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
vortexx1
 Аватар для vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
01.01.2012, 19:22     Класс шахматной фигуры #1
Хочу написать решалку шахматных задач (перебор), и для начала решил написать класс каждой фигуры.
Оно того стоит, или я вообще не в ту степь пошел?

И если уж так, написал пока класс "Короля", взгляните, пожалуйста:
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++
C++ На шахматной доске 8х8 расположены три фигуры
C++ Определить бъют ли две фигуры на шахматной доске друг друга
C++ Используя стандартные правила шахматной игры, определить бьют фигуры друг друга или нет
Создайте класс TwoDShape, содержащий длину и высоту двумерной фигуры в двух закрытых переменных класса C++
C++ Описать структуру "Позиции шахматной фигуры"

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

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

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

Добавлено через 1 минуту
Хотя для начала ограничься, к примеру, тремя фигурами, реши хоть какую-то задачу и ты сразу же увидишь миллион проблем, которые теоретически можно рассказывать до бесконечности, а практически ты их поймёшь чуть ли не с ходу
Yandex
Объявления
02.01.2012, 13:07     Класс шахматной фигуры
Ответ Создать тему
Опции темы

Текущее время: 04:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru