|
Вопрос # 4 248/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
как сделать проверку в игре пятнашки на выйгрыш???
а точнее подскажите что же я сделал не верно((
>>
Приложение: Переключить в обычный режим- var
- Form1: TForm1;
- game: array[0..15] of TButton;
- v,row,d,i,col:integer;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.FormCreate(Sender: TObject);
- Var
- row,col:integer;
- Begin
-
- For i:=0 to 15 do
- Begin
- game[i] := TButton.Create(Pole);
- game[i].Parent := Form1;
- game[i].Width :=d ; game[i].Height :=d ;
- game[i].Font.Style :=pole.Font.Style ;
- game[i].Font.Size :=pole.Font.Size ;
- game[i].Caption :=inttostr(i);
-
-
- game[i].Top :=d*row;
- game[i].Left :=d*col;
- game[i].OnClick:=GameClick;
-
- End;
- game[0].Caption :='';
- End;
-
- procedure TForm1.GameClick(Sender:TObject);
- Var
- x0,y0,x,y,index:integer;
- Begin
-
- For i:=0 to 15 do
- If game[i].Focused =true Then index:=i;;
-
- x0:=game[0].left;
- y0:=game[0].Top;
-
- x:=game[index].left;
- y:=game[index].Top;
-
- If (x0=x) and (abs(y-y0)=d) Then
- Begin
- game[0].Left :=x; game[0].Top:=y;
- game[index].Left :=x0; game[index].Top:=y0;
- End;
-
- If (y0=y) and (abs(x-x0)=d) Then
- Begin
- game[0].Left :=x; game[0].Top:=y;
- game[index].Left :=x0; game[index].Top:=y0;
-
- End;
- end;
-
-
- procedure TForm1.N1Click(Sender: TObject);
- begin
- randomize ;
- For v:=1 to 20 Do
- Begin
- row:=random(15)+1;
- game[row].SetFocus ;
- GameClick(game[row]);
- End;
- timer1.enabled:=true;
- end;
-
-
-
-
-
- procedure TForm1.Timer1Timer(Sender: TObject);
- begin
- for i := 0 to 15 do
- begin
- col:=i div 4;
- row:=i Mod 4;
-
- if (game[i].Left<>Col*d)Or(game[i].Top<>Row*d)Then Exit;
-
-
- timer1.enabled:=False;
- end;
-
- end.
 |
Вопрос задал: HEJY (статус: Посетитель)
Вопрос отправлен: 30 мая 2010, 21:55
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 31 мая 2010, 15:00; участников в обсуждении: 2.
|
Вадим К (статус: Академик), 31 мая 2010, 10:39 [#1]:
Код, хотя и "хитро написанный", но более-менее правдоподобный. Единственное, что я бы не делал - это проверку по таймеру на выиграш. Лучше проверять по факту нажатия кнопки. Начните с того, что поставьте себе резервное мемо и код проверки дополните выводом логирующим - все станет на свои места.
Вот где то так
procedure TForm1.Timer1Timer(Sender: TObject);
begin
for i := 0 to 15 do begin
col:=i div 4;
row:=i Mod 4;
Memo1.lines.add('i='+inttostr(i)+' col='+nttostr(col)+' row='+inttostr(row));
if (game[i].Left<>Col*d)Or(game[i].Top<>Row*d)Then Exit;
end;
Label1.Caption:='ПОБЕДА!!!';
timer1.enabled:=False;
end;
Вывести туда нужно (и можно) побольше переменных.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
HEJY (статус: Посетитель), 31 мая 2010, 15:00 [#2]:
Спасибо помогло)))))))
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|