环境要求:
功能提示:
1.游戏要有图形用户界面,界面能够反映游戏所有的细节。
2.界面中要有坦克,墙,树林,河流。
3.界面中要有一个“家”,“家”被攻击中则输了游戏。
4.坦克分两种,敌方和我方。
5.墙也分为两种,可以穿透的普通墙,不可以穿透的铁墙。
6.树和河流均只有一种,树林坦克可以通过。
7.坦克可以发射子弹,敌我方的子弹属性一样。
8.我方子弹可以杀死敌方坦克,敌方子弹也可以杀死我方坦克,但需要多枪子弹才可以杀死。
9.敌方之间不可以杀死对方。
10.子弹击中坦克要有爆炸,但击中墙不能爆炸。
11.我方可以吃血包增加生命。
12.游戏可以暂停,重新开始,游戏帮助等功能。
13.游戏级别分别为:级别1、级别2、级别3、级别4。
需求分析:
效果如图所示:
主界面代码如下:
public TankClient() { // printable = false; // 创建菜单及菜单选项 jmb = new MenuBar(); jm1 = new Menu("游戏"); jm2 = new Menu("暂停/继续"); jm3 = new Menu("帮助"); jm4 = new Menu("游戏级别"); jm1.setFont(new Font("TimesRoman", Font.BOLD, 15));// 设置菜单显示的字体 jm2.setFont(new Font("TimesRoman", Font.BOLD, 15));// 设置菜单显示的字体 jm3.setFont(new Font("TimesRoman", Font.BOLD, 15));// 设置菜单显示的字体 jm4.setFont(new Font("TimesRoman", Font.BOLD, 15));// 设置菜单显示的字体 jmi1 = new MenuItem("开始新游戏"); jmi2 = new MenuItem("退出"); jmi3 = new MenuItem("暂停"); jmi4 = new MenuItem("继续"); jmi5 = new MenuItem("游戏说明"); jmi6 = new MenuItem("级别1"); jmi7 = new MenuItem("级别2"); jmi8 = new MenuItem("级别3"); jmi9 = new MenuItem("级别4"); jmi1.setFont(new Font("TimesRoman", Font.BOLD, 15)); jmi2.setFont(new Font("TimesRoman", Font.BOLD, 15)); jmi3.setFont(new Font("TimesRoman", Font.BOLD, 15)); jmi4.setFont(new Font("TimesRoman", Font.BOLD, 15)); jmi5.setFont(new Font("TimesRoman", Font.BOLD, 15)); jm1.add(jmi1); jm1.add(jmi2); jm2.add(jmi3); jm2.add(jmi4); jm3.add(jmi5); jm4.add(jmi6); jm4.add(jmi7); jm4.add(jmi8); jm4.add(jmi9); jmb.add(jm1); jmb.add(jm2); jmb.add(jm4); jmb.add(jm3); jmi1.addActionListener(this); jmi1.setActionCommand("NewGame"); jmi2.addActionListener(this); jmi2.setActionCommand("Exit"); jmi3.addActionListener(this); jmi3.setActionCommand("Stop"); jmi4.addActionListener(this); jmi4.setActionCommand("Continue"); jmi5.addActionListener(this); jmi5.setActionCommand("help"); jmi6.addActionListener(this); jmi6.setActionCommand("level1"); jmi7.addActionListener(this); jmi7.setActionCommand("level2"); jmi8.addActionListener(this); jmi8.setActionCommand("level3"); jmi9.addActionListener(this); jmi9.setActionCommand("level4"); this.setMenuBar(jmb);// 菜单Bar放到JFrame上 this.setVisible(true); for (int i = 0; i < 10; i++) { // 家的格局 if (i < 4) homeWall.add(new CommonWall(350, 580 - 21 * i, this)); else if (i < 7) homeWall.add(new CommonWall(372 + 22 * (i - 4), 517, this)); else homeWall.add(new CommonWall(416, 538 + (i - 7) * 21, this)); } for (int i = 0; i < 32; i++) { if (i < 16) { otherWall.add(new CommonWall(220 + 20 * i, 300, this)); // 普通墙布局 otherWall.add(new CommonWall(500 + 20 * i, 180, this)); otherWall.add(new CommonWall(200, 400 + 20 * i, this)); otherWall.add(new CommonWall(500, 400 + 20 * i, this)); } else if (i < 32) { otherWall.add(new CommonWall(220 + 20 * (i - 16), 320, this)); otherWall.add(new CommonWall(500 + 20 * (i - 16), 220, this)); otherWall.add(new CommonWall(220, 400 + 20 * (i - 16), this)); otherWall.add(new CommonWall(520, 400 + 20 * (i - 16), this)); } } for (int i = 0; i < 20; i++) { // 金属墙布局 if (i < 10) { metalWall.add(new MetalWall(140 + 30 * i, 150, this)); metalWall.add(new MetalWall(600, 400 + 20 * (i), this)); } else if (i < 20) metalWall.add(new MetalWall(140 + 30 * (i - 10), 180, this)); else metalWall.add(new MetalWall(500 + 30 * (i - 10), 160, this)); } for (int i = 0; i < 4; i++) { // 树的布局 if (i < 4) { trees.add(new Tree(0 + 30 * i, 360, this)); trees.add(new Tree(220 + 30 * i, 360, this)); trees.add(new Tree(440 + 30 * i, 360, this)); trees.add(new Tree(660 + 30 * i, 360, this)); } } theRiver.add(new River(85, 100, this)); for (int i = 0; i < 20; i++) { // 初始化20辆坦克 if (i < 9) // 设置坦克出现的位置 tanks.add(new Tank(150 + 70 * i, 40, false, Direction.D, this)); else if (i < 15) tanks.add(new Tank(700, 140 + 50 * (i - 6), false, Direction.D, this)); else tanks .add(new Tank(10, 50 * (i - 12), false, Direction.D, this)); } this.setSize(Fram_width, Fram_length); // 设置界面大小 this.setLocation(280, 50); // 设置界面出现的位置 this .setTitle("坦克大战——(重新开始:R键 开火:F键)"); this.addWindowListener(new WindowAdapter() { // 窗口监听关闭 public void windowClosing(WindowEvent e) { System.exit(0); } }); this.setResizable(false); this.setBackground(Color.GREEN); this.setVisible(true); this.addKeyListener(new KeyMonitor());// 键盘监听 new Thread(new PaintThread()).start(); // 线程启动 } public static void main(String[] args) { new TankClient(); // 实例化 }