purebasic.info

PureBasic forum
Текущее время: Ср июн 20, 2018 8:02 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Пн фев 04, 2013 9:30 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6309
Благодарил (а): 19 раз.
Поблагодарили: 188 раз.
Пункты репутации: 48
Есть интересный жанр игр, в которых надо запрограммировать какие либо действия игрока, бота. Этот бот запускается в игру и соревнуется с другими ботами. В этом и состоит игра - постоянно совершенствовать своего бота, чтобы он стал лучшим.

Крестики-Нолики ( дальше ХО) конечно не лучший пример такой игры, но для простоты понимания сойдет.
Цель:
Написать DLL, которая будет выигрывать у подобных DLL в XO.
SDK на формат DLL
Она должна содержать две обязательные процедуры:
Первую с входным параметром в виде Массива текущей обстановки на поле и выходным в виде целого числа от 0 до 8, которое означает клетку ответного хода. Имя строго определено - xo_artbrain.
Вторую с мессагой, представляющей Бота, без параметров xo_about()
Пример бота, делающего случайные ходы
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
ProcedureDLL xo_artbrain(Array Fil.b(1))
  i=Random(8)
  Repeat
    If Fil(i)=0
         ProcedureReturn i
         Break
       Else
         i=Random(8)
    EndIf
  ForEver
EndProcedure
 
ProcedureDLL xo_about()
    MessageRequester("XO About"," Это мега супер мозг TTT! Порву всех!")
EndProcedure
 



Вспомогательных процедур может быть сколько угодно, если придумаете, как из них передать информацию в основную процедуру, не меняя её структуры параметров.

Особенности игры

Первый ход всегда делает случайно компьютер. Этим достигается равенство ходов.
Не занятые поля = 0
Занятые поля = 1 у первого бота и 10 у второго бота.
Т.о. выигрышные суммы это 3 и 30.

Программист должен запрограммировать только одно - какой будет ответный ход Бота после анализа игрового поля - цифра от 0 до 8.
Занятые поля отмечает в массиве Основная программа. Она же ведет счет игры, рисует X и О на поле.

DLL можно писать на других ЯП, в комплекте есть пример на FreeBasic
Так же 2 бота на Пурике. Один случайный ход, другой с некоторым интеллектом.

Думаю, что данная идея послужит для создания игр, построенных по этой методике.


Вложения:
xo_programmers.zip [28.53 KiB]
Скачиваний: 177

_________________
read-only
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 04, 2013 9:59 pm 
Не в сети
доцент

Зарегистрирован: Вт янв 22, 2013 12:31 am
Сообщений: 46
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Класс, помнью на ДОС похожую игру. AUTOWARS называлась, только там на вход txt- файл посылался (http://old-dos.ru/index.php?page=files& ... how&id=592)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 04, 2013 10:09 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11181
Благодарил (а): 4 раз.
Поблагодарили: 414 раз.
Хорошая идея.
Давно конкурсов не было.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 04, 2013 10:51 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Классно! Интересная идея, молодец, Виталий :D

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 04, 2013 11:35 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11181
Благодарил (а): 4 раз.
Поблагодарили: 414 раз.
А зачем массив, если хватило бы однобайтной переменной? В ней же можно хранить 8 бит, т. е. для этих целей хватит.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 06, 2013 5:08 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вт апр 26, 2011 8:18 pm
Сообщений: 263
Откуда: Волгоград
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
глянул, идея интересная, хотя тогда уж бОльший простор для анализа дают крестики-нолики на бОльших полях, но это не главное
собственно вопросы: как движку определить, чем он ходит, крестиками или ноликами (есть конечно идея, но смутная)? зачем первый ход рандомным делать? не приведет ли он к заведомо худшей позиции 2-го движка?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 06, 2013 5:54 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Realist писал(а):
как движку определить, чем он ходит, крестиками или ноликами
А зачем? Крестики или нолики - это решает программа, которая получает инфу от dll и отмечает клетки.

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 06, 2013 5:55 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вт апр 26, 2011 8:18 pm
Сообщений: 263
Откуда: Волгоград
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
сам движок должен знать, где свои, чтобы анализировать, куда поставить свой знак
хотя проблему я решил


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 06, 2013 6:03 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6309
Благодарил (а): 19 раз.
Поблагодарили: 188 раз.
Пункты репутации: 48
Realist писал(а):
зачем первый ход рандомным делать?

Позиций 9, а это на 2 не делится. Если первый ход случайный, то оба движка в одинаковом положении делают мах по 4 хода.
Крестики или нолики - в зависимости от того, какой движок выбран первым. Можно серию раундов сделать в одном порядке. Потом движки перегрузить и опять сделать серию ходов. Т.о. будут учтены все нюансы.

Для анализа хода достаточно знать, что поля могут быть заняты числом 1 или числом 10. А дальше думает программист, кто где и как это определить. В этом и весь интерес.

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 06, 2013 6:23 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11181
Благодарил (а): 4 раз.
Поблагодарили: 414 раз.
kvitaliy писал(а):
Позиций 9
А не лучше тогда передавать DLL массив типа:
Код:
1
Dim Pos.a(2, 2)


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 06, 2013 6:38 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вт апр 26, 2011 8:18 pm
Сообщений: 263
Откуда: Волгоград
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
kvitaliy, ладно, убедили, тем более решил, несложно получилось, по моему строчек в 5
Пётр, я уже реализовал как для первого случая, жалко все переделывать, но согласен, так было бы удобнее


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 06, 2013 6:42 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6309
Благодарил (а): 19 раз.
Поблагодарили: 188 раз.
Пункты репутации: 48
Пётр писал(а):
Dim Pos.a(2, 2)

Двумерный массив сложнее обходить последовательно, чем одномерный.
А в чем преимущество?

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 06, 2013 6:45 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6309
Благодарил (а): 19 раз.
Поблагодарили: 188 раз.
Пункты репутации: 48
Да и вообще, это примитивно - крестики нолики...
Какую бы логическую игру выбрать для битвы кодов, но только что бы не было явного выигрышного алгоритма, и стратегия выигрыша не зависела от первого хода?
Есть такая настольная игра?

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 06, 2013 6:46 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
kvitaliy писал(а):
Есть такая настольная игра?
Шашки, но это не так просто :(

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 06, 2013 6:51 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вт апр 26, 2011 8:18 pm
Сообщений: 263
Откуда: Волгоград
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Цитата:
Шашки

шахматы, вот где простор для анализа :)
а вообще надо будет глянуть, всегда надо начинать с простого


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB