|
|
|
@ -48,11 +48,14 @@ public class Tetris extends JPanel {
|
|
|
|
|
public static final int STOP = 1;
|
|
|
|
|
public static final int OVER = 2;
|
|
|
|
|
//当前游戏状态值
|
|
|
|
|
private int game_state;
|
|
|
|
|
private static int game_state;
|
|
|
|
|
//显示游戏状态
|
|
|
|
|
String[] show_state = {"P[pause]", "C[continue]", "S[replay]"};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//创建对象sound
|
|
|
|
|
Sound sound = new Sound();
|
|
|
|
|
//创建对象sound1
|
|
|
|
|
Sound1 sound1 = new Sound1();
|
|
|
|
|
//载入方块图片
|
|
|
|
|
public static BufferedImage I;
|
|
|
|
|
public static BufferedImage J;
|
|
|
|
@ -96,47 +99,71 @@ public class Tetris extends JPanel {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void start() {
|
|
|
|
|
game_state = PLING;
|
|
|
|
|
sound.play("music\\俄罗斯方块BGM.wav");//调用音乐播放
|
|
|
|
|
KeyListener l = new KeyAdapter() {
|
|
|
|
|
@Override
|
|
|
|
|
public void keyPressed(KeyEvent e) {
|
|
|
|
|
int code = e.getKeyCode();
|
|
|
|
|
switch (code) {
|
|
|
|
|
//直接结束游戏
|
|
|
|
|
case KeyEvent.VK_G:
|
|
|
|
|
if (game_state == PLING) {
|
|
|
|
|
game_state = OVER;
|
|
|
|
|
}
|
|
|
|
|
//停止播放第一个音乐
|
|
|
|
|
sound.stop();
|
|
|
|
|
//游戏结束播放第二个音乐
|
|
|
|
|
sound1.run();
|
|
|
|
|
break;
|
|
|
|
|
//向下
|
|
|
|
|
case KeyEvent.VK_DOWN:
|
|
|
|
|
sortDropActive();
|
|
|
|
|
break;
|
|
|
|
|
//向左
|
|
|
|
|
case KeyEvent.VK_LEFT:
|
|
|
|
|
moveleftActive();
|
|
|
|
|
break;
|
|
|
|
|
//向右
|
|
|
|
|
case KeyEvent.VK_RIGHT:
|
|
|
|
|
moveRightActive();
|
|
|
|
|
break;
|
|
|
|
|
//变形
|
|
|
|
|
case KeyEvent.VK_UP:
|
|
|
|
|
rotateRightActive();
|
|
|
|
|
break;
|
|
|
|
|
//瞬间下落
|
|
|
|
|
case KeyEvent.VK_SPACE:
|
|
|
|
|
hadnDropActive();
|
|
|
|
|
break;
|
|
|
|
|
//暂停
|
|
|
|
|
case KeyEvent.VK_P:
|
|
|
|
|
//判断当前游戏状态
|
|
|
|
|
if (game_state == PLING) {
|
|
|
|
|
game_state = STOP;
|
|
|
|
|
}
|
|
|
|
|
sound.stop();//停止播放音乐
|
|
|
|
|
break;
|
|
|
|
|
case KeyEvent.VK_C:
|
|
|
|
|
if (game_state == STOP) {
|
|
|
|
|
game_state = PLING;
|
|
|
|
|
}
|
|
|
|
|
//再次调用第一段音乐
|
|
|
|
|
sound.run();
|
|
|
|
|
break;
|
|
|
|
|
case KeyEvent.VK_S:
|
|
|
|
|
//重新开始
|
|
|
|
|
game_state = PLING;
|
|
|
|
|
wall = new Cell[14][10];
|
|
|
|
|
game_state = PLING;//让游戏处于运行状态
|
|
|
|
|
wall = new Cell[14][9];
|
|
|
|
|
currentOne = Tetromino.randomOne();
|
|
|
|
|
nextOne = Tetromino.randomOne();
|
|
|
|
|
totalScore = 0;
|
|
|
|
|
totalLine = 0;
|
|
|
|
|
//重新开始让第二个音乐停止
|
|
|
|
|
sound1.stop();
|
|
|
|
|
//重新开始音乐再次播放
|
|
|
|
|
sound.run();
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
@ -159,6 +186,8 @@ public class Tetris extends JPanel {
|
|
|
|
|
destroyLine();
|
|
|
|
|
if (isGameOver()) {
|
|
|
|
|
game_state = OVER;
|
|
|
|
|
//游戏结束播放第二个音乐
|
|
|
|
|
sound1.run();
|
|
|
|
|
} else {
|
|
|
|
|
//游戏没有结束
|
|
|
|
|
currentOne = nextOne;
|
|
|
|
@ -278,6 +307,7 @@ public class Tetris extends JPanel {
|
|
|
|
|
//判断游戏是否结束
|
|
|
|
|
public boolean isGameOver() {
|
|
|
|
|
Cell[] cells = nextOne.cells;
|
|
|
|
|
|
|
|
|
|
for (Cell cell : cells) {
|
|
|
|
|
int row = cell.getRow();
|
|
|
|
|
int col = cell.getCol();
|
|
|
|
@ -288,6 +318,7 @@ public class Tetris extends JPanel {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void paintState(Graphics g) {
|
|
|
|
|
g.setColor(Color.orange);
|
|
|
|
|
if (game_state == PLING) {
|
|
|
|
@ -295,7 +326,9 @@ public class Tetris extends JPanel {
|
|
|
|
|
|
|
|
|
|
} else if (game_state == STOP) {
|
|
|
|
|
g.drawString(show_state[STOP], 500, 660);
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
sound.stop();//游戏结束音乐停止
|
|
|
|
|
g.drawString(show_state[OVER], 500, 660);
|
|
|
|
|
g.setColor(Color.RED);
|
|
|
|
|
g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 60));
|
|
|
|
@ -303,8 +336,9 @@ public class Tetris extends JPanel {
|
|
|
|
|
g.setColor(Color.blue);
|
|
|
|
|
g.drawString("哥们再来一把!",30,500);
|
|
|
|
|
g.drawString("I am lzj", 100, 600);
|
|
|
|
|
|
|
|
|
|
//sound1.run();//游戏结束播放第二个音乐
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void paintSource(Graphics g) {
|
|
|
|
@ -405,13 +439,8 @@ public class Tetris extends JPanel {
|
|
|
|
|
jFrame.setLocationRelativeTo(null);
|
|
|
|
|
//设置窗口关闭时停止
|
|
|
|
|
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
|
|
|
//调用音乐开始播放
|
|
|
|
|
BGM bgm = new BGM("E:\\Temp\\Tetris\\music\\城南花已开.mp3");
|
|
|
|
|
bgm.start();
|
|
|
|
|
// 游戏主要开始逻辑
|
|
|
|
|
panel.start();
|
|
|
|
|
// panel.isGameOver();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|