坦克大战项目java_新手小项目-java坦克大战

我们需要知道窗口显示了哪些东西。百度搜索这个小游戏,或者上小游戏网站玩几次就可以知道游戏规则了http://www.7k7k.com/swf/129505.htm

我们可以看到游戏界面和游戏玩法

27f9c725c68bebb1b6c21110f0e47fae.png

13cb31b43f6a268271b4ab1c35da06af.png

先画一个窗口,在编写一个窗口时我们所需要的方法都可以在Frame类中copy下来,以防自己写错。我们需要的窗口:黑底,边框可以随着拖动而改变,设置窗口大小,窗口上方写着tankgame(总共四个要求)

b3a57aef2576f7debde62be70f5677ce.png

在windows类中我们可以找到这些方法:(1)setSize(int width, int height)(2)setVisible(boolean b)

在Frame类中我们可以找到这些方法:(1)setTitle(String title)(2)setResizable(boolean resizable) (3) setBackground(Color bgColor)

编写的程序遇到的问题(1)

437c7bbbea29e12daec09f949a99f417.png应该进入java文件所在的目录。(2)数据类型的问题(见我的java数据类型)

1 import java.awt.*;2 public class TankGame extendsFrame {3 public voidshowFrame(){4 setBackground(Color.black);5 setTitle("tankgame");6 setResizable(true);7 setVisible(true);8 setSize(514,450);9

10

11

12 }13

14

15

16 public static voidmain(String[] args){17

18

19 newTankGame().showFrame();20

21

22 }23

2b1336d24b7f4bd2f91fa4d9da8f41d2.png

关掉这个界面需要在命令行输入ctrl+c(还没进行事件处理,就像你为别人创造了一个东西,但是你还没有为别人删除一个东西的能力,那个叉叉只是一个图像,没有任何意义,跟界面上的每个图像一样,都是图像)

计算机屏幕的坐标是从左上方开始的,x轴朝上,y轴朝下

但是这个窗口我们并不满意,因为这个界面跟我们看到的不一样(如下图)

aeb51b029b43e5624806c729da0eb71e.png

所以我们需要用到panel(这个容器需要跟Frame一起使用才能显示出来)见container的add方法

95c26399e3b7139d43e15d01052cf1e6.png

我们可以通过panel一些方法(从container和component找到)。设置大小,背景颜色,可见的(1)setBackground(Color c)(2)setSize(int width, int height)(3)setVisible(boolean b)

个人的代码只是一种测试,不是完全按照要求来

1 import java.awt.*;2 public class TankGame extendsFrame {3 public voidshowFrame(){4 setBackground(Color.black);5 setTitle("tankgame");6 setResizable(true);7 setVisible(true);8 setSize(514,450);9

10

11

12 }13

14

15

16 public static voidmain(String[] args){17

18

19 TankGame tankgame=newTankGame();20 tankgame.showFrame();21 TankGameTwo tankgametwo=newTankGameTwo();22 tankgametwo.showPanel();23 tankgame.add(tankgametwo);24

25

26 }27

28

29 }30 class TankGameTwo extendsPanel{31 voidshowPanel(){32 setBackground(Color.orange);33 setSize(90,90);34 setVisible(true);35 }36

37

38

39 }

如果按照这个代码,我们会发现,我们根本看不见frame的颜色,我们看见的颜色是panel的颜色(如果你晃动边框,frame的颜色会显示出来)

解决办法在两个类中的方法中调用一个方法(因为默认有布局管理器,我们设置大小对他们就没有用了,所以我们需要手动地设置,取消布局管理器)

4ddabeb06d0025be55a9902a1b4fb1e3.png

1 import java.awt.*;2 public class TankGame extendsFrame {3 public voidshowFrame(){4 setBackground(Color.gray);5 setTitle("tankgame");6 setResizable(true);7 setVisible(true);8 setSize(514,450);9 setLayout(null);10

11

12

13 }14

15

16

17 public static voidmain(String[] args){18

19

20 TankGame tankgame=newTankGame();21 tankgame.showFrame();22 TankGameTwo tankgametwo=newTankGameTwo();23 tankgametwo.showPanel();24 tankgame.add(tankgametwo);25

26

27 }28

29

30 }31 class TankGameTwo extendsPanel{32 voidshowPanel(){33 setBackground(Color.black);34 setSize(415,415);35 setVisible(true);36 setLayout(null);37 }38

39

40

41 }

bff3b7c443e3fe35af54144b275accc9.png

那么怎么使panel相对于Frame往中间去一点呢,有个设置x,y的方法,同时设置大小

db89e2eaa1f54ec954c764dd6868c9ff.png

e7bf9fc7083cdd4aea6505b33c434206.png

界面做的有点丑,这个需要自己花很多次调整,我没有什么工具来慢慢调整的(或者对照网页上游戏的界面来设置,截屏就知道大小了,前端工程师经常这样做)

那么问题来了怎么使panel跟着container改动呢?这种方法由布局管理器来实现

77c19e86d6c4026231eff8a4f52f4c43.png

这个接口下有很多种布局管理器

096c295ff43a0277e6a26234e6e5df75.png

2f1088c08daea1d9c76ee59da7d3b859.png

这样就可以让panle随着Frame动而不改变整体布局(这种逻辑关系是frame用弩据管理器来布局panel)

怎么使鼠标按那个叉叉,然后窗口关掉。

a1e7fb2dc885e23315cec6aef389fb83.png

0ec34fbed6b815dbb0738f21c5424d7a.png

这样发现不对,因为少了适配器的概念。而且实现接口是每个方法都必须实现,如果不全部实现,就是上述的错误。

3fd1d3dcc6c6f4ee0e48cba466752322.png

改正之后

2b0e4182af01a25c0be748b31a81b63b.png

但是你还会发现有错误(因为没有引入包)

最后你还会发现一个问题,怎么在事件器中设置当前窗口的setvisible方法。

25974c312f38c81c3b76463d320d9bdf.png

e245141f3db80a86523d07a506879ee8.png

1 import java.awt.*;

2 import java.awt.event.*;3 public class TankGame extendsFrame {4 public voidshowFrame(){5 setBackground(Color.gray);6 setTitle("tankgame");7 setResizable(true);8 setVisible(true);9 setSize(514,450);10 setLayout(newFlowLayout());11

12 li l=newli();13 this.addWindowListener(l);14

15

16

17 }18

19

20

21 public static voidmain(String[] args){22

23

24 TankGame tankgame=newTankGame();25 tankgame.showFrame();26 TankGameTwo tankgametwo=newTankGameTwo();27 tankgametwo.showPanel();28 tankgame.add(tankgametwo);29

30

31

32 }33

34

35 }36 class li extendsWindowAdapter{37

38

39 public voidwindowClosing(WindowEvent e){40 Window i=(Window)e.getWindow();41 i.setVisible(false);42 System.exit(-1);43

44

45 }46

47

48 }49 class TankGameTwo extendsPanel{50 voidshowPanel(){51 setBackground(Color.black);52 setBounds(35,38,415,415);53 setVisible(true);54 setLayout(null);55

56 }57

63

64 65

66

67

68

69

70 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值