Jump to content
Sign in to follow this  
DaanRaven

[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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...