做了几天的多线程游戏终于有点样子了。下面就我实现的一些功能简单列举下:
1.植物的种植(实现4种)
2.豌豆炮弹的设置(有僵尸在同一路出现时开炮。打中后消失。没有僵尸时停止开炮)
3.太阳花的设置(为了调试起见,设置为每隔相同时间生产一个太阳)
4.草莓弹的设置(只有僵尸在同一路,并碰到时炸开。并消灭相邻两路紧挨的僵尸)
5.土豆的设置(僵尸碰到土豆是停止前进。其他植物也一样)
6.僵尸的设置(僵尸随机产生从那一路出现。僵尸中10个豌豆弹或碰到草莓弹时消失)
7.小车的设置(僵尸碰到小车时,僵尸消失,小车向前开去)
8.用当前的太阳分值控制植物的种植。
还有一些功能比如植物的消失还没实现,将会进一步实现。下面就遇到的一些问题及我的解决方案小结下:
一.给窗体添加背景图片。
在给窗体添加背景图片是如果用JLabel的话,我们再在上面添加JLabel标签的话就加不上去,正如我们所知道的JFrame窗体是分层次的。我们要把背景JLabel放到最低层才行。
// 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明 jp1 = (JPanel) frame.getContentPane(); jp1.setOpaque(false); // 内容窗格默认的布局管理器为BorderLayout jp1.setLayout(null); jp1.add(label4); jp1.add(toolpanel); //将toolpanel面板加到当前面板 frame.getLayeredPane().setLayout(null); // 把背景图片添加到分层窗格的最底层作为背景 frame.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE)); frame.setVisible(true);
同时我们也可以将背景图片画在JFrame上。
//将背景图片画在JFrame容器上方法 public void paint(Graphics g1) { super.paint(g1); ImageIcon image = new ImageIcon("image\\18.PNG"); //设置图片 g1.drawImage(image.getImage(), 0, 0, null); }
二.创建多线程的方式及注意的一些问题
通常创建线程有两种方法,实现Runnabel接口和继承Thread类。在我写的程序中主要是通过内部类的方式创建线程。
在运用内部类线程时,调用内部类线程对象时不方便的,因此我们只能通过一些方法获取内部类的属性,运用全局变量来控制线程的休眠,或跳出。我们只需要在要线程休眠或停止的地方改变全局变量即可。
同时我们也要注意,多线程之间是不会互相影响的,他们独立运行。如果多线程对同一静态全局变量进行访问将会对多线程的独立性产生影响。
三.经验小结
耐心+恒心+细心+清晰的思路=好的程序