📄 fang.java
字号:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.border.*;
public class fang extends JFrame implements KeyListener ,ActionListener{
protected JPanel p1,p2;
JLabel label,imlabel;
JRadioButtonMenuItem r1,r2,r3,r4 ;
protected ButtonGroup bg;
protected JMenuBar menubar;
protected JMenu menu,submenu;
protected JMenuItem start,dengji,out,chonglai;
JLabel[][] l;
int[][] a;
JLabel[][] L1;
int[][] aaa;
kuai kuai;
int x,y,b,bb,count,count1,count2,fenshu,sudu,mm,beishu,nn;
boolean go,to,ri,fi,zou,yuce;
music mu;
xiaohang xiao;
public fang(){
menubar=new JMenuBar();
this.setJMenuBar(menubar);
menu=new JMenu("操作");
menubar.add(menu);
start=new JMenuItem("开始");
start.addActionListener(this);
start.registerKeyboardAction(this,KeyStroke.getKeyStroke("F5"),JComponent.WHEN_IN_FOCUSED_WINDOW);
menu.add(start);
bg=new ButtonGroup();
submenu=new JMenu("等级");
r1=new JRadioButtonMenuItem("等级一",true);
r1.addActionListener(this);
bg.add(r1);
r2=new JRadioButtonMenuItem("等级二",false);
r2.addActionListener(this);
bg.add(r2);
r3=new JRadioButtonMenuItem("等级三",false);
r3.addActionListener(this);
bg.add(r3);
r4=new JRadioButtonMenuItem("等级四",false);
r4.addActionListener(this);
bg.add(r4);
submenu.add(r1);
submenu.add(r2);
submenu.add(r3);
submenu.add(r4);
menu.add(submenu);
chonglai=new JMenuItem("重来");
chonglai.addActionListener(this);
chonglai.setEnabled(false);
menu.add(chonglai);
out=new JMenuItem("退出");
out.addActionListener(this);
menu.add(out);
mu=new music();
kuai=new kuai();
this.setTitle("游戏-俄罗斯方块");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(500,456);
this.setLocation(300,100);
x=0;
y=8;
beishu=0;
this.go=false;
this.to=true;
this.fi=true;
this.ri=true;
this.zou=false;
this.yuce=true;
this.nn=400;
this.sudu=nn;
count=0;
count1=0;
count2=0;
fenshu=0;
Container cp=getContentPane();
cp.setBackground(Color.pink);
label=new JLabel("",JLabel.CENTER);
label.setForeground(Color.red);
label.setText("分数:"+fenshu);
label.setBounds(310,15,80,40);
label.setOpaque(true);
l=new JLabel[20][15];
a=new int[24][23];
imlabel=new JLabel();
imlabel.setBounds(307,170,176,220);
ImageIcon icon=new ImageIcon("1.jpg");
imlabel.setIcon(icon);
L1=new JLabel[4][4];
aaa=new int[4][4];
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
L1[i][j]=new JLabel();
L1[i][j].setOpaque(true);
aaa[i][j]=0;
}
}
for(int i=0;i<20;i++){
for(int j=0;j<15;j++){
l[i][j]=new JLabel();
l[i][j].setOpaque(true);
}
}
for(int i=0;i<24;i++){
for(int j=0;j<23;j++){
a[i][j]=0;
}
}
this.addKeyListener(this);
p2=new JPanel();
p2.setBounds(315,70,84,84);
p2.setBorder(new BevelBorder(BevelBorder.RAISED));
p2.setBackground(Color.white);
p2.setOpaque(true);
p2.setLayout(new GridLayout(4,4,1,1));
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
p2.add(L1[i][j]);
}
}
p1=new JPanel();
p1.setBounds(5,5,290,385);
p1.setBorder(new BevelBorder(BevelBorder.RAISED));
p1.setBackground(Color.white);
p1.setOpaque(true);
p1.setLayout(new GridLayout(20,15,1,1));
for(int i=0;i<20;i++){
for(int j=0;j<15;j++){
p1.add(l[i][j]);
}
}
cp.add(p1);
cp.add(p2);
cp.add(label);
cp.add(imlabel);
cp.setLayout(null);
xiao=new xiaohang(this,mu);
}
public void actionPerformed(ActionEvent e){
Object s=e.getSource();
if(s==start){
this.init1();
b=mm;
this.fuzhi();
xiao.start();
mu.play();
start.setEnabled(false);
chonglai.setEnabled(true);
}
if(s==r1){
nn=400;
}
if(s==r2){
nn=300;
}
if(s==r3){
nn=200;
}
if(s==r4){
nn=100;
}
if(s==out){
System.exit(0);
}
if(s==chonglai){
xiao.suspend();
for(int i=0;i<20;i++){
for(int j=0;j<15;j++){
a[i][j+4]=0;
l[i][j].setBackground(p1.getBackground());
}
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
aaa[i][j]=0;
L1[i][j].setBackground(p2.getBackground());
}
}
x=0;
y=8;
mu.play();
this.go=false;
this.to=true;
this.fi=true;
this.ri=true;
this.zou=false;
this.yuce=true;
count=0;
count1=0;
count2=0;
fenshu=0;
label.setText(""+0);
beishu=0;
this.init1();
b=mm;
this.fuzhi();
xiao.resume();
}
}
public void init(){
b=mm;
if((nn-(fenshu/500)*20)>40){
sudu=nn-(fenshu/500)*20;
}else{
sudu=40;
}
x=0;
y=8;
count=0;
to=true;
ri=true;
fi=true;
zou=false;
this.fuzhi();
}
public void yundong() {
if(stop()){
this.defen();
this.beishu=0;
this.yuce=true;
this.init();
go=false;
}
count1++;
for(int i=0;i<20;i++){
for(int j=0;j<15;j++){
if(a[i][j+4]==0){
l[i][j].setBackground(p1.getBackground());
}
if(a[i][j+4]==1){
l[i][j].setBackground(Color.GRAY);
}
}
}
if(count1%sudu==0){
this.xialuo();
}
if(yuce){
this.init1();
}
if(!this.stop()){
this.yuce=false;
}
}
public void fuzhi(){
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(a[x+i][y+j]!=1&&kuai.l[b][i][j]==1){
a[x+i][y+j]=kuai.l[b][i][j];
}
}
}
}
public void init1(){
mm=kuai.chuangjian();
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
aaa[i][j]=0;
}
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(aaa[i][j]!=1&&kuai.l[mm][i][j]==1){
aaa[i][j]=kuai.l[mm][i][j];
}
}
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(aaa[i][j]==0){
L1[i][j].setBackground(p2.getBackground());
}
if(aaa[i][j]==1){
L1[i][j].setBackground(Color.black);
}
}
}
}
public void keyPressed(KeyEvent e){
if(e.getKeyCode()==e.VK_ENTER){
if(count2%2==0){
xiao.suspend();
}
if(count2%2==1){
xiao.resume();
}
count2++;
}
if(e.getKeyCode()==32){
if(!this.stop()){
this.sudu=1;
}
}
if(e.getKeyCode()==37){//left
if(this.canl()){
ri=true;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(kuai.l[b][i][j]==1){
a[x+i][y+j]=0;
}
}
}
y--;
this.fuzhi();
}
}
if(e.getKeyCode()==39){//right
if(this.canr()){
fi=true;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(kuai.l[b][i][j]==1){
a[x+i][y+j]=0;
}
}
}
y++;
this.fuzhi();
}
}
if(e.getKeyCode()==38){//up bianhuan
if(kebian()&&b!=3){
count++;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(kuai.l[b][i][j]==1){
a[x+i][y+j]=0;
}
}
}
if(b==0){
if(count==1){
int m[][]= {{1,1,1,1},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
kuai.l[b][i][j]=m[i][j];
}
}
while(y+3>18){
y--;
}
while(a[x+1][y+1]==1||a[x+1][y+2]==1||a[x+1][y+1]==1){
x--;
}
this.fuzhi();
}
if(count==2){
int m[][]={{1,0,0,0},{1,0,0,0},{1,0,0,0},{1,0,0,0}};
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
kuai.l[b][i][j]=m[i][j];
}
}
while(a[x+3][y]==1||a[x+2][y]==1){
x--;
}
this.fuzhi();
count=0;
}
}
if(b==1){
if(count==1){
int m[][]= {{0,1,1,1},{0,1,0,0},{0,0,0,0},{0,0,0,0}};//L+90度
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
kuai.l[b][i][j]=m[i][j];
}
}
while(y<3){
y++;
}
while(y+3>18){
y--;
}
this.fuzhi();
}
if(count==2){
int m[][]={{0,0,1,1},{0,0,0,1},{0,0,0,1},{0,0,0,0}};//L+180度
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
kuai.l[b][i][j]=m[i][j];
}
}
while(y<2){
y++;
}
while(y+3>18){
y--;
}
while(a[x+3][y]==1){
x--;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -