![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
помогите накодить штуку( [D7]
Григорий © (2011-06-01 21:36:00)Составить программную реализацию следующей игры: вдоль доски расположены лунки и в каждой .лунке лежит шар черного или белого цвета. Одним ходом разрешается менять местами два любых шара. Добиться того, чтобы сначала шли белые шары, а за ними - черные. Количество лунок вводится с клавиатуры, расположение шаров задается с помощью датчика случайных чисел.
Rouse_ (2011-06-02 00:06:00) [41]Чет, Юрч, быстро ты сдался :)
Меня сегодня по асе около четырех часов пытали как лабу написать, в итоге таки почти все разжевал и человек практически целиком задачу сам написал, с небольшими штрихами с моей стороны :)
ЗЫ: ох чую ща самая она - пора вопросов, подошла со стороны студентов :)
Юрий Зотов (2011-06-01 22:27:00) [42]Запустите программу, посмотрите ее в работе и подправьте, как нужно. Подсказка: всем белым шарам присваиваем число 1, а всем черным - число 2. Еще подсказка: хоть код и готовый, но Вам все равно придется разобраться в нем до мельчайших деталей, иначе работу Вы не сдадите.
unit Unit1;
interface
uses
Windows, SysUtils, Classes, Controls, Forms, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure ButtonClick(Sender: TObject);
procedure VisualSwap(L, R: integer);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
Len = 10;
Size = 50;
var
Arr: array[1..Len] of integer;
Panels: array[1..Len] of TPanel;
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
BorderStyle := bsDialog;
SetBounds(Left, Top, 600, 200);
Position := poScreenCenter;
with TButton.Create(Self) do
begin
Caption := 'Start';
Left := Self.Width - Width - 16;
Top := Self.Height - Height - 32;
OnClick := ButtonClick;
Parent := Self
end;
Randomize;
for i := 1 to Len do
begin
Arr[i] := 1 + Random(100);
Panels[i] := TPanel.Create(Self);
Panels[i].Caption := IntToStr(Arr[i]);
Panels[i].SetBounds(Size * (i - 1), 0, Size, Size);
Panels[i].Parent := Self
end
end;
procedure TForm1.ButtonClick(Sender: TObject);
var
i, j, A: integer;
begin
TButton(Sender).Enabled := False;
for i := Len downto 1 do
for j := 1 to Len - 1 do
if Arr[j] > Arr[j + 1] then
begin
A := Arr[j];
Arr[j] := Arr[j + 1];
Arr[j + 1] := A;
VisualSwap(j, j + 1)
end
end;
procedure TForm1.VisualSwap(L, R: integer);
procedure Delay;
var
T: cardinal;
begin
T := GetTickCount + 1;
while GetTickCount < T do
Application.ProcessMessages
end;
procedure MoveDown(Panel: TPanel);
var
i: integer;
begin
for i := Panel.Top + 1 to Panel.Top + Size + 10 do
begin
Panel.Top := i;
Delay
end
end;
procedure MoveUp(Panel: TPanel);
var
i: integer;
begin
for i := Panel.Top - 1 downto Panel.Top - Size - 10 do
begin
Panel.Top := i;
Delay
end
end;
procedure MoveLeft(Panel: TPanel);
var
i: integer;
begin
for i := Panel.Left - 1 downto Panel.Left - Size do
begin
Panel.Left := i;
Delay
end
end;
procedure MoveRight(Panel: TPanel);
var
i: integer;
begin
for i := Panel.Left + 1 to Panel.Left + Size do
begin
Panel.Left := i;
Delay
end
end;
var
P: TPanel;
begin
MoveDown(Panels[R]);
MoveRight(Panels[L]);
MoveLeft(Panels[R]);
MoveUp(Panels[R]);
P := Panels[R];
Panels[R] := Panels[L];
Panels[L] := P
end;
end.
Григорий (2011-06-01 21:52:00) [43]да
Юрий Зотов (2011-06-01 21:40:00) [44]Пузырьковая сортировка?