欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

沙画效果实现

程序员文章站 2022-03-02 13:27:24
沙画实现原理将窗体分为若干个1x1的像素点将相邻的4个像素点进行考虑上下2个沙粒的下落情况可以分成2* 2* 2 *2=16中情况,但是真正有意义的情况只有9种用一个二维数组存放每个像素点的沙粒情况,0为无沙粒,其他情况为有沙粒另外,沙画初始形状可以随机,也可以运用分形建造从(0,0)点开始遍历,改变沙粒情况,下一次从(1,1)点开始这样的沙画就可以动起来了 //沙画进行 for(int k=0;;k++){//形成动画效果 //清除 ....

沙画效果实现沙画效果实现

沙画实现原理

将窗体分为若干个1x1的像素点

将相邻的4个像素点进行考虑上下2个沙粒的下落情况

可以分成2* 2* 2 *2=16中情况,但是真正有意义的情况只有9种
沙画效果实现
沙画效果实现

沙画效果实现
沙画效果实现
沙画效果实现
用一个二维数组存放每个像素点的沙粒情况,0为无沙粒,其他情况为有沙粒

另外,沙画初始形状可以随机,也可以运用分形建造

从(0,0)点开始遍历,改变沙粒情况,下一次从(1,1)点开始这样的沙画就可以动起来了

    	//沙画进行
    	for(int k=0;;k++){//形成动画效果
    		
    		//清除
    		bufferGraphics.setColor(BG_COLOR);
    		bufferGraphics.fillRect(0, 0, 800, 600);
    		
    		//i在0和1之间循环赋值
    		for(int i = k;i+1<data.length;i+=1){
    			
    			for(int j = k;j+1<data[i].length;j+=1){
    				
    				int p = r.nextInt(2);
    				if(data[i][j]!=0&&data[i+1][j]==0&&data[i][j+1]==0&&data[i+1][j+1]==0){
    					//只有左上
    					data[i][j]=0;
    					data[i][j+1]=1;
    				} else if(data[i][j]==0&&data[i+1][j]!=0&&data[i][j+1]==0&&data[i+1][j+1]==0){
    					//只有右上
    					data[i+1][j]=0;
    					data[i+1][j+1]=1;
    				} else if(data[i][j]==0&&data[i+1][j]!=0&&data[i][j+1]==0&&data[i+1][j+1]!=0){
    					//右边两个
    					data[i+1][j]=0;
    					data[i][j+1]=1;
    				} else if(data[i][j]!=0&&data[i+1][j]==0&&data[i][j+1]!=0&&data[i+1][j+1]==0){
    					//左边两个
    					data[i+1][j+1]=1;
    					data[i][j]=0;
    				} else if(data[i][j]!=0&&data[i+1][j]!=0&&data[i][j+1]!=0&&data[i+1][j+1]==0){
    					//左三角
    					data[i+1][j]=0;
    					data[i+1][j+1]=1;
    				} else if(data[i][j]!=0&&data[i+1][j]!=0&&data[i][j+1]==0&&data[i+1][j+1]!=0){
    					//右三角
    					data[i][j]=0;
    					data[i][j+1]=1;
    				} else if(data[i][j]==0&&data[i+1][j]!=0&&data[i][j+1]!=0&&data[i+1][j+1]==0){
    					//副对角线
    					data[i+1][j]=0;
    					data[i+1][j+1]=1;
    				} else if(data[i][j]!=0&&data[i+1][j]==0&&data[i][j+1]==0&&data[i+1][j+1]!=0){
    					//主对角线
    					data[i][j]=0;
    					data[i][j+1]=1;
    				} else if(data[i][j]!=0&&data[i+1][j]!=0&&data[i][j+1]==0&&data[i+1][j+1]==0){
    					//上面两个
    					if(p==1){
    						data[i][j]=0;
        					data[i][j+1]=1;
    					} else if(p==0){
    						data[i+1][j]=0;
        					data[i+1][j+1]=1;
    					}
    				}	
    				
    			}
    				
    		}
    		//绘制数组
    		showArr(bufferGraphics,data);
    		//绘制缓存到界面上
    		g.drawImage(buffer, 0, 0, null);
				
    		if(k==1)
    			k=0;

    	}

本文地址:https://blog.csdn.net/llplllll/article/details/107289976