С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
1 / 1 / 1
Регистрация: 13.04.2015
Сообщений: 31

Прорисовка доски для игры в нарды, и совершение ходов

05.02.2016, 23:12. Показов 4715. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Ребята, разрабатываю короткие нарды в качестве учебного проекта на Java. Возник вопрос, ответ на который не могу найти абсолютно нигде. С консольным вариантом приложения вроде проблем не возникло особых. Хочу написать пользовательский интерфейс с красивой доской, фишками и зарами. Вот, собственно, и вопрос назрел. Есть у меня, например, красивая фотка доски, я ее загружаю в свою программу без проблем вот таким образом:

Java
1
2
3
            Image chessPiece;
            chessPiece = new ImageIcon("desc.jpg").getImage();
            g.drawImage(chessPiece,0,0,this);
Все идет как надо, доска отображается на моем JFrame. Подскажите, каким образом можно организовать перемещения фишек по данной доске(фотографии доски). Я в программировании уже и не новичок, но еще и не Junior, поэтому прошу вашей подсказки. Большое спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.02.2016, 23:12
Ответы с готовыми решениями:

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

Приложение для игры в нарды
Здравствуйте. Подскажите пожалуйста где можно найти исходник игры нарды или саму технологию создания игры нарды. Не оставляйте без...

Программа для вывода возможных ходов коня по клику на клетку шахматной доски
Что-то много в интернете про коня, но в основном по расчету максимально возможных ходов. А вот чтобы на графически нарисованном шахматном...

7
50 / 49 / 25
Регистрация: 05.02.2016
Сообщений: 146
06.02.2016, 16:48
Привет. Все очень просто:

Пишем примерно такой класс:
Java
1
2
3
4
5
6
7
8
9
    class MyJPanelPainter extends JPanel {
 
        @Override
        public void paint(Graphics g) {
            super.paint(g);
            g.drawImage(desk, 0, 0, this);
            g.drawImage(f_white, f_white_1_x, f_white_1_y, this);
        }
    }
Там, где делаем JPanel на котором будем рисовать, пишем что-то вроде:
Java
1
   JPanel jPanel1 = new MyJPanelPainter();
Также где-то у нас должны быть картинки и координаты фишек:
Java
1
2
3
4
    final Image desk = new ImageIcon(getClass().getResource("/images/desk.png")).getImage();
    final Image f_white = new ImageIcon(getClass().getResource("/images/f_white.png")).getImage();
    volatile int f_white_1_x = 25;
    volatile int f_white_1_y = 25;
Само сдвигание фишки выглядит, например, так:
Java
1
2
3
4
5
6
7
8
9
            for (int i = 0; i < 35; i++) {
                f_white_1_x++;
                jPanel1.repaint();
                try {
                    Thread.sleep(10);
                } catch (InterruptedException ex) {
                }
            }
        }).start();
Вместо простого сдвигания фишки вправо нужно придумать алгоритм поинтереснее

Вот как-то так.
0
1 / 1 / 1
Регистрация: 13.04.2015
Сообщений: 31
06.02.2016, 19:50  [ТС]
примерно понятно, буду разбираться, огромное спасибо!!!!!

Добавлено через 17 минут
Можешь объяснить, пожалуйста, почему переменным volatile int f_white_1_x и volatile int f_white_1_y присвоено значение 25? И не совсем понял, что делает цикл. Получается, что он каждый тридцать пятый раз увеличивает координату х белой фишки на 1 и перерисовывает JFrame с задержкой в 10 миллисекунд. Не пойму почему условие
(i < 35), откуда взято значение 35? И получается, что этот цикл выполняется в отдельном потоке? В общем, объясни немного, пожалуйста, а то не совсем понятно.
0
50 / 49 / 25
Регистрация: 05.02.2016
Сообщений: 146
06.02.2016, 23:28
По поводу значений 25 и 35 - это же просто пример. Я когда у себя это все делал, нагуглил быстренько картинку доски, и 25, 25 - это получились координаты первой белой фишки, а 35 - это расстояние сдвига до соседнен позиции. На другой картинке доски будут, соответственно, другие координаты. Надо подгонять
По поводу цикла. В данном примере переменная f_white_1_x - это координата x первой белой фишки, хотя по-хорошему бы надо хранить координаты фишек в массиве, но раз сейчас мы говорим только про рисование, пусть на доске будет всего одна фишка - такая сферическая в вакууме
Так вот цикл этот 35 раз сдвигает координату фишки вправо на 1 точку и каждый раз перерисовывает всю доску. Так получатся анимация. Вообще, надо сделать красивее - чтобы фишка на просто ехала, а, например, прыгала или переворачивалась. Вобщем, надо фантазировать... Может гифок анимационных навтыкать... С ними, кстати, есть нюанс - если сделать g.drawImage(анимационный гиф...) то он сам запустит отдельный поток, который будет автоматом постоянно перерисовывать всю сцену.
А анимация должна запускатья в отдельном потоке. Это лучше в документации про Swing глянуть, там не сложно, но и не в одно прдложение
Могу выложить весь код, который у меня получился, но просто я делал в Нетбинсе, а он при рисовании окошечек и нопочек делает в коде некую галиматью, которая бы только отвлекала
0
1 / 1 / 1
Регистрация: 13.04.2015
Сообщений: 31
07.02.2016, 02:19  [ТС]
все понял, еще раз огромное спасибо, буду пробовать ))

Добавлено через 2 часа 5 минут
Еще один вопрос, наверное задолбал уже, просто инфы нигде нету, не обессудь) короче, допустим есть у меня метод posibleMoves(), который принимает на вход координаты фишки, и возвращает массив с допустимыми ходами. Все координаты фишек и их количество на определенном поле доски хранятся в массиве int[] countFishkas[24]. 24 потому что на доске 24 поля всего. В массиве хранится количество фишек на определенном поле. Есть еще один массив такой же размерности, где хранятся цвета фишек. Например, я вызываю метод posibleMoves с параметром 0, он смотрит какого цвета фишки в нулевой ячейке доски и возвращает допустимые хода. Так вот, как привязать это все дело к графическому интерфейсу? Допустим я клацаю мышкой на определенное поле своей картинки доски, и подсвечиваются все возможные хода. Я так понимаю нужно имплементить интерфейс mouse listener, а именно метод onClickListener(). Не мог бы ты натолкнуть на мысль, как все это соединить, спасибо.
0
50 / 49 / 25
Регистрация: 05.02.2016
Сообщений: 146
07.02.2016, 17:03
Чтобы отловить мышу, надо там, где инициализируется JPanel (мы же рисуем на панели), сделать addMouseListener:
Java
1
2
3
4
5
6
7
        jPanel1.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                // Координаты мыши берутся e.getX() и e.getY()
                // Зная их можно понять в какое поле тыкнул чел.
            }
        });
Интересно, а подсвечивание поля можно сделать картинкой с прозрачностью? Я не пробовал.
1
1 / 1 / 1
Регистрация: 13.04.2015
Сообщений: 31
07.02.2016, 17:30  [ТС]
Я как раз думаю так и сделать. Короче, получается надо как-то сопоставить мой массив с количеством фишек в полях и реальные координаты полей в пикселях на картинке. И при нажатии на определенное поле картинки вызывать метод, параметром которого будет индекс массива, соответствующий нажатому полю. Буду пробовать, как что-либо получится, отпишусь.
ЗЫ: спасибо за подсказки, фигуры выставил на доске, осталось только движение правильное замутить.
0
0 / 0 / 0
Регистрация: 27.05.2015
Сообщений: 2
20.09.2022, 22:53
Alex-Borshch, подскажите как с вами связаться можно? Нужна для курсовой разработка такой же игры, купил бы у вас ее)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.09.2022, 22:53
Помогаю со студенческими работами здесь

Class ходов шахматной доски 10х10
Не знаю как переделать без ошибок исходный class ходов шахматной доски 8х8 Матрицу 8х8 дал программист,она работает на доске 8х8 ...

Наименьшее количество ходов для прохождения игры, алгоритм Дейкстры
Есть игра. Она собой представляет прямую линию. Цель игры достаться от начала в точке с координатой 0, к финишу. По пути могут встречаться...

Найти кол-во ходов коня с определенной позиции шахматной доски
прога должна находить кол-во ходов, что может сделать шахматная фигура конь, определённой позиции для шахматной доски. При этом в каждой...

Обход ферзем всех полей доски за 15 ходов (начиная в С3, заканчивая в F6)
Есть такой код, но решает задачу с поля А1 и за 14 ходов. Как переделать код под задание: ферзь находится на поле С3 шахматной доски....

Изменить правила игры короткие нарды на длинные
Здравствуйте, а возможно ли имея исходник коротких нард сделать из них длинные с помощью изменения скрипта? Если да, то каким образом. Могу...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru