Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.01;
Скачать: CL | DM;

Вниз

Нужно написать функцию которую при нажатии на кнопку выполняет   Найти похожие ветки 

 
Gleb ©   (2006-03-28 11:00) [0]

Нужно написать функцию которую при нажатии на кнопку выполняет действия вперед.
type
  private
  P:array[0..9*20-1]of TPanel;
  { Private declarations }
public
  { Public declarations }
  KolwoZ : integer;//количество заполненых
  nRed:integer;
  //BtnFace:integer;
  Green:integer;
  Function test(i,j : integer) : boolean;
  //true если в p[i] p[j] содержаться одинаковые цифры или в сумме дают 10
  Function SosedLeft ( i : integer) : integer;
  //номер соседа слева
      Function SosedUp ( i : integer) : integer;
  //номер соседа с верху
     Function SosedRight ( i : integer) : integer;
  //номер соседа с права
      Function SosedDown ( i : integer) : integer;
//номер соседа с низу
    Function KolwoSosedi(i : integer; var NS : integer) : integer;
//кол-во правильных
   procedure RePaintP;
  procedure RepeatNz;
  procedure StepInfo;
  Function BtnFace(i:integer):integer;

  procedure AddInfoTip_1(i,j : integer);
  procedure AddInfoTip_2( PrevKolwoZ : integer );
  procedure CancelStep;
  procedure RepeatStep ;
end;
var
Form1: TForm1;
implementation
uses Unit3_6_2;
{$R *.dfm}
const A="123456789111213141516171819";
type
tStepInfo = record
  Tip : integer;  
  N1 : integer;
     N2 : integer;
         end;
var D:array[0..180]of tStepInfo  ;
  DPos : integer;
  DPosMax:integer;
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
for i:=0 to 20*9-1 do
  begin
    P[i]:=TPanel.Create(Self);
    P[i].Height:=25;P[i].Width:=25;
    P[i].Left:= 25*(i mod 9)+25;
    P[i].Top:=25*(i div 9)+25;
    P[i].Parent:=Self;
    P[i].Font.Color:=clNavy;
    P[i].OnClick:=Panel1Click;
    P[i].Tag:=i;

  end;
 //BtnFace:=0;
 Green:=0;
 Button5Click(Nil);
//P[81].Caption:="1";
 Button6Click(Nil);
//P[9].Color := clBtnFace;  Button6Click(Nil);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Form2.Showmodal;
end;
function TForm1.test(i, j: integer): boolean;
begin
if (i<0)or(j<0)OR(i>=KolwoZ)or(j>=KolwoZ)
  then Result := false
   else
      if (P[i].Caption=P[j].Caption)or
       (strtoint(P[i].Caption)+strtoint(P[j].Caption)=10)
      then Result := true
   else Result := false;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
RePaintP;
end;
function TForm1.SosedLeft(i: integer): integer;
begin
Result := i-1;
while (Result>=0)AND(P[Result].Color=clBtnFace) do Result:=Result-1;
end;
function TForm1.SosedUp(i: integer): integer;
begin
Result := i-9;
while (Result>=0)AND(P[Result].Color=clBtnFace) do Result:=Result-9;
end;
function TForm1.SosedRight(i: integer): integer;
begin
Result := i+1;
while (Result<KolwoZ)AND(P[Result].Color=clBtnFace) do Result:=Result+1;
end;
function TForm1.SosedDown(i: integer): integer;
begin
Result := i+9;
while (Result<KolwoZ)AND(P[Result].Color=clBtnFace) do Result:=Result+9;
end;
function TForm1.KolwoSosedi(i: integer; var NS : integer): integer;
var j:integer;
begin
 Result:=0;
j := SosedLeft(i);
if Test(i,j) then begin Result := Result+1; NS := j; end;
j := SosedRight(i);
if Test(i,j) then begin Result := Result+1;NS := j; end;
j := SosedDown(i);
if Test(i,j) then begin Result := Result+1; NS := j; end;
j:= Sosedup(i);
if Test(i,j) then begin Result := Result+1;NS := j; end;
end;
procedure TForm1.Panel1Click(Sender: TObject);
var j,ns,i:integer;
begin
 i:=(Sender as TPanel).Tag;
 if P[i].Color=clGreen then exit;
 if P[i].Color=clBtnFace then   exit;
 if P[i].Color=clRed then
   begin
     P[i].Color:=clYellow;  exit;
   end;
 if KolwoSosedi(i,Ns)=1 then
   begin
     P[i].Color:=clBtnFace;
     P[ns].Color:=clBtnFace;
     AddInfoTip_1(i,ns);
     NRed := -1;
     RePaintP;
     Exit;
   end;
if KolwoSosedi(i,NS)>1 then
  begin
    if NRed<>-1 then begin
    j := SosedLeft(i);
    if j=NRed then begin
      P[i].Color:=clBtnFace;
      P[j].Color:=clBtnFace;
      AddInfoTip_1(i,j)  ;
      NRed := -1;
      RePaintP;
      Exit;
   end;

   j := SosedUp(i);
   if j=NRed then begin
      P[i].Color:=clBtnFace;
      P[j].Color:=clBtnFace;
      AddInfoTip_1(i,j) ;
      NRed := -1;
      RePaintP;
      Exit;
   end;
   j := SosedRight(i);
   if j=NRed then begin
      P[i].Color:=clBtnFace;
      P[j].Color:=clBtnFace;
      AddInfoTip_1(i,j);
      NRed := -1;
      RePaintP;
      Exit;
   end;
    j := SosedDown(i);
    if j=NRed then begin
      P[i].Color:=clBtnFace;
      P[j].Color:=clBtnFace;
      AddInfoTip_1(i,j);
      NRed := -1;
      RePaintP;
      Exit;
   end;
   end; // if NRed<>-1 then begin
  // P[i].Color:=clRed;
   Nred := i;
   RePaintP;
 end;
end;
procedure TForm1.RePaintP;
var i,Ns : integer;
begin
for i := 0 to KolwoZ-1 do
  begin
    if (P[i].Color=clBtnFace) then Continue;
    if (KolwoSosedi(i,NS)>0)
      then P[i].Color := clYellow
      else P[i].Color := clGreen;
    if i=Nred then P[i].Color := clRed;
  end;
  end;
procedure TForm1.Button5Click(Sender: TObject);
var  i:integer;
begin
for i:=0 to 9*3-1 do begin
  P[i].Color:=clGreen;
  P[i].Caption:=A[i+1];
end;
KolwoZ := 27;
nred:=-1;
RePaintP;
DPos := 0;
for i:= KolwoZ to 9*20-1 do  begin
  P[i].Color:=clBtnFace;
  P[i].Caption:="";
end;
end;
procedure TForm1.RepeatNz;
var i,j:integer;
begin
j := 0;
for i:=0 to KolwoZ-1 do
  if P[i].Color<>clBtnFace then
    begin
      P[KolwoZ+j].Color:=clGreen;
      P[KolwoZ+j].Caption:=P[i].Caption;
      j:=j+1;
      if KolwoZ+j>=9*20 then begin  Break; end;
    end;
KolwoZ := KolwoZ+j;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
//  P[0].Color := clBtnFace;
AddInfoTip_2(KolwoZ);
RepeatNz;
RePaintP;
end;
function TForm1.BtnFace(i: integer): integer;
begin
for i:=0 to 9*20-1 do
if (P[i].Color=clBtnFace)and(P[i].Caption="")then Result:=Result+1;
end;
procedure TForm1.StepInfo;
var i,j:integer;
begin    
for i:=0 to Kolwoz-1 do
//if (P[i].Color=clBtnFace()0 ) and (P[i].Caption<>"")then  N1:=i;
end;
procedure TForm1.AddInfoTip_1(i, j: integer);
begin
D[Dpos].Tip :=1;
D[Dpos].N1 :=i;
D[Dpos].N2 :=j;
Dpos := Dpos+1; DPosMax:=DPos;
end;
procedure TForm1.AddInfoTip_2(PrevKolwoZ: integer);
begin
D[Dpos].Tip :=2;
D[Dpos].N1 :=PrevKolwoZ;
Dpos := Dpos+1; DPosMax:=DPos;
end;
//назад (при нажати возращает предыдущее)
procedure TForm1.CancelStep;
var i:integer;
begin
if DPos=0 then Exit;
case D[DPos-1].Tip of
  1 :begin
       P[D[DPos-1].N1].Color:=clGreen;
       P[D[DPos-1].N2].Color:=clGreen;
       Dpos := Dpos-1;
       RePaintP;
    end;
  2 : begin
        for i:= D[DPos-1].N1 to KolwoZ-1 do  begin
          P[i].Color:=clBtnFace;
          P[i].Caption:="";
        end;
        KolwoZ := D[DPos-1].N1;
        Dpos := Dpos-1;
       RePaintP ;
       end;
 end; //case
end;


 
grisme ©   (2006-03-28 13:30) [1]

ну и че за спам?)


 
Mortem ©   (2006-03-28 14:33) [2]

Ничё не понял. (:


 
Nic ©   (2006-03-28 15:56) [3]

И что это за огроменный код?


 
a22 ©   (2006-03-28 16:13) [4]

Nic, видимо, награда тому, кто напишет "функцию которую при нажатии на кнопку выполняет действия вперед". Мде...


 
Darthman ©   (2006-03-29 12:28) [5]

Ничего непонял, но порадовался на:
P:array[0..9*20-1]of TPanel;
и переменную Каловоз :)


 
Mortem ©   (2006-03-29 12:51) [6]


> Darthman ©   (29.03.06 12:28) [5]

Ты это ещё и прочитал? Медаль тебе. (:
Модератеры, закройте тему чтоль...


 
Pa5ha   (2006-03-29 15:32) [7]

На массив панелей не гоните, да? Иногда только этим и спасаюсь :)


 
Mortem ©   (2006-03-29 15:57) [8]


> Pa5ha   (29.03.06 15:32) [7]

Нафиг? Мож я чето-то пропустил в этой жизни? (:


 
Cash ©   (2006-03-29 18:44) [9]

Чел видать угарает! :)))
Код ваще не читаемый. Как будто его писали прямо без синтаксис-чека.


 
Pa5ha   (2006-03-31 18:11) [10]

Mortem, ну например на было задание написать календарь. Ну не вручную же втыкать в 12 табщитов одинаковые компоненты :) Генерил динамически. Задание ещё вроде было, использовать динамически созданные компоненты.


 
Domowoi   (2006-04-04 00:05) [11]

Не, я минут 5 посидел, попытался расшифровать этот код, и мне пришла такая мысля, что если я был бы бухущий в хлам, такгого бы "кода" не написал. Но, хотя я процентов эдак 40 понял от всего, что там написано...
Как я понял цЭтО какой-то извращенный алгоритм толи пятнашек, толи хер его знает....


 
Mortem ©   (2006-04-04 01:24) [12]


> Domowoi   (04.04.06 00:05) [11]

А не этот чел случаем спрашивал алгоритм чего-то там на батонах? ^__^


> Pa5ha   (31.03.06 18:11) [10]

Для этого нужно юзать OpenGL и WinAPI и не парится! x_____________x


 
Mitka   (2006-05-03 11:25) [13]

Это типа вот такое: http://cifiri.fromru.com/Cifiri14.zip



Страницы: 1 вся ветка

Текущий архив: 2007.04.01;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.051 c
2-1173552150
Зм1й
2007-03-10 21:42
2007.04.01
Контроллы и потоки


15-1173035989
palva
2007-03-04 22:19
2007.04.01
Борис Стругацкий в качестве политика


2-1173536396
DemonP
2007-03-10 17:19
2007.04.01
создать приложение из 2х процессов со своим окном


3-1168866075
Галинка
2007-01-15 16:01
2007.04.01
DataSet записать в физическую базу


15-1173280682
Канадец
2007-03-07 18:18
2007.04.01
Talking to Americans on the streets