📄 mainframe.java
字号:
jGamePanel.UpdateGraph(gGameAreaTable);
}
}
}
public void ProcessKeyEvent(KeyEvent e) { //判断输入的是哪个键,并做出响应
jNextGraphPanel.PreviewGraph(intGraph);
switch (e.getKeyCode()) {
case KeyEvent.VK_DOWN: //如果是向下键,就一下到底,并产生一个新的方块
root.downTo();
DeleteLine(); //消去添满的一行,并加10分
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);
}
break;
case KeyEvent.VK_LEFT:
root.left();
jGamePanel.UpdateGraph(gGameAreaTable);
break; //详见root类
case KeyEvent.VK_RIGHT:
root.right();
jGamePanel.UpdateGraph(gGameAreaTable);
break;
case KeyEvent.VK_UP:
root.change();
jGamePanel.UpdateGraph(gGameAreaTable);
break;
default:
break;
}
}
public void DeleteLine() { //消去添满的一行,并加10分
boolean isCan; //标志是否循环消一行
boolean isContinue = true; //标志是否还有待消的行
int k = gGameAreaTable.y - 1;
while (isContinue) {
isCan = true;
while (isCan) {
for (int i = 0; i < gGameAreaTable.x; i++) {
if (gGameAreaTable.myTable[i][k] != 1)
isCan = false;
}
if (isCan) { //满足条件,开始消行
for (int i = 0; i < gGameAreaTable.x; i++)
gGameAreaTable.myTable[i][k] = 0;
for (int j = k - 1; j >= 0; j--)
for (int i = 0; i < gGameAreaTable.x; i++) {
if (gGameAreaTable.myTable[i][j] == 1) {
gGameAreaTable.myTable[i][j + 1] = 1;
gGameAreaTable.myTable[i][j] = 0;
}
}
jGamePanel.UpdateGraph(gGameAreaTable);
intTotalScore += 10; //加成绩
UpdateScore(intTotalScore);
}
}
k--;
if (k < 1)
isContinue = false;
}
}
public void GameResetGamePara() { //游戏结束
timer.stop();
bCanMove = false;
JOptionPane anOptionPane = new JOptionPane(); //弹出对话框
anOptionPane.showMessageDialog(this, "游戏结束,再来一次?", "Game Over!",
JOptionPane.WARNING_MESSAGE);
bCanMove = false;
ResetGamePara(); //处理各个变量,以便重新开始
}
//游戏结束后,处理各个变量,以便重新开始
public void ResetGamePara() {
timer.stop();
for (int i = 0; i < gGameAreaTable.x; i++) //重新给游戏桌置0标志
for (int j = 0; j < gGameAreaTable.y; j++) {
gGameAreaTable.myTable[i][j] = 0;
}
jGamePanel.UpdateGraph(gGameAreaTable);
bCanMove = false;
intTotalScore = 0;
jScoreTextField.setText( (new Integer(intTotalScore)).toString());
nTime = 1000;
intSpeed = 1;
jSpeedSpinner.setValue(new Integer(intSpeed));
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;
jGamePanel.UpdateGraph(gGameAreaTable);
root.begin();
}
void jStartButton_actionPerformed(ActionEvent e) {
jStartButton.setFocusable(false);
jRestartButton.setFocusable(false);
jExitButton.setFocusable(false);
this.getContentPane().setFocusable(true);
this.getContentPane().setFocusCycleRoot(true);
bCanMove = true;
timer = new Timer(nTime, new MyRun()); //根据选择的nTime间隔重新设置记时器,以变换速度
timer.start();
}
void jRestartButton_actionPerformed(ActionEvent e) {
timer.stop();
jGamePanel.Init();
bCanMove = false;
}
void jExitButton_actionPerformed(ActionEvent e) {
System.exit(0);
}
public class SpeedChangeListener
implements ChangeListener { //速度控件监听器
public void stateChanged(ChangeEvent e) {
if (e.getSource() == jSpeedSpinner) {
String strSpeed = new String(jSpeedSpinner.getValue().toString());
intSpeed = Integer.parseInt(strSpeed);
if (intSpeed < 1)
intSpeed = 1;
if (intSpeed > 9)
intSpeed = 9;
jSpeedSpinner.setValue(new Integer(intSpeed));
}
UpdateSpeed();
}
}
public void UpdateSpeed() {
jSpeedSpinner.setValue(new Integer(intSpeed));
String strSpeed = new String(jSpeedSpinner.getValue().toString());
intSpeed = Integer.parseInt(strSpeed);
nTime = 1000 - (intSpeed * 110);
timer = new Timer(nTime, new MyRun()); //根据选择的nTime间隔重新设置记时器,以变换速度
if (bCanMove)
timer.start();
}
public void UpdateScore(int intScore) {
if (intScore > intSpeed * 10)
intSpeed++;
if (intSpeed > 9)
intSpeed = 1;
UpdateSpeed();
jScoreTextField.setText( (new Integer(intScore)).toString());
}
}
class MainFrame_jStartButton_actionAdapter
implements java.awt.event.ActionListener {
MainFrame adaptee;
MainFrame_jStartButton_actionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jStartButton_actionPerformed(e);
}
}
class MainFrame_jRestartButton_actionAdapter
implements java.awt.event.ActionListener {
MainFrame adaptee;
MainFrame_jRestartButton_actionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jRestartButton_actionPerformed(e);
}
}
class MainFrame_jExitButton_actionAdapter
implements java.awt.event.ActionListener {
MainFrame adaptee;
MainFrame_jExitButton_actionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jExitButton_actionPerformed(e);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -