You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
3.8 KiB

package com.uyong.study.snake;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.KeyStroke;
public class GameFrame extends JFrame {
private static final long serialVersionUID = 1L;
private GamePanel gPanel;
private JLabel jLabel;
private JMenu[] jMenus;
private JMenuBar jBar;
private JMenuItem[] jItems;
public GameFrame() {
super("贪吃蛇游戏");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
setSize(SizeConstants.WIDTH * SizeConstants.SIZE + 20, SizeConstants.HEIGHT * SizeConstants.SIZE + 90);
setLayout(null);
jLabel = new JLabel();
jLabel.setBorder(BorderFactory.createEtchedBorder(Color.BLUE, Color.GRAY));
jLabel.setBounds(1, 1, getWidth() - 8, 25);
add(jLabel);
jMenus = new JMenu[4];
jItems = new JMenuItem[9];
jBar = new JMenuBar();
jMenus[0] = new JMenu("菜单", true);
jMenus[1] = new JMenu("排名");
jMenus[2] = new JMenu("帮助");
jMenus[3] = new JMenu("难度选择");
jItems[0] = new JMenuItem("开始游戏");
jItems[0].setAccelerator(KeyStroke.getKeyStroke((char) KeyEvent.VK_ENTER));
jItems[1] = new JMenuItem("暂停\\开始");
jItems[1].setAccelerator(KeyStroke.getKeyStroke((char) KeyEvent.VK_SPACE));
jItems[2] = new JMenuItem("重新开始");
jItems[2].setAccelerator(KeyStroke.getKeyStroke('A', (char) KeyEvent.VK_A));
jItems[3] = new JRadioButtonMenuItem("容易");
jItems[3].setAccelerator(KeyStroke.getKeyStroke("F1"));
jItems[4] = new JRadioButtonMenuItem("中等");
jItems[4].setAccelerator(KeyStroke.getKeyStroke("F2"));
jItems[5] = new JRadioButtonMenuItem("困难");
jItems[5].setAccelerator(KeyStroke.getKeyStroke("F3"));
jItems[6] = new JMenuItem("排行榜");//
jItems[7] = new JMenuItem("游戏帮助");
jItems[8] = new JMenuItem("关于游戏");
ButtonGroup group = new ButtonGroup();
for (int i = 0; i < 3; i++) {
jBar.add(jMenus[i]);
group.add(jItems[3 + i]);
}
for (int i = 0; i < 3; i++) {
jMenus[0].add(jItems[i]);
jMenus[3].add(jItems[3 + i]);
jMenus[0].addSeparator();
jMenus[3].addSeparator();
}
jMenus[0].add(jMenus[3]);
jMenus[1].add(jItems[6]);
jMenus[2].add(jItems[7]);
jMenus[2].add(jItems[8]);
for (int i = 0; i < 9; i++) {
jItems[i].addActionListener(new MyAction());
}
setJMenuBar(jBar);
gPanel = new GamePanel();
gPanel.setLocation(6, 32);
add(gPanel);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setVisible(true);
gPanel.requestFocus();
showScore();
}
// 显示得分
public void showScore() {
while (true) {
jLabel.setText(" 你的得分:" + gPanel.getScore() + " 蛇的长度:" + gPanel.getLength() + " 当前速度:"
+ (300 - gPanel.getSpeed()));
}
}
private class MyAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String s = e.getActionCommand();
if (s == "开始游戏") {
gPanel.startGame();
}
if (s == "暂停\\开始") {
gPanel.stop();
}
if (s == "容易") {
gPanel.setSpeed(200);
}
if (s == "中等") {
gPanel.setSpeed(150);
}
if (s == "困难") {
gPanel.setSpeed(100);
}
if (s == "游戏帮助") {}
}
}
public static void main(String[] args) {
new GameFrame();
}
}