Java之Eclipse实现——马赛克自动扩散小动画

在这里插入图片描述
在这里插入图片描述

import java.awt.*;
import acm.graphics.*;
import acm.program.*;

public class Beeperline extends  GraphicsProgram { //扩散动画
	private final int Weigh = 50;
	int [][] a=new int[Weigh][Weigh], b  = new int[Weigh][Weigh];
	GOval[][] r = new GOval[Weigh][Weigh];
	int i,j; 
	//表格
	public void ground() {
		GRect kuang = new GRect(Weigh*20,Weigh*20);
		kuang.setColor(Color.black);
		add(kuang,20,20);
		
		for(int i=40; i<20*Weigh+20; i+=20){
			GLine line = new GLine(i,20,i,Weigh*20+20);
			add(line);
			line = new GLine(20,i,Weigh*20+20,i);
			add(line);
		}
		
		for(int i=0; i<Weigh; i++){
			for(int j=0; j<Weigh; j++){
				a[i][j]=0;
				r[i][j] = new GOval(20,20);
				FalseGO(i,j);
				add(r[i][j],i*20+20,j*20+20);
			}
		}
	}
	
	public void judge(int n,int m){
		int num=0;
		for(i=-1; i<=1; i++) {
			for(j=-1; j<=1; j++) {
				if((n+i)>=Weigh||(m+j)>=Weigh||(n+i)<0||(m+j)<0||(i==0&&j==0)) 
					continue;
				else if(a[n+i][m+j]==1)  num++;
			}
		}
		b[n][m]=num;
	}
	
	public void CROval(){
		for(int n=0; n<Weigh; n++)
			for(int m=0; m<Weigh; m++)	judge(n,m);
		for(int i=0; i<Weigh; i++) {
			for(int j=0; j<Weigh; j++) {
				if(a[i][j]==0){
					if(b[i][j]==3) {
						a[i][j]=1;	
						TrueGO(i,j);
					}
				}
				else {
					if(b[i][j]<2||b[i][j]>3) {	
						a[i][j]=0;	
						FalseGO(i,j);
					}
				}
			}
		}
	}
	
	public void First() {
		for(i=0; i<Weigh; i++)
			for(j=0; j<Weigh; j++) {
				if(Math.random()<0.02) {
					TrueGO(i,j);  
					a[i][j]=1;  
					break;
				}
			}
	}
	
	public void TrueGO(int i,int j) {
		r[i][j].setFilled(true);
		r[i][j].setColor(Color.red);
	}
	
	public void FalseGO(int i,int j) {
		r[i][j].setFilled(true);
		r[i][j].setColor(Color.yellow);
	}
	
	public void run() {
		ground();
		while(true) {
			First();	
			CROval();	
			pause(100);		
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米莱虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值