16 FreeBasic - Игра "Прыгающие шашки"

F
freebs
![](https://serey.io/imageupload_data/cddec3a76b85d7a32884cebb131f6b2f9add6cca) ![](https://i.imgur.com/Tvzbnos.png) Эту задачу я решал на пятом курсе при подготовке к экзаменам, кажется))), но запомнилось мне другое. Сделал я её быстренько-простенько: черно-белые шашки на коричневом фоне, так как ход шашки был однозначен - ход шашек выбирался цифрой, как на рисунке. Решить то я её решил - запрограммировал, а вот как попереставлять шашки чтобы достичь результата... Помню вопрос одногрупницы о том как же переставить шашки я сказал что незнаю. Она так удивилась!!! как же я тогда составил программу???))) Составить программу это значит отразить смысл игры, вернее правила игры, на языке программирования. А непосредственно к решению самой задачи(головоломки) это не имеет никакого отношения. Учились-учились и научились))) ## Задача "Прыгающие шашки" ***На семиклеточном поле стоят слева три белые шашки, справа три чёрные и пустая клетка посередине. Нужно поменять шашки местами - чтоб слева стояли чёрные, а справа - белые. Шашка может стать на пустую клетку, если она находится рядом. И может перепрыгнуть соседнюю шашку, если непосредственно за ней находится пустая клетка. Причем есть ещё одна особенность, ещё одно правило: шашки ходят навстречу друг-другу, белые-направо, а чёрные-налево.*** Шашек, вернее поле для шашек, у нас имеет семь клеток - это наш массив на семь элементов. Белые шашки обозначим 1, черные - 2, пустое же место - нулём. Если вы напишете `dim as integer a(7)={1,1,1,0,2,2,2}` то сделаете ошибку)) смотрите ![](https://i.imgur.com/0ArU2Zk.png) Если сможете "видеть" результат работы вашей программы - считайте что вы хорошо научились)) Ошибка в том что первый элумент массива a(0), это следует учесть инициализируя массив начальными значениями `dim as integer a(7)={-1,1,1,1,0,2,2,2}` или так `dim as integer a(1 to 7)={1,1,1,0,2,2,2}` ![](https://i.imgur.com/3CvIOku.png) Inkey$ Познакомимся ещё с одной функцией Бейсика, без которой не написать хорошей игры(программы) Это тоже функция ввода как и input, но Inkey ждет нажатия клавиши, а не ввода строки или числа, оговорился, **не ждёт**, в том то и дело, что **не ждет** Она опрашивает клавиатуру, и если в этот моммент никакая клавиша не нажата функция выдаёт **ноль**, а так как функция символьная(текстовая) - значит пустой текст - "". Здесь между кавычками ничего нет, пус-то-та)) обычно её используют так: `do:k=inkey():while k=""` этот цикл будет крутиться до тех пор, пока пользователь не нажмёт клавишу, переменная k должна быть текстовой, и после нажатия клавиши будет равна симолу клавишу которым нажали. Сильное преимущество inkey перед input в отсутствии ожидания Enter для завершения ввода. `dim as integer a(1 to 7)={1,1,1,0,2,2,2},c,i` `dim as string k` `for i=1 to 7` ` locate(3,i*2): print a(I);` `next i` `do` `flag=0` `do:k=inkey():while k=""` `c=asc(k)-48` `if a(c)=0 then continue do` `if a(c)=1 and c<7 then if a(c+1)=0 then swap(a(c),a(c+1)` `if a(c)=1 and c<6 then if a(c+2)=0 then swap(a(c),a(c+2)` `if a(c)=2 and c>1 then if a(c-1)=0 then swap(a(c),a(c-1)` `if a(c)=2 and c>2 then if a(c-2)=0 then swap(a(c),a(c-2)` `if a(1)=a(2) and a(2)=a(3) and a(4)=a(5) and a(5)=a(6) and a(4)=0 then flag=1` `for i=1 to 7` `locate(3,i*2): print a(I);` `next i` `loop while flag` Немного улучшим нашу программу Добавим выход по "пробелу" и сброс игры на начало клавиша ESC. А вывод "шашек" сделаем цветным)) ![](https://i.imgur.com/9hzZx0y.png) ### Игра готова - можно искать решение головоломки.

Comments