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
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();
|
|
}
|
|
|
|
}
|