Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2016, 21:44   #1
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию Создание шахмат на ООП

Всем доброго времени суток, уважаемые эксперты. Делаю шахматы на опп суто по книге, но на канвасе. Переписал весь код с книги, но там есть недосказанности, поэтому код у меня не работает. Частично я сумел исправить ошибки и дописать недосказанности, но нехватка опыта работы с опп дала о себе знать. Прошу помощи в исправлении ошибок, проект и котрывок книги прилагаю, которая дана по заданию. Заранее спасибо всем откливнушимся.

И Выложу часть кода. Это объявление классов:
Код:
type
TMesto=TPoint;
  Color=Boolean;
  
  TFigure=class(TForm1)
    private
    FColorFigure:TColor; //tsvet figuri
    FMesto:TMesto; //pole s mestom figuri
    procedure MoveFig(const Value:TMesto); //dvizhenie
    property ColorFigure:TColor read FColorFigure;
    //property Mesto:TMesto read FMesto write MovFig; //mesto na doske
    function PravHod(NovMest:TMesto):Boolean; virtual; abstract; //zapreshaem abstraktnie metodi, tak kak u kazhdoy figuri realizuem po svoemu
    function Jump(NovMest:TMesto):Boolean;
    constructor CreateChess(Mest:TMesto);
  end;

  TPeshka=class(TFigure)
  private
    function PravHod(NovMest:Tmesto):Boolean; override;
  end;

  TSlon=class(TFigure)
  private
    function PravHod(NovMest:Tmesto):Boolean; override;
  end;

  TFerz=class(TFigure)
  private
    function PravHod(NovMest:Tmesto):Boolean; override;
  end;

  TKon=class(TFigure)
  private
    function PravHod(NovMest:Tmesto):Boolean; override;
  end;

  TLadya=class(TFigure)
  private
    function PravHod(NovMest:Tmesto):Boolean; override;
  end;

  TKorol=class(TFigure)
  private
    function PravHod(NovMest:Tmesto):Boolean; override;
  end;
Проект+Книга
Armageddets вне форума Ответить с цитированием
Старый 15.01.2016, 08:10   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

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

Код не компилируется - куча ошибок, твоих ошибок. Чего их исправлять, если там лишь часть того, что описано в пособии и то не доделано. И дело не в недосказанности, которая лишь в том, что нет полных реализаций именно логики шахматной игры, а вся подготовительная описана, например:
Цитата:
Для начала следует внести пару изменений в уже существующий код:
1) Дополняем класс формы следующими методами:
procedure ToDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure ToDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
Сделаем «заглушки» к процедурам нажатием клавиш ctrl+shift+c, между появившимися ‘begin’-ами и ‘end’-ами пока оставим пустые комментарии.
Этого не сделано, т.к. процедуры в коде не относятся к форме (как должно было получиться после выполнения инструкции), видимо просто были скопированы , хотя даже ниже по тексту идёт
Цитата:
procedure TИмяФормы.ToDragOver(Sender,Source:TObject; x,y:integer; State:TDragState; var Accept:Boolean);
begin
Accept:=True; //razreshaem brosat figuru
end;
Также не сделаны заглушки для PravHod тем же методом. Хотя там ниже по тексту в них надо вписывать код, который описывается несколькими принципами (алгоритмами), как это может быть связано с утверждением
Цитата:
Сообщение от Armageddets Посмотреть сообщение
Переписал весь код с книги
? хотя бы куски кода для пешки и короля можно надёргать и т.п.

А наследование фигуры от формы - какая светлая голова привнесла эту светлую мысль в сознание ? Русским же по белому написано - от имеджа или лабели, некий компонент (формы конечно наседуются от ткомпонент, но имелся в виду некий известный из стандартных компонентов, бросаемых на форму).
А кто надоумил присвоение ондрагдроп и ондраговер для клеток сувать в цикл внутри онпейнта ?

Эти и прочие мелочи говорят о неверном исполнении инструкций, а не об умысле автора пособия.

Вобщем, сперва надо выжать из книги максимум, т.к. пока что не сделано ничего, скопировать несколько кусков из книги это ничего, накосячить в простейших расписанных вещах опять же, непонимание простых принципов и как следствие невозможность исправить ошибки типа "incompatible types" или "method declaration differs", говорит о плохой базе подготовки, стоит освежить простейшие знания, потом переходить к ооп (не опп ), освоить базовые best practices (например, уйти от глобальных переменных насколько возможно, прислушаться к ворнингам компиля, убирать обращение к Form1 внутри методов TForm1, и константы, Карл!), и тогда уже можно приниматься за работу, причём желательно не копируя, а прочитав и поняв, реализовывать с нуля самому по изложенным принципам, а не слепо тыкаясь в каше из кода.

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

Самые очевидные вещи поправил:
Вложения
Тип файла: zip Unit1.zip (1.9 Кб, 13 просмотров)

Последний раз редактировалось phomm; 15.01.2016 в 08:12.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бот для Шахмат Vedrus Фриланс 18 05.06.2015 17:27
Символы шахмат alekopoko Общие вопросы C/C++ 3 08.08.2014 21:03
Программирование шахмат Andeo Общие вопросы Delphi 5 27.02.2012 09:54
ООП. Создание объекта Lisёноk Помощь студентам 2 23.09.2010 00:29
Паскаль ООП. Примеры программ с использованием ООП SeЯgey Помощь студентам 5 13.05.2009 21:55