Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Как купить рекламу на форуме


Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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


Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2017, 23:49   #1
Аня20
Новичок
Джуниор
 
Регистрация: 30.05.2017
Сообщений: 1
По умолчанию [Delphi] Игра Пятнашки. Помогите пожалуйста добавить окно "Вы выиграли", когда комбинация будет собрана правильно, и добавить кнопку "Новая игра"

Помогите пожалуйста добавить окно "Вы выиграли", когда комбинация будет собрана правильно.
И добавить кнопку "Новая игра"


Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  Menus;

type

  { TForm1 }

  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem4: TMenuItem;
    MenuItem5: TMenuItem;
    Panel1: TPanel;
    Panel10: TPanel;
    Panel11: TPanel;
    Panel12: TPanel;
    Panel13: TPanel;
    Panel14: TPanel;
    Panel15: TPanel;
    Panel16: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Panel5: TPanel;
    Panel6: TPanel;
    Panel7: TPanel;
    Panel8: TPanel;
    Panel9: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure MenuItem3Click(Sender: TObject);
    procedure MenuItem4Click(Sender: TObject);
    procedure MenuItem5Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
    procedure MyPanelClick(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

procedure TForm1.FormCreate(Sender: TObject);
var
   i : Integer;
   Unused : set of byte;
   X : Byte;
begin
   Randomize;
   Unused := [1 .. 15];
   for i := 1 to 16 do
   begin
      with FindComponent(Format('Panel%d',[i])) as TPanel do
      begin
         Tag := i - 1;
         if Unused <> [] then
         begin
            repeat
               X := Random(15) + 1;
            until X in Unused;
            Exclude(Unused, X);
            Caption := IntToStr(X);
         end;
         OnClick := @MyPanelClick;
      end;
   end;
end;


procedure TForm1.MenuItem3Click(Sender: TObject);
begin
     close();
end;

procedure TForm1.MenuItem4Click(Sender: TObject);
begin
   ShowMessage('                 Правила игры:'+#13#10+
'1)Игра рассчитана на одного пользователя;'+#13#10+
'2)Пользователь видит на экране классическое игровое поле,'+#13#10+
' которое представляет собой матрицу 4 на 4. В 15 из них '+#13#10+
'расположены неповторяющиеся цифры в случайном порядке '+#13#10+
'от 1 до 15 . Последняя клетка поля пустая;'+#13#10+
'3)Пользователь должен перемещать по одной клетке с цифрой '+#13#10+
'на пустое место. Перемещение клеток производится мышью; '+#13#10+
'4)Так происходит до тех пор, пока пользователь не выстроит '+#13#10+
'последовательную комбинацию цифр и лишь после этого игрок '+#13#10+
'считается победителем. ');
end;

procedure TForm1.MenuItem5Click(Sender: TObject);
begin
   ShowMessage('Авторы работы:'+#13#10+ 'Петрова Анна'+#13#10+
  'Колобова Ксения'+#13#10+ '       2017');
end;


procedure TForm1.MyPanelClick(Sender: TObject);
var
   C, R : Integer;
   Panel : TPanel;

   function Find(C, R : Integer) : TPanel;
   begin
      Result := FindComponent(Format('Panel%d',[4 * R + C + 1])) as TPanel;
   end;

   function Is_Empty (C, R : Integer) : Boolean;
   begin
      Result := (Find(C, R).Caption = '');
   end;

  procedure Exch (C, R : Integer);
   begin
      Find(C, R).Caption := Panel.Caption;
      Panel.Caption := '';
   end;

begin
   Panel := Sender as TPanel;
   R := Panel.Tag div 4;
   C := Panel.Tag mod 4;
   if (C > 0) and Is_Empty(C - 1, R) then Exch(C - 1, R)
   else if (C < 3) and Is_Empty(C + 1, R) then Exch(C + 1, R)
   else if (R > 0) and Is_Empty(C, R - 1) then Exch(C, R - 1)
   else if (R < 3) and Is_Empty(C, R + 1) then Exch(C, R + 1)
   end;

end.

Последний раз редактировалось Вадим Мошев; 31.05.2017 в 05:32.
Аня20 вне форума Ответить с цитированием
Старый 02.06.2017, 08:12   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Для выигрыша:

Код:
MessageDlg('Вы выиграли!', mtWarning, [mbOk], 0);
или

Код:
if MessageDlg('Вы выиграли! Хотите начать новую игру?', mtConfirmation, [mbOk, mbCancel], 0) = mrOk then <Новая игра>
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме 20000 рублей в месяц

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Excel VBA/ Форма / Добавить кнопку свернуть окно sernik Microsoft Office Excel 0 21.08.2014 17:04
Игра на паскале,что можно добавить????? MaMBaPascal Помощь студентам 0 20.04.2013 09:33
игра Пятнашки Lapo4ka Помощь студентам 0 01.05.2011 22:14
Игра пятнашки... Мамука Общие вопросы .NET 0 03.11.2009 23:25
Delphi игра пятнашки rumf Помощь студентам 14 30.05.2008 23:56


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS