用Java实现一个简单的游戏(与图形相关)

用Java实现一个简单的游戏(与图形相关),java,graphics,java-2d,Java,Graphics,Java 2d,我是Java游戏编程新手,尤其是在图形方面,因此我想寻求一些关于如何用Java图形化实现以下游戏的建议 游戏非常简单,它显示了一个正方形,这个正方形被进一步划分为一个2x2的盒子,游戏的目的是将总共44个芯片放入这4个盒子中,用户应该能够将芯片从一个盒子拖放到另一个盒子中 就这样!我的问题是: 是否有现成的图库,我可以用来绘制由4个盒子和芯片组成的正方形 如果1)的答案是否定的,那么是否有任何教程可以让我自己编写 如何以图形方式实现拖放部件 非常感谢。芯片可以通过添加到JLabel的图标来表示

我是Java游戏编程新手,尤其是在图形方面,因此我想寻求一些关于如何用Java图形化实现以下游戏的建议

游戏非常简单,它显示了一个正方形,这个正方形被进一步划分为一个2x2的盒子,游戏的目的是将总共44个芯片放入这4个盒子中,用户应该能够将芯片从一个盒子拖放到另一个盒子中

就这样!我的问题是:

  • 是否有现成的图库,我可以用来绘制由4个盒子和芯片组成的正方形
  • 如果1)的答案是否定的,那么是否有任何教程可以让我自己编写
  • 如何以图形方式实现拖放部件

  • 非常感谢。

    芯片可以通过添加到JLabel的图标来表示

    正方形可以用JPanel表示


    首先阅读上Swing教程中的部分。还有其他感兴趣的部分:如何使用面板、使用布局管理器、如何编写鼠标侦听器、可能的拖放部分。

    芯片可以通过添加到JLabel的图标来表示

    正方形可以用JPanel表示


    首先阅读上Swing教程中的部分。还有其他感兴趣的部分:如何使用面板、使用布局管理器、如何编写鼠标侦听器、可能的拖放部分。

    我会使用画布和覆盖绘画(Graphics g)并使用它绘制各种元素。然后可以使用计时器或游戏循环调用repaint()

    public class MyCanvas extends Canvas
    {
        public void gameLoop()
        {
            //Don't do it this way, this is just a quick example.
            //Instead look up better game loop options.
            while (true)
            {
                repaint(); //automatically calls paintComponent
                Thread.yield();
            }
        }
    
        //Put all the stuff that gets drawn in here.
        //@Override
        public void paint(Graphics g)
        {
            super.paint(g);
    
            for (int i = 0; i < chips.size(); i++)
            {
                chips.get(i).draw(g);
            }
        }
    }
    
    public class Chip
    {
        private int x;
        private int y;
    
        public void draw(Graphics g)
        {
            g.setColor(Color.BROWN);
            g.fillRect(x, y, 50, 50);
            //etc.
        }
    }
    
    公共类MyCanvas扩展了Canvas
    {
    public void gameLoop()
    {
    //不要这样做,这只是一个简单的例子。
    //而是寻找更好的游戏循环选项。
    while(true)
    {
    repaint();//自动调用paintComponent
    螺纹屈服强度();
    }
    }
    //把所有的东西都放在这里。
    //@凌驾
    公共空间涂料(图g)
    {
    超级油漆(g);
    对于(int i=0;i
    我会使用画布和覆盖绘画(图形g)并使用它绘制各种元素。然后可以使用计时器或游戏循环调用repaint()

    public class MyCanvas extends Canvas
    {
        public void gameLoop()
        {
            //Don't do it this way, this is just a quick example.
            //Instead look up better game loop options.
            while (true)
            {
                repaint(); //automatically calls paintComponent
                Thread.yield();
            }
        }
    
        //Put all the stuff that gets drawn in here.
        //@Override
        public void paint(Graphics g)
        {
            super.paint(g);
    
            for (int i = 0; i < chips.size(); i++)
            {
                chips.get(i).draw(g);
            }
        }
    }
    
    public class Chip
    {
        private int x;
        private int y;
    
        public void draw(Graphics g)
        {
            g.setColor(Color.BROWN);
            g.fillRect(x, y, 50, 50);
            //etc.
        }
    }
    
    公共类MyCanvas扩展了Canvas
    {
    public void gameLoop()
    {
    //不要这样做,这只是一个简单的例子。
    //而是寻找更好的游戏循环选项。
    while(true)
    {
    repaint();//自动调用paintComponent
    螺纹屈服强度();
    }
    }
    //把所有的东西都放在这里。
    //@凌驾
    公共空间涂料(图g)
    {
    超级油漆(g);
    对于(int i=0;i
    可能应该移动到gamedev.stackexchange。虽然已经有一个类似的问题可以提供答案:可能应该移动到gamedev.stackexchange。虽然已经有一个类似的问题可以提供答案:这对我开始学习非常有帮助。只是一个简单的后续问题:假设您将这些JLabel(代表芯片)添加到JPanel(代表一个盒子)中,这是否意味着我必须确保4个盒子中的每一个都足够容纳44个芯片(在极端情况下)?我真的不建议在这个或任何游戏中使用JLabel。它的速度非常慢,并且有很多限制。@skyork,使用网格布局来保存标签。@Eli,再次阅读游戏说明。用户将图标从一个正方形拖动到另一个正方形。这不是一个到处都是子弹和东西的射击游戏。是的,但是他们可以用更少的工作以适当的方式做同样的事情,因此如果他们想添加粒子效果或更漂亮的动画或其他东西,他们会被设置为去做。不如先用正确的方法学习,不是吗?这对我开始学习很有帮助。只是一个简单的后续问题:假设您将这些JLabel(代表芯片)添加到JPanel(代表一个盒子)中,这是否意味着我必须确保4个盒子中的每一个都足够容纳44个芯片(在极端情况下)?我真的不建议在这个或任何游戏中使用JLabel。它的速度非常慢,并且有很多限制。@skyork,使用网格布局来保存标签。@Eli,再次阅读游戏说明。用户将图标从一个正方形拖动到另一个正方形。这不是一个到处都是子弹和东西的射击游戏。是的,但是他们可以用更少的工作以适当的方式做同样的事情,因此如果他们想添加粒子效果或更漂亮的动画或其他东西,他们会被设置为去做。不如先用正确的方法学习,不是吗?-1。再次阅读游戏描述。这不是一个需要游戏循环的游戏。画布也没有paintComponent()方法。请更正paintComponent,我的错误。如果您正在重写JPanel或类似的东西,则会出现这种情况。然而,我认为你给我-1是没有道理的,我的观点仍然很正确。你正在教skyork使用Swing元素来制作游戏,如果他需要任何灵活性,他应该使用图形。应用程序使用Swing,游戏使用图形或OpenGL。同样,这不是需要“游戏循环”的游戏类型。这是一个简单的游戏,用户将组件从一个正方形拖到另一个正方形。仅仅因为用户称这是一个“图形游戏”,并不意味着它是一个在您试图推广的上下文中。阅读游戏