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

上机题:设计并实现一个代表大楼的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); } } } } }

效果


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值