Перейти к содержанию
Авторизация  
Mizuwokiru

[Pascal] Шахматы (Mr.Random)

Рекомендуемые сообщения

Всем привет! Тут такое дело, на лабораторке выдали задачу: "Есть шахматный конь и доска 8х8. Случайным образом задается начальная позиция коня. Последующие шаги тоже загадываются рандомом, но при этом учитывается правила ходьбы конем, невозможность пересечь границы доски и ограничение на ходы (а именно то, что нельзя ходить в одну и ту же клетку дважды). Доска - матрица 8х8, содержащая в себе значения типа byte. Каждое значение - это номер хода, на котором данная клетка была занята (если она еще ни кем не была занята - значение равно нулю)".

Ну я написал, так сказать, вроде как самый простой и краткий код, но вот беда - на одном из ходов выбивает ошибку 201 (либо выхожу за рамки массива, либо выхожу за границы типов). Котелок сейчас вообще не варит, да и FreePascal даже не показывает, где эта ошибка. Хелпаните кто-то. Вот код - http://pastebin.com/5vgQFR5B

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  1. if ((table[validateStep(stepX,1), validateStep(stepX,2)]=0) or (table[validateStep(stepX,-1), validateStep(stepX,2)]=0) or
  2.             (table[validateStep(stepX,1), validateStep(stepX,-2)]=0) or (table[validateStep(stepX,-1), validateStep(stepX,-2)]=0) or
  3.             (table[validateStep(stepX,2), validateStep(stepX,1)]=0) or (table[validateStep(stepX,-2), validateStep(stepX,1)]=0) or
  4.             (table[validateStep(stepX,2), validateStep(stepX,-1)]=0) or (table[validateStep(stepX,-2), validateStep(stepX,-1)]=0)) then

 

Может я чего не понимаю, но почему здесь только Х?

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может я чего не понимаю, но почему здесь только Х?

Странно, что этого не заметил, ппц. :D Но все равно, не из-за этого ошибку выбивает. Я вот думаю, мб тут с минусом что-то не то творится. Долбанный паскаль...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Епт=) Ну ты конечно накосячил=) Смотри. 

 


 

Проверяешь, validateStep, не ходил ли ты на клетку, но не учел одной ошибки. Допустим Х = 1 У = 6, при любом ходе. Проверяем проверкой:

(table[validateStep(stepX,-1), validateStep(stepY,-2)]=0)

При проверке ты выйдешь за рамки и изменишь validateStep и если выдаст, что 0 (не было хода) If пройдет и начнётся выбор хода и опять же на этой проверке выдаст, что 0 (можно ходить, т.к. валидейтСтеп ты изменяешь принудительно на нужное тебе, а не сообщаешь об ошибке). И тут привет, у тебя Х становится 0 и ты выходишь за рамки доски.

 

Делай проверку в validateStep, если if (step = 1) and (n < 0), то ход не верен, а не изменяй переменные.

 

Надеюсь поймешь, а то рассказчик из меня еще тот=)

 

З.Ы. Как же бесит синтаксис паскаля, после явы=) А 8-9 лет назад, после бейсика, казался нормальным=)

Изменено пользователем Naik
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Епт=) Ну ты конечно накосячил=) Смотри. 

 

 

Проверяешь, validateStep, не ходил ли ты на клетку, но не учел одной ошибки. Допустим Х = 1 У = 6, при любом ходе. Проверяем проверкой:

(table[validateStep(stepX,-1), validateStep(stepY,-2)]=0)

При проверке ты выйдешь за рамки и изменишь validateStep и если выдаст, что 0 (не было хода) If пройдет и начнётся выбор хода и опять же на этой проверке выдаст, что 0 (можно ходить, т.к. валидейтСтеп ты изменяешь принудительно на нужное тебе, а не сообщаешь об ошибке). И тут привет, у тебя Х становится 0 и ты выходишь за рамки доски.

 

Делай проверку в validateStep, если if (step = 1) and (n < 0), то ход не верен, а не изменяй переменные.

 

Надеюсь поймешь, а то рассказчик из меня еще тот=)

 

З.Ы. Как же бесит синтаксис паскаля, после явы=) А 8-9 лет назад, после бейсика, казался нормальным=)

Кусок текста "При проверке..." было лень читать, увидел 1 и 6, -1 и -2, ппц, доперло, как я мог это пропустить... Спасибо, выручил. :)

P.S.: И не говори, я как в тех поступил с начинаниями явы - начали мусолить паскаль... :bad:  А после этого вроде и перешли на плюсы, но вот уже 3-ий курс - опять паскаль. :/ Они видать издеваются...  :sorry:

 

В общем, если кому понадобится, стоит создать функцию типа boolean, к примеру isValidStep, с аргументами: шахматная доска, координаты клетки, в которой находится конь и куда нужно двигаться. Ну либо просто координаты клетки, куда надо двигаться, если глобальные переменные объявлены в начале.

Вот решение, если что - http://pastebin.com/VP0tuQS5

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

P.S.: И не говори, я как в тех поступил с начинаниями явы - начали мусолить паскаль... :bad:  А после этого вроде и перешли на плюсы, но вот уже 3-ий курс - опять паскаль. :/ Они видать издеваются...  :sorry:

Я тебя еще сильнее огорчу, в институте еще и фортраны всякие изучают, по крайне мере у меня было так.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...