singlegameface.java
来自「软件工程实践课程的答案哦」· Java 代码 · 共 1,209 行 · 第 1/3 页
JAVA
1,209 行
import java.io.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;
import java.awt.Graphics;
import java.net.URL;
import sun.audio.*;
import javax.swing.plaf.*;
import javax.swing.plaf.basic.*;
import javax.swing.plaf.metal.MetalTheme;
import javax.swing.plaf.metal.OceanTheme;
import javax.swing.plaf.metal.DefaultMetalTheme;
import javax.swing.plaf.metal.MetalLookAndFeel;
public class SingleGameFace extends JFrame implements ActionListener
{
public int score;
int panelWidth;
int panelHeight;
final static int unitSize = 28;
SingleNumberCreator numCreator;
SingleBar bar;
int isPaused = 0;
public static Back2 back1;
public static Begin begin;
boolean gameStart = false;
boolean gameOver = false;
//this array used to record the locations needed to be changed
SingleLOVList lovList = new SingleLOVList();
int speed = 0;
SingleTimer timer;
SinglePaintPanel canvas;
JMenuBar menuBar;
JMenu game;
JMenuItem startGame;
JMenuItem pauseGame;
JMenuItem exitGame;
JMenu control;
JMenuItem setBg;
JMenu setSpeed;
JMenuItem staticLevel;
JMenuItem dynamic1;
JMenuItem dynamic2;
JMenu menu3;
JMenu audioMenu=null;
JMenu themesMenu=null;
JMenu help;
ButtonGroup themesMenuGroup = new ButtonGroup();
ButtonGroup audioMenuGroup = new ButtonGroup();
//JMenuItem aboutGame;
JMenuItem about;
/////Left
JLabel mainLeft;
//////Mid
JPanel mainMid;
JLabel lUpSpace;
JLabel lDownSpace;
JPanel mainRight;
//////right
JPanel rightUp;
JLabel lNextBar;
JPanel pNextBarContainer;
JPanel pGridLeft;
JLabel lSpaceLeft;
JLabel lSpaceRight;
SinglePaintNextPanel pNextBar;
JPanel rightMid;
JLabel lGrade;
JTextField tGrade;
JLabel lScore;
JTextField tScore;
JLabel lSpeed;
JTextField tSpeed;
JPanel rightDown;
JLabel message;
JButton start;
private static String currentLookAndFeel = "javax.swing.plaf.metal.MetalLookAndFeel";
public static final String metal =
"javax.swing.plaf.metal.MetalLookAndFeel";
SingleGameFace()
{
super();
score = 0;
Container panel = this.getContentPane();
mainMid = new JPanel(new BorderLayout());
panel.setLayout(new BorderLayout());
panel.add(mainMid,BorderLayout.CENTER);
this.panelHeight = 600;
this.panelWidth = 500;
this.setTitle("Columns v1.0");
this.setSize(this.panelWidth,this.panelHeight);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation(((int)screen.getWidth()-panelWidth)/2,((int)screen.getHeight()-panelHeight)/2);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/////////////menuBar//////////
menuBar = new JMenuBar();
this.setJMenuBar(menuBar);
game = new JMenu("Game");
game.setMnemonic('G');
startGame = new JMenuItem("StartGame");
pauseGame = new JMenuItem("Pause");
exitGame = new JMenuItem("Exit");
startGame.addActionListener(this);
pauseGame.addActionListener(this);
exitGame.addActionListener(this);
game.add(startGame);
game.add(pauseGame);
game.add(exitGame);
control = new JMenu("Control");
control.setMnemonic('C');
setSpeed = new JMenu("Set Speed");
staticLevel = new JMenuItem("Static");
dynamic1 = new JMenuItem("Normal");
dynamic2 = new JMenuItem("Hard");
setSpeed.add(staticLevel);
setSpeed.add(dynamic1);
setSpeed.add(dynamic2);
staticLevel.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
if(!gameStart)
{
speed = 0;
setSpeed(0);
}
else
{
JOptionPane.showMessageDialog(null,"Don't cheat,set speed when game is over!");
}
}
}
);
dynamic1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
if(!gameStart)
{
speed =1;
setSpeed(1);
}
else
{
JOptionPane.showMessageDialog(null,"Don't cheat,set speed when game is over!");
}
}
}
);
dynamic2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
if(!gameStart)
{
speed = 2;
setSpeed(2);
}
else
{
JOptionPane.showMessageDialog(null,"Don't cheat,set speed when game is over!");
}
}
}
);
control.add(setSpeed);
menuBar.add(game);
menuBar.add(control);
//Change Style!------Jason
menu3=new JMenu("Style");
menu3.setMnemonic('S');
StyleListener listen_style=new StyleListener();
JMenuItem item3=new JMenuItem("Metal");
item3.addActionListener(listen_style);
menu3.add(item3);
item3=new JMenuItem("Windows");
item3.addActionListener(listen_style);
menu3.add(item3);
menuBar.add(menu3);
JMenuItem mi;
themesMenu = (JMenu) menuBar.add(new JMenu("Themes"));
themesMenu.setMnemonic('T');
audioMenu = (JMenu) themesMenu.add(new JMenu("Voice"));
createAudioMenuItem(audioMenu, "On",
"AudioMenu.on_mnemonic",
"AudioMenu.on_accessible_description",
new OnAudioAction(this));
mi=createAudioMenuItem(audioMenu, "Off",
"AudioMenu.off_mnemonic",
"AudioMenu.off_accessible_description",
new OffAudioAction(this));
mi.setSelected(true);
// *** now back to adding color/font themes to the theme menu
mi = createThemesMenuItem(themesMenu, "Ocean",
"ThemesMenu.ocean_mnemonic",
"ThemesMenu.ocean_accessible_description",
new OceanTheme());
mi.setSelected(true); // This is the default theme
createThemesMenuItem(themesMenu, "Steel",
"ThemesMenu.steel_mnemonic",
"ThemesMenu.steel_accessible_description",
new DefaultMetalTheme());
createThemesMenuItem(themesMenu, "Charcoal", "ThemesMenu.charcoal_mnemonic",
"ThemesMenu.charcoal_accessible_description", new CharcoalTheme());
createThemesMenuItem(themesMenu, "Contrast", "ThemesMenu.contrast_mnemonic",
"ThemesMenu.contrast_accessible_description", new ContrastTheme());
createThemesMenuItem(themesMenu, "Emerald", "ThemesMenu.emerald_mnemonic",
"ThemesMenu.emerald_accessible_description", new EmeraldTheme());
help = new JMenu("Help");
help.setMnemonic('H');
about = new JMenuItem("About");
about.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
aboutActionListener(e);
}
});
help.add(about);
menuBar.add(help);
//////////mainRight/////////////
rightUp = new JPanel(new BorderLayout());
mainRight = new JPanel(new BorderLayout());
///rightUp///
lNextBar = new JLabel(" Next Bar ",JLabel.LEFT);
pNextBarContainer = new JPanel(new BorderLayout());
lSpaceLeft = new JLabel(" ");
lSpaceRight = new JLabel(" ");
pGridLeft = new JPanel(new GridLayout(5,1));
pGridLeft.add(lSpaceLeft);
pNextBarContainer.add(pGridLeft,BorderLayout.WEST);
pNextBarContainer.add(lSpaceRight,BorderLayout.EAST);
pNextBar = new SinglePaintNextPanel();
pNextBar.setGameFace(this);
pNextBar.setBorder(new LineBorder(Color.WHITE,2,false));
pNextBar.setBackground(Color.BLACK);
pNextBarContainer.add(pNextBar,BorderLayout.CENTER);
lNextBar.setFont(new Font("ScanSerif",Font.BOLD,16));
lNextBar.setForeground(Color.BLUE);
////////////////////////////////////////////////////////////////////////////
JPanel upGrid = new JPanel(new GridLayout(3,1));
upGrid.add(new JLabel(" "));
upGrid.add(lNextBar);
upGrid.add(new JLabel(" "));
rightUp.add(upGrid,BorderLayout.NORTH);
rightUp.add(pNextBarContainer,BorderLayout.CENTER);
rightUp.add(new JLabel(" "),BorderLayout.SOUTH);
mainRight.add(rightUp,BorderLayout.NORTH);
///rightMid///
rightMid = new JPanel();
JPanel rightMidContainer = new JPanel(new BorderLayout());
rightMidContainer.add(rightMid,BorderLayout.CENTER);
JPanel gridPanel = new JPanel(new GridLayout(6,1,1,8));
lGrade = new JLabel("Grade ");lGrade.setFont(new Font("Dialogue",Font.ITALIC+Font.BOLD,14));
tGrade = new JTextField("0",10);tGrade.setEditable(false);
lScore = new JLabel("Score ");lScore.setFont(new Font("Dialogue",Font.ITALIC+Font.BOLD,14));
tScore = new JTextField("0",10);tScore.setEditable(false);
lSpeed = new JLabel("Speed ");lSpeed.setFont(new Font("Dialogue",Font.ITALIC+Font.BOLD,14));
tSpeed = new JTextField("0",10);tSpeed.setEditable(false);
gridPanel.add(lGrade);
gridPanel.add(tGrade);
gridPanel.add(lScore);
gridPanel.add(tScore);
gridPanel.add(lSpeed);
gridPanel.add(tSpeed);
rightMid.add(gridPanel);
rightMidContainer.add(new JLabel(" "),BorderLayout.WEST);
rightMidContainer.add(new JLabel(" "),BorderLayout.EAST);
rightMid.setBorder(new TitledBorder(new LineBorder(Color.BLUE,1,true),"Ctrl Info.",0,0,new Font("ScanSerif",Font.BOLD,15),Color.BLUE));
mainRight.add(rightMidContainer,BorderLayout.CENTER);
///rightDown///
JPanel grid = new JPanel(new GridLayout(3,1,0,0));
rightDown = new JPanel(new BorderLayout());
message = new JLabel(" WELCOME ");
message.setFont(new Font("ScanSerif",Font.BOLD,16));
message.setForeground(Color.red);
start = new JButton("Start");
start.addActionListener(this);
grid.add(message);
grid.add(new JLabel(" "));
grid.add(start);
rightDown.add(grid,BorderLayout.CENTER);
rightDown.add(new JLabel(" "),BorderLayout.NORTH);
rightDown.add(new JLabel(" "),BorderLayout.SOUTH);
rightDown.add(new JLabel(" "),BorderLayout.WEST);
rightDown.add(new JLabel(" "),BorderLayout.EAST);
mainRight.add(rightDown,BorderLayout.SOUTH);
panel.add(mainRight,BorderLayout.EAST);
//////////mainMid/////////////
lUpSpace = new JLabel(" ");
lDownSpace = new JLabel(" ");
canvas = new SinglePaintPanel();
canvas.setBorder(new LineBorder(Color.LIGHT_GRAY,2,true));
canvas.setBackground(Color.BLACK);
canvas.addKeyListener(canvas);
canvas.setGameFace(this);
mainMid.add(lUpSpace,BorderLayout.NORTH);
mainMid.add(canvas,BorderLayout.CENTER);
mainMid.add(lDownSpace,BorderLayout.SOUTH);
///////mainLeft////////
mainLeft = new JLabel(" ");
panel.add(mainLeft,BorderLayout.WEST);
this.setResizable(false);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//the listener of menuItem about
public void aboutActionListener(ActionEvent e)
{
About obj=new About();
obj.run();
obj.review();
}
/**
* Create the theme's audio submenu
*/
public JMenuItem createAudioMenuItem(JMenu menu, String label,
String mnemonic,
String accessibleDescription,
Action action) {
JRadioButtonMenuItem mi = (JRadioButtonMenuItem) menu.add(new JRadioButtonMenuItem(label));
audioMenuGroup.add(mi);
mi.addActionListener(action);
return mi;
}
public JMenuItem createThemesMenuItem(JMenu menu, String label, String mnemonic,
String accessibleDescription, MetalTheme theme) {
JRadioButtonMenuItem mi = (JRadioButtonMenuItem) menu.add(new JRadioButtonMenuItem(label));
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?