Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

помогите накодить штуку( [D7]


Страницы:   1 2 3

Григорий ©   (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]

Пузырьковая сортировка?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо