Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
Аноним   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.034 c
14-1083635414
тихий вовочка
2004-05-04 05:50
2004.05.23
Куда исчезают все бандиты


1-1084188993
Sonic_gd
2004-05-10 15:36
2004.05.23
Нужно присвоить нажатию кнопки на форме...


9-1074018567
falc0n
2004-01-13 21:29
2004.05.23
2D в Direct3D8


3-1082958667
din
2004-04-26 09:51
2004.05.23
Как создать запрос


14-1083706326
ИМХО
2004-05-05 01:32
2004.05.23
Депортиво - Порту 0:1





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский