六个对象:
一. 战舰对象
二.炸弹对象
三.侦察潜艇对象
四.水雷潜艇对象
五.鱼雷潜艇对象
六.水雷对象
介绍:
游戏窗口只有一个,战舰只有一个,潜艇有多个,水雷有多个,炸弹有多个,所以潜艇存储在潜艇数组中、水雷存储在水雷数组中,以及炸弹存储在炸弹数组中,在该游戏中,战舰的移动和炸弹的发射是由键盘控制的,而潜艇的产生和水雷的发射是定时的。另外,三种潜艇是随机生成的,位置是从窗口的左端进入,右端出,但出现的高度也是随机的。
共有属性和行为:
这些角色都会死亡(潜艇与炸弹碰撞时,两者都会死亡;战舰与水雷碰撞时,水雷会死亡),所以设置状态变量用于识别存活和死亡状态,设置方法判断状态。
每个角色都有宽和高,移动速度和xy坐标,并且这些属性需要赋值。
每个角色都会有移动的行为,但每个角色移动的速度、方向都不同。(需要重写)
除了战舰以外的对象都会出现越界现象(因为三种潜艇的越界都是相同的,所以后续只需要水雷、炸弹重写即可)
每个角色都会发生碰撞现象,碰撞之后会死亡。
代码:
战舰相关代码:
/**战舰*/
public class Battleship extends SeaObject {
private int life;
public Battleship(){
super(66,26,270,124,10);
life = 5;
}
public void move(){
}
public ImageIcon getIamge(){
return Images.battleship;
}
/**发射炸弹------生成炸弹对象*/
public Bomb shootBomb(){
return new Bomb(this.x,this.y);//炸弹的初始坐标就是战舰坐标
}
/**战舰移动*/
public void moveLeft(){
x -= speed;//向左
}
public void moveRight(){
x += speed;//向右
}
/**战舰增命*/
public void addLife(int num){
life += num;
}
/**获取命数*/
public int getLife(){
return life;//返回命数
}
public void subtractLife(){
life--;//命数减一
}
三个潜艇相关代码:
/**水雷潜艇*/
public class MineSubmarine extends SeaObject implements EnemyLife{
public MineSubmarine(){
super(63,19);
}
/**重写move()移动*/
public void move(){
x += speed;//x+(向右)
}
public ImageIcon getIamge(){
return Images.minesubm;
}
/**发射水雷-----生成水雷*/
public Mine shootMine(){
//水雷的x:水雷潜艇的x+水雷潜艇的width
//水雷的y:水雷潜艇的y-水雷的高(11)
return new Mine(this.x+this.width,this.y-11);//this指水雷潜艇对象
}
/**重写getLife()得命*/
public int getLife(){
return 1;//打掉水雷潜艇,战舰得一条命
}
}
/**侦察潜艇*/
public class ObserveSubmarine extends SeaObject implements EnemyScore{
public ObserveSubmarine(){
super(63,19);
}
/**重写move()移动*/
public void move(){
x += speed;//x+(向右)
}
public ImageIcon getIamge(){
return Images.obsersubm;
}
/**重写getScore()得分*/
public int getScore(){
return 10;
}
}
/**鱼雷潜艇*/
public class TorpedoSubmarine extends SeaObject implements EnemyScore{
public TorpedoSubmarine() {
super(64,20);
}
/**重写move()移动*/
public void move(){
x += speed;//x+(向右)
}
public ImageIcon getIamge(){
return Images.torpesubm;
}
/**重写getScore()得分*/
public int getScore(){
return 40;
}
}
水雷和炸弹相关代码:
/**水雷*/
public class Mine extends SeaObject {
public Mine(int x,int y){
super(11,11,x,y,1 );
}
/**重写move()移动*/
public void move(){
y -= speed;//y-(向上)
}
public ImageIcon getIamge(){
return Images.mine;
}
/**重写isOutOfBounds()检测水雷是否越界*/
public boolean isOutOfBounds(){
return this.y<=150-this.height;//水雷的y<=150-水雷的高,即为越界了
}
}
/**炸弹*/
public class Bomb extends SeaObject{
public Bomb(int x, int y){
super(9,12,x,y,10);
}
/**重写move()移动*/
public void move(){
y += speed;//y+(向下)
}
public ImageIcon getIamge(){
return Images.bomb;
}
/**重写isOutOfBounds()检测炸弹是否越界*/
public boolean isOutOfBounds(){
return this.y>=World.HEIGHT;//炸弹的y>=窗口的高,即为越界了
}
}
以上是相关的对象(不全),后续持续更新!!!
如有侵权,即时联系删改,谢谢