GOLOS
RU
EN
UA
sergiy
2 года назад

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

Эту задачу я решал на пятом курсе при подготовке к экзаменам, кажется))), но запомнилось мне другое. Сделал я её быстренько-простенько: черно-белые шашки на коричневом фоне, так как ход шашки был однозначен - ход шашек выбирался цифрой, как на рисунке. Решить то я её решил - запрограммировал, а вот как попереставлять шашки чтобы достичь результата... Помню вопрос одногрупницы о том как же переставить шашки я сказал что незнаю. Она так удивилась!!! как же я тогда составил программу???)))

Составить программу это значит отразить смысл игры, вернее правила игры, на языке программирования. А непосредственно к решению самой задачи(головоломки) это не имеет никакого отношения. Учились-учились и научились)))

Задача "Прыгающие шашки"

На семиклеточном поле стоят слева три белые шашки, справа три чёрные и пустая клетка посередине. Нужно поменять шашки местами - чтоб слева стояли чёрные, а справа - белые. Шашка может стать на пустую клетку, если она находится рядом. И может перепрыгнуть соседнюю шашку, если непосредственно за ней находится пустая клетка. Причем есть ещё одна особенность, ещё одно правило: шашки ходят навстречу друг-другу, белые-направо, а чёрные-налево.

Шашек, вернее поле для шашек, у нас имеет семь клеток - это наш массив на семь элементов. Белые шашки обозначим 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 лучший из диалектов бейсика

@sergiy

1
535.667 GOLOS
На Golos с October 2016
Комментарии (8)
Сортировать по:
Сначала старые