Delphi. Ход конем

Ответить
BLG
Сообщения: 2
Зарегистрирован: 24 фев 2013, 16:03

Здравствуйте.

Есть задача:
Шахматную доску будем представлять символьной матрицей размера 8x8. Даны натуральные числа n, причём 1<=n<=8 и m, причём 1<=m<=8. Эти числа номера вертикали и горизонтали, определяющие местоположения коня. Соответствующий элемент матрицы надо положить равным символу К. Поля находящиеся под угрозой коня, надо положить равными символу *, а остальные - символу 0.
Вот то, что получилось на настоящий момент:

Код: Выделить всё

var
  i,j:integer;

procedure TForm1.Button1Click(Sender: TObject);
begin
with StringGrid1 do begin
      for i:=0 to 7 do
        for j:=0 to 7 do
          Cells[i,j]:='0';

    i:=StrToInt(Edit1.Text)-1;
    j:=StrToInt(Edit2.Text)-1;


if (i<2) then

 Cells[i,j]:='K';
     Cells[i+1,j+2]:='*';
     Cells[i+2,j+1]:='*';
     Cells[i+2,j-1]:='*';
     Cells[i+1,j-2]:='*';

if (i>2) then

 Cells[i,j]:='K';
     Cells[i-1,j-2]:='*';
     Cells[i-2,j-1]:='*';
     Cells[i-2,j+1]:='*';
     Cells[i-1,j+2]:='*';

if (j<2) then
 Cells[i,j]:='K';
     Cells[i-1,j-2]:='*';
     Cells[i-2,j-1]:='*';
     Cells[i+2,j-1]:='*';
     Cells[i+1,j-2]:='*';

if (j>2) then
 Cells[i,j]:='K';
    Cells[i+1,j+2]:='*';
    Cells[i+2,j+1]:='*';
    Cells[i-2,j+1]:='*';
    Cells[i-1,j+2]:='*';


  end;
end;
Есть пара вопросов:

1. Если i или j такое, что i-1, j-1, i-2, j-2 будут отрицательными, то в итоге будет ошибка и решаться не будет.

2. Координаты по j идут сверху вниз, а надо снизу вверх. Т.е. если мы пишем j=2, то это будет не вторая клетка снизу, а седьмая (или вторая сверху).

Помогите, пожалуйста, разобраться.
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Поищите по форуму - похожая задача уже решалась пару лет назад
Нет религии выше истины
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

1. Введите доп. условие или используйте другое начальное значение в цикле;
2. Берите не j, а 7-j
Нет религии выше истины
BLG
Сообщения: 2
Зарегистрирован: 24 фев 2013, 16:03

Спасибо!

1. Убрал лишние условия и взял все значения по модулю

Код: Выделить всё

Cells[i,(7-j)]:='K';
     Cells[abs(i+1),abs((7-j)+2)]:='*';
     Cells[abs(i+2),abs((7-j)+1)]:='*';
     Cells[abs(i+2),abs((7-j)-1)]:='*';
     Cells[abs(i+1),abs((7-j)-2)]:='*';
     Cells[abs(i-1),abs((7-j)-2)]:='*';
     Cells[abs(i-2),abs((7-j)-1)]:='*';
     Cells[abs(i-2),abs((7-j)+1)]:='*';
     Cells[abs(i-1),abs((7-j)+2)]:='*';
2. (7-j) помогло. За это отдельное спасибо! Что-то до меня сразу и не дошло.
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Нет религии выше истины
Ответить