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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2015, 18:05   #1
timsso
Новичок
Джуниор
 
Регистрация: 20.04.2015
Сообщений: 1
По умолчанию "Ханойские башни", не разрешать класть большой диск на маленький - Delphi

помогите дописать код, необходимо сделать ошибку которая не позволит класть большого диска на маленький

Код:
const
  n = 6;
 
type
  TM = record
    ns,ne: integer;
  end;
 
var
  M: array of TM;
  M_ABC: array[1..3] of integer;
  Str: TStringList;
  k,xA,xB,xC: integer;
 
 
 
procedure TForm1.PanelMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
const
  d = 50;
var
  i,k: integer;
begin
  for i:=1 to n do
    if (Sender as TPanel) = P[i] then k:=i;
  ReleaseCapture;
  if M[k].ne = 1 then (Sender as TPanel).perform(WM_SysCommand,$F012,0)
  else exit;
  with (Sender as TPanel) do
    begin
      if abs(Left+round(Width/2)-xA) <= d then
        begin
          M_ABC[1]:=M_ABC[1]+1; M_ABC[M[k].ns]:=M_ABC[M[k].ns]-1;
          for i:=1 to n do
            begin
              if M[i].ns = 1 then M[i].ne:=M[i].ne+1;
              if M[i].ns = M[k].ns then M[i].ne:=M[i].ne-1;
            end;
          M[k].ns:=1;  M[k].ne:=1;
          Left:=xA-round(Width/2);
          Top:=Panel4.Top-M_ABC[1]*16;
        end;
 
      if abs(Left+round(Width/2)-xB) <= d then
        begin
          M_ABC[2]:=M_ABC[2]+1; M_ABC[M[k].ns]:=M_ABC[M[k].ns]-1;
          for i:=1 to n do
            begin
              if M[i].ns = 2 then M[i].ne:=M[i].ne+1;
              if M[i].ns = M[k].ns then M[i].ne:=M[i].ne-1;
            end;
          M[k].ns:=2; M[k].ne:=1;
          Left:=xB-round(Width/2);
          Top:=Panel5.Top-M_ABC[2]*16;
        end;
      if abs(Left+round(Width/2)-xC) <= d then
        begin
          M_ABC[3]:=M_ABC[3]+1; M_ABC[M[k].ns]:=M_ABC[M[k].ns]-1;
          for i:=1 to n do
            begin
              if M[i].ns = 3 then M[i].ne:=M[i].ne+1;
              if M[i].ns = M[k].ns then M[i].ne:=M[i].ne-1;
            end;
          M[k].ns:=3;  M[k].ne:=1;
          Left:=xC-round(Width/2);
          Top:=Panel4.Top-M_ABC[3]*16;
        end;
    end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
begin
  xA:=Panel1.Left+round(Panel1.Width/2);
  xB:=Panel2.Left+round(Panel2.Width/2);
  xC:=Panel3.Left+round(Panel3.Width/2);
  SetLength(P,n+1);
  SetLength(M,n+1);
  for i:=1 to n do
    begin
      M[i].ns:=1; M[i].ne:=i;
      P[i]:=TPanel.Create(Self);
      P[i].Height:=16;
      P[i].Width:=Panel4.Width-28*(n-i+1);
      P[i].Left:=xA-round(P[i].Width/2);
      P[i].Top:=Panel4.Top-P[i].Height*(n-i+1);
      P[i].Color:=clred;
      P[i].Anchors:=[akLeft,akBottom];
      P[i].Font.Color:=clYellow;
      P[i].Font.Style:=[fsBold];
      P[i].Caption:=IntToStr(i);
      P[i].OnMouseDown:=PanelMouseDown;
      P[i].Parent:=Self;
    end;
  Panel1.Height:=16*(n+1); Panel1.Top:=Panel1.Top-Panel1.Height;
  Panel2.Height:=16*(n+1); Panel2.Top:=Panel2.Top-Panel2.Height;
  Panel3.Height:=16*(n+1); Panel3.Top:=Panel3.Top-Panel3.Height;
   k:=0;
  M_ABC[1]:=n; M_ABC[2]:=0; M_ABC[3]:=0;
end;
 
 
end.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 14.11.2015 в 20:26.
timsso вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
"Ханойские башни", нужны комментарии к коду Slimping Общие вопросы C/C++ 0 17.05.2015 20:14
Аналог игры "2 башни" TopAccount Помощь студентам 3 10.01.2013 16:54
Ханойские башни fs444 Общие вопросы C/C++ 10 30.03.2010 16:02
Ханойские башни.С++ nN1 Помощь студентам 1 09.11.2009 19:51
Ханойские башни Vistar Паскаль, Turbo Pascal, PascalABC.NET 2 23.05.2009 02:05