项目目录
项目代码
启动类 SubmarineWarMain代码
package com.stj.views;
import java.util.Observable;
public class SubmarineWarMain
{
public static void main(String[] args)
{
Observable ob = new FrameObservable();
MyFrame mf = new MyFrame(ob);
mf.showMyFrame();
}
}
游戏窗体 MyFrame 代码
package com.stj.views;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;
import java.util.Observer;
/*
* 游戏窗体
*/
public class MyFrame extends JFrame implements Observer
{
/**
*
*/
private static final long serialVersionUID = 1L;
private MyPanel panel; //游戏界面
private MainPanel mainpanel; //开始界面
private JMenuBar bar; //菜单栏
private JMenu menu1; //菜单1,2
private JMenu menu2;
protected boolean isStart;
protected boolean isExit;
private JMenuItem item1; //菜单项1,2,3,4,5
private JMenuItem item2;
private JMenuItem item3;
private JMenuItem item4;
private JMenuItem item5;
public MyFrame(Observable ob)
{
ob.addObserver(this);
Observable obs = ob;
this.panel = new MyPanel();
this.mainpanel = new MainPanel(obs);
this.isStart = mainpanel.getIsStart();
this.isExit = mainpanel.isExit();
}
public void showMyFrame()
{
Container c = this.getContentPane();
c.setLayout(new BorderLayout());
this.bar = new JMenuBar();
this.menu1 = new JMenu("菜单");
this.menu2 = new JMenu("帮助");
this.item1 = new JMenuItem("开始");
this.item2 = new JMenuItem("暂停");
this.item3 = new JMenuItem("退出");
this.item4 = new JMenuItem("关于我们");
this.item5 = new JMenuItem("游戏规则");
this.menu1.add(item1);
this.menu1.add(item2);
this.menu1.add(item3);
this.menu2.add(item4);
this.menu2.add(item5);
bar.add(menu1);
bar.add(menu2);
this.bar.setVisible(false);
this.setJMenuBar(this.bar);
item1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
MyFrame.this.panel.requestFocus();
MyFrame.this.panel.startGame();
}
}
);
item2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
MyFrame.this.panel.stopGame();
}
}
);
item3.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
}
);
item4.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//MyFrame.this.panel.setFocusable(false);
MyFrame.this.panel.setSuspendFlag(true);
new InfoDialog(MyFrame.this,true,MyFrame.this.panel);
}
}
);
item5.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//MyFrame.this.panel.setFocusable(false);
MyFrame.this.panel.setSuspendFlag(true);
new HelpDialog(MyFrame.this,true,MyFrame.this.panel);
}
}
);
c.add(this.mainpanel,BorderLayout.CENTER);
this.setSize(645,511);
this.setVisible(true);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void changedPanel()
{
}
//游戏开始,切换到游戏主界面
public void update(Observable arg0, Object arg1)
{
MainPanel panel = (MainPanel) arg1;
//System.out.println("update" + panel.getIsStart());
if(panel.getIsStart())
{
//System.out.println("update" + panel.getIsStart());
this.getContentPane().remove(this.mainpanel);
//this.panel.setPreferredSize(new Dimension(645,511));
this.bar.setVisible(true);
this.getContentPane().add(this.panel, BorderLayout.CENTER);
this.repaint();
}
}
}
游戏规则
点击进入游戏后,点击菜单》》点击开始。
按 <- 或 A 键 控制军舰向左按 -> 或 D 键 控制军舰向右按空格键扔炸弹
本游戏为Java awt 和 swing组件模拟的休闲小游戏《潜艇大战》。玩家通过操作军舰向水下的鱼雷扔炸弹水下潜艇向上发射鱼雷,此版本加入了一些UI处理,比较流畅
游戏截图
相关知识
Java Swing 是 Java 编程语言提供的一个图形用户界面(Graphical User Interface,GUI)工具包。它是一套用于创建跨平台桌面应用程序的库,具有丰富的用户界面组件和功能。Swing 提供了一种基于 Java 组件的可定制的、灵活的界面开发方式,使开发人员能够轻松地构建各种交互式应用程序。
以下是 Java Swing 的主要特点和功能:
- 跨平台性:Java Swing 是基于 Java 技术开发的,它的设计目标之一就是实现跨平台性。Swing 应用程序可以在不同的操作系统上运行,如 Windows、Linux 和 macOS,而无需针对每个平台进行更改。
- 可定制性:Swing 提供了丰富的用户界面组件,如按钮、文本框、标签、列表、表格等。这些组件具有可定制的外观和行为,开发人员可以根据需要自定义组件的外观风格、布局和事件处理。
- 丰富的布局管理器:Swing 提供了多种布局管理器来帮助开发人员灵活地管理用户界面的布局。常用的布局管理器包括 BorderLayout、FlowLayout、GridLayout、GridBagLayout 等,它们可以根据需要组织和调整界面上的组件位置和大小。
- 事件驱动编程:Swing 是基于事件驱动的编程模型。开发人员可以通过注册监听器来响应用户界面上的事件,如按钮点击、鼠标移动等。这种模型使得开发人员可以根据用户的交互动作来触发特定的操作和逻辑处理。
- 支持图形绘制和渲染:Swing 提供了支持图形绘制和渲染的功能。开发人员可以使用 Swing 来创建和展示图形、图像、图表等各种视觉元素,并进行图形操作和效果的实现。
- 多语言支持:Swing 支持国际化和本地化,可以轻松地适应不同语言环境和文化习惯。开发人员可以使用资源束(Resource Bundle)来管理多语言的界面文本,以便为不同的目标受众提供本地化的用户界面。
- 第三方插件和工具支持:由于 Swing 是一个流行的 GUI 工具包,有许多第三方插件和工具可用于增强 Swing 的功能和扩展性。例如,开发人员可以使用 WindowBuilder、NetBeans 等集成开发环境(IDE)中提供的可视化界面设计器来加快 Swing 界面的创建和布局。
总结: Java Swing 是用于创建跨平台桌面应用程序的 Java GUI 工具包。它提供了丰富的用户界面组件、布局管理器和事件处理机制,使开发人员能够轻松地构建灵活、可定制的图形用户界面。Swing 应用程序可以在不同的操作系统上运行,并且支持多语言和本地化。通过使用 Swing,开发人员可以创建交互式的应用程序,并实现图形绘制、事件驱动编程、布局管理等功能。