Страница 1 из 50

Мое творчество. Игра Шахматный сапёр

Добавлено: 30 дек 2017, 11:29
Михаил Киселев
Создал свою компьютерную игру, она похожа на Морской бой и Сапёр, но чтобы насладиться победой, здесь надо немного подумать. Вместо кораблей на поле расставляются шахматные фигуры.

Шахматный бой отлично развивает навык видения свободных и битых полей, что очень пригодится и при игре в Шахматы.

Чтобы играть и выигрывать в Шахматный бой, уметь играть в Шахматы не обязательно, но моя игра - это и первый шаг к Шахматам.

Посмотреть и скачать игру можно здесь: https://yadi.sk/d/8F6d9mD_3A954s

Изображение

Если кому удалось выиграть у компа - пишите и шлите скриншоты :)

Re: Мое творчество. Игра Шахматный бой

Добавлено: 30 дек 2017, 11:42
Андрей
Помню-помню, :)
помогал писать немного ваш покорный слуга )

Re: Мое творчество. Игра Шахматный бой

Добавлено: 30 дек 2017, 11:51
Михаил Киселев
Андрей писал(а): Помню-помню,
помогал писать немного ваш покорный слуга )
Это точно. Но Шахматный бой с тех пор значительно изменился, сейчас с пятью фигурами у компа попробуй выиграть, впрочем, думаю, тебе это конечно удастся :)

Re: Мое творчество. Игра Шахматный бой

Добавлено: 30 дек 2017, 12:09
Андрей
С первого раза выиграл:
mihhim.png
Дело в том, что у меня сейчас хорошо работает интеллект (ясная голова) + я понял некоторую закономерность - связь с моей дипломной работой по языку Паскаль - игрой Морской Бой, я там делал 2 уровня сложности, на уровне Хард компьютер не целился в небитые поля. Поэтому я применил похожую на анти-Хард расстановку.

Re: Мое творчество. Игра Шахматный бой

Добавлено: 30 дек 2017, 12:11
Андрей
Михаил, есть огромное желание, чтобы ты чуть улучшил проект.

Ты можешь выделять-подсвечивать светло-красным цветом те клетки, в которые уже пробили? Хочется более наглядного отображения динамики игры (в этом весь азарт!), на крестиках теряется глаз, замыливается.

Т.е. я предлагаю подключить 1 (может и 2 - если понадобится) цвЕта для клеток.

Re: Мое творчество. Игра Шахматный бой

Добавлено: 30 дек 2017, 12:20
Михаил Киселев
Андрей писал(а): С первого раза выиграл:
Андрей писал(а): Ты можешь выделять светло-красным цветом те клетки, в которые уже пробили? Хочется более наглядного отображения динамики игры (в этом весь азарт!), на крестиках теряется глаз, замыливается.

Т.е. я предлагаю подключить 1 (может и 2 - если понадобится) цвЕта для клеток.
Спасибо за совет! Попробую применить его на практике.

Re: Мое творчество. Игра Шахматный бой

Добавлено: 12 янв 2018, 22:32
Андрей
Ответ на вопрос: почему нельзя поменять цвет кнопки (TButton) в Lazarus.
http://forum.lazarus.freepascal.org/ind ... ic=12706.0
Windows native button does not allow this.
It's documented in Wiki under "Things that will never be fixed":
http://wiki.lazarus.freepascal.org/Laza ... be_changed
Перевожу:
Родные кнопки Windows не позволяют это делать.
Это задокументировано в Wiki в разделе "Вещи, которые никогда не будут исправлены".

Re: Мое творчество. Игра Шахматный бой

Добавлено: 12 янв 2018, 23:34
Андрей
В общем, я поизучал ресурс CyberForum и нашёл всего пару толковых рекомендаций на этот счёт.

1. Использовать вместо кнопки TPanel.
2. Использовать не TButton, а TBitBtn и прописывать ей свойство Glyph.

Так как у тебя игровые ячейки всё же щёлкаются мышью, а компонент TPanel статичен при нажатии мышью, остаётся 2-й вариант.

Вот нужный код:

Код: Выделить всё

procedure SetButtonColor(ABitBtn: TBitBtn; AColor: TColor; Caption :string);
var
   Bmp: Graphics.TBitmap;
begin
   Bmp:=TBitmap.Create;
   try
      Bmp.Width:=ABitBtn.Width-4;
      Bmp.Height:=ABitBtn.Height-4;
      Bmp.Canvas.Font.Assign(ABitBtn.Font);

      // Fill TBitmap by color
      Bmp.Canvas.Brush.Color:=AColor;
      Bmp.Canvas.Brush.Style:=bsSolid;
      Bmp.Canvas.FillRect(Rect(2,2,Bmp.Width-2,Bmp.Height-2));
      ABitBtn.Caption:=Caption;

      // Show color in the middle
      Bmp.Canvas.Pen.Color:=ABitBtn.Font.Color;
      Bmp.Canvas.TextOut((Bmp.Width-Bmp.Canvas.TextWidth(ABitBtn.Caption)) div 2,
                         (Bmp.Height-Bmp.Canvas.TextHeight(ABitBtn.Caption)) div 2,
                          Caption);
      ABitBtn.Caption:='';
      ABitBtn.Glyph.Assign(Bmp);
   finally
      Bmp.Free;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if Panel1.Color = clBtnFace then
  begin
  Panel1.Color:=TColor($7070FF);
  SetButtonColor (BitBtn1, TColor($7070FF), 'XXX');
  end
                            else
  begin
  Panel1.Color:=clBtnFace;
  BitBtn1.Glyph.Assign (nil);
  BitBtn1.Caption:='XXX';
  end;
end;

Re: Мое творчество. Игра Шахматный бой

Добавлено: 12 янв 2018, 23:42
Андрей
Это я делал на Дельфи, но я думаю, на Лазарус ты перенесёшь. Во вложении архив с этой прогой, можешь глянуть, как выглядит.

Re: Мое творчество. Игра Шахматный бой

Добавлено: 13 янв 2018, 08:21
Михаил Киселев
Спасибо. То, что компонент button цвет не поддерживает я уже успел до Рождества выяснить и думал, что ничего из затеи с расцвечиванием кнопок не выйдет, а тут такое перспективное решение :-)
Если возникнут по ходу реализации вопросы здесь в личку или в VK лучше спрашивать?