今日目标:

设计窗口的宽和高为常量,在适当的地方做修改
画窗口
public static void main(String[] args) {
JFrame frame = new JFrame(); //3.
World world = new World(); //会创建窗口中的那一堆对象
world.setFocusable(true);
frame.add(world);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(WIDTH+16, HEIGHT+40);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setVisible(true); //自动调用paint()方法
}
画海洋图、至少准备6个对象并画出来
SeaObject
返回值类型 void
参数 Graphics g
业务:如果当前状态为活着,画图片
/** 画对象 g:画笔 */
public void paintImage(Graphics g){
if(this.isLive()){ //若活着的
this.getImage().paintIcon(null,g,this.x,this.y); //----不要求掌握
}
}
Battleship
ObserveSubmarine
TorpedoSubmarine
MineSubmarine
Bomb
Mine
World
创建战舰(Battleship对象,SeaObject数组对象,Mine数组对象,Bomb数组对象),并赋值
重画
/** 重写paint()画 g:系统自带的画笔 */
public void paint(Graphics g){
Images.sea.paintIcon(null,g,0,0); //画海洋图
ship.paintImage(g); //画战舰
for(int i=0;i<submarines.length;i++){ //遍历所有潜艇
submarines[i].paintImage(g); //画潜艇
}
for(int i=0;i<mines.length;i++){ //遍历所有水雷
mines[i].paintImage(g); //画水雷
}
for(int i=0;i<bombs.length;i++){ //遍历所有炸弹
bombs[i].paintImage(g); //画炸弹
}
}
测试
修改 SeaObject 类,2个参数的构造方法,将负号去掉,为了能在屏幕上显示已经画好的对象

运行测试(海洋,战舰,潜艇[侦查潜艇,鱼雷潜艇,水雷潜艇],水雷,炸弹等对象是否显示在窗口里)
今日目标:
深海杀手_day06效果视频
深水炸弹入场:
// 可以参考,不需要必须会写
KeyAdapter k = new KeyAdapter(){
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_SPACE){
// 深水炸弹入场
}
}
};
this.addKeyListener(k);
战舰移动:
通过按 ← 箭头,触发 Battleship 中的 moveLeft 战舰左移方法
通过按 → 箭头,触发 Battleship 中的 moveRight 战舰右移方法
if(e.getKeyCode()==KeyEvent.VK_LEFT){ //不要求掌握--若抬起的是左箭头
// 战舰左移
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT){ //不要求掌握--若抬起的是右箭头
//战舰右移
}
删除越界的海洋对象:
设计EnemyScore得分接口、EnemyLife得命接口,侦察潜艇与鱼雷潜艇实现EnemyScore接口,水雷潜艇实现EnemyLife接口
水雷入场(下):
炸弹与潜艇的碰撞: