Модераторы: 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   Вверх
Platon
Дата 12.11.2007, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



У меня есть листнер, и то он чисто - ход сделан (для визуализации игры)  и уведомление о конце хода. 

Предлагаю глянуть в исходники.
PM MAIL ICQ   Вверх
Platon
Дата 12.11.2007, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Мдее, у меня тоже не особо густо опыта с ИИ вот ти решил попробовать с мозгом поэксперементировать.
PM MAIL ICQ   Вверх
Felan
Дата 13.11.2007, 09:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Platon @  11.11.2007,  21:30 Найти цитируемый пост)
Felan, я думаю, ты имеешь ввиду стремление к слабой связности компонентов системы?

Именно smile

Только вот это не надо.
Цитата(Platon @  11.11.2007,  21:30 Найти цитируемый пост)
Но, для хумана будет еще 1 параметр: указатель на визуализацию игры.

Рисоваться движок должен сам, это не функции игрока. Игрок только делает ход. В остальном вроде нормально smile На мой вкус smile


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


Эксперт
***


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

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



Цитата(Felan @  13.11.2007,  10:33 Найти цитируемый пост)
Рисоваться движок должен сам, это не функции игрока.

Спорный вопрос, и мне кажется в этом плане я сделал правильно...
Зацени исходник:

Код

public class HumanControll implements ChessControll, MouseListener {

    protected ChessBoardView boardView;
    protected Engine engine;
    protected int team;
    private final Object locker = new Object();

    public HumanControll(Engine engine, ChessBoardView bView) {
        this.engine = engine;
        boardView = bView;
        boardView.addMouseListener(this);
    }

    public void setTeam(int team) {
        this.team = team;
    }

    public void destroy() {
        boardView.removeMouseListener(this);
    }


    public ChessPosition[] getMove() {
        res = null;
        while(res == null) {
            try {
                synchronized(locker) {
                    locker.wait();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        return res;
    }

    private ChessPosition[] res;
    private ChessFigure selectedFigure;

    public void mouseClicked(MouseEvent e) {    }

    public void mousePressed(MouseEvent e) {
        if (engine.getTurn() != team) return;
        if (e.getButton() == MouseEvent.BUTTON1) {
            int hp = e.getX()/ChessBoardView.CELL_WIDTH + 1;
            int vp = 8 - e.getY()/ChessBoardView.CELL_HEIGHT;
            ChessFigure f = engine.getFigure(hp, vp);
            if (selectedFigure == null) {
                if (f != null) {
                    if (f.getTeam() == team) {
                        selectedFigure = f;
                        boardView.setSelectedFigure(selectedFigure);
                    }
                }
            } else {
                if (f == null || f.getTeam() != team) {
                    for (ChessPosition cp : selectedFigure.getMovePositions())
                        if (cp.horizontalPosition == hp && cp.verticalPosition == vp) {
                            final ChessFigure sF = selectedFigure;
                            selectedFigure = null;
                            res = new ChessPosition[]{new ChessPosition(sF.getHorPos(), sF.getVertPos()), new ChessPosition(hp, vp)};
                            synchronized(locker) {
                                locker.notify();
                            }
                        }
                } else {
                    selectedFigure = f;
                    boardView.setSelectedFigure(selectedFigure);
                }
            }

        }
    }

    public void mouseReleased(MouseEvent e) {    }

    public void mouseEntered(MouseEvent e) {    }

    public void mouseExited(MouseEvent e) {        }
}


Добавлено @ 13:06
Ссылка на исходники

Додумал наконец моск, точнее думал не я, а друг, так что можно уже посмотреть состязание ИИ.

Это сообщение отредактировал(а) Platon - 13.11.2007, 13:07
PM MAIL ICQ   Вверх
nornad
Дата 13.11.2007, 15:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Platon @  13.11.2007,  15:59 Найти цитируемый пост)
Спорный вопрос, и мне кажется в этом плане я сделал правильно...

Ты про Оккама с его режиком слышал? Этот японец - жуткий головорез. Очень любил всех своей бритвой чикать. За слишком большую или слишком малую детализацию объектной структуры. Дык вот, в твоём случае его явно огорчило бы то, что функции различных по смыслу сущностей у тебя смешались в одну - "ХумэнКонтрол". Оккама быстро бы бритвой по горлу и получились бы две сущности - "ПлэйерКонтрол" (или просто "Плэйер") и "БоардВью" (для рисования доски человеку или предоставления информации о фигурах ИИ).

Сам подумай - зачем смешивать различные сущности? Модульность - она очень полезна, ежели пораскинуть мозгами, как предлагалось в одном анекдоте про Штирлица.


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


Эксперт
***


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

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



nornad, ак, вот я не пойму :(
У меня boardView не то чтобы тесно связан с самим HumanControll, но хуман контролл должен как-то работать с доской? на то он и хуман, ему надо видеть доску.

Добавлено через 58 секунд
Я всё понимаю, что вы правы, но как говорится need explanations.

Добавлено через 3 минуты и 20 секунд
И насчет рисоваться движок должен сам. Мне так кажется, что он должен освободиться от этих обязанностей, чтоб визуализация не была зашита в движке.
PM MAIL ICQ   Вверх
Platon
Дата 14.11.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Всё таки задел меня пост Felanа. Движок еще не должен рисоваться по той простой причине, что его потом без проблем можно переделать под клиент-серверные шахматы!!!
И вообще, в этой связи, я теперь осознаю, как полезны были введены мной интерфейсы ChessControll, теперь они могут быть использованы для соединения через сокеты.

Это сообщение отредактировал(а) Platon - 14.11.2007, 17:20
PM MAIL ICQ   Вверх
nornad
Дата 14.11.2007, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Platon @  14.11.2007,  19:23 Найти цитируемый пост)
И насчет рисоваться движок должен сам. Мне так кажется, что он должен освободиться от этих обязанностей, чтоб визуализация не была зашита в движке.

Под рисоваться сам имелось в виду, что у него есть ссылка на объект, который занимается отрисовкой. Но именно движок знает ситуацию на доске, проверяет возможность совершения хода и определяет, есть ли шах, пат, мат. Естественно, что и отрисовка, и лог (сохранение нотации) - это обязанности не конкретно движка, а отдельных объектов. Просто именно движок говорит им, что делать.


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


Эксперт
***


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

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



Цитата(nornad @  14.11.2007,  18:57 Найти цитируемый пост)
Просто именно движок говорит им, что делать.

Вот мы и дошли до истины!!! То о чем ты писал в предыдущих постах, и то что я как раз и сделал.
PM MAIL ICQ   Вверх
Platon
Дата 30.11.2007, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Забросили мы что-то это дело, сейчас я предоставлю вам шустрый моск. играет уже вдумчиво, но не идеально. Кто поиграет, присылайте логи.

Это сообщение отредактировал(а) Platon - 1.12.2007, 10:22
PM MAIL ICQ   Вверх
Kangaroo
Дата 30.11.2007, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

Репутация: 21
Всего: 104



Сыграл быструю партейку)
Есть пару замечаний:
1) У меня что-то с кодировкой Title окна. Непонятные символы.
2) Поставил я мозгу мат, он свой ход пропустил, следующим ходом я скушал его короля(!?), потом все застыло  smile  так и надо?
3) Логгер прилагаю.. какой-то он не читабельный.. или там побитно все записано?

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  logger.log 0,94 Kb


--------------------
Lost....
PM MAIL MSN   Вверх
Kangaroo
Дата 30.11.2007, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

Репутация: 21
Всего: 104



А еще мне очень понравились возможности хода - красивые зеленые цвета.

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  logger.log 0,94 Kb


--------------------
Lost....
PM MAIL MSN   Вверх
Platon
Дата 30.11.2007, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Kangaroo, да там все побайтно всё, но в принципе я не парился. мог бы byte записывать, но я записывал integer. дело непринципиальное.

Спасибо за отзывы, а в тактике какие замечания?
PM MAIL ICQ   Вверх
Platon
Дата 1.12.2007, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



хех, удивительно, логи скачали 6 человек, а игру 1, причем кто положил лог, и что вы там надеетесь увидеть?

Это сообщение отредактировал(а) Platon - 3.12.2007, 22:20

Присоединённый файл ( Кол-во скачиваний: 17 )
Присоединённый файл  Chess.rar 77,99 Kb
PM MAIL ICQ   Вверх
Platon
Дата 1.12.2007, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Добавил возможность конфигурировать игру при запуске...
Цитата

Chess game
There at most 2 parameters
-w  is only parameter, sets chess game to replay game recorded in 'logger.log' file (used along)
-h  human controll (used in both parameters)
-a  Artificial intelligence controll with better heuretic (used in both parameters)
-anew    aliace for -a parameter (used in both parameters)
-aold    Artificial intelligence controll with brute force search (used in both parameters)

PM MAIL ICQ   Вверх
AlexeyVorotnikov
Дата 3.12.2007, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 10
Всего: 18



Так где игру скачать-то можно?


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
Kangaroo
Дата 3.12.2007, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

Репутация: 21
Всего: 104



Цитата(AlexeyVorotnikov @  3.12.2007,  10:59 Найти цитируемый пост)
Так где игру скачать-то можно? 

Двумя постами ранее

Это сообщение отредактировал(а) Kangaroo - 3.12.2007, 12:17


--------------------
Lost....
PM MAIL MSN   Вверх
Platon
Дата 3.12.2007, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Новая версия шахмат улучшенный моск.

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  Chess.rar 79,23 Kb
PM MAIL ICQ   Вверх
Platon
Дата 4.12.2007, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Я тут еще одну фишку сделал, назовем ее шахматной конференцией.
Игрок играет партию, а у людей есть возможность следить за партией онлайн.

Это сообщение отредактировал(а) Platon - 4.12.2007, 15:48
PM MAIL ICQ   Вверх
Maksym
Дата 4.12.2007, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 14
Всего: 62



Поймал логический баг.
Игра не позволила мне сделать взятие на проходе.
Последний ход черных: пешка d7-d5
Хотел ее забрать: пешкой на d6 ... не дает..
Логи и скриншот во вложении.

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  chess.bug.1.rar 29,54 Kb
PM MAIL   Вверх
Platon
  Дата 4.12.2007, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Прошу прощения, удивительно что этот баг выявился :( я его собственными руками душил...
Вот что значит неиспользование CVS
Теперь к сожалению не знаю что делать...
У меня получилось игра сама 160кило  остальные 880кило библиотеки...
Это цена прикрутки сетевой поддержки.

Добавлено через 6 минут и 1 секунду
Уважаемые, мне придется огласить список используемых библиотек.
mina-core-1.1.3.jar
slf4j-log4j12-1.4.2.jar
slf4j-api-1.4.2.jar
log4j-1.2.11.jar
все они лежат здесь

Отдельно игровой jar файл лежит здесь
Отдельно картинки лежать здесь
Всё вместе лижит здесь 

Добавлено через 7 минут и 2 секунды
Может сказал неявно, теперь говорю явно, баг исправлен.
PM MAIL ICQ   Вверх
Platon
Дата 4.12.2007, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Наконец добавил логичное дополнение, удаленная игра.

Для вариантов игры наберите в параметрах -help

Это сообщение отредактировал(а) Platon - 4.12.2007, 22:34

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  Chess.zip 62,05 Kb
PM MAIL ICQ   Вверх
Platon
Дата 5.12.2007, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



На сколько я понял, тема не особо пользуется интересом. Придется закрывать :(
PM MAIL ICQ   Вверх
Platon
Дата 5.12.2007, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Я бы все таки опытных программистов посмотреть мой код, покритиковать, подсказать...

Политика поменялась, теперь кто хочет взглянуть на исходники пишите в личку.

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


Опытный
**


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

Репутация: 10
Всего: 18



Цитата(Platon @ 5.12.2007,  12:56)
На сколько я понял, тема не особо пользуется интересом. Придется закрывать :(

Ничего себе "не пользуется интересом"! Три страницы коментов!


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
Maksym
Дата 6.12.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 14
Всего: 62



Platon
Заявка на фичи:
- подписать координаты на доске
- писать куда-нибудь партию в стандартной нотации

PM MAIL   Вверх
Platon
Дата 6.12.2007, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



^_^ ок щас сделаем.

Я вижу 4 кодера скачали исходники, что скажете?
сам же могу 1-ю переделку подметить.
У меня есть классы для всех фигур, что может и логично, но возможно излишне, я думаю, что можно обойтись одной ChessFigure, но у которой ходы будут просчитывать классы-алгоритмы в паттернах, я не помню как это называется, наверно Стратегия.

А, ну и еще. Если кто посмотрит в класс Engine, там весьма безобразен метод main, наверно по нему плачет паттерн "Строитель", только не могу сообразить как правильно оформить?
PM MAIL ICQ   Вверх
Shaggie
Дата 6.12.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 4
Всего: 72



Цитата(Platon @  6.12.2007,  13:55 Найти цитируемый пост)
У меня есть классы для всех фигур, что может и логично, но возможно излишне, я думаю, что можно обойтись одной ChessFigure, но у которой ходы будут просчитывать классы-алгоритмы в паттернах, я не помню как это называется, наверно Стратегия.

Во-первых, не излишне.
Во-вторых, для стратегии требуются как раз классы наследники, в твоём случае от абстрактного родителя ChessFigure. Смотри, нужно ли оно тебе.

Я коды скачал, но ещё не смотрел.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
Platon
Дата 6.12.2007, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



+ Еще я скатился к тому, что Engine в моем случае получается весьма "рудиментарным" объектом, он почти повторяет интерфейс ChessBoard, но выдает контроллам только копию игровой ситуации, дабы кто то со злым умыслом не сделал запретных операций. Правильно ли это?
Единственная полезная функция Engine заключается в цикле-опросе игроков какой ход сделать и маломальское оповещение слушателей.
PM MAIL ICQ   Вверх
Platon
Дата 6.12.2007, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ПО требованию трудящихся, сделал фичи.

Добавлено через 9 минут и 51 секунду
И теперь, я хочу чтоб прожка могла считывать эти логи...
возник вопрос по регулярному выражению, которое должно подойти?
Вот что я надумал:
Код

/\d+. [BNRQK]([a-h][1-8])[#\+=]-([a-h][1-8])[#\+=]\\t[BNRQK]([a-h][1-8])[#\+=]-([a-h][1-8])[#\+=][!? ]+/

Примеры нотаций:
Цитата

1. e2-e4    e7-e5
2. Bf1-c4    Nb8-c6
3. Qd1-h5    Ng8-f6??
4. Qh5xf7#    



Присоединённый файл ( Кол-во скачиваний: 17 )
Присоединённый файл  Chess.zip 75,49 Kb
PM MAIL ICQ   Вверх
Platon
Дата 7.12.2007, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Опять видимо сказал неявно...
Надумал то надумал, но видимо неправильно...
PM MAIL ICQ   Вверх
Shaggie
Дата 7.12.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 4
Всего: 72



Platon, классные шахматы! Красивые, умеют думать (не особо сильно, но откровенных ляпов не допускают и моими косяками завсегда пользуются), особенно подсветка движения фигур при шахованом короле порадовала.

Но позволю дать один совет - остановись пока! Тебе стоит причесать код, прежде чем двигаться дальше. Я его просмотрел достаточно бегло, но многое само бросается в глаза. Вот например:
Код

    private static void serverGame() {
        final Engine e = new Engine();
        ChessBoardView view = new ChessBoardView(e);
        e.addChessListener(view);
        RemotePlayerControll c1 = new RemotePlayerControll();
        /////////////////////////////////////////////////
        SUtil s = new SUtil();
        s.handler = new OponentWaitor();
        s.register(new ChessNetworkEncoder());
        s.register(new ChessNetworkDecoder());
        s.addMessageHandler(ChessNetworkMessage.class, c1);
        s.connect(GAME_PORT);
        setupConference(e);
        /////////////////////////////////////////////////

        // хе-хе, у меня так фар открывает, нет у него ANSI по умолчанию :(
        JFrame f = new JFrame("╨и╨░╤Е╨╝╨░╤В╤Л");
        f.getContentPane().add(view, BorderLayout.CENTER);
        f.pack();
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        NetworkControll c2 = new NetworkControll(((OponentWaitor)s.handler).waitOpponent(), new HumanControll(e, view));
        e.setFirstPlayer(c2);
        e.setSecondPlayer(c1);
        e.run();
    }

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

Это и к main() относится! У одного хорошего программиста есть замечание о том, как определить качество программы/библиотеки. Первый способ - медленный. Посчитать магические числа и строки (кстати их у тебя тоже немало smile), сопряжённость модулей, качество использования паттернов и т.д. Способ второй - быстрый. Программа неважнец, если её функция main() не помещается в один экран. А тебе надо всего лишь парсинг аргументов коммандной строки вытащить в отдельный метод.

Почему бы не воспользоваться enumerations? В классе ChessBoard, например, они прямо просятся в код вместо интовых костант.

Это всё не так важно для работоспособности программы  smile  Совсем не важно, если подумать, ведь она работает. Но очень полезно окажется впоследствии для 1) расширяемости, 2) твоего собственного опыта написания удобного, читаемого, многоразового кода.

Если хочешь создать увлекательные шахматы (имеется в виду вменяемый компьютерный оппонент), рекомендую к прочтению книгу "Программирование шахмат и других логических игр", автор Евгений Корнилов, издательство "Санкт-Петербугр", 2005.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
Platon
Дата 7.12.2007, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Shaggie @  7.12.2007,  10:35 Найти цитируемый пост)
Посчитать магические числа и строки

Это что такое? Константы? или повторяющиеся куски кода?
Цитата(Shaggie @  7.12.2007,  10:35 Найти цитируемый пост)
Почему бы не воспользоваться enumerations? В классе ChessBoard, например, они прямо просятся в код вместо интовых костант.

Ну, потому что, ими работать не удобно.
Цитата(Shaggie @  7.12.2007,  10:35 Найти цитируемый пост)
// хе-хе, у меня так фар открывает, нет у него ANSI по умолчанию :(

У меня проект в UTF-8 если что.
Цитата(Shaggie @  7.12.2007,  10:35 Найти цитируемый пост)
Совсем не важно, если подумать, ведь она работает.

Абсолютно согласен, с этой целью и выложил исходники, чтоб проконсультироваться по поводу оформления кода.
Цитата(Shaggie @  7.12.2007,  10:35 Найти цитируемый пост)
Красивые, умеют думать (не особо сильно

Не особо сильно, потому что глубина просмотра 2 хода. на 3 уже туго думает.
PM MAIL ICQ   Вверх
Shaggie
Дата 7.12.2007, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 4
Всего: 72





--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
Platon
Дата 10.12.2007, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Shaggie @  7.12.2007,  10:35 Найти цитируемый пост)
Логика отдельно, представление отдельно, сеть отдельно.

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

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

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


 




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


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

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