Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите сделать игру пятнашки 
:(
    Опции темы
Value
Дата 29.3.2006, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 2.12.2005

Репутация: нет
Всего: нет



Возникла проблема, попробовал я сделать пятнашки, но при нажатии на кнопку она просто уезжает за пределы панели....
Код

unit penkiol;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    Timer1: TTimer;
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure move(Sender: TObject);
    //procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a:array[1..16]of byte;
  i,k,fl,rn,p,m:byte;
  x,y,xl,yl,num,pos,lr,td,lr1,td1:integer;
  flag:boolean;

implementation

{$R *.dfm}
procedure Atsitikt;
begin
for k:=1 to 16 do a[k]:=0;
randomize;
i:=1;
repeat rn:=random(16)+1;
fl:=0;
k:=1;
while (a[k]<>rn) and (k<>17) do inc (k);
if k=17 then begin a[i]:=rn;
inc(i);
end;
until i=17;
end;

procedure Vizual;
begin
p:=0;
for i:=0 to 3 do
for k:=0 to 3 do
begin
p:=p+1;
if a[p]<>16 then
begin
with tbutton(form1.Components[a[p]+3]) do
begin
left:=k*50+2;
top:=i*50+2;
end;
end;
end;
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
close;
end;

{procedure TForm1.Button1Click(Sender: TObject);
begin
form1.Caption:=inttostr((sender as tbutton).ComponentIndex); (button1 index=4)
end;}

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Atsitikt;
Vizual;
end;



procedure TForm1.Button12Click(Sender: TObject);
begin
if flag then exit;
pos:=0;m:=0;num:=0;
num:=(sender as tbutton).ComponentIndex-3;
for i:=1 to 16 do if a[i]=num then pos:=i;
if (pos-1>0)and(pos-1<>4)and(pos-1<>8)and(pos-1<>12)and(a[pos-1]=16)then m:=1;
if (pos+1<17)and(pos+1<>5)and(pos+1<>9)and(pos+1<>13)and(a[pos+1]=16)then m:=2;
if (pos-4>0)and(a[pos-4]=16)then m:=3;
if (pos+4<17)and(a[pos+4]=16) then m:=4;
if m=0 then exit;
flag:=true;
lr1:=(sender as tbutton).Left;
td1:=(sender as tbutton).Top;
form1.move(sender);

end;



procedure TForm1.move(Sender: TObject);
begin
timer1.enabled:=true; 
case m of  1:dec(lr,3); 
2:inc(lr,3); 3:dec(td,3);
4:inc(td,3);
end;
with TButton(components[num+3])do begin left:=lr1+lr;top:=td1+td;end;
if (abs(lr)=50) or (abs(td)=50) then  
 begin
  timer1.enabled:=false; 
  lr:=0;
  td:=0;
  flag:=false;
  case m of  
  1:begin a[pos-1]:=a[pos];a[pos]:=16;end;
  2:begin a[pos+1]:=a[pos];a[pos]:=16;end;
  3:begin a[pos-4]:=a[pos];a[pos]:=16;end;
  4:begin a[pos+4]:=a[pos];a[pos]:=16;end;
  end;
 fl:=0;
 for i:=1 to 16 do if a[i]<>i then fl:=1; 
 if fl=0 then showmessage('you win !!'); 
 end;
end;


end.


видимо ошибка в последней процедуре procedure TForm1.move но я никак не могу её найти...smile

Это сообщение отредактировал(а) Value - 29.3.2006, 15:17
PM MAIL   Вверх
Poseidon
Дата 29.3.2006, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Читаем маю подпись...
Качаем прикрепленный файл smile

Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  Fifteen.zip 87,72 Kb


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Sunvas
Дата 30.3.2006, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Value, если приводишь полный код главного юнита, то скидывай пожалуйста и весь исходник (Dpr, dfm и др. файлы). Или ты хочешь, чтобы мы сами догадывались как там у тебя эти компоненты лежат? smile Да и не читабельно как-то...


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0560 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.