⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 block.java

📁 基本的俄罗斯游戏 基本的俄罗斯游戏 基本的俄罗斯游戏
💻 JAVA
字号:
	
	import java.awt.*;
	import javax.swing.*;
	//所有方块的根类,作为主窗体类的内部类
	public abstract class Block{
	int[] rows;//四个小方块的行号
	int[] columns;//四个小方块的列号
	Color color;
	Boolean isToBottom,isToTop,isClear;//到顶,到底和是否可以清除方块以计分的标志
	final int LEFT=1;//方块动作标志常量
	final int RIGHT=2;
	final int TURN=3;
	final int DOWN=4;
	final int NORMAL=5;
	int direction;//动作标志
    int status;//方块翻转的当前状态
    GameMainFrame gmf;

	public Block(GameMainFrame gmf){
		this.gmf=gmf;
		rows=new int[4];
		columns=new int[4];
		for(int i=0;i<4;i++){
			rows[i]=0;
			columns[i]=0;
		}
		isToBottom=false;
		isToTop=false;
		isClear=false;
		direction=0;
		status=1;			
	}
	abstract void turn();//抽象方法,由所有方块子类实现(实现各方块的翻转方法)
	public void clear(){//清楚方法
		for(int i=0;i<4;i++){
			gmf.playBlocks[rows[i]][columns[i]].setBackground(Color.lightGray);
			gmf.playBlocks[rows[i]][columns[i]].setVisible(false);
		}
	}
	public void show(){//刷新方法
	    
		for(int i=0;i<4;i++){
			gmf.playBlocks[rows[i]][columns[i]].setBackground(color);
            gmf.playBlocks[rows[i]][columns[i]].setVisible(true);
		}
	}
	public void downToBottom(){//方块一下到底
		while(!isToBottom)dowmoneLine();
	}
	public void dowmoneLine(){//方块逐层下落
		for(int i=0;i<4;i++){
			if(rows[i]==19){
				isToBottom=true;
				break;
			}
			if(gmf.flagBlocks[rows[i]+1][columns[i]]!=0){//方块下有方块则标志到底
				isToBottom=true;
				if(rows[i]<=2){
					isToTop=true;
				}
				break;
			}
		}
		if(isToTop){//到顶,游戏结束
		    //JOptionPane.showMessageDialog(gmf.gameJPanel,this,"游戏结束!");
			//JOptionPane.showMseeageDialog(gmf,"游戏结束!","游戏结束!",JOptionPane.INFORMATION_MESSAGE);
			return;
		}
		if(isToBottom){//到底,设置底部标志
			for(int j=0;j<4;j++){
				gmf.flagBlocks[rows[j]][columns[j]]=1;
				
			}
			gmf.score+=5;
			
			
			//清楚能够消除的行
			for(int i=0;i<20;i++){
				isClear=true;
				for(int j=0;j<15;j++){
					if(gmf.flagBlocks[i][j]==0){//一行中有空格(即没满),退出该层循环
						isClear=false;
						break;
					}
				}
				
				if(isClear){
					for(int j=i;j>0;j--){
						for(int k=0;k<15;k++){
							gmf.flagBlocks[j][k]=gmf.flagBlocks[j-1][k];//将待消行的上一行的标志付给该行
							gmf.playBlocks[j][k].setBackground(gmf.playBlocks[j-1][k].getBackground());
							if(gmf.flagBlocks[j][k]!=0)gmf.playBlocks[j][k].setVisible(true);
							else gmf.playBlocks[j][k].setVisible(false);
							
						}
					}
					//消行之后累分
				    gmf.score+=20;
				    gmf.totalLines++;
				    gmf.currentLines++;
				    if(gmf.currentLines>20&&gmf.level<=10){
					    gmf.currentLines=0;
					    gmf.level++;
					    gmf.speed-=50;  
				    }
			    }//if(isClear)
		    }//for
		    gmf.score_JLabel.setText(Long.toString(gmf.score));//更新记分
	    }//if(isToBottom)
	    this.clear();
	    for(int i=0;i<4;i++){
	    	if(!isToBottom)rows[i]++;
	    }
	    this.show();
      }
      
    
    public void left(){//方块向左移
        for(int i=0;i<4;i++){
        	if(columns[i]<=0)return;//到左边界,返回
        	if(gmf.flagBlocks[rows[i]][columns[i]-1]!=0)return;//左边界有方块,返回
        }
        clear();//清除方块显示
        for(int i=0;i<4;i++)columns[i]--;//左移一列
        show();//重新显示方块
    }
    
    
    public void right(){//方块向右移
       for(int i=0;i<4;i++){
        	if(columns[i]>=14)return;//到右边界,返回
        	if(gmf.flagBlocks[rows[i]][columns[i]+1]!=0)return;//右边界有方块,返回
        }
        clear();//清除方块显示
        for(int i=0;i<4;i++)columns[i]++;//左移一列
        show();//重新显示方块
    }
    
    public boolean getIsBottom(){//返回到底标志
    	return this.isToBottom;
    }
    public boolean getIsTop(){//返回到顶标志
    	return this.isToTop;
    }
    
    
    public void setDirection(int direction){//设置方向标志
    	this.direction=direction;
    }
    public int getDirection(){//返回方向标志
    	return this.direction;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -