📄 mainframe.java~527~
字号:
package russiagame;
import javax.swing.*;
import com.borland.jbcl.layout.*;
import java.awt.*;
import java.awt.Toolkit;
import javax.swing.border.*;
import java.awt.event.*;
import javax.swing.event.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class MainFrame
extends JFrame {
private Timer timer; //方块下落时间间隔控制类
private int nTime = 1000; //方块下落速度
private Root root; //方块
private GameTable gGameAreaTable; //方块下落区
private PreviewTable gPreviewTable; //方块预览区
private int intGraph; //标志创建哪一个要下落的方块
private int intNextGraph; //标志下一个要创建的方块,即提前显示下落块
private int intTotalScore = 0; //用来记录总分数
private boolean bCanMove = false; //标志是否响应键盘
private Panel jMainPanel = new Panel(); //添加键盘监听的Panel
private GameAreaPanel jGamePanel; //方块下落区域
private PreviewPanel jNextGraphPanel; //方块预览区域
private XYLayout xyLayout = new XYLayout(); //界面布局
private TitledBorder titledBorder1;
private JButton jStartButton = new JButton();
private JButton jRestartButton = new JButton();
private JButton jExitButton = new JButton();
private JLabel jSpeedLabel = new JLabel();
private JSpinner jSpeedSpinner = new JSpinner();
private JLabel jScoreLabel = new JLabel();
private JTextField jScoreTextField = new JTextField();
private JLabel jNextGraphLabel = new JLabel();
private TitledBorder titledBorder3;
private JLabel jCopyRightLabel = new JLabel();
private int intSpeed = 1; //速度等级
TitledBorder titledBorder4;
TitledBorder titledBorder5;
TitledBorder titledBorder6;
TitledBorder titledBorder7;
TitledBorder titledBorder8;
public MainFrame() {
try {
setTitle("俄罗斯方块游戏");
setLocation(200, 130);
setSize(600, 400);
jbInit();
getContentPane().add(jMainPanel, "North");
getContentPane().addKeyListener(new KeyAdapter() { //主窗口添加键盘监听器
public void keyPressed(KeyEvent e) {
ProcessKeyEvent(e);
}
});
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
}
});
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
MainFrame objMainFrame = new MainFrame();
objMainFrame.pack();
objMainFrame.setVisible(true);
objMainFrame.validate();
objMainFrame.setResizable(false);
}
private void jbInit() throws Exception {
jMainPanel.setBackground(new Color(72, 112, 112));
jMainPanel.setForeground(UIManager.getColor(
"TextArea.selectionBackground"));
jMainPanel.setLayout(xyLayout);
gGameAreaTable = new GameTable(15, 26);
gPreviewTable = new PreviewTable(5, 4);
jGamePanel = new GameAreaPanel(gGameAreaTable);
jNextGraphPanel = new PreviewPanel(gPreviewTable);
jStartButton.setBackground(Color.pink);
jStartButton.setFont(new java.awt.Font("Dialog", 0, 14));
jStartButton.setForeground(SystemColor.desktop);
jStartButton.setBorder(titledBorder1);
jStartButton.setBorderPainted(true);
jStartButton.setText("开始游戏");
jStartButton.addActionListener(new MainFrame_jStartButton_actionAdapter(this));
jRestartButton.setBackground(Color.pink);
jRestartButton.setFont(new java.awt.Font("Dialog", 0, 14));
jRestartButton.setForeground(SystemColor.desktop);
jRestartButton.setBorder(titledBorder1);
jRestartButton.setText("重新游戏");
jRestartButton.addActionListener(new
MainFrame_jRestartButton_actionAdapter(this));
jExitButton.setBackground(Color.pink);
jExitButton.setFont(new java.awt.Font("Dialog", 0, 14));
jExitButton.setForeground(SystemColor.desktop);
jExitButton.setBorder(titledBorder1);
jExitButton.setText("退出游戏");
jExitButton.addActionListener(new MainFrame_jExitButton_actionAdapter(this));
jExitButton.addActionListener(new MainFrame_jExitButton_actionAdapter(this));
jSpeedLabel.setFont(new java.awt.Font("SansSerif", 0, 14));
jSpeedLabel.setForeground(Color.orange);
jSpeedLabel.setBorder(titledBorder6);
jSpeedLabel.setText("速度选择");
jSpeedSpinner.setValue(new Integer(1));
jSpeedSpinner.addChangeListener(new SpeedChangeListener());
jScoreLabel.setText("分数记录");
jScoreLabel.setForeground(Color.orange);
jScoreLabel.setBorder(titledBorder6);
jScoreLabel.setDebugGraphicsOptions(0);
jScoreLabel.setFont(new java.awt.Font("SansSerif", 0, 14));
jScoreTextField.setBackground(Color.pink);
jScoreTextField.setBorder(null);
jScoreTextField.setEditable(false);
jScoreTextField.setText("0");
jNextGraphLabel.setFont(new java.awt.Font("SansSerif", 0, 14));
jNextGraphLabel.setForeground(Color.orange);
jNextGraphLabel.setBorder(titledBorder6);
jNextGraphLabel.setText("下一个图形");
jGamePanel.setBackground(new Color(0, 118, 125));
jCopyRightLabel.setText("Savage制作,2003-2010 Copyright...");
jCopyRightLabel.setForeground(Color.orange);
jCopyRightLabel.setFont(new java.awt.Font("SansSerif", 0, 14));
xyLayout.setWidth(407);
xyLayout.setHeight(504);
jSpeedSpinner.setBackground(SystemColor.desktop);
jSpeedSpinner.setBorder(BorderFactory.createLoweredBevelBorder());
jMainPanel.add(jGamePanel, new XYConstraints(20, 21, 257, 447));
jMainPanel.add(jNextGraphLabel, new XYConstraints(299, 159, 78, 28));
jMainPanel.add(jCopyRightLabel, new XYConstraints(62, 472, 246, 28));
jMainPanel.add(jRestartButton, new XYConstraints(299, 367, 88, 30));
jMainPanel.add(jStartButton, new XYConstraints(299, 311, 88, 30));
jMainPanel.add(jNextGraphPanel, new XYConstraints(299, 183, 78, 88));
jMainPanel.add(jScoreLabel, new XYConstraints(299, 79, 68, 28));
jMainPanel.add(jSpeedLabel, new XYConstraints(299, 7, 78, 28));
jMainPanel.add(jExitButton, new XYConstraints(299, 419, 88, 31));
jMainPanel.add(jScoreTextField, new XYConstraints(299, 110, 68, 24));
jMainPanel.add(jSpeedSpinner, new XYConstraints(300, 32, 69, 25));
intGraph = ( ( (int) Math.round(Math.random() * 12345)) % 8) + 1; //产生随机方块
switch (intGraph) { //初始化产生的方块
case 1:
root = new One();
break;
case 2:
root = new Two();
break;
case 3:
root = new Three();
break;
case 4:
root = new Four();
break;
case 5:
root = new Five();
break;
case 6:
root = new Six();
break;
case 7:
root = new Seven();
break;
case 8:
root = new Eight();
break;
default:
break;
}
jNextGraphPanel.PreviewGraph(intGraph);
root.begin(); //占据桌子,详见root类
intNextGraph = ( ( (int) Math.round(Math.random() * 12345)) % 8) + 1; //产生下一个提前显示的方块
intGraph = intNextGraph;
timer = new Timer(nTime, new MyRun()); //创建记时器,调用MyRun
addKeyListener(new KeyAdapter() { //主窗口添加键盘监听器
public void keyPressed(KeyEvent e) {
ProcessKeyEvent(e);
}
});
}
public class MyRun
implements ActionListener { //记时器调用的监听器
public void actionPerformed(ActionEvent e) {
if (!bCanMove)
return;
if (!root.down()) { //将方块下落一格,如果不能再下降了,就调用下面语句
DeleteLine(); //消行
jNextGraphPanel.PreviewGraph(intGraph);
switch (intGraph) { //产生新的方块
case 1:
root = new One();
break;
case 2:
root = new Two();
break;
case 3:
root = new Three();
break;
case 4:
root = new Four();
break;
case 5:
root = new Five();
break;
case 6:
root = new Six();
break;
case 7:
root = new Seven();
break;
case 8:
root = new Eight();
break;
default:
break;
}
intNextGraph = ( ( (int) Math.round(Math.random() * 12345)) % 8) +
1;
intGraph = intNextGraph;
if (!root.begin()) { //如果失败,游戏结束
jGamePanel.UpdateGraph(gGameAreaTable);
GameResetGamePara();
}
else
jGamePanel.UpdateGraph(gGameAreaTable);
}
else {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -