📄 myeluosi.java
字号:
/**
* Created by Abiao.
* User: student
* Date: 2005-1-28
* Time: 14:02:45
* To change this template use Options | File Templates.
*/
package classes;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
/*---------------------------------------------------------------------------*/
public class MyELuoSi extends JFrame{
Container c = this.getContentPane();
boolean flag = true; //一点变色标志
int x,y; //记录主动方块移动后的位置
int xx,yy; //记录主动方块移动前的位置
int x2,y2,x3,y3,x4,y4,x5,y5;//从动点
boolean bombFlag = false; //两点爆炸标志
boolean produce = true;
int scores = 0; //积分
long slep = 800; //睡觉时间
/*---------------------------------------------------------------------------*/
public MyELuoSi(){
c.setLayout(null); //不用布局管理器,自定义元件位置
Font font = new Font("宋体",Font.BOLD,30);
JMenuBar menuBar = new JMenuBar(); //建立菜单栏
this.setJMenuBar(menuBar);
menuBar.setBackground(Color.lightGray);//设置菜单栏的背景色
JMenu game = new JMenu("游戏(G)"); //增加菜单项"工具"
game.setMnemonic('G'); //设置快捷键
menuBar.add(game); //把游戏菜单加到菜单条上
//游戏菜单的各个菜单项
JMenuItem start = new JMenuItem("开始(S)");
JMenuItem restart = new JMenuItem("重新开始(R)");
JMenuItem ext = new JMenuItem("退出游戏(Q)");
//把游戏菜单的菜单项加到菜单上去
game.add(start);
game.add(restart);
game.addSeparator();
game.add(ext);
//游戏菜单的各个菜单项的加速键
start.setAccelerator(
KeyStroke.getKeyStroke(
KeyEvent.VK_S,InputEvent.CTRL_MASK));
restart.setAccelerator(
KeyStroke.getKeyStroke(
KeyEvent.VK_R,InputEvent.CTRL_MASK));
ext.setAccelerator(
KeyStroke.getKeyStroke(
KeyEvent.VK_Q,InputEvent.CTRL_MASK));
//为开始按钮设置监听器
start.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
produce=true;
getRandomDiamonds();
}
});
//为重新开始按钮设置监听器
restart.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
produce=false;
dispose();
MyELuoSi other = new MyELuoSi();
other.getRandomDiamonds();
}
});
//为退出菜单设置监听器
ext.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
produce=false;
dispose();
}
});
//游戏秘技
JMenu secretSkill = new JMenu("秘技(K)");
secretSkill.setMnemonic('K');
menuBar.add(secretSkill);
JMenuItem bomb = new JMenuItem("激活(取消)炸弹(B)");
secretSkill.add(bomb);
bomb.setAccelerator(
KeyStroke.getKeyStroke(
KeyEvent.VK_B,InputEvent.CTRL_MASK));
bomb.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(bombFlag) bombFlag = false; //取消炸弹
else bombFlag = true; //激活炸弹
}
});
//速度
JMenu speed = new JMenu("速度(S)");
speed.setMnemonic('S');
menuBar.add(speed);
JMenuItem less = new JMenuItem("减速(L)");
JMenuItem accelerate= new JMenuItem("加速(A)");
speed.add(less);
speed.add(accelerate);
less.setAccelerator(
KeyStroke.getKeyStroke(
KeyEvent.VK_L,InputEvent.CTRL_MASK));
less.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(slep<2000) slep+=50;
}
});
accelerate.setAccelerator(
KeyStroke.getKeyStroke(
KeyEvent.VK_A,InputEvent.CTRL_MASK));
accelerate.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(slep>400) slep-=50;
}
});
//窗口监听器
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
produce=false;
dispose();
}
});
/*---------------------------------------------------------------------------*/
this.setBounds(175,0,668,720); //设置窗口大小
this.setTitle("俄罗斯方块"); //设置窗口标题
this.setVisible(true); //设置窗口可视
this.setResizable(false); //不允许调整窗口大小
}
/*---------------------------------------------------------------------------*/
//随机产生各种类型方块
public void getRandomDiamonds(){
Random rand = new Random();
int d = rand.nextInt();
int r = Math.abs(d%5)+1;
if(produce){
switch(r){
case 1:
getOnePoint();break;
case 2:
int rr2 = Math.abs(rand.nextInt())%2;
getTwoPoints(rr2);break;
case 3:
int rr3 = Math.abs(rand.nextInt())%4;
getThreePoints(rr3);break;
case 4:
int rr4 = Math.abs(rand.nextInt())%7;
getFourPoints(rr4);break;
case 5:
int rr5 = Math.abs(rand.nextInt())%3;
getFivePoints(rr5);break;
}
}
}
/*---------------------------------------------------------------------------*/
//一点
public void getOnePoint(){
final JButton onepoint = new JButton("1");
onepoint.setBounds(300,0,60,60);
onepoint.setBackground(Color.red);
c.add(onepoint);
this.setTitle("俄罗斯方块 一点"+" 现在积分:"+(scores*11));
onepoint.requestFocus();
final Thread thread=new Thread(){
public void run(){
x = onepoint.getX();
y = onepoint.getY();
while(y<600&&c.getComponentAt(x,y+60).isEnabled()){
x = onepoint.getX(); y = onepoint.getY()+60;
try{
Thread.sleep(slep);
onepoint.setLocation(x,y);
}catch(InterruptedException e){}
}
//当方块遇到障碍物时不可再用
int oney = onepoint.getY()+60;
int onex = onepoint.getX();
boolean sigh = false;
int i = 0,j = 0;
if(oney==660){
onepoint.setEnabled(false);
onepoint.setBackground(Color.magenta);
ClearRows();
getRandomDiamonds();
}
else{
//一点穿透效果
for(i =600;i>oney;i-=60){
if( !c.getComponentAt(onex,oney).isEnabled()&&
c.getComponentAt(onex,i).isEnabled() ){
onepoint.setLocation(onex,i);
onepoint.setBackground(Color.magenta);
onepoint.setEnabled(false);
ClearRows();
getRandomDiamonds();
sigh = true;
break;
}
}
if(!c.getComponentAt(onex,oney).isEnabled()&&!sigh){
onepoint.setBackground(Color.magenta);
onepoint.setEnabled(false);
ClearRows();
getRandomDiamonds();
}
}
DefineOver();
}
};
thread.start();
KeyAdapter k;
onepoint.addKeyListener(k = new KeyAdapter(){
public void keyPressed(KeyEvent e){
int key = e.getKeyCode();
int xx,yy;
//使onepoint相应移动
if(e.getKeyText(key).equals("Right")){
xx = x;
x+=60;
int oney = onepoint.getY();
int onex = onepoint.getX()+60;
if(x>=0&&x<=600&&c.getComponentAt(onex,oney).isEnabled())
onepoint.setLocation(x,y-60);
else x = xx;
if(flag){
onepoint.setBackground(Color.cyan);
flag = false;
}
else{
onepoint.setBackground(Color.red);
flag = true;
}
}
else if(e.getKeyText(key).equals("Left")){
xx = x;
x-=60;
int oney = onepoint.getY();
int onex = onepoint.getX()-60;
if(x>=0&&x<=600&&c.getComponentAt(onex,oney).isEnabled())
onepoint.setLocation(x,y-60);
else x = xx;
if(flag){
onepoint.setBackground(Color.cyan);
flag = false;
}
else{
onepoint.setBackground(Color.red);
flag = true;
}
}
else if(e.getKeyText(key).equals("Down")){
yy = y;
y+=60;
if(y>=0&&y<=600) onepoint.setLocation(x,y-60);
else y = yy;
if(flag){
onepoint.setBackground(Color.cyan);
flag = false;
}
else{
onepoint.setBackground(Color.red);
flag = true;
}
}
//快速下降
else if(e.getKeyText(key).equals("F")){
int onex = onepoint.getX();
int oney = onepoint.getY();
while(c.getComponentAt(onex,oney+60).isEnabled()&&
oney<600){
oney+=60;
}
onepoint.setLocation(onex,oney);
x = onex;y = oney;
}
}
});
}
/*---------------------------------------------------------------------------*/
//两点
public void getTwoPoints(int r){
final JButton twopoint1 = new JButton("1");
final JButton twopoint2 = new JButton("2");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -