修改提交

master
msb_64243 3 years ago
parent 99a61ede8e
commit dad94bb810

@ -1,147 +1,150 @@
package com.tank;
import java.awt.Graphics;
import java.awt.Rectangle;
import com.tank.abstractfactory.BaseBullet;
/**
*
* @author leiwei
*
*/
public class Bullet extends BaseBullet{
//子弹位置
private int x;
private int y;
//子弹方向
private Dir dir;
//子弹速度
private static final int SPEED = PropertyMrg.getInt("bulletSpeed");
//设置子弹的大小width,height
public static int width = ResouceMgr.bulletD.getWidth();
public static int height = ResouceMgr.bulletD.getHeight();
//定义子弹是否存活
private boolean living = true;
TankFrame tf=null;
private TankGroup group = TankGroup.BAD;
Rectangle rect = new Rectangle();
public Dir getDir() {
return dir;
}
public void setDir(Dir dir) {
this.dir = dir;
}
public Bullet(int x, int y, Dir dir,TankGroup group,TankFrame tf) {
super();
this.x = x;
this.y = y;
this.dir = dir;
this.tf = tf;
this.group = group;
rect.x = this.x;
rect.y = this.y;
rect.width = width;
rect.height = height;
//将子弹添加子弹队列中
tf.bullets.add(this);
}
//子弹显示出来
@Override
public void paint(Graphics p){
if(!this.living){
tf.bullets.remove(this);
}
/*//获取画笔原来颜色
Color color = p.getColor();
//设置将要画出的子弹颜色
p.setColor(Color.red);
p.fillOval(x,y,width,height);
//画完子弹后将画笔颜色还原
p.setColor(color);*/
//将子弹根据方向画出来
switch (dir) {
case LEFT:
p.drawImage(ResouceMgr.bulletL, x, y, null);
break;
case UP:
p.drawImage(ResouceMgr.bulletU, x, y, null);
break;
case RIGHT:
p.drawImage(ResouceMgr.bulletR, x, y, null);
break;
case DOWN:
p.drawImage(ResouceMgr.bulletD, x, y, null);
break;
}
moving();
}
public void moving(){
//通过判断方向进行子弹的移动。
switch(dir){
case LEFT:
x-=SPEED;
break;
case UP:
y-=SPEED;
break;
case RIGHT:
x+=SPEED;
break;
case DOWN:
y+=SPEED;
break;
default:
break;
}
if(x<0 || y<0 || x > TankFrame.GAME_WIDTH || y>TankFrame.GAME_HEIGHT){
this.living =false;
}
rect.x = this.x;
rect.y = this.y;
}
@Override
public void collideWith(Tank t) {
if(this.group.equals(t.getGroup())){
return;
}
if(this.rect.intersects(t.rect)){
t.die();
this.die();
int eX = t.getX() + Tank.width/2 - Explode.width/2;
int eY = t.getY() + Tank.height/2 - Explode.height/2;
tf.explodes.add(tf.gf.createExplode(eX, eY, tf));
}
}
public TankGroup getGroup() {
return group;
}
public void setGroup(TankGroup group) {
this.group = group;
}
private void die() {
this.living =false;
}
}
package com.tank;
import java.awt.Graphics;
import java.awt.Rectangle;
import com.tank.abstractfactory.BaseBullet;
/**
*
* @author leiwei
*
*/
public class Bullet extends BaseBullet{
//子弹位置
private int x;
private int y;
//子弹方向
private Dir dir;
//子弹速度
private static final int SPEED = PropertyMrg.getInt("bulletSpeed");
//设置子弹的大小width,height
public static int width = ResouceMgr.bulletD.getWidth();
public static int height = ResouceMgr.bulletD.getHeight();
//定义子弹是否存活
private boolean living = true;
TankFrame tf=null;
private TankGroup group = TankGroup.BAD;
Rectangle rect = new Rectangle();
public Dir getDir() {
return dir;
}
public void setDir(Dir dir) {
this.dir = dir;
}
public Bullet(int x, int y, Dir dir,TankGroup group,TankFrame tf) {
super();
this.x = x;
this.y = y;
this.dir = dir;
this.tf = tf;
this.group = group;
rect.x = this.x;
rect.y = this.y;
rect.width = width;
rect.height = height;
//将子弹添加子弹队列中
tf.bullets.add(this);
}
//子弹显示出来
@Override
public void paint(Graphics p){
if(!this.living){
tf.bullets.remove(this);
}
/*//获取画笔原来颜色
Color color = p.getColor();
//设置将要画出的子弹颜色
p.setColor(Color.red);
p.fillOval(x,y,width,height);
//画完子弹后将画笔颜色还原
p.setColor(color);*/
//将子弹根据方向画出来
switch (dir) {
case LEFT:
p.drawImage(ResouceMgr.bulletL, x, y, null);
break;
case UP:
p.drawImage(ResouceMgr.bulletU, x, y, null);
break;
case RIGHT:
p.drawImage(ResouceMgr.bulletR, x, y, null);
break;
case DOWN:
p.drawImage(ResouceMgr.bulletD, x, y, null);
break;
}
moving();
}
public void moving(){
//通过判断方向进行子弹的移动。
switch(dir){
case LEFT:
x-=SPEED;
break;
case UP:
y-=SPEED;
break;
case RIGHT:
x+=SPEED;
break;
case DOWN:
y+=SPEED;
break;
default:
break;
}
if(x<0 || y<0 || x > TankFrame.GAME_WIDTH || y>TankFrame.GAME_HEIGHT){
this.living =false;
}
rect.x = this.x;
rect.y = this.y;
}
/**
*
*/
@Override
public void collideWith(Tank t) {
if(this.group.equals(t.getGroup())){
return;
}
if(this.rect.intersects(t.rect)){
t.die();
this.die();
int eX = t.getX() + Tank.width/2 - Explode.width/2;
int eY = t.getY() + Tank.height/2 - Explode.height/2;
tf.explodes.add(tf.gf.createExplode(eX, eY, tf));
}
}
public TankGroup getGroup() {
return group;
}
public void setGroup(TankGroup group) {
this.group = group;
}
private void die() {
this.living =false;
}
}

Loading…
Cancel
Save