1.该项目是跟着马士兵老师的网课写的,自己添加了代码注释。
2.有很多设计模式上的问题,大神勿喷。
3.写这篇博客的目的也只是想重新理清下自己的思路。
4.后期会对项目进行完善和改进
/*该项目由初态的0.1版本更新到最终的2.6版本
*本篇主要介绍项目主要使用到的一部分类,包括Tank类和Missile类
*以及TankClient类
*思路:1:首先继承java.wat包中的Frame创建一个800*600的窗口,并且不允许用户改变大小
*允许关闭窗口;2:画出玩家坦克和敌方坦克,玩家坦克由玩家通过键盘控制运动,允许沿着
*八个不同的方向前进;3:添加子弹类,根据坦克的方向和位置,可以发出多发子弹;4:玩家
*坦克能消灭敌方坦克
*/
//Tank类代码实现
import java.awt.*;
import java.awt.event.*;
public class Tank {
public static final int XSPEED=5;//坦克横向移动的速度
public static final int YSPEED=5;//坦克纵向移动的速度
public static final int WIDTH=30;
public static final int HEIGHT=30;
TankClient tc;//声明实例化的TankClient对象
private boolean live=true;//判断坦克是否是存活状态
//生成live的getter和setter方法
public boolean isLive() {
return live;
}
public void setLive(boolean live) {
this.live = live;
}
private int x,y;//Tank生成的坐标位置
private boolean good; //区分敌我的标志
private boolean bL=false,bU=false,bR=false,bD=false;//用来表示是否按下“上下左右”四个键
enum Direction{L,LU,U,RU,R,RD,D,LD,STOP};//枚举方向
private Direction dir=Direction.STOP;//坦克前进的方向
private Direction ptDir=Direction.D;//坦克炮筒的方向
public Tank(int x, int y,boolean good) {
this.x = x;
this.y = y;
this.good=good;
}
public Tank(int x,int y,boolean good,TankClient tc){
this(x,y,good); //调用了Tank(int x,int y,boolean good)方法
this.tc=tc;
}
public void draw(Graphics g){//画出坦克
if(!live) return ;//如果坦克被消灭,返回
Color c=g.getColor();
//根据坦克好坏,设定不同的颜色
if(good) g.setColor(Color.RED);//设置坦克为红色,代表正义
else g.setColor(Color.BLUE);//设置坦克为蓝色,代表邪恶
g.fillOval(x, y, WIDTH, HEIGHT);
g.setColor(c);
switch(ptDir){ //根据坦克炮筒的方向画直线
case L:
g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x, y+Tank.HEIGHT/2);
break;
case LU:
g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x, y);
break;
case U:
g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH/2, y);
break;
case RU:
g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH, y);
br
import java.awt.event.*;
public class Tank {
public static final int XSPEED=5;//坦克横向移动的速度
public static final int YSPEED=5;//坦克纵向移动的速度
public static final int WIDTH=30;
public static final int HEIGHT=30;
TankClient tc;//声明实例化的TankClient对象
private boolean live=true;//判断坦克是否是存活状态
//生成live的getter和setter方法
public boolean isLive() {
return live;
}
public void setLive(boolean live) {
this.live = live;
}
private int x,y;//Tank生成的坐标位置
private boolean good; //区分敌我的标志
private boolean bL=false,bU=false,bR=false,bD=false;//用来表示是否按下“上下左右”四个键
enum Direction{L,LU,U,RU,R,RD,D,LD,STOP};//枚举方向
private Direction dir=Direction.STOP;//坦克前进的方向
private Direction ptDir=Direction.D;//坦克炮筒的方向
public Tank(int x, int y,boolean good) {
this.x = x;
this.y = y;
this.good=good;
}
public Tank(int x,int y,boolean good,TankClient tc){
this(x,y,good); //调用了Tank(int x,int y,boolean good)方法
this.tc=tc;
}
public void draw(Graphics g){//画出坦克
if(!live) return ;//如果坦克被消灭,返回
Color c=g.getColor();
//根据坦克好坏,设定不同的颜色
if(good) g.setColor(Color.RED);//设置坦克为红色,代表正义
else g.setColor(Color.BLUE);//设置坦克为蓝色,代表邪恶
g.fillOval(x, y, WIDTH, HEIGHT);
g.setColor(c);
switch(ptDir){ //根据坦克炮筒的方向画直线
case L:
g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x, y+Tank.HEIGHT/2);
break;
case LU:
g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x, y);
break;
case U:
g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH/2, y);
break;
case RU:
g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH, y);
br