一、第一天
1、创建战舰、侦察潜艇、鱼雷潜艇、水雷潜艇、水雷、深水炸弹类
完整代码:
package day01;
//战舰
public class Battleship {
int width;
int height;
int x;
int y;
int speed;
int life;
void move(){
System.out.println("战舰移动");
}
}
package day01;
//侦察潜艇
public class ObserveSubmarine {
int width;
int height;
int x;
int y;
int speed;
void move(){
System.out.println("侦察潜艇x向右移动");
}
}
package day01;
//鱼雷潜艇
public class TorpedoSubmarine {
int width;
int height;
int x;
int y;
int speed;
void move(){
System.out.println("鱼雷潜艇x向右移动");
}
}
package day01;
//水雷潜艇
public class MineSubmarine {
int width;
int height;
int x;
int y;
int speed;
void move(){
System.out.println("水雷潜艇x向右移动");
}
}
package day01;
//水雷
public class Mine {
int width;
int height;
int x;
int y;
int speed;
void move(){
System.out.println("水雷y向上移动");
}
}
package day01;
//深水炸弹
public class Bomb {
int width;
int height;
int x;
int y;
int speed;
void move(){
System.out.println("深水炸弹y向下移动");
}
}
2、创建World类并测试
完整代码:
package day01;
/** 整个游戏世界 */
public class World {
public static void main(String[] args) {
Battleship s = new Battleship();
s.width = 50;
s.height = 30;
s.x = 100;
s.y = 200;
s.speed = 20;
s.life = 5;
System.out.println(s.width+","+s.height+","+s.x+","+s.y+","+s.speed+","+s.life);
s.move();
ObserveSubmarine os1 = new ObserveSubmarine();
os1.width = 30;
os1.height = 40;
os1.x = 200;
os1.y = 400;
os1.speed = 3;
System.out.println(os1.width+","+os1.height+","+os1.x+","+os1.y+","+os1.speed);
os1.move();
ObserveSubmarine os2 = new ObserveSubmarine();
os2.width = 30;
os2.height = 40;
os2.x = 100;
os2.y = 450;
os2.speed = 3;
System.out.println(os2.width+","+os2.height+","+os2.x+","+os2.y+","+os2.speed);
os2.move();
TorpedoSubmarine ts1 = new TorpedoSubmarine();
TorpedoSubmarine ts2 = new TorpedoSubmarine();
MineSubmarine ms1 = new MineSubmarine();
MineSubmarine ms2 = new MineSubmarine();
Torpedo t1 = new Torpedo();
Torpedo t2 = new Torpedo();
Mine m1 = new Mine();
Mine m2 = new Mine();
Bomb b1 = new Bomb();
Bomb b2 = new Bomb();
}
}
二、第二天
给6个类添加构造方法,并测试
完整代码:
package day02;
//战舰
public class Battleship {
int width;
int height;
int x;
int y;
int speed;
int life;
Battleship(){
width = 66;
height = 26;
x = 270;
y = 124;
speed = 2;
life = 5;
}
void move(){
System.out.println("战舰移动");
}
}
package day02;
import java.util.Random;
//侦察潜艇
public class ObserveSubmarine {
int width;
int height;
int x;
int y;
int speed;
ObserveSubmarine(){
width = 63;
height = 19;
x = -width;
Random rand = new Random();
y = rand.nextInt(479-height-150)+150;
speed = rand.nextInt(3)+1;
}
void move(){
System.out.println("侦察潜艇x向右移动");
}
}
package day02;
import java.util.Random;
//鱼雷潜艇
public class TorpedoSubmarine {
int width;
int height;
int x;
int y;
int speed;
TorpedoSubmarine(){
width = 64;
height = 20;
x = -width;
Random rand = new Random();
y = rand.nextInt(479-height-150)+150;
speed = rand.nextInt(3)+1;
}
void move(){
System.out.println("鱼雷潜艇x向右移动");
}
}
package day02;
import java.util.Random;
//水雷潜艇
public class MineSubmarine {
int width;
int height;
int x;
int y;
int speed;
MineSubmarine(){
width = 63;
height = 19;
x = -width;
Random rand = new Random();
y = rand.nextInt(479-height-150)+150;
speed = rand.nextInt(3)+1;
}
void move(){
System.out.println("水雷潜艇x向右移动");
}
}
package day02;
//水雷
public class Mine {
int width;
int height;
int x;
int y;
int speed;
Mine(int x,int y){
width = 11;
height = 11;
this.x = x;
this.y = y;
speed = 1;
}
void move(){
System.out.println("水雷y向上移动");
}
}
package day02;
//深水炸弹
public class Bomb {
int width;
int height;
int x;
int y;
int speed;
Bomb(int x,int y){
width = 9;
height = 12;
this.x = x;
this.y = y;
speed = 3;
}
void move(){
System.out.println("深水炸弹y向下移动");
}
}
package day02;
/** 整个游戏世界 */
public class World {
public static void main(String[] args) {
Battleship s = new Battleship();
ObserveSubmarine os1 = new ObserveSubmarine();
ObserveSubmarine os2 = new ObserveSubmarine();
TorpedoSubmarine ts1 = new TorpedoSubmarine();
TorpedoSubmarine ts2 = new TorpedoSubmarine();
MineSubmarine ms1 = new MineSubmarine();
MineSubmarine ms2 = new MineSubmarine();
Mine m1 = new Mine(123,345);
Mine m2 = new Mine(345,234);
Bomb b1 = new Bomb(200,300);
Bomb b2 = new Bomb(300,400);
//最少输出4个对象的数据(一定要包括2个侦察潜艇的数据)
System.out.println(s.width+","+s.height+","+s.x+","+s.y+","+s.speed+","+s.life);
System.out.println(os1.width+","+os1.height+","+os1.x+","+os1.y+","+os1.speed);
System.out.println(os2.width+","+os2.height+","+os2.x+","+os2.y+","+os2.speed);
Bomb[] bs = new Bomb[3]; //创建Bomb数组对象
bs[0] = new Bomb(100,200); //创建Bomb对象
bs[1] = new Bomb(123,345);
bs[2] = new Bomb(200,300);
bs[0].x = 111; //给第1个炸弹的x修改为111
System.out.println(bs[1].width); //输出第2个炸弹的宽
bs[2].move(); //第3个炸弹移动
}
}
三、第三天
1、创建侦察艇数组、鱼雷艇数组、水雷艇数组、水雷数组、深水炸弹数组,并测试
完整代码:
package day03;
/** 整个游戏世界 */
public class World {
public static void main(String[] args) {
ObserveSubmarine[] oses = new ObserveSubmarine[3];
TorpedoSubmarine[] tses = new TorpedoSubmarine[2];
MineSubmarine[] mses = new MineSubmarine[3]; //水雷潜艇数组
mses[0] = new MineSubmarine();
mses[1] = new MineSubmarine();
mses[2] = new MineSubmarine();
for(int i=0;i<mses.length;i++){
//遍历所有水雷潜艇
System.out.println(mses[i].x+","+mses[i].y); //输出每个水雷潜艇的x和y坐标
mses[i].move(); //每个水雷潜艇移动
}
Torpedo[] ts = new Torpedo[2]; //鱼雷数组
ts[0] = new Torpedo(100,200);
ts[1] = new Torpedo(200,400);
for(int i=0;i<ts.length;i++){
System.out.println(ts[i].x+","+ts[i].y);
ts[i].move();
}
Mine[] ms = new Mine[3];
Bomb[] bs = new Bomb[2];
}
}
2、创建SeaObject超类,6个类继承超类
完整代码:
package day03;
import java.util.Random;
//海洋对象
public class SeaObject {
int width;
int height;
int x;
int y;
int speed;
void move(){
System.out.println("海洋对象移动");
}
}
package day03;
//战舰
public class Battleship extends SeaObject {
int life;
Battleship(){
width = 66;
height = 26;
x = 270;
y = 124;
speed = 20;
life = 5;
}
}
package day03;
import java.util.Random;
//侦察潜艇
public class ObserveSubmarine extends SeaObject {
ObserveSubmarine(){
width = 63;
height = 19;
x = -width;
Random rand = new Random();
y = rand.nextInt(479-height-150)+150;
speed = rand.nextInt(3)+1;
}
}
package day03;
import java.util.Random;
//鱼雷潜艇
public class TorpedoSubmarine extends SeaObject {
TorpedoSubmarine(){
width = 64;
height = 20;
x = -width;
Random rand = new Random();
y = rand.nextInt(479-height-150)+150;
speed = rand.nextInt(3)+1;
}
}
package day03;
import java.util.Random;
//水雷潜艇
public class MineSubmarine extends SeaObject {
MineSubmarine(){
width = 63;
height = 19;
x = -width;
Random rand = new Random();
y = rand.nextInt(479-height-150)+150;
speed = rand.nextInt(3)+1;
}
}
package day03;
//水雷
public class Mine extends SeaObject {
Mine(int x,int y){
width = 11;
height = 11;
this.x = x;
this.y = y;
speed = 1;
}
}
package day03;
//深水炸弹
public class Bomb extends SeaObject {
Bomb(int x,int y){
width = 9;
height = 12;
this.x = x;
this.y = y;
speed = 3;
}
}
//注:其余类没有变化,此处省略
3、给SeaObject添加两个构造方法,6个类继承超类
完整代码:
package day03;
import java.util.Random;
//海洋对象
public class SeaObject {
int width;
int height;
int x;
int y;
int speed;
SeaObject(int width,int height){
this.width = width;
this.height = height;
x = -width;
Random rand = new Random();
y = rand.nextInt(479-height-150)+150;
speed = rand.nextInt(3)+1;
}
SeaObject(int width,int height,int x,int y,int speed){
this.width = width;
this.height = height;
this.x = x;
this.y = y;
this.speed = speed;
}
void move(){
System.out.println("海洋对象移动");
}
}
package day03;
//侦察潜艇
public class ObserveSubmarine extends SeaObject {
ObserveSubmarine(){
super(63,19);
}
}
package day03;
//鱼雷潜艇
public class TorpedoSubmarine extends SeaObject {
TorpedoSubmarine(){
super(64,20);
}
}
package day03;
//水雷潜艇
public class MineSubmarine extends SeaObject {
MineSubmarine(){
super(63,19);
}
}
package day03;
//战舰
public class Battleship extends SeaObject {
int life;
Battleship(){
super(66,26,270,124,20);
life = 5;
}
}
package day03;
//水雷
public class Mine extends SeaObject {
Mine(int x,int y){
super(11,11,x,y,1);
}
}
package day03;
//深水炸弹
public class Bomb extends SeaObject {
Bomb(int x,int y){
super(9,12,x,y,3);
}
}
//注:其余类没有变化,此处省略
4、将侦察艇数组、鱼雷艇数组、水雷艇数组组合为SeaObject数组,并测试
package day03;
//整个游戏世界
public class World {
public static void main(String[] args) {
SeaObject[] submarines = new SeaObject[5]; //潜艇(侦察潜艇、鱼雷潜艇、水雷潜艇)
submarines[0] = new ObserveSubmarine();
submarines[1] = new ObserveSubmarine();
submarines[2] = new TorpedoSubmarine();
submarines[3] = new TorpedoSubmarine();
submarines[4] = new MineSubmarine();
for(int i=0;i<submarines.length;i++){
System.out.println(submarines[i].x+","+submarines[i].y);
submarines[i].move();
}
Battleship s = new Battleship();
Mine[] ms = new Mine[2];
ms[0] = new Mine(100,200);
ms[1] = new Mine(200,400);
for(int i=0;i<ms.length;i++){
System.out.println(ms[i].x+","+ms[i].y);
ms[i].move();
}
Bomb[] bs = new Bomb[2];
bs[0] = new Bomb(100,200);
bs[1] = new Bomb(200,400);
for(int i=0;i<bs.length;i++){
System.out.println(bs[i].x+","+bs[i].y);
bs[i].move();
}
}
}
//注:其余类没有变化,此处省略
四、第四天
1、重写超类的move()移动
完整代码:
package day04;
//战舰
public class Battleship extends SeaObject {
int life;
Battleship(){
super(66,26,270,124,20);
life = 5;
}
void move(){
//暂时搁置
}
}
package day04;
//侦察潜艇
public class ObserveSubmarine extends SeaObject {
ObserveSubmarine(){
super(63,19);
}
void move(){
x+=speed;
}
}
package day04;
//鱼雷潜艇
public class TorpedoSubmarine extends SeaObject {
TorpedoSubmarine(){
super(64,20);
}
void move(){
x+=speed;
}
}
package day04;
//水雷潜艇
public class MineSubmarine extends SeaObject {
MineSubmarine(){
super(63,19);
}
void move(){
x+=speed;
}
}
package day04;
//水雷
public class Mine extends SeaObject {
Mine(int x,int y){
super(11,11,x,y,1);
}
void move(){
y-=speed;
}
}
package day04;
//深水炸弹
public class Bomb extends SeaObject {
Bomb(int x,int y){
super(9,12,x,y,3);
}
void move(){
y+=speed;
}
}
//注:其余类没有变化,此处省略
2、给类中成员添加访问控制修饰符
完整代码:
package day04;
import java.util.Random;
//海洋对象
public class SeaObject {
protected int width;
protected int height;
protected int x;
protected int y;
protected int speed;
public SeaObject(int width,int height){
this.width = width;
this.height = height;
x = -width;
Random rand = new Random();
y = rand.nextInt(479-height-150)+150;
speed = rand.nextInt(3)+1;
}
public SeaObject(int width,int height,int x,int y,int speed){
this.width = width;
this.height = height;
this.x = x;
this.y = y;
this.speed = speed;
}
public void move(){
System.out.println("海洋对象移动");
}
}
package day04;
//战舰
public class Battleship extends SeaObject {
private int life;
public Battleship(){
super(66,26,270,124,20);
life = 5;
}
public void move(){
//暂时搁置
}
}
package day04;
//侦察潜艇
public class ObserveSubmarine extends SeaObject {
public ObserveSubmarine(){
super(63,19);
}
public void move(){
x+=speed;
}
}
package day04;
//鱼雷潜艇
public class TorpedoSubmarine extends SeaObject {
public TorpedoSubmarine(){
super(64,20);
}
public void move(){
x+=speed;
}
}
package day04;
//水雷潜艇
public class MineSubmarine extends SeaObject {
public MineSubmarine(){
super(63,19);
}
public void move(){
x+=speed;
}
}
package day04;
//水雷
public class Mine extends SeaObject {
public Mine(int x,int y){
super(11,11,x,y,1);
}
public void move(){
y-=speed;
}
}
package day04;
//深水炸弹
public class Bomb extends SeaObject {
public Bomb(int x,int y){
super(9,12,x,y,3);
}
public void move(){
y+=speed;
}
}
//注:其余类没有变化,此处省略
3、设计Images图片类
完整代码:
package cn.tedu.submarine;
import javax.swing.ImageIcon;
/** 图片类 */
public class Images {
// 公开的 静态的 图片数据类型 变量名
public static ImageIcon battleship; //战舰图片
public static ImageIcon obsersubm; //侦察潜艇图片
public static ImageIcon torpesubm; //鱼雷潜艇图片
public static ImageIcon minesubm; //水雷潜艇图片
public static ImageIcon mine; //水雷图片
public static ImageIcon bomb; //深水炸弹图片
public static ImageIcon sea; //海洋图
public static ImageIcon gameover; //游戏结束图
static{
//给静态图片赋值
battleship = new ImageIcon("img/battleship.png");
obsersubm = new ImageIcon("img/obsersubm.png");
torpesubm = new ImageIcon("img/torpesubm.png");
minesubm = new ImageIcon("img/minesubm.png");
mine = new ImageIcon("img/mine.png");
bomb = new ImageIcon("img/bomb.png");
sea = new ImageIcon("img/sea.png");
gameover = new ImageIcon("img/gameover.png");
}
public static void main(String[] args) {
System.out.println(battleship.getImageLoadStatus()); //返回8表示读取成功
System.out.println(obsersubm.getImageLoadStatus());
System.out.println(torpesubm.getImageLoadStatus());
System.out.println(minesubm.getImageLoadStatus());
System.out.println(mine.getImageLoadStatus());
System.out.println(bomb.getImageLoadStatus());
System.out.println(sea.getImageLoadStatus());
System.out.println(gameover.getImageLoadStatus());
}
}
//注:其余类没有变化,此处省略
五、第五天
1、在World类中设计窗口的宽和高为常量,在SeaObject的两个参构造中将数据修改为常量
参考代码:
package day05;
//整个游戏世界
public class World {
public static final int WIDTH = 641;
public static final int HEIGHT = 479;
public static void main(String[] args) {
SeaObject[] submarines = new SeaObject[5]; //潜艇(侦察潜艇、鱼雷潜艇、水雷潜艇)
submarines[0] = new ObserveSubmarine();
submarines[1] = new ObserveSubmarine();
submarines[2] = new TorpedoSubmarine();
submarines[3] = new TorpedoSubmarine();
submarines[4] = new MineSubmarine();
for(int i=0;i<submarines.length;i++){
System.out.println(submarines[i].x+","+submarines[i].y);
submarines[i].move();
}
Battleship s = new Battleship();
Mine[] ms = new Mine[2];
ms[0] = new Mine(100,200);
ms[1] = new Mine(200,400);
for(int i=0;i<ms