Jump to content
Sign in to follow this  
Mizuwokiru

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

Recommended Posts

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

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

Share this post


Link to post
Share on other sites
  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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

 


 

Проверяешь, 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 лет назад, после бейсика, казался нормальным=)

Edited by Naik
  • Upvote 1

Share this post


Link to post
Share on other sites

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

 

 

Проверяешь, 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

Share this post


Link to post
Share on other sites

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

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

  • Upvote 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...