Перейти к контенту
IgoR_Nik

Создаю игру крестики-нолики

Рекомендованный пост

      Здравствуйте. Я обучаюсь программированию с помощью самоучителя и выполняю все задания, которые он мне предоставляет. В этой книге в основном задания, помогающие усвоить материал. Есть, конечно, и интересные проекты (например, такие как калькулятор, будильник, гонки и др.) Но я решил, что готов уже написать что-нибудь этакое  сам и решил создать игру крестики-нолики (самые обычны 3х3). Но не тут то было. Я столкнулся с некоторыми проблемами, поэтому и пишу сюда, чтобы попросить помощи.
       Итак, начнем по порядку. В моей игре есть три уровня сложности (легко, средне и трудно). На "легко" я нарисовал поле, крестики, нолики, расставил необходимые кнопки и метки. Также я научил компьютер не ставить крестики на мои нолики  :) и выявлять, победил ли кто-нибудь или нет. Ходы компьютер делает случайным образом. Выбирает любую клетку и проверяет пустая она или нет, и если пустая, то ставит крестик, иначе снова ищет клетку. На "средне" я добавил возможность компьютеру проверять не может ли он или игрок уже на следующем ходе выиграть. Т.е. если в строке стоят 2 крестика, то он обязательно поставит крестик и в 3 клетку, тем самым выиграв. Но, к сожалению, если таких комбинаций нет, то компьютер тогда опять же ставит крестик на случайно выбранную пустую клетку.
       Но на уровне средне, человеку все же можно выиграть. А, насколько мне известно,  в крестиках-ноликах, если ни одному игроку не допускать ошибки, то игра сведется к ничьей. Так вот я и захотел, чтобы компьютер никогда не проигрывал, а если человек ошибется, то даже выигрывать  :)

И тут для мне наступил ступр. Собственно вопрос: как это сделать?  :excl: 
      Мои варианты: 1) Можно забить много условий. Например, если человек поставил в центр, то...., если в угол, то.....( + Нужно иметь ввиду, что угла то 4) Мне этот метод вовсе не нравится. Может он и хорош в крестиках-ноликах 3х3, но завтра я захочу сделать игру 20х20 и не сделаю её уже никогда. 2) Почитав интернет, я нашел очень интересный метод минимакс и всякие эвристические функции (так что ли?  :huh: ) К сожалению, прочитав кучу инфы, я так ничего и не понял. Читал только сайты, не учебники. Так либо говорят все поверхностно, либо уже сильно углубляясь. Чтобы не казаться дебилом :crazy: , добавлю: с самим методом я разобрался (по крайней мере, почему он так называется и как это происходит), но я не могу его запрограммировать :excl:. Также знаком с рекурсией.
       Подытожим все вышесказанное: помогите мне пожалуйста сделать последний этап крестиков-ноликов. Посоветуйте, как лучше делать: все же перебором или попробовать изучить минимакс. Дайте хорошие учебники если есть или расскажите мне его сами.  Или просто скажите: "Забей ты на это дружок, это не твое"  :) 
      P.S. Изучаю Basic. Если вы будите писать коды, то лучше, пожалуйста, пишите на этом языке. Проблема в том, что читая про минимакс, я совершенно не понимал код. Там было все написано на C.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нахрен всякие методы, просто делай AI для компьютера - пускай анализирует комбинации игрока и блокирует все возможные его ходы, а если  у игрока годных ходов не наблюдается - пускай комп сам пытается выйграть.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

пускай анализирует комбинации игрока и блокирует все возможные его ходы

 Читай 1 пост, у меня на среднем уровне сложности комп так и делает.

 

пускай комп сам пытается выйграть

Вот я пишу сюда, чтобы мне помогли это сделать. Как запрограммировать комп, чтобы он сам пытался выиграть?

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Такую таблицу тоже находил, но для меня это не помощь, к сожалению. Ибо ответа на вопрос как лучше это запрограммировать нет
P.S. А в крестики-нолики играть я тоже умею  :P

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

      Добрый вечер всем, кто еще заходит на мою тему. Я смотрю, что сегодня мне уже никто не отвечает, а вчера вразумительных советов я не услышал.  :(  Может вы меня неправильно понимаете. Попытаюсь объяснить чуточку подробнее и укажу вам пальцем, где мне именно нужно помочь. 
     Итак, пусть комп ходит крестиком первый. Куда бы ему походить? Можно железно задать ход в центр. Но мне это не нравится. Каждый раз комп будет ставить крестик в центр, понимаете? Каждую игру... Я хочу, чтобы игра менялась и комп умел ставить также крестики и по углам, ведь это тоже может привести его к победе. Хорошо...  Это я запрограммировал. Потом ходит игрок. Неплохо.... Но 3 ход снова делает комп .... ВНИМАНИЕ  :excl: Помощь мне нужна здесь. Как ему сделать верный ход? Программировать вот это я не хочу. 

Если крестик на (1,1) и нолик на (1,2), то ....
Если крестик на (1,1) и нолик на (1,3), то ....
.....
.....
Если крестик на (2,2) и нолик на (1,1), то ....
.....
.....
Если крестик на (3,3) и нолик на (3,2), то ....

Просто не вижу смысла и уверен, что есть способ лучше. Повторюсь, завтра я захочу сделать поле 15х15 и что? Писать вот такие условия?

 

      То что писал Скорпион анализировать комбинации игрока здесь не подходит, либо какие на 3 ходе могут быть комбинации? Или я тебя не правильно понял. Пожалуйста тогда отпишись, если это так.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я писал в свое время игру крестики-нолики. Соль этой игры была в том, что моя программа обучалась. То есть, сначала она ходила совершенно рандомно и запоминала цепочки ходов. При повторной ситуации она анализировала цепочки и те ходы, которые приносили победу - им отдавала больший приоритет, а те, которые - поражение, тем уменьшала. В итоге она имела представление о том, как ей ходить и к чему это может привести.

 

Попробуй подойти к задаче с этого бока.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

После долгих раздумий и создания программы поиска наикратчайшего пути по алгоритму А* решил снова взяться за эти свои крестики-нолики  :)   и.....  получилось.  Выиграть комп невозможно, как и должно быть. Осталось только код отредактировать, чтобы выглядел красиво. Если кому-то интересно или нужен исходник могу помочь и объяснить, как я это сделал.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Отсюда скачай http://gfile.ru/a1Fiz. Пароль: 794. Версия бейсика 6.0 Если вдруг сможешь выиграть у компа на сложном уровне, обязательно напиши и комбинацию предоставь. Исправлю. А может и сам догадаешься в чем ошибка  ;)

 

Сделать самообучающиеся крестики нолики не слабо. Просто мне это не интересно. Я же говорю, завтра я захочу сделать крестики-нолики 20х20 и что? Сколько он будет у меня обучаться? Год   :) Я конечно понимаю: поставить функцию, чтобы играл комп с компом и оставить на ночь, а наутро ты у него не выиграешь. Но, а шахматы как тогда? Ждать пока он сделает все рандомные ходы. Уфффф..... А в моей проге просто нужно написать другую оценочную функцию, и мой алгоритм хоть в поле 20х20, хоть в 100х100, хоть в шахматы будет играть  :)

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

@IgoR_Nik, тебе не трудно будет сразу и бейсик выложить? У меня его, понятное дело, нет.

 

 

 


А в моей проге просто нужно написать другую оценочную функцию, и мой алгоритм хоть в поле 20х20, хоть в 100х100, хоть в шахматы будет играть

Не смотрел, но звучит как проделка Дениса Попова. Мне кажется, ты здесь не прав, но давай все же посмотрим код...

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Выложить бейсик  :o  Он 700 метров весит. А по другому код я не знаю как скинуть. Хотел вставить просто в ворд или другой текстовый документ, но в коде использовал русские буквы и при копировании они заменяются на непонятные значки, что ничего не разберешь. Может есть еще какие варианты? (Хотя если выложить сюда на форум, то все по русски и правильно, хм... :huh: )

Не смотрел, но звучит как проделка Дениса Попова.

Кто такой Денис Попов?

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Конечно визуал :D , хорошо. Буду пробывать самообучающиеся делать вот сама игра.http://gfile.ru/a1hT4 Пароль тот же: 794. Открой файл "Крестики-нолики". Ищи выигрышные комбинации на сложном уровне. 

 

Новая версия игры. Была найдена ошибка в победе компьютера: http://gfile.ru/a1uZY

Изменено пользователем IgoR_Nik

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти

×