Перейти к содержимому

Фотография

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

- - - - -

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 13

#1
IgoR_Nik

IgoR_Nik

    Новичок

  • Пользователи
  • Pip
  • 9 сообщений

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

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


  • 0

#2
Скорпион

Скорпион

    Пользователь

  • Пользователи
  • PipPip
  • 200 сообщений

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


  • 0

Изменение подписи


#3
IgoR_Nik

IgoR_Nik

    Новичок

  • Пользователи
  • Pip
  • 9 сообщений

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

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

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

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


  • 0

#4
RainDrow

RainDrow

    Пользователь

  • Пользователи
  • PipPip
  • 125 сообщений
Tic-tac-toe-full-game-tree-x-rational.jp
  • 0
td.gif

#5
IgoR_Nik

IgoR_Nik

    Новичок

  • Пользователи
  • Pip
  • 9 сообщений

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


  • 0

#6
IgoR_Nik

IgoR_Nik

    Новичок

  • Пользователи
  • Pip
  • 9 сообщений

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

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

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

 

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


  • 0

#7
iwans

iwans

    Продвинутый

  • Администраторы
  • 450 сообщений

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

 

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


  • 1

"Если закрыть дверь для всех заблуждений, то и истина останется снаружи" (с)


#8
IgoR_Nik

IgoR_Nik

    Новичок

  • Пользователи
  • Pip
  • 9 сообщений

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


  • 0

#9
iwans

iwans

    Продвинутый

  • Администраторы
  • 450 сообщений

IgoR_Nik, мне интересно, давай исходник.

 

А че ты не сделал самообучающуюся прогу, слабо?  ;)


  • 0

"Если закрыть дверь для всех заблуждений, то и истина останется снаружи" (с)


#10
IgoR_Nik

IgoR_Nik

    Новичок

  • Пользователи
  • Pip
  • 9 сообщений

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

 

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


  • 0

#11
iwans

iwans

    Продвинутый

  • Администраторы
  • 450 сообщений

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

 


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

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


  • 0

"Если закрыть дверь для всех заблуждений, то и истина останется снаружи" (с)


#12
IgoR_Nik

IgoR_Nik

    Новичок

  • Пользователи
  • Pip
  • 9 сообщений

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

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

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


  • 0

#13
iwans

iwans

    Продвинутый

  • Администраторы
  • 450 сообщений

IgoR_Nik, а, это визуал бейсик? Я почему-то подумал про QBasic )) Ладно, тогда забей.


  • 0

"Если закрыть дверь для всех заблуждений, то и истина останется снаружи" (с)


#14
IgoR_Nik

IgoR_Nik

    Новичок

  • Пользователи
  • Pip
  • 9 сообщений

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

 

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


Сообщение отредактировал IgoR_Nik: 18 Август 2013 - 21:28

  • 0




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных