现在的位置: 首页 > 综合 > 正文

Java任选课学习——Building小程序

2013年11月19日 ⁄ 综合 ⁄ 共 2692字 ⁄ 字号 评论关闭

上机题:设计并实现一个代表大楼的Building类,利用传递给该类构造方法的参数指定大楼的宽度与高度。每幢大楼均为黑色,上面有一些黄颜色的小窗户,窗户数量为随机数。创建一个程序,绘制多幢大楼(大楼个数也为随机数),如下:

实现:(注:没有考虑窗户重叠现象)

构建Building类,构建build_window类继承至Building,编写测试类testBuilding,随机产生大楼坐标,绘制大楼和窗户

import java.awt.Color;
import java.awt.Graphics;

/**
 * @author DC
 *
 */
public class Building {
	/**
	 * 成员变量
	 */
	private int bx,by,bw,bh;
	private Color buildcolor;
	
	/**
	 * 默认构造函数
	 */
	public Building()
	{		
		this.bx=0;
		this.by=0;
		this.bw=0;
		this.bh=0;
	}
	
	/**
	 * 构造函数
	 * @param x
	 * @param y
	 * @param w
	 * @param h
	 */
	public Building(int x,int y,int w,int h)
	{
		this.bx=x;
		this.by=y;
		this.bw=w;
		this.bh=h;
	}
	
	/**
	 * @param x
	 * @param y
	 * @param w
	 * @param h
	 */
	public void setLocation(int x,int y,int w,int h)
	{
		this.bx=x;
		this.by=y;
		this.bw=w;
		this.bh=h;	
	}
	
	public void addwindow()
	{
		
	}
	
	public void show(Graphics g)
	{
		g.fillRect(bx,by,bw,bh);
	}

	public void setBuildcolor(Color buildcolor) {
		this.buildcolor = buildcolor;
	}

	public Color getBuildcolor() {
		return buildcolor;
	}
	
	public void setx(int x) {
		this.bx = x;
	}

	public int getx() {
		return bx;		
	}
	
	public void sety(int y) {
		this.by=y;
	}

	public int gety() {
		return by;
	}
}

import java.awt.Graphics;


/**
 * @author DC
 * 窗户类
 */
public class build_window extends Building {
	//public void show(Graphics g)
	//{
	//	super.show(g);
	//}
}

import java.awt.*;
import java.applet.*;

/**
 * @author User
 *
 */
public class testBuilding extends Applet{
	private int H=300;
	private int build_num,window_Num[];
	private Building b[];
	private build_window bwindow[][];
	private int presentX=0;
	int count=0;
	/* (non-Javadoc)
	 * @see java.applet.Applet#init()
	 */
	public void init()
	{
		//设置背景色为青色
		this.setBackground(Color.cyan);
		//产生大楼的数量
		build_num=(int) (10*Math.random()+1);
		b=new Building[build_num]; 		
		window_Num=new int[build_num];
		bwindow=new build_window[build_num][10];
		//产生大楼和窗户的位置,形状
		int tempX,tempY,tempW,tempH;		
		for(int i=0;i<build_num;i++)
		{			
			//产生大楼
			tempW=(int) (80*Math.random()+10);
			tempH=(int) ((H-10)*Math.random()+10);
			tempX=presentX+(int) (100*Math.random());
			tempY=H-tempH;
			b[i]=new Building(tempX,tempY,tempW,tempH);
			b[i].setBuildcolor(Color.black);			
			presentX=tempX+tempW+10;
			int tempXX=tempX;
			int tempHH=tempH;
			int tempWW=tempW;
			window_Num[i]=(int) (10*Math.random()+1);
			//产生大楼对应窗户			
			for(int j=0;j<10;j++)
			{
				tempW=10;
				tempH=10;
				tempX=(int)(tempXX+(tempWW-10)*Math.random());
				tempY=(int)((tempHH-10)*Math.random()+H-tempHH);
				bwindow[i][j]=new build_window();
				bwindow[i][j].setLocation(tempX,tempY,tempW,tempH);
				bwindow[i][j].setBuildcolor(Color.yellow);	
				System.out.println("x:"+bwindow[i][j].getx()+" y:"+bwindow[i][j].gety());				
			}
		}
	}
	

	/* (non-Javadoc)
	 * @see java.awt.Container#paint(java.awt.Graphics)
	 */
	public void paint(Graphics g)
	{
		//System.out.println("大楼数量:"+build_num);		
		g.setColor(Color.black);
		g.drawLine(0, H, 2000, H);			
		for(int i=0;i<build_num;i++)
		{
			//System.out.println("窗户数量:"+window_Num[i]);
			g.setColor(b[i].getBuildcolor());
			b[i].show(g);
			for(int j=0;j<10;j++)
			{	
				if(bwindow[i][j]!=null)
				{
					g.setColor(bwindow[i][j].getBuildcolor());
					bwindow[i][j].show(g);
				}
			}
		}
	}
}

效果

抱歉!评论已关闭.