В одной из книг о настольных играх я увидел игру "Быки и коровы" много я играл в неё с друзьями да одноклассниками, а когда в школе появились компьютеры я решил её запрограммировать. Компьютер загадывал - человек отгадывал. Правила игры: один игрок загадывает четырёхзначное число в котором нет одинаковых цифр, первая цифра может быть ноль. Другой игрок его отгадывает называя свой вариант числа. Первый игрок проанализировав эти числа сообщает о количестве быков и коров. Быком считается если второй игрок угадал цифру и она стоит на своей позиции, например если задуманное число 5290, а второй игрок при попытке отгадать назвал 1234, то ответ будет 1 бык. А если цифра угадана, но она стоит не на своём месте, то это корова. Например второй игрок делает следующий ход и называет 8259 - ответом будет 1бык 2коровы, или сокращенно 1б2к. И так до того момента пока задуманное число не будет отгадано. Само собой число нужно отгадать за минимальное количество попыток. при соревнованиях кто сделал меньше попыток - тот и лучше играет.
В институте мне снова встретилась эта задача, но ещё нужно было решить её и за второго игрока, т.е. в роли отгадывающего выступал компьютер))) ох и поломал голову я над таким решением...
Так как цифр здесь 4 массив можно и не исспользовать, a1,a2,a3,a4 - и будут цифрами задуманного компьютером числа.
На первую цифру у нас никаких ограничений нет - a1- число от 0 до 9
a1=int(rnd()*10)
Вторая цифра не должна быть равна первой
do
a2=int(rnd()*10)
loop while a2=a1
А третья цифра не должна быть равна первой или второй
do
a3=int(rnd()*10)
loop while a3=a1 or a3=a2
И самое большее количество проверок у четвёртой цифры - три проверки
do
a4=int(rnd()*10)
loop while a4=a1 or a4=a2 or a4=a3
можно эти цифры сложитьв переменную z
z=a11000+a2100+a3*10+a4
теперь попросим игрока назвать вариант ответа
input "введите число";o
Его нужно разложить на составляющие-цифры b1,b2,b3,b4 проверить нет ли одинаковых цифр, а перед этим необходимо сделать ещё одну проверку - чтобы число было в диапазоне 123-9876(это минималоное и максимальное число которые подходят под условия задачи)
do
flag=0
input "введите число";o
b1=int(o/1000)
b2=int(o/100) mod 10
b3=int (o/10) mod 10
b4=o mod 10
if b1=b2 or b1=b3 or b1=b4 or b2=b3 or b2=b4 or b3=b4 or o<123 or o>9876 then flag=1:print"повторите ввод"
loop while flag=1
Так как при неверноем вводе числа нужно не только поворить его ввод но и сообщить об этом чтобы не делать проверку дважды здесь использовали переменную flag
Теперь число прошло проверку, введено корректно - можно подсчитать быков ...
bk=0:cow=0
if a1=b1 then bk=bk+1
if a2=b2 then bk=bk+1
if a3=b3 then bk=bk+1
if a4=b4 then bk=bk+1
... и коров
if a1=b2 or a1=b3 or a1=b4 then cow=cow+1
if a2=b1 or a2=b3 or a2=b4 then cow=cow+1
if a3=b1 or a3=b2 or a3=b4 then cow=cow+1
if a4=b1 or a4=b2 or a4=b3 then cow=cow+1
Не потеряем ли мы коров при подсчёте? нет, ведь если например a1=b2, то a1=b3 и/или a1=b4 уже не будет никогда.
print ;o;" - ";bk;"б";cow;"к"
и закрываем цикл,
loop while bk<4
а мы ведь его и не открыли))) - впереди do
цикла ввода ответа откроем ещё цикл следующего хода второго игрока
Текст программы получился большим, пришлось его немного укоротить, чтоб поместился в экран. Я убрал перед 2,3,6,9,12,13,24,25,29,33,34 пустые строки, которые были установлены для более удобного восприятия программы, опять же повторюсь - это дело вкуса и своего стиля)))
Ещё в 12 строке я добавил вывод задуманного компьютером числа, чтобы проверить верно ли программа подсчитывает быков и коров
В программу можно добавить учёт и вывод ходов за которые игрок угадает число.
Есть ли минимальное количество ходов за которое гарантирвоанно можно угадать число?
Ну и сверхсложная задача - научить компьютер отгадывать задуманное человеком число, играющий будет сверять числа и сообщать количество быков и коров.
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
Очень интересно пишешь! Я проголосовала за статью и подписалась на твой блог.
Надеюсь, ты тоже подпишешься на мой блог!
Ссылка на мой блог - @salander007
Давай дружить :) Успехов тебе!
@sergiy, Поздравляю!
Ваш пост был упомянут в моем хит-параде в следующей категории:
супер игра ! Мама научила в нее играть еще в школе , а я в армейке так время коротал в нарядах , да караулах ☺
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
cats, spinner, littleboo, t3ran13, boddhisattva, aim, ianboil, analise, strecoza, mishka, sergiy, vako, gildar, andrvik, max-max, kanenakat, zoss, harhor, dimarss, la-bella-vita, kilobucks, ohlamoon, shuler, zlody, dr-boo, arsar, volv, nefer, oksi969, turkish-r, renat242, oceanotechnic, markvial, vict0r, lira, gryph0n, voltash, ladynazgool, ladykosha, karusel1, orezaku, sharps, cepera, francesco, maxiandr, exan, retoldname, stranniksenya, alikssandra, gapel, galerina, acidgarry, aivanouski, igor66, oagalakova, borisss, candy777, sterh, virt, optimist, tatyanamishenko, yurchello, dayver, bammbuss, dmitrijv, manavendra, mr-nikola, ondantr, vladsm, mirgais, varja, student61, prifix, ili, mp42b, abloud, dignityinside, foxycat, ksantoprotein, process, chugoi, nikulinsb, firestarter, shafarevich, tulencha, amalinavia, kito-boy, vsebudethorosho, nikitosuna, sansey, izbushka, astramar, ramin, propoker, cryptovisitor, zelivsky, html, metadon, vredinka2345, carpe-diem, makcl, ivanzar, marina-spring, azarovskiy, funt33, sinilga, samael27, kalter, maksh, mister-omortson, nightinga1e, siddxa, cryptobandera, doublingseason, necrogenesis, maryatekun, lologom, anykeycheg, prezza, akva22, elcpa, karabum, sevaev, dobrotanya, boliwar, veta-less, irkinmick, wmforum, svetozarhobbot, archual, alexxela, paulsoul, valdemar777, burger-knig, cryptenthusiast
Поэтому я тоже проголосовал за него!
dobryj.kit теперь стал Делегатом! Ваш голос важен для всего сообщества!!!
Поддержите нас:
✅
Сюда приплывал Моби Дик
✅🤙 🚀