Эту задачу я решал на пятом курсе при подготовке к экзаменам, кажется))), но запомнилось мне другое. Сделал я её быстренько-простенько: черно-белые шашки на коричневом фоне, так как ход шашки был однозначен - ход шашек выбирался цифрой, как на рисунке. Решить то я её решил - запрограммировал, а вот как попереставлять шашки чтобы достичь результата... Помню вопрос одногрупницы о том как же переставить шашки я сказал что незнаю. Она так удивилась!!! как же я тогда составил программу???)))
Составить программу это значит отразить смысл игры, вернее правила игры, на языке программирования. А непосредственно к решению самой задачи(головоломки) это не имеет никакого отношения. Учились-учились и научились)))
Задача "Прыгающие шашки"
На семиклеточном поле стоят слева три белые шашки, справа три чёрные и пустая клетка посередине. Нужно поменять шашки местами - чтоб слева стояли чёрные, а справа - белые. Шашка может стать на пустую клетку, если она находится рядом. И может перепрыгнуть соседнюю шашку, если непосредственно за ней находится пустая клетка. Причем есть ещё одна особенность, ещё одно правило: шашки ходят навстречу друг-другу, белые-направо, а чёрные-налево.
Шашек, вернее поле для шашек, у нас имеет семь клеток - это наш массив на семь элементов. Белые шашки обозначим 1, черные - 2, пустое же место - нулём.
Если вы напишете
dim as integer a(7)={1,1,1,0,2,2,2}
то сделаете ошибку))
смотрите
Если сможете "видеть" результат работы вашей программы - считайте что вы хорошо научились))
Ошибка в том что первый элумент массива 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}
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. А вывод "шашек" сделаем цветным))
Игра готова - можно искать решение головоломки.
15 FreeBASIC - Игра "Быки и коровы"
14 FreeBASIC - тасуем карты (массивы-задачи ч2)
13 FreeBASIC - массивы(задачи)
12 FreeBASIC - массивы
11 FreeBASIC - задачки
10 FreeBASIC - Игра угадай число
09 FreeBASIC - случайные числа, RND
08 FreeBASIC - случайные числа, RND
07 FreeBASIC - циклы
06 FreeBASIC - условный оператор
05 FreeBASIC - первые простые задачки
04 FreeBasic - графика
03 FreeBASIC. Текстовые переменные и операции с ними
02 FreeBASIC Переменные в Бейсике
01 Начинаем изучать FreeBasic
00 FreeBASIC лучший из диалектов бейсика
Кстати, нашёл сейчас такую же задачу но шашек не три, а четыре каждого цвета - решайте...
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
cats, spinner, littleboo, t3ran13, aim, ianboil, analise, strecoza, mishka, sergiy, vako, rbrown, gildar, ovchinnikov, andrvik, max-max, kanenakat, zoss, dikaniovs, dimarss, kilobucks, ohlamoon, shuler, rusalka, maksina, yurgent71, zlody, dr-boo, arsar, volv, nefer, turkish-r, renat242, markvial, vict0r, gromozeka, lira, drim, gryph0n, voltash, ladynazgool, karusel1, sharps, cepera, francesco, maxiandr, exan, retoldname, stranniksenya, alikssandra, gapel, galerina, acidgarry, kvg, oagalakova, borisss, candy777, olga-fink, kis-dikiy, optimist, edsaw, tatyanamishenko, yurchello, dayver, bammbuss, dmitrijv, manavendra, mr-nikola, ondantr, nerengot, lokkie, vladsm, mirgais, now, varja, upper, student61, prifix, mp42b, abloud, foxycat, ksantoprotein, alexmove, process, chugoi, nikulinsb, vlad1m1r, shafarevich, tulencha, amalinavia, kito-boy, vsebudethorosho, nikitosuna, izbushka, astramar, goldenriver, onur1s, propoker, cryptovisitor, zelivsky, html, vredinka2345, fxmonster, carpe-diem, makcl, ivanzar, marina-spring, azarovskiy, funt33, samael27, kalter, valen-tina, maksh, mister-omortson, nightinga1e, siddxa, cryptobandera, doublingseason, necrogenesis, maryatekun, lologom, anykeycheg, delectat, prezza, sini4ka, akva22, worthless-man, esperos, elcpa, karabum, sevaev, dobrotanya, boliwar, veta-less, irkinmick, jpigeon84, svetozarhobbot, archual, alexxela, fatima, burger-knig, cryptenthusiast
Поэтому я тоже проголосовал за него!
dobryj.kit теперь стал Делегатом! Ваш голос важен для всего сообщества!!!
Поддержите нас:
✅
@sergiy, Поздравляю!
Ваш пост был упомянут в моем хит-параде в следующих категориях:
Привет!
Очень интересно пишешь! Я проголосовала за статью и подписалась на твой блог.
Надеюсь, ты тоже подпишешься на мой блог!
Ссылка на мой блог - @salander007
Давай дружить :) Успехов тебе!
✅
Сюда приплывал Моби Дик
✅🤙 🚀