Простая Java-игра - небольшие проблемы

В прошлом году я сделал несколько простых Java-приложений [я студент инженерного факультета, и я влюбился в Java в последний семестр] - я много узнал о классах, объектах, слушателях и многом другом. Проблема в том, что мне пришлось использовать необычные библиотеки (я думаю, что они были оптимизированы, чтобы сократить некоторые длинные части кода и просто позволить нам сосредоточиться на объектно-ориентированных основах) - вот ссылка: http://useobjects.net/ (никогда не видел их нигде). Сейчас я пытаюсь создать простую игру на Java (карточная игра, скажем, что-то вроде пасьянса) БЕЗ использования этих библиотек - только с Swing и другими общеизвестными "основными" библиотеками Java - и у меня возникают различные (обычно небольшие) проблемы с в основном "повседневными" простыми заданиями.

Первая проблема - как добавить изображение из файла в Java? Скажем, у меня есть карта класса, которую можно показать или перевернуть, и мне нужно использовать 2 изображения (одно для задней и одно для передней); и я не смог найти учебник, объясняющий весь процесс с BufferedImage, View, Image,... и так далее. (для сравнения, в библиотеках, упомянутых выше, это было просто что-то вроде этого:

ImageView cardBack = new ImageView(positionX, positionY, height, width, filepath, angle etc.);

и изображение было добавлено, и задача была выполнена.

Вторая проблема связана с основным окном приложения. В нашей старой библиотеке это было что-то вроде этого в основном классе:

MainWindow mainWindow = new MainWindow(title,height,width);
GroupView mainGroup = mainWindow.getRootGroup();

Но когда я попытался что-то выяснить о создании окна, я нашел только JFrame-решение и хотел бы попросить вас привести простой пример реализации и, возможно, как вообще решить классы (если я должен создать класс "Main" где JFrame будет просто элементом, или сделать что-то вроде класса MainWindow и создать JFrame внутри этого класса, и создать экземпляр этого класса в Main, или... просто, я боюсь, что мои знания Java-кодирования и XP не полностью совместим с соглашениями, поэтому я прошу некоторые рекомендации таким образом).

Большое вам спасибо.

2 ответа

"Сейчас я пытаюсь создать простую игру на Java (карточная игра, скажем, что-то вроде пасьянса) БЕЗ использования этих библиотек - только с использованием swing и других общеизвестных" базовых "библиотек Java".

Прежде всего, предоставленный вами код не является ядром Java. Это JavaFX. Если вы хотите изучать Swing, уроки Oracle - хороший способ начать. В этой ссылке вы найдете опции для Swing или JavaFX trails

Что касается изображений, у вас есть варианты. Вы можете загрузить ImageIcon на JLabel или вы можете нарисовать его на JPanel или же JComponent, Оба варианта можно увидеть в этой теме

"Если я должен создать класс"Main", где JFrame будет просто элементом, или создать что-то вроде класса MainWindow, создать JFrame внутри этого класса и создать экземпляр этого класса в Main"

См. Расширяет JFrame против создания его внутри программы. Если вы пройдете несколько учебных пособий по приведенной выше ссылке, вы быстро ознакомитесь с хорошими практиками, просто взглянув на примеры кода.

Вы можете начать со следующего кода:

public static void show() throws Exception
{
    final BufferedImage image = ImageIO.read( new File( "<path>" ) );

    JFrame window = new JFrame();
    window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    window.setSize( 300, 300 );

    window.setLayout( new BorderLayout() );
    window.add( new JLabel( "My Image name" ), BorderLayout.NORTH );
    window.add( new JImage( image ), BorderLayout.CENTER );

    window.setVisible( true );
}

static class JImage extends JPanel implements MouseListener
{

    private BufferedImage image;

    public JImage( BufferedImage image )
    {
        this.image = image;
        addMouseListener( this );

    }

    @Override
    protected void paintComponent( Graphics g )
    {
        super.paintComponent( g );
        g.drawImage( image, 0, 0, null ); // see javadoc for more info on the parameters
    }

    @Override
    public void mouseClicked( MouseEvent ev )
    {
        System.out.println( String.format( "mouse clicked (x:%d, y:%s)", ev.getX(), ev.getY() ) );
    }

    @Override
    public void mouseEntered( MouseEvent arg0 )
    {}

    @Override
    public void mouseExited( MouseEvent arg0 )
    {}

    @Override
    public void mousePressed( MouseEvent ev )
    {
        System.out.println( String.format( "mouse pressed (x:%d, y:%s)", ev.getX(), ev.getY() ) );
    }

    @Override
    public void mouseReleased( MouseEvent ev )
    {
        System.out.println( String.format( "mouse released (x:%d, y:%s)", ev.getX(), ev.getY() ) );
    }
}

это создает простое окно, содержащее изображение и метку сверху. вам, вероятно, стоит подумать о переходе на JavaFX, но я, честно говоря, мало что знаю о программировании пользовательского интерфейса Java на стороне клиента.

Другие вопросы по тегам