Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Еще одна игрушка с развитым гипотоламусом, aka Шахматы 
:(
    Опции темы
Platon
Дата 7.11.2007, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Здравствуйте, уважаемые. 
На этот раз не буду выкладывать никаких программулек, потому что еще немного недоделано.

Встал такой вопрос, как гибко делать смену пользователей на хуманов и москов?
Варианты всевозможные H-AI AI-H AI-AI H-H

Я уверен, что люди уже разработали такой шаблон...

есть класс Main в нем
ChessBoard board - доска, хранит информацию о игровой ситуации
ChessBoardView boardView - естественно отображение этой ситуации на доске.

Как мне посредством класса Main сделать настройку игрового режима, чтоб можно было нацепить на boardView мышного слушателя, если это игрок, если это неигрок, то просто установить AI

Код

public class Main {
    ChessBoard board = new ChessBoard();
    ChessBoardView boardView = new ChessBoardView(board);

    ChessControll player1;
    ChessControll player2;

    public Main() {

    }

    public void setFirstPlayer(ChessControll first) {
        player1 = first;
    }

    public void setSecondPlayer(ChessControll first) {
        player1 = first;
    }

    ...
}

На этом дело встало.
PM MAIL ICQ   Вверх
Felan
Дата 7.11.2007, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 2.8.2007
Где: Самара

Репутация: нет
Всего: 7



Если у тебя ChessControll  - интерфейс который реализует публичный интерфейс игрока, то тебе надо просто сделать два класса, которые реализуют этот интерфейс и выполняют функции AI и H. Тогда слушатель должен будет существовать в рамках класса H. А при добавлении будешь просто добавлять нужный класс.

Либо можно сделать абстракный класс Player у которого будут все необходимые методы а реализаци их будет отличаться в зависиости от того  AI это или H.

Короче - полиморфизм - это сила! smile






--------------------
// Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного.
PM MAIL WWW ICQ   Вверх
Platon
Дата 7.11.2007, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Именно с этим прицелом у меня ChessControll и сделано, но вопрос сотается, как локанично сделать еще и навешивание слушателя на нужные панели в случае игрока?
PM MAIL ICQ   Вверх
Felan
Дата 7.11.2007, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 2.8.2007
Где: Самара

Репутация: нет
Всего: 7



Ну конкретно не подскажу, сам не делал. Но по идеи ты реализуешь интерфейс слушателя в классе Chess Controll.
Если это у тебя AI то он просто ничего не делает и передает управление дальше. Если это реализация H то как раз и делаешь то, что надо.

В методе регистрации игрока регистрируешь игрока как слушателя. Опять же тебе не важно, что это будет за игрок.

Добавлено через 2 минуты и 31 секунду
Метод регистрации игрока как слушателя даже лучше сделать членом класса самого игрока... Тогда даже и не надо интерфейс слушателя реализовывать в классе ChessControl.

Можно сделать внутренний класс слушателя... И каждому игроку можно передавать нужные панели, к которым он должен будет прицепиться.


--------------------
// Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного.
PM MAIL WWW ICQ   Вверх
Platon
Дата 7.11.2007, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Ладно, я сделал по тупому.
ChessControll.setEngine(Engine e);
а Engine предоставляет всем контроллам все данные: и игровую канву, и данные о игровой ситуации.

Сейчас еще 1 вопрос подводный возник. Я еще игру ниразу не запускал, но сразу вижу косяк. Если будут играть 2 моска в 1-м потоке, то когда-нибудь они достигнут переполнение стека. Ибо будет 1 поток, конечно есть мысли сделать 2 потока, по 1-му на моск, у Человека и так отделный поток в виде диспетчера событий, но может есть решение попроще?
PM MAIL ICQ   Вверх
nornad
Дата 7.11.2007, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(Platon @  7.11.2007,  19:25 Найти цитируемый пост)
Если будут играть 2 моска в 1-м потоке, то когда-нибудь они достигнут переполнение стека. Ибо будет 1 поток, конечно есть мысли сделать 2 потока, по 1-му на моск, у Человека и так отделный поток в виде диспетчера событий, но может есть решение попроще

А почему должно быть переполнение?
"Моски" ходят по очереди, так? То есть, если запус "хода" происходит в основном цикле, то после завершения хода мы снова попадаем в основной цикл. Так?
Так откуда же возьмётся переполнение?

Цитата(Platon @  7.11.2007,  16:18 Найти цитируемый пост)
Встал такой вопрос, как гибко делать смену пользователей на хуманов и москов?

Цитата(Felan @  7.11.2007,  16:51 Найти цитируемый пост)
Короче - полиморфизм - это сила!

Этим всё сказано. Твой же вариант установки "движка" имеет кучу неудобств. Когда начнёшь расписывать работу всего этого барахла - заметишь.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Platon
Дата 7.11.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Цитата(nornad @  7.11.2007,  19:47 Найти цитируемый пост)
 Когда начнёшь расписывать работу всего этого барахла - заметишь.

nornad, поясни пожалуйчта. Конечно, метод примитивный, но факторов, связывающих руки я не нашел.



Цитата(nornad @  7.11.2007,  19:47 Найти цитируемый пост)
Так откуда же возьмётся переполнение?

и правда, что... Что-то я себя сам понапугал.
PM MAIL ICQ   Вверх
nornad
Дата 7.11.2007, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(Platon @  7.11.2007,  21:55 Найти цитируемый пост)

nornad, поясни пожалуйчта. Конечно, метод примитивный, но факторов, связывающих руки я не нашел.

Смотри. Если делать по предложенному варианту, то каждый "плеер" имеет реализацию интерфейса осуществления хода. Плюс, возможно, ещё некоторое количество методов "для себя".
В твоём же варианте "движок" даёт доступ к внутрненним объектам игры. Это приводит к тому, что "плеер" должен сам получать и разбирать информацию, сам же производить некоторые действия. В итоге это приведёт к большому количеству перекрёстного кода, который будет неудобно поддерживать. Намного проще переписать сызнова, чем добавить что-то новое. А возможно и проще, чем изменить старое.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Platon
Дата 7.11.2007, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



nornad,  возможно твои замечания правильны. Давай, когда я програмку допишу, посмотришь и скажешь как можно сделать лучше?
PM MAIL ICQ   Вверх
nornad
Дата 8.11.2007, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Я лучше не буду обещать, т.к. работы довольно много, а код маленьким явно не будет. smile 


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Platon
Дата 8.11.2007, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Код явно небольшой ;) 15 файлов, из них 6 - специфическая фигура, остальные 9 по делу, не так уж и много, я думаю.
PM MAIL ICQ   Вверх
Felan
Дата 8.11.2007, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 2.8.2007
Где: Самара

Репутация: нет
Всего: 7



Цитата(Platon @  8.11.2007,  00:02 Найти цитируемый пост)
nornad,  возможно твои замечания правильны. Давай, когда я програмку допишу, посмотришь и скажешь как можно сделать лучше? 

Конечно правильные. Ты нарушаешь принципы ООП Cohesion и Coupling (блин, не знаю даже как их на русский перевести smile)
Конечно это не смертельно, просто если ее соблюдать, то гораздо удобнее расширяться и поддерживаться.

Это сообщение отредактировал(а) Felan - 8.11.2007, 09:43


--------------------
// Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного.
PM MAIL WWW ICQ   Вверх
Platon
Дата 11.11.2007, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Felan, я думаю, ты имеешь ввиду стремление к слабой связности компонентов системы?

Добавлено через 5 минут и 32 секунды
Да, вы правы абсолютно, я пересмотрел свои позиции.
Теперь я подумал сделать так:
Как контроллу хумана, так и мозгу передается объект с информацией о игровой ситуации.
Но, для хумана будет еще 1 параметр: указатель на визуализацию игры.
Получается, что теперь контроллы с движком напрямую не работают, а только он их опрашивает, какой сделать ход. Такой подход лучше?

Это сообщение отредактировал(а) Platon - 11.11.2007, 19:30
PM MAIL ICQ   Вверх
Platon
Дата 11.11.2007, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Народ! Предлагаю состязание ИИ в рамках шахмат...

Пока мой АИ не готов, но вот-вот будет. Предлагаю вам тоже подключиться, составим спаринг AI.

Это сообщение отредактировал(а) Platon - 13.11.2007, 13:02

Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  Chess.rar 56,30 Kb
PM MAIL ICQ   Вверх
nornad
Дата 12.11.2007, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(Platon @  11.11.2007,  22:30 Найти цитируемый пост)
Получается, что теперь контроллы с движком напрямую не работают, а только он их опрашивает, какой сделать ход. Такой подход лучше?

Я бы сделал так.
Есть движок. Есть интерфейс игрока. Есть слушатель хода. Есть слушатель передачи хода. Есть реализация игрока для человека и есть для машины.
В самом начале регистрируются слушатели. Оба игрока регистрируют в движке свои слушатели передачи хода, а движок регистрирует слушателей самих ходов. Далее ход передаётся "белым" и игра начинается.
Кроме указанных вещей, игроки должны иметь методы для определения ситуации на доске (человеку надо нарисовать поле, а машина должна иметь поле, чтобы можно было производить расчёты, на основе которых будет выбран следующий ход). Ну и, конечно, некий метод для информирования о состоянии (шах, мат, пат...; кстати, эту информацию вполне можно передать в слушатель передачи хода.

Цитата(Platon @  12.11.2007,  01:50 Найти цитируемый пост)
Предлагаю вам тоже подключиться, составим спаринг AI.

Ещё б я знал, как писать мозги для шахмат... smile


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0551 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.