Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 1
Регистрация: 26.09.2015
Сообщений: 40

Оцените написанную игру

19.04.2016, 09:16. Показов 1040. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, написал игру - сетевые шахматы между игроками. Выложил на github, было бы круто узнать что скажут хорошие программисты, особенно по архитектуре и пр. моментам)

Игра: https://github.com/n-demidov/NetChess
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.04.2016, 09:16
Ответы с готовыми решениями:

Как защитить игру?
Приветствую! Допустим, я написал на UE4 игру. Как мне ее защитить от копирования и запуска на другом компьютере?

Запустить игру, написанную на Java-языке
Доброго времени суток... Столкнулся с такой проблемой, мне нужно запустить игру написанную на ява языке, вот код: using System; ...

Как сохранить написанную игру в Delphi 7
Пишу игру по курсовой работе. Нужно сделать сохранение и загрузку игры в MainMenu, но облазив кучу форумов, так и не понял, как сохранять...

9
12 / 4 / 0
Регистрация: 23.11.2014
Сообщений: 390
25.04.2016, 05:33
ты всё сам писал или использовал готовый движок?

Добавлено через 2 минуты
где изображения фигурок взял?
0
1 / 1 / 1
Регистрация: 26.09.2015
Сообщений: 40
25.04.2016, 11:05  [ТС]
всё сам, ну по Netty - смотрел обучалки, искал примеры, по JavaFX также, чё-то там на форумах пару раз спрашивал + гуглил вопросы, попутно продолжал обучаться.

Архитектуру\логику было интересно самому написать, а потом посмотреть как сделали другие. Вопросов потому что куча) Но руки так и не дошли посмотреть как в других приложениях.

Картинки с какого-то шахматного приложения на гитхабе взял

Добавлено через 2 часа 50 минут
Но шахматного бота я не писал - у меня только игроки могут играть друг с другом по сети.
0
12 / 4 / 0
Регистрация: 23.11.2014
Сообщений: 390
25.04.2016, 17:39
видел на андроиде, как много шахмат около сотни.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
25.04.2016, 18:39
wikkk, сделайте мултимодульный проект, вместо трёх отдельных. Там будет намного проще смотреть.
0
1 / 1 / 1
Регистрация: 26.09.2015
Сообщений: 40
14.05.2016, 17:25  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
wikkk, сделайте мултимодульный проект, вместо трёх отдельных. Там будет намного проще смотреть.
Взгляните, пожалуйста, правильно ли сделал мультимодульный проект?
0
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
15.05.2016, 10:13
Ну не совсем логично раскидано по пакетам, это моё субъективное мнение.

А вот чисто по коду могу сказать следующее;

1) штуки типа
Java
1
if (nextLaunch.before(Calendar.getInstance().getTime()))
выносят в отдельный метод, с понятным названием

2) собственно не советую выносить блоки так, как вы это делаете, т.е. вместо
Java
1
2
3
4
if (nextLaunch.before(Calendar.getInstance().getTime()))
{
     // something
}
лучше
Java
1
2
3
if (nextLaunch.before(Calendar.getInstance().getTime())) {
     // something
}
так просто принято, это приятнее читается, экономит строку

3) у вас было что-то вроде
Java
1
2
for (final User playingUser : gameManager.getPlayingUsers(game))
            connectionManager.sendToUser(playingUser, gameMsg);
и примерно это же было где-то вообще в 1 строку.
Всегда заворачивайте блоки в фигурные скобки, не важно if это или for, однажды вы возможно допустите ошибку и будете её долго искать
Аналогично;
Java
1
if (isSendCurrentGame) messages.add(getCurrentGameMsg(user));
Собственно если это java8 то можно вообще streams использовать

4) вот это трешово смотрится;
Java
1
2
3
4
return new UserProfile(user.getName(), user.getRank(),
                user.getWins(), user.getDefeats(), user.getDraws(),
                user.getTotalTimeOnServer() + connectionManager.getUserCurrentTimeOnServer(user),
                isInvited, isPlaying
можно же было конструктор сделать отдельный

5) какие-то вещи повторяются в разных классах, т.е. их вообще следует вынести в отдельный класс, или если java8 то мб интерфейс с default поведением
0
1 / 1 / 1
Регистрация: 26.09.2015
Сообщений: 40
16.05.2016, 08:39  [ТС]
Спасибо!

Цитата Сообщение от dzrkot Посмотреть сообщение
4) вот это трешово смотрится;
Java
1
2
3
4
return new UserProfile(user.getName(), user.getRank(),
                user.getWins(), user.getDefeats(), user.getDraws(),
                user.getTotalTimeOnServer() + connectionManager.getUserCurrentTimeOnServer(user),
                isInvited, isPlaying
можно же было конструктор сделать отдельный
Тут как было: У меня есть класс AbstractUser, от которого наследуются три класса: User, UserProfile и Player.
Изначально встал вопрос: отправлять ли на клиент тот же самый класс User (и занулять пароли\сделать transient), либо создать отдельный класс и отправлять его. Выбрал второй вариант, т.к. в UserProfile добавляются еще дополнительно два свойства: находится ли игрок в сети и был ли приглашён в игру. И конструктор в классе UserProfile не могу сделать, потому что в общая библиотека и клиент даже не знают о существовании класса User. А засорять класс User мне тоже как-то не захотелось.
Возможно стоило бы создать отдельный класс Converter...

Аналогично у меня сделан класс Player, которому добавились чисто игровые свойства: цвет игрока, очки, оставшееся время на ход и пр. Также благодаря этому можно знать какое состояние было у игрока на начало игры (для истории).

Цитата Сообщение от dzrkot Посмотреть сообщение
Ну не совсем логично раскидано по пакетам, это моё субъективное мнение.
...
5) какие-то вещи повторяются в разных классах, т.е. их вообще следует вынести в отдельный класс, или если java8 то мб интерфейс с default поведением
А как их лучше раскидать?))
0
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
16.05.2016, 10:38
Цитата Сообщение от wikkk Посмотреть сообщение
И конструктор в классе UserProfile не могу сделать, потому что в общая библиотека и клиент даже не знают о существовании класса User.
не понял... вы же на сервере создаёте UserProfile... и вам ничего не мешает создать констурктор или статический метод-инициализатор в userProfile, который принимает User и читает всё необходимое... Если это уц вас только в 1 месте встречается, и вы ничего не планируете менять, то можно конечно и оставить, но практика показывает, что такие вещи встречаются не в 1 месте, и засорять такими вызовами логику не стоит, лучше создать конструктор или метод...
Цитата Сообщение от wikkk Посмотреть сообщение
А как их лучше раскидать?))
чтобы ответить, мне надо изучить проект, я не особо его смотрел... но пакеты game , users , network внутри model для меня не очень понятны...
1
1 / 1 / 1
Регистрация: 26.09.2015
Сообщений: 40
16.05.2016, 11:19  [ТС]
Цитата Сообщение от dzrkot Посмотреть сообщение
не понял... вы же на сервере создаёте UserProfile... и вам ничего не мешает создать констурктор или статический метод-инициализатор в userProfile, который принимает User и читает всё необходимое... Если это уц вас только в 1 месте встречается, и вы ничего не планируете менять, то можно конечно и оставить, но практика показывает, что такие вещи встречаются не в 1 месте, и засорять такими вызовами логику не стоит, лучше создать конструктор или метод...
Создаю на сервере, да, но сам класс UserProfile находится в проекте NetChessCommon. И эта общая библиотека ничего не знает о классе User - т.к. класс User находится в проекте NetChessServer. Это чтобы клиент ничего не знал о классе User и его туда случайно нельзя было передать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.05.2016, 11:19
Помогаю со студенческими работами здесь

Где можно продать написанную 2D игру
Кто скажет где можно продать написанную 2D игру? заранее благодарен)))

Оцените игру
оцените пожалуйста игру и сделайте вердикт program pbnd; uses crt; var ...

Оцените игру-шутер
uses graphabc,events,Timers; type massiv=array of integer; var x1,y1,x2,y2:massiv; x:array of integer; y:array of integer; ...

Оцените простенькую игру
Написал небольшую игру, Суть в том что бы угадать число. Я старался хорошо закомментировать код и сделать его наиболее читабельным на...

Оцените консольную игру
Консольная игра, летает самолетик, убивает всякие бяки. Управление: движение - стрелочки стрельба - пробел магазин - 1 вкл./выкл....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru