| 
| 
 | Вопрос # 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);Varrow,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 doIf 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) ThenBegingame[0].Left :=x; game[0].Top:=y;game[index].Left :=x0; game[index].Top:=y0;End; If (y0=y) and (abs(x-x0)=d) ThenBegingame[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);beginfor i := 0 to 15  dobegincol:=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]:Спасибо помогло))))))) |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |