《Java小游戏实现》:坦克大战

《Java小游戏实现》:坦克大战

前面写了一个简单的聊天小程序,今天开始就写一个坦克大战的游戏,算是对Java相关小知识点的一个应用。

这个游戏的完成,我们也是分步完成,逐步累加,一个一个小功能的添加,最后直至完成整个游戏的开发。

第一步:写一个界面

    public class TankClient extends JFrame{
   

        public static void main(String[] args) {
            new TankClient().launchFrame();
        }

        public void launchFrame(){

            this.setTitle("坦克大战");
            this.setLocation(300, 400);
            this.setSize(300, 400);
            //this.setBackground(Color.RED);
            this.getContentPane().setBackground(Color.RED);
            //为关闭窗口添加响应
            this.addWindowListener(new WindowAdapter(){

                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }

            });
            //设置是否允许用户改变窗口的大小,这里限制下,不允许
            this.setResizable(false);
            this.setVisible(true);
        }

    }

以上就是为坦克大战写了一个界面,这是我们的第一步,算是完成了。

在完成这个界面时,遇到了一点小小的问题,这里有必要说明下,本来我想将这个界面设置一个背景颜色,但是使用
this.setBackground(Color.RED);就是不能成功,于是百度了下,这是由于我这里继承的是JFrame,而不是Frame,如果是继承的是Frame,则就可以通过this.setBackground(Color.RED)来设置颜色。如果我们选择的是继承JFrame,则需要使用this.getContentPane().setBackground(Color.RED)来设置背景颜色。

出现上面的原因如下:Frame和JFrame的窗口层次结构不同,JFrame的窗口包括:JFrame、Root Pane、Layered pane、Content Pane、Glass Pane;而Frmae窗口包括:Frame、Content Pane。

其次,窗口背景颜色是指直接调用JFrame或者Frame的setBackground(Color color)方法设置后显示出来的颜色。其实,JFrame在你直接调用这个方法后,你的确设置了背景颜色,而你看到的却不是直接的JFrame或者Frame,而是JFrame.getContentPane().而JFrame上的contentPane默认是Color.WHITE的,所以,无论你对JFrame或者Frame怎么设置背景颜色,你看到的都只是contentPane.因此,

    this.setBackground(Color.RED);
    his.getContentPane().setVisible(false);//得到contentPane容器,设置为不可见

也可以解决JFram设置的背景颜色的问题。

第二步:在界面上显示一个坦克图标

有界面,没有坦克在上面,肯定不是我们想要的,是吧,因此,我们就先完成这个功能。

在这里我们用一个圆来代表一个坦克。绘图代码如下:

    @Override
    public void paint(Graphics g) {
        Color c = g.getColor();
        g.setColor(Color.RED);
        g.fillOval(50, 50, 30, 30);
        g.setColor(c);
    }

完整的代码如下:

    public class TankClient extends Frame{
   

        public static void main(String[] args) {
            new TankClient().launchFrame();
        }

        @Override
        public void paint(Graphics g) {
            Color c = g.getColor();
            g.setColor(Color.RED);
            g.fillOval(50, 50, 30, 30);
            g.setColor(c);
        }

        public void launchFrame(){

            this.setTitle("坦克大战");
            this.setLocation(300,
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值