Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.038 c
15-1173171766
vajo
2007-03-06 12:02
2007.04.01
The Bat


2-1173690419
NOD
2007-03-12 12:06
2007.04.01
Помогите настроить BDE


15-1173066915
Brc
2007-03-05 06:55
2007.04.01
Вирусы


15-1173627796
TMx
2007-03-11 18:43
2007.04.01
e-book


15-1173540667
PARUS
2007-03-10 18:31
2007.04.01
JAVA на компе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский