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

Организационные трудности с написанием игры

30.03.2013, 20:14. Показов 1491. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть задание написать игру для просты пусть будут крестики нолики на поле 5х4. Игра до 4-х подряд. UI в JAVA только начал изучать и в связи с отсутствием опыта есть вопросы:

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

2. Второй вопрос вытекает из первого. Как сделать так, что бы при изменении размеров окна, кнопки меняли свой размер пропорционально. Т. е. если изначально кнопки были квадратными, то при изменении размеров окна они оставались всегда квадратными. Я так понимаю надо кнопки загнать в GridBagLayout и там как-то прописать что бы размер ячейки Layouta был всегда квадратным. Но вот как это сделать? И если в GridLayout кол-во строк и столбцов регулируется просто передачей параметров (5,4), то как оно выставляется в GridBagLayout?

3. Третий вопрос тоже вытекает из первого. Как сделать так, что бы при изменении размеров окна, рисунок на кнопке независимо от размеров кнопки масштабировался и занимал все пространство кнопки, а не просто оставался одного размера?

Собственно это все вопросы, логику игры я запрограммирую без проблем, но вот с отображением бьюсь уже 3-й день. Заранее скажу, что в гугле гуглил и тех. статьи читал. Заранее благодарен за любую помощь.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.03.2013, 20:14
Ответы с готовыми решениями:

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

Трудности в начале процесса разработки игры
Всем привет! Только начал работать с Unity, поэтому в процессе накопилось несколько моментов, решил их озвучить одним постом. ...

Проблемы с написанием игры "Шахматы"
Доброго времени суток. При создании программы "Шахматы" столкнулся с двумя проблемами: 1. Ферзь умеет прыгать через фигуры, и отучить...

9
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
30.03.2013, 20:44
если вы планируете рисунки то вам лучше зафиксировать размеры окна (так как чем больше их масштабировать тем размытее они будут), если вам нужна динамическая форма, то рисунки на кнопках должны рисоваться векторно и занимать выделеный процент кнопки динамически базируясь на её размерах.
чтобы всё всегда было квадратным повесте листенер на изменения размера окна и если меняют ширину, изменяйте пропорционально и длину и наоборот ну и вырубите максимизацию, так вы получите то что вы хотите
1
17 / 17 / 1
Регистрация: 28.03.2013
Сообщений: 80
30.03.2013, 21:16  [ТС]
Цитата Сообщение от mutagen Посмотреть сообщение
если вы планируете рисунки
А можно как-то иначе решить эту задачу? Это просто первое, что приходит в голову. Если есть какой-то способ обойтись без рисунка, то я буду только за.

Цитата Сообщение от mutagen Посмотреть сообщение
занимать выделеный процент кнопки динамически базируясь на её размерах.
А как это написать? Я искал что-то такое, но возможно просто не так искал.

На счет листнера на изменение размера окна, скорее всего так и сделаю. Единственный вопрос, какой метод возвращает текущий размер окна?
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
30.03.2013, 23:19
надо просто создать свой компонент на базе JButtton и оверриднуть его метод paintComponent, а в нём уже рисовать поверх компонента крестик или нолик
1
17 / 17 / 1
Регистрация: 28.03.2013
Сообщений: 80
02.04.2013, 23:04  [ТС]
Большое спасибо за предыдущие ответы, я разобрался и у меня получилось реализовать графику игры. Теперь стоит вопрос такого плана:
1. Перед тем как собственно играть, нужно ввести имена игроков, а после этого уже выводить ту графику которую я писал. Как я себе это представляю, после запуска исполняемого файла у меня появляется окно в котором создан фрейм, а в фрейме размещены:
Надпись "Введите имена игроков"
и ниже 2 JTextField.
И еще ниже кнопка "Начать игру!". Так вот, по нажатию кнопки мне нужно загнать значения TextFieldов в переменные, убрать фрейм с вводом игроков и вывести фрейм с полем для игры(тот самый фрейм с кнопочками). Как реализуется смена этих фреймов? Я очень плохо себе это представляю. Возможно есть какой-то пример?
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
02.04.2013, 23:57
Java
1
2
3
JFrame
frame1.setVisible(false);
frame2.setVisible(true);
1
17 / 17 / 1
Регистрация: 28.03.2013
Сообщений: 80
03.04.2013, 20:40  [ТС]
А, то есть все просто

Добавлено через 18 часов 43 минуты
В результате я накидал такую менюшку:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.*;
 
 
public class Login extends JFrame{
    JLabel jLabel = null;
    JTextField Player1 = null;
    JTextField Player2 = null;
    JButton Start = null;
    String player1;
    String player2;
     public Login()
       {    
          
          super();
          this.setSize(300, 200);
          this.setResizable(false);
          getContentPane().setBackground(Color.blue); 
          setLayout(new BorderLayout());
          jLabel = new JLabel();
          Font font = new Font("Verdana", Font.BOLD, 18);
          jLabel.setFont(font);
          jLabel.setText("Введите имена игроков: ");
          jLabel.setForeground(Color.green);
          setLayout(new FlowLayout());
          Player1 = new JTextField(20);
          Player2 = new JTextField(20);
          Start = new JButton("Начать игру"); 
          add(jLabel);
          add(Player1);
          add(Player2);
          add(Start);
          StartAction StartList = new StartAction();
          Start.addActionListener(StartList);
       }
     
         private class StartAction implements ActionListener
         {
            public void actionPerformed(ActionEvent event)
            {
                player1 = Player1.getText();
                player2 = Player2.getText();
                Login.setVisible(false);
            }
         }
         
           public static void main(String[] args)
           {
                  Login L = new Login() ;
                  L.setVisible(true);         
           }
}
В методе ActionPerformed мне нужно выключить фрейм Login. Строка типа Login.setVisible(false); или просто setVisible(false); вызывает ошибку. И как мне в обработчике событий закрыть этот фрейм и включить фрейм под названием Game? Возможно я просто туплю и все просто?
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
03.04.2013, 21:19
Цитата Сообщение от Andrew_zp1 Посмотреть сообщение
Login.setVisible(false); или просто setVisible(false); вызывает ошибку
Эти методы надо вызывать на объекте
0
17 / 17 / 1
Регистрация: 28.03.2013
Сообщений: 80
03.04.2013, 21:33  [ТС]
Это ясно, вопрос собственно в том как мне обратиться к объекту в обработчике событий? Просто написать L.setVisible(false); в обработчике нельзя.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
04.04.2013, 02:05
Java
1
Login.this.setVisible(false);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.04.2013, 02:05
Помогаю со студенческими работами здесь

Организационные доки
Может у кого есть какая либо орг. документация. Интересует что-то вроде: - Регламент резервного копирования - Регламент прав доступа ...

Чем можно заменить организационные юниты?
Работа на виндоус сервере. вопрос заключается в - Чем можно заменить организационные юниты? Аналог организационных юнитов.

помогите с написанием
вобщем суть такая. есть у меня две кофемашины/саеко виена и саеко диджитал/,у обоих процы ушли,так сказать.по тому что нашел в гугл...

Сборка ПК "для себя" - игры, игры, игры! Киев, бюджет 8300 грн с монитором.
Всем доброго времени суток. 1. Бюджет примерно 8300 грн (с монитором) 2. Украина, г. Киев, намерен покупать на http://rozetka.com.ua/...

Помогите с написанием формул.
Проверте написание формул пожалуйста. 1.P:= Exp(ln (e) * (I * t)); q:= 1 - P; T1:= 1 / I; 2.begin sigma:=...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 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 считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru