Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

Шахматное поле рекурсией   Найти похожие ветки 

 
Аноним   (2004-05-08 10:48) [0]

Не могу сообразить как нарисовать шахматное поле с помощью рекурсии.

Подкажите, буду очень благодарен.


 
Anatoly Podgoretsky ©   (2004-05-08 11:01) [1]

Это наглядный случай когда рекунсия не требуется.
Рисуй лучше в цикле


 
Аноним   (2004-05-08 12:12) [2]

Нужно имеено с ее помощью.


 
Gero ©   (2004-05-08 12:44) [3]

procedure Draw(B : Boolean);
var ...
begin
 if B then
   begin
     Рисуем в цикле
   end
 else
   Draw(True);
end;

...
Draw(False);

Еще скажи, что здесь рекурсия не используется ;)


 
Тимохов ©   (2004-05-08 12:50) [4]

procedure draw(acol, arow: integer);
var
  kcol, krow: integer;
begin
  drawrect(.....); // с цветом сами разберетесь
  if acol = 7 then
  begin
     kcol := 0;
     krow := arow + 1;
  end else
  begin
     kcol := acol+1;
     krow := arow;
  end;
  if arow <= 7 then draw(kcol, krow);
end;


первый вызов
draw(0,0);


 
Андрей Сенченко ©   (2004-05-08 12:55) [5]

Представь себе шахматное поле не как 64 ( или больше ) квадратика, а например как 4 ( или больше ) рамки из этих квадратиков. С такой точки зрения рекурсию организовать можно ...
Основная процедура рисует рамку из 4 квадратиков и увеличивает шаг ( количество квадратиков на стороне ), затем вызвает сама себя и так до опупения.
Чем не рекурсия ?


 
KilkennyCat ©   (2004-05-08 12:59) [6]


> Gero ©   (08.05.04 12:44) [3]


Да, так можно мноооого нарисовать...

Может, лучше так:

var
 y : byte;

implementation
....

y := 1;

.....

procedure Shashki();

var x : byte;

   procedure DrawLine(x : byte);
   var ...
   begin
     рисуем клетку с координатой x,y
     inc(x);  
     repeat
       DrawLine(x : byte);
     until x = 9;
   end;

begin
 inc(y);
 x := 1;
 repeat
   DrawLine(x : byte);
 until y = 9;
end;


вложенная рекурсия, извиняюсь... :)


 
KilkennyCat ©   (2004-05-08 13:03) [7]

а, ччерт... ошибку сделал.

var
y : byte;

implementation
....

y := 1;

.....

procedure Shashki();

var x : byte;

  procedure DrawLine(x : byte);
  var ...
  begin
    рисуем клетку с координатой x,y
    inc(x);  
    repeat
      DrawLine(x : byte);
    until x = 9;
  end;

begin
inc(y);
x := 1;
DrawLine(x : byte);
repeat
  Shashki();
until y = 9;
end;


Вот теперь рекурсивно до ужаса...


 
Тимохов ©   (2004-05-08 13:05) [8]


> Вот теперь рекурсивно до ужаса...

конечно до ужаса - просто вечная реакурсия.


 
Gero ©   (2004-05-08 13:15) [9]

Я вот не понимаю, зачем на использование рекурсии задавать задачи, в которых она не нужна?
Бред какой-то.


 
KilkennyCat ©   (2004-05-08 13:26) [10]

Тимохов ©   (08.05.04 13:05) [8]

гмм... согласен :) но все равно красиво, да и вечность отменить не сложно :)


 
KilkennyCat ©   (2004-05-08 13:36) [11]

var
y : byte;

implementation
....
y := 0;
.....

procedure Shashki;
var x : byte;

 procedure DrawLine;
 begin
   рисуем клетку с координатой x,y
   inc(x);  
   if x <> 9 then DrawLine;
 end;

begin
 inc(y);
 x := 1;
 DrawLine;
 if y <> 9 then Shashki;
end;


проверено. невечно . двойная рекурсия. кто предложит тройную? :)


 
Тимохов ©   (2004-05-08 13:51) [12]


> проверено. невечно.

вы бы еще проверили какую ерунду это все нарисует.


 
KilkennyCat ©   (2004-05-08 13:59) [13]

Тимохов ©   (08.05.04 13:51) [12]

А Вы все буквально воспринимаете? Или не в состоянии самостоятельно трансформировать [1,1]...[8,8] в клетки с четырьмя углами? а также выбор белый-черный?


 
Тимохов ©   (2004-05-08 14:02) [14]


> KilkennyCat ©   (08.05.04 13:59) [13]

я не умею играть в шахматы на поле 8 на 9.


 
KilkennyCat ©   (2004-05-08 14:09) [15]

Тимохов ©   (08.05.04 14:02) [14]

ну и зря. очень увлекательно...

Ну ошибся я на 1... :)) Зато все равно круто!



Страницы: 1 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.026 c
1-1083925865
Mazer
2004-05-07 14:31
2004.05.23
FreeReport под Delphi7?


1-1083747384
Islander
2004-05-05 12:56
2004.05.23
Как преобразовать параметр сообщения WM_SETTEXT в строку?


7-1081946450
Shurik_212
2004-04-14 16:40
2004.05.23
Событие появления файла на диске


3-1083063659
infom
2004-04-27 15:00
2004.05.23
Есть ли такой компонент?


14-1083235446
Карелин Артем
2004-04-29 14:44
2004.05.23
Где найти говорящую бутылку водки?