|
0 / 0 / 0
Регистрация: 15.07.2018
Сообщений: 9
|
||||||
Крестики-Нолики20.07.2018, 01:15. Показов 3110. Ответов 5
Метки крестики нолики (Все метки)
Программисты, помогите пожалуйста!
![]() Пытаюсь сделать крестики - нолики на PascalABC.NET, но столкнулся с проблемой, что "бот" делает то, что ему запрещается делать. Звучит странно, но если запустить программу, то всё станет понятно, я думаю) Имею двумерный массив и заполняю его 1,2 и 0, где 1-мой ход, 2-ход бота, 0-пустая клетка. Но получается, что "бот" порой заполняет те клетки, которые закрыты пользователем или им самим, хотя по коду, он так делать не должен или я что-то не понимаю в этой жизни) Помогите, кто шарит. Да, код страшный, но я учусь ток в 9 классе и на что-то более красивое пока не способен) И да, программу доделал не до конца, поэтому в плане побед, проигрышей, ничьей и тд ещё не готово. Но вот эта проблема с "ботом" не даёт мне продвинуться дальше, так что не серчайте) Заранее Спасибо за помощь! Кодик чуток ниже ![]()
0
|
||||||
| 20.07.2018, 01:15 | |
|
Ответы с готовыми решениями:
5
Крестики-нолики: плохо прорисовываются "нолики"
Крестики-нолики |
|
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
|
||||||||||||||||||||||||||||||||||||||||||||||
| 20.07.2018, 12:10 | ||||||||||||||||||||||||||||||||||||||||||||||
Сообщение было отмечено Rautmazar как решение
Решение
Во-первых, чтобы работал режим отладки, необходимо сначала писать программу без использования модуля crt.
Только после того, как простая версия (с использованием read и без украшений) будет работать на все 100, можно приступать к её воплощению в оконном режиме. Во-вторых, использование goto вносит путаницу в читаемость кода. В-третьих, у вас имеется глобальный массив zone. Так зачем же вы его заново в каждой процедуре задаёте? В-четвёртых, вместо того, чтобы каждый раз в процедуре botcontrol использовать двойное условие „if (zone[3, 1] <> 1) and (zone[3, 1] <> 2) then begin“ можно было просто сравнить с нулём! В-пятых, чтобы не использовать девять раз один и тот же код в операторе case (в процедурах control и botcontrol), эту часть кода можно вынести в процедуры и/или функции, в качестве параметров которым задавать координаты экрана и массива. А ещё лучше эти координаты вынести в константный массив и брать от туда! Самое главное: Вы снова, как и в „Змейке“, пытаетесь написать программу не задумываясь о результатах. Поступаете как говорил герой Витаргана в «Чародеях»: „Нужно видеть цель, верить в себя и не замечать препятствий!“ Добавлено через 1 час 52 минуты Попробую написать игру: Что нам может понадобиться? Первое — это собственно массив, в котором будет храниться поле игры. Ну и ещё, не плохо бы добавить счётчик шагов. Еще в программе потребуется датчик случайных чисел. Поэтому сразу инициализируем его:
На случай, если нам необходимо будет зацикливать программу, то потребуется обнуление массива и счётчика. Ну и сразу же добавим процедуру вывода массива в виде игрового поля:
Ещё не занятые ячейки игрового поля выводятся соответствующими цифрами — это типа подсказка… Добавлено через 4 минуты Теперь нужно создать цикл, в котором будет происходить игра. Для этого нам, наверное, понадобится переменная, которая будет определять чей сейчас ход. Ну и создадим сразу заготовки функции проверки выигрышного состояния и процедур, которые будут отвечать за ход компьютера и человека:
Это только заготовки. Теперь их нужно наполнить. Сначала посмотрим, как должен ходить компьютер. Думаю, что для начала достаточно простого датчика случайных чисел. Т.е. получим случайные координаты поля и, если они не заняты, то установим в него «Х». Это легко:
С человеком дела обстоят немного сложнее. Ибо придётся контролировать правильность ввода: — должна быть введена только одна цифра от 1 до 9 — нужна обработка правильности ввода — нужна проверка незанятости ячейки Получается как-то так:
Остаётся запрограммировать ThereIsAWin — кто же выиграл? Думаю, что циклы здесь не нужны. Вполне можно обойтись простыми проверками: 2 диагонали + 3 горизонтали + 3 вертикали.
Ну и кто же выиграл?
Пусть тот, кто ходит первым, всегда ставит «Х», а второй — «O». В дух местах программы вместо присвоения 1 и 2 соответственно, напишем так: „a[row, col] := (Step + 1) mod 2 + 1“ Добавлено через 2 минуты Ну вот и готовая программа:
Осталось только научить бота закрывать человеку возможность выиграть. Добавлено через 19 минут Можно сильно не заморачиваться. Тупо проверить все возможные варианты:
1
|
||||||||||||||||||||||||||||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 15.07.2018
Сообщений: 9
|
|
| 20.07.2018, 17:58 [ТС] | |
|
Воу
![]() Огромное Спасибо, что настолько сильно заморочились и помогли мне ![]() Сейчас буду всё это подробно разбирать и пытаться принять в свою юную голову) Ещё раз Огромное Спасибо! Очень приятно, когда профессионалы помогают в твоих начинаниях
0
|
|
|
Alvin Seville
|
|
| 21.07.2018, 13:33 | |
|
Rautmazar, чтобы писать крестики-нолики не надо быть профессионалом.
0
|
|
|
0 / 0 / 0
Регистрация: 15.07.2018
Сообщений: 9
|
|
| 21.07.2018, 14:51 [ТС] | |
|
Ну мне кажется, что и одного года обучения программирования в школе тоже не достаточно
0
|
|
|
Alvin Seville
|
|
| 22.07.2018, 05:54 | |
|
Rautmazar, достатоно, но, с учетом того, что Вы сами будете практиковаться, разумеется.
0
|
|
| 22.07.2018, 05:54 | |
|
Помогаю со студенческими работами здесь
6
Игра крестики-нолики Крестики нолики с компьютером Игра: Крестики-нолики
Крестики-нолики: исправить код Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|