import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JMenu;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Tetris
extends JFrame {
/**
* Launch the application.
*/
public static void main
(String[] args
) {
public void run() {
try {
Tetris frame = new Tetris();
frame.setVisible(true);
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Tetris() {
setTitle("反应力大考验");
setDefaultCloseOperation
(JFrame.
EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
setJMenuBar(menuBar);
menuBar.add(mnNewMenu);
}
});
mnNewMenu.add(mntmNewMenuItem_3);
menuBar.add(mnNewMenu_1);
JOptionPane.
showMessageDialog(null,
"空格键控制横条的摆放,正确对齐位置才能更上一层,成功达到顶层可获得游戏胜利!",
"游戏玩法",
}
});
mnNewMenu_1.add(mntmNewMenuItem);
JOptionPane.
showMessageDialog(null,
"网络1004班:陈雍,董振宇,高宝成,何其",
"关于作者",
}
});
mnNewMenu_1.add(mntmNewMenuItem_4);
setContentPane(contentPane);
contentPane.setLayout(null);
lblNewLabel.setBounds(282, 169, 70, 15);
contentPane.add(lblNewLabel);
MyJPanel panel = new MyJPanel();
panel.setBounds(0, 0, 300, 300);
contentPane.add(panel);
addKeyListener(panel);
getContentPane().add(panel);
lblNewLabel_1
= new JLabel("[0]");
lblNewLabel_1.setBounds(311, 199, 70, 15);
contentPane.add(lblNewLabel_1);
lblNewLabel_2.setBounds(282, 12, 70, 15);
contentPane.add(lblNewLabel_2);
lblNewLabel_3.setBounds(264, 39, 117, 15);
contentPane.add(lblNewLabel_3);
lblf.setBounds(264, 66, 117, 15);
contentPane.add(lblf);
lblf_1.setBounds(264, 93, 117, 15);
contentPane.add(lblf_1);
label_2.setBounds(264, 120, 117, 15);
contentPane.add(label_2);
lblNewLabel_4.setBounds(264, 142, 117, 15);
contentPane.add(lblNewLabel_4);
}
private int blockFlag = 5;
private int floor = 1;
private boolean startFlag;
private boolean outFlag;
private int ctrlBlock;
private int speed;
private int checkBlock;
private int blockSaver;
private boolean clearFlag=true;
private int grade;
private boolean ctrlFlag=false;
blockThread t;
public void paintComponent
(Graphics g
) {
super.paintComponents(g);
if(clearFlag==false){
g.clearRect(18,0,234, 234);
clearFlag=true;
}
g.clearRect(18, 234 - floor * 18, 180, 18);
for (int i = 0; i < 14; i++) {
g.drawRect(0, i * 18, 18, 18);
g.drawRect(198, i * 18, 18, 18);
if (i < 11) {
g.drawRect((i + 1) * 18, 234, 18, 18);
}
}
for (int i = 0; i < blockFlag; i++) {
g.fillRect((++ctrlBlock) * 18, 234 - floor * 18, 18, 18);
checkBlock = ctrlBlock;
}
ctrlBlock = 0;
}
public void start() {
ctrlFlag=true;
t = new blockThread();
t.start();
}
public void init(){
blockFlag = 5;
floor = 1;
startFlag = true;
outFlag = true;
ctrlBlock = 0;
speed = 500;
checkBlock = 0;
blockSaver = 0;
grade=0;
}
public void flushBlock() {
init();
int tmp = ctrlBlock;
while (startFlag) {
if (outFlag) {
for (int i = 0; i < (11 - blockFlag); i++) {
ctrlBlock = tmp;
try {
// TODO Auto-generated catch block
e.printStackTrace();
}
repaint();
tmp++;
}
outFlag = false;
} else {
for (int i = 0; i < (11 - blockFlag); i++) {
ctrlBlock = tmp - 1;
try {
// TODO Auto-generated catch block
e.printStackTrace();
}
repaint();
tmp--;
}
outFlag = true;
}
}
}
public void suspend() {
if(ctrlFlag){
t.suspend();
}else{
JOptionPane.
showMessageDialog(null,
"请先按F1开始游戏!",
"提示",
}
}
public void resume() {
if(ctrlFlag){
t.resume();
}else{
JOptionPane.
showMessageDialog(null,
"请先按F1开始游戏!",
"提示",
}
}
public void ctrl(){
if(ctrlFlag){
newline();
}else{
JOptionPane.
showMessageDialog(null,
"请先按F1开始游戏后再按空格键控制",
"提示",
}
}
public void newline() {
if(floor>1&&blockSaver!=checkBlock){
JOptionPane.
showMessageDialog(null,
"Game Over!您的分数:"+grade,
"提示",
t.stop();
init();
clearFlag=false;
ctrlFlag=false;
repaint();
Tetris.lblNewLabel_1.setText("["+grade+"]");
return;
}
if(floor>13){
init();
clearFlag=false;
ctrlFlag=false;
repaint();
Tetris.lblNewLabel_1.setText("["+grade+"]");
return;
}
blockSaver=checkBlock;
grade=grade+(floor*100);
floor++;
speed = speed - 38;
Tetris.lblNewLabel_1.setText("["+grade+"]");
}
class blockThread
extends Thread {
public void run() {
flushBlock();
}
}
switch (e.getKeyCode()) {
ctrl();
break;
start();
break;
suspend();
break;
resume();
break;
}
}
@Override
public void keyReleased
(KeyEvent arg0
) {
// TODO Auto-generated method stub
}
@Override
// TODO Auto-generated method stub
}
}
}
//源代码片段来自云代码http://yuncode.net