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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Еще одна игрушка с развитым гипотоламусом, aka Шахматы 
:(
    Опции темы
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.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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