基于JAVA的简易坦克大战(八)

本文详细介绍了坦克大战游戏中的两种核心算法:爆炸效果类算法和墙体类算法。爆炸效果类算法通过绘制不同半径的圆来模拟爆炸过程,而墙体类算法则负责墙体的绘制及各种碰撞检测,确保游戏的真实感。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4.2.5 爆炸效果类算法

1、爆炸效果类通过在子弹有效打击的时候,在子弹和击杀坦克接触的坐标上按规定的爆炸步数,画出不同半径的圆来模拟爆炸效果的。

2、爆炸效果类的设计源码:

import java.awt.*;
public class Explosion {
	private int x;
	private int y;
	private TankClient tc = null;
	private int step = 6;
	private int size[][] = {{10,10},{20,20},{30,30},{35,35},{20,20},{5,5}};
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}
	public Explosion(int x, int y, TankClient tc) {
		super();
		this.x = x;
		this.y = y;
		this.tc = tc;
	}
	public void drawExplosion(Graphics g){
	Color c = g.getColor();
	g.setColor(Color.YELLOW);
	for(int i = 0;i < step;i++ )
	{
		g.fillOval(x + 10, y + 10, size[i][0], size[i][1]);
	}
	g.setColor(c);
	}
}

4.2.6 墙体类算法

1、墙体类实现了游戏中墙体的draw方法:通过调用JAVA内部封装的画图方法实现了简易墙体的绘制。

2、子弹与墙体的碰撞检测以及敌我双方坦克与墙体的额碰撞检测是在坦克大战管理类中实现的。碰撞检测是通过判断对象实例的双方所占的额范围是否重合来实现的。挡子弹与墙体(非水墙)碰撞时,子弹live = false,并将该子弹从坦克大战管理类的子弹集合中删除(线程重画将不会再次画出该子弹)。当坦克和墙体发生碰撞时,坦克的坐标会自动返回坦克上一次的坐标(oldx,oldy),这样就可以解决坦克穿墙的问题了。

墙体类设计源码:
import java.awt.*;
public class Wall {

	private int x;
	private int y;
	private int width;
	private int height;
	private int number;//墙体类型编号
	private TankClient tc = null;
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

	public int getNumber() {
		return number;
	}

	public Wall(int x, int y, int width, int height, int number, TankClient tc) {
		this.x = x;
		this.y = y;
		this.width = width;
		this.height = height;
		this.number = number;
		this.tc = tc;
	}
    public void drawWall(Graphics g){
    	Color c = g.getColor();	
    	//土墙
    	if(number == 0)
    	{
    		g.setColor(Color.GRAY);
    		g.fillRect(x, y, width, height);
    	}
    	//海
    	if(number == 1)
    	{
    		g.setColor(Color.BLUE);
    		g.fillRect(x, y, width, height);
    	}
    	g.setColor(c);
    }
    public Rectangle getRect(){
    	return new Rectangle(x,y,width,height);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值