Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Delphi: Общие вопросы > Шахматы


Автор: Слышь 09.01.18, 15:50
Всем привет.
Хочу шахматы, чтобы играть один на один по сети.
Как их написать?

Автор: Руслан 09.01.18, 16:02
Цитата Слышь @
Хочу шахматы, чтобы играть один на один по сети.

Чем готовые не устраивают? :-?

Цитата Слышь @
Как их написать?

Вот тем более играй в готовые! :yes:

Автор: Слышь 09.01.18, 16:20
Готовые не хочу, хочу сам написать

Автор: Руслан 09.01.18, 16:32
Цитата Слышь @
Готовые не хочу, хочу сам написать

Что же мешает? :-?
Каков прогресс? :huh:

Автор: Слышь 09.01.18, 16:45
Да прогресс пока нулевой, вот и хотел в этой теме выяснить стратегию написания. Для начала надо замутить доску, как и на чём её лучше нарисовать?

Автор: Руслан 09.01.18, 17:35
Цитата Слышь @
Для начала надо замутить доску, как и на чём её лучше нарисовать?

хз, я выводил на простой image1, когда делал свою настольную игруху, но было это очень давно. Наверняка есть варианты посовременней и попроще в реализации! :rolleyes:
Скрытый текст

что то типа такого:
PoleObject: array[1..43] of TImage; //невидимые кнопки...(верняк где то есть обьекты лучше для этих целей...)
PoleBitmap: array[1..43] of TBitmap; //Средство для отображения значений поля

Автор: Слышь 09.01.18, 18:06
Ну я щас посмотрел несколько исходников, да, в основном всё на TImage. В принципе, нормальный вариант картинки двигать по картинке, завтра набросаю доску. А как и где хранить местоположение фигур, в исходниках, там чот и массивы и двумерные массивы, чорт ногу сломит.

Автор: Руслан 09.01.18, 18:22
Цитата Слышь @
А как и где хранить местоположение фигур, в исходниках, там чот и массивы и двумерные массивы, чорт ногу сломит.

Нинаю кто как, я предпочитал хранить состояние в записях, т.к. их легко сохранять-читать. :)

Скрытый текст
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    TPoleMap = record
        OwnerNum: integer; //Владелец(игрок)
        UpgrideNum: integer; //Номер апгрэйда
        Cost: integer; //Базовая стоимость
        Crc: integer; //контрольная сумма... :-)
    .........
    .........
      end;
     
    ...
    ...
     
    PoleMap: array[1..43] of TPoleMap; //здесь хранится вся информация о поле. (42 ячейки вобще то...)
     
    ...
    ...
      //****************
     // Сохранить карту
    //******************
    function TForm1.SaveMap(MapName: String):Boolean;
    var fs: TFileStream;
        lti: integer;
    begin
      if FileExists(ProgPath+'maps\'+MapName+'.map') then
      begin
      end;
      fs:=TFileStream.Create(ProgPath+'maps\'+MapName+'.map', fmCreate or fmOpenWrite);
      try
        fs.Write(PoleMap, SizeOf(PoleMap));
      finally
        fs.Free;
      end;
      result:=True;
    end;



Автор: VisualProg 11.01.18, 13:48
Выкинуть картинки, только Canvas. Ну, и массив клеток. По массиву рисовать доску и содержимое. Собственно, по нему же, извлекать кликнутую фигуру (если она есть в клетке).

У вас слишком тривиальные вопросы. Не спрашивайте, просто делайте. Когда будет код, приходите и показывайте, вот тогда вам 100% помогут и подскажут как лучше. Сейчас же, всё это - пустая болтовня, я даже не верю что вы кого нибудь послушаете здесь :D

Автор: Mr.Delphist 12.01.18, 08:48
Цитата VisualProg @
Выкинуть картинки, только Canvas

Ну, с таким же успехом я могу порекомендовать "выкинуть Delphi, только WPF" (или AngularJS, Tcl/Tk, далее по вкусу).

Автор явно неискушённый ещё игродел, для него TImage, накиданные на форму матрицей 8*8, будет как раз. Сделает первую альфа-версию, поймёт что где поджимает или не хватает, далее уже будет более предметно выбирать. Было бы желание.

Автор: VisualProg 12.01.18, 10:18
Цитата Mr.Delphist @
Ну, с таким же успехом я могу порекомендовать "выкинуть Delphi, только WPF" (или AngularJS, Tcl/Tk, далее по вкусу).


Конечно нет. Сменить язык, не то же самое что сменить подход к решению задачи. Насколько я помню, Delphi умеет в ООП? ИМХО, постановка задачи в стиле "дана 8x8 матрица объектов ячеек, которые могут содержать объекты фигур" - позволит новичку решить целый ряд вопросов на вроде "как узнать кто куда может ходить?", "как узнать кто где расположен и как найти свободные клетки?", потому что сама задача буквально кричит что всё это в массиве)

Согласен, накидать TImage - простой путь для визуализации (хотя, не всё так однозначно), но, то что это усложнит остальную часть реализации вы умалчиваете)) Рано или поздно ТС придётся узнать что такое интерсекция, как выравнить фигуры при перемещении строго по квадратам, и прочие нюансы механики игры. А если он будет уверен в том что мир рисуется на канвасе им самим - осознание того что необходимо изучить - придёт сразу. Более того, оперировать вычислениями относительно компонентов на форме - разве это проще/понятнее/прозрачнее чем оперировать вычислениями относительно объекта фигуры/клетки? Вариант решения задачи картинками не просто избыточен, он принесёт автору кучу проблем, которые касаются конкретно этих компонентов, их свойств и особенностей WinAPI, которые вообще не имеют отношения к игре "шахматы".

Цитата Mr.Delphist @
Автор явно неискушённый ещё игродел, для него TImage, накиданные на форму матрицей 8*8, будет как раз.


Да, хотя, я бы начал с протокола. Но, меня не надо брать в расчёт.

Цитата Mr.Delphist @
Сделает первую альфа-версию, поймёт что где поджимает или не хватает, далее уже будет более предметно выбирать. Было бы желание.


Это ключевой момент. И с ним полностью согласен. Поэтому и говорю что сама по себе тема с просьбой подсказать - мне не понятна. Натыкать TImage - это первое что приходит большинству людей в голову, почему ТС не взялся за реализацию сразу, а начал задавать вопросы о популярных способах - мне так же не понятно. (замечу, мой ответ как раз из области популярных решений)


Вот и получается, что такое Delphi автор знает, при открытии IDE вываливается форма с кучей кнопочек и UI компонентов, осмелюсь предположить, что он уже потыкал в них, и знает что к чему (не буду задумываться, знает ли он что такое код), есть у него идея - шахматы, есть вопрос - как их сделать, но, нет никакого наброска:
Цитата Слышь @
Да прогресс пока нулевой


Так как идея с картинками кажется первой что приходит в голову, я и предлагаю вариант который "хотел" услышать автор (За время которое он потратил на создание вопроса и чтение ответов, он бы уже смог набросать шахматы и начать работу над логикой их движения). Но, мой ответ ничего не изменит (Такой подход интересен только тем кто знает что он делает, и да, такие люди, как правило, не задают вопросы без начального наброска).

Подведя итоги, могу смело заявить, что всё это - вопрос в пустоту, а ответ любого человека в этой теме никак не повлияет на мнение автора :thanks:

Автор: ter_nk_ 12.01.18, 11:47
Цитата Слышь @
Да прогресс пока нулевой, вот и хотел в этой теме выяснить стратегию написания. Для начала надо замутить доску, как и на чём её лучше нарисовать?


Чем более общей задачей ты задаешься, тем менее полезный ответ получаешь. Сложную задачу разбивают на разные подзадачи.

Ты берешься за простую: прорисовка доски, прорисовка фигур на фоне доски, перемещение фигур, обработка сообщений от мыши и т.д. Это некая адекватная нормальная задача.

Задача написания алгоритма - это уже непочатый край, это вперед в алгоритмы и заниматься, заниматься.

Автор: andrew.virus 13.01.18, 19:31
Цитата Слышь @
Готовые не хочу, хочу сам написать

для написания самостоятельно нужно как минимум следующее:
1. изучить существующие алгоритмы (например, http://www.resplendence.com/chessbrd)
2. разработать сетевой протокол работы программы

Автор: Слышь 08.02.18, 03:44
Нет пока времени заниматься логикой игры, но как появится, думаю, доделаю. Пока только доска)
____________________.jpg (, : 589)

Автор: Mr.Delphist 08.02.18, 20:48
Браво! :good:

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)