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 + -
显示快捷键?