需求分析
分析
- 第一步 发现类(对象)
- 人物-小丑(友方,敌方)
- 子弹-帽子
- 墙体
- 爆炸物 - 第二步 发现属性
- 小丑:宽 高 ,位置(x , y),移动速度
- 帽子:宽 高 ,位置(x , y),移动速度
- 墙体:宽 高 ,位置(x , y)
- 爆炸物:宽 高 ,位置(x , y) - 第三步 发现方法
- 小丑(buffoon):
移动
攻击(发子弹)
- 子弹(missile):
移动
- 子弹撞墙
- 子弹撞边界
- 墙体(wall):无行为
- 爆炸物(explode):
爆炸物消失
注意:在java里万物皆对象
难点
- 如何将图片加载到窗体里面
第一步 背景图片加载 已完成
人物–小丑加载 已完成
发射物–帽子加载 已完成
墙体加载 已完成
爆炸物加载 已完成 - 窗体如何创建 已完成
- 子弹如何发射??键盘如何触发事件.
代码分析
加载图片
//常量定义背景图片的路径
public static final String BG_PATH = "images/bg.png";
//定义图片静态变量
private static Image image;
//创建人物小丑
private Buffoon buffoon = new Buffoon(500, 500, this);
//创建发射物
private Missile missile = new Missile(506, 484, this);
//创建墙体
private Wall wall = new Wall(350, 100, this);
//创建爆炸物
private Explode explode = new Explode(800, 400, this);
// 静态块,所有资源只需要加载一次
static {
image = CommonUtils.getImage(BG_PATH);
}
在窗口中显示实体对象
在对象本类中设置自己的画笔方法
在客户端调用画笔方法
public Explode(int x,int y,GameClinet gameClinet){
this.height=80;
this.width=80;
this.x=x;
this.y=y;
this.gameClinet=gameClinet;
}
public void print(Graphics g){
g.drawImage(explodeImage,this.x,this.y,this.width,this.height,this.gameClinet);
}
分析小丑的行走方法
小丑移动: move
Left 向左 : x = x - this.speed;
Right 向右 : x = x + this.speed;
Down向下 : y = y + this.speed;
Up 向上 : y = y - this.speed;
Ur 东北方向: x = x + this.speed;y = y - this.speed;
Dr 东南方向 : x = x + this.speed; y = y+ this.speed;
Ld 西南方向: x = x - this.speed; y = y + this.speed;
LU 西北方向: x = x - this.speed;y = y - this.speed;
如图:
//人物移动
public void move(String dir) {
//上
if ("U".equals(dir)) {
this.y -= this.speed;
}
//右
if ("R".equals(dir)) {
this.x += this.speed;
}
//下
if ("D".equals(dir)) {
this.y += this.speed;
}
//左
if ("L".equals(dir)) {
this.x -= this.speed;
}
//东北
if ("RD".equals(dir)) {
this.x = this.x + this.speed;
this.y = this.y - this.speed;
}
//东南
if ("RD".equals(dir)) {
this.x = this.x + this.speed;
this.y = this.y + this.speed;
}
//西北
if ("LU".equals(dir)) {
this.x = this.x - this.speed;
this.y = this.y - this.speed;
//西南
if ("LD".equals(dir)) {
this.x = this.x - this.speed;
this.y = this.y + this.speed;
}
}
}