Форум: "Игры";
Текущий архив: 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.044 c