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

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

30.03.2013, 20:14. Показов 1487. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Новый 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? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru