⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ball.java

📁 Java自己做的小游戏
💻 JAVA
字号:
//import java.io.InputStream;
import javax.microedition.lcdui.*;
//import javax.microedition.media.Player;
public class ball
{
	boolean leftUp=false;
	boolean rightUp=false;
	boolean leftDown=false;
	boolean rightDown=false;
	int whichBuffer=1;
	int ballX=50;
	int ballY=150;
	int time=200;//特殊球的维持时间
	static int ySpeed=0;
	static int xSpeed=0;
	static int which=1;//哪一种球//1:普通球 2:火焰球
	Image ballImg=null;
	myCanvas mc;
	public ball(myCanvas mc)
	{
		this.mc=mc;
		initRes() ;
	}
	public void initRes() 
	{
		whichBuffer=which;
		try
		{
			//InputStream is=getClass().getResourceAsStream(arg0);
			ballImg=Image.createImage("/ball"+which+".png");
		}
		catch(Exception e)
		{
			System.out.println("ball图片错误");
			e.printStackTrace();
		}
	}
	public void paint(Graphics g)
	{
		if(whichBuffer!=which)
		{
			initRes();
		}
		g.setClip( ballX, ballY, ballImg.getWidth(), ballImg.getHeight());
		g.drawImage(ballImg, ballX, ballY, 0);
	}
	public void move()
	{
		if(which==2&&time>0)
		{
			time--;
		}
		else if(time<=0)
		{
			time=200;
			which=1;
		}
		ballY+=ySpeed;
		ballX+=xSpeed;
		if(ySpeed==0)
		{
			ySpeed=-1;
		}
		else if(xSpeed==0)
		{
			xSpeed=1;
		}
		if(ballY<mc.backGroundY+3)
		{
			ySpeed=-ySpeed;
			ballY=mc.backGroundY+3;
			ballY+=ySpeed;
			ballX+=xSpeed;
		}
		if(ballX<mc.backGroundX+3||ballX>mc.backGroundX+mc.backGround.getWidth()-ballImg.getWidth()-6)
		{
			if(ballX<mc.backGroundX+3)
				ballX=mc.backGroundX+3;
			if(ballX>mc.backGroundX+mc.backGround.getWidth()-ballImg.getWidth()-6)
				ballX=mc.backGroundX+mc.backGround.getWidth()-ballImg.getWidth()-6;
			xSpeed=-xSpeed;
			ballY+=ySpeed;
			ballX+=xSpeed;
		}
	}
	public void atk(brick Brick)
	{
		//判断哪一点受到撞击/////////////////
		//左上===========
		if(ballX>Brick.brickX&&ballX<Brick.brickX+Brick.brickW&ballY<Brick.brickY+Brick.brickH&&ballY>Brick.brickY)
		{
			leftUp=true;
		}
		//右上===============
		if(ballX+ballImg.getWidth()>Brick.brickX&&ballX+ballImg.getWidth()<Brick.brickX+Brick.brickW&&ballY<Brick.brickY+Brick.brickH&&ballY>Brick.brickY)
		{
			rightUp=true;
		}
		//左下===========
		if(ballX>Brick.brickX&&ballX<Brick.brickX+Brick.brickW&&ballY+ballImg.getHeight()<Brick.brickY+Brick.brickH&&ballY+ballImg.getHeight()>Brick.brickY)
		{
			leftDown=true;
		}
		//右下===============
		if(ballX+ballImg.getWidth()>Brick.brickX&&ballX+ballImg.getWidth()<Brick.brickX+Brick.brickW&&ballY+ballImg.getHeight()<Brick.brickY+Brick.brickH&&ballY+ballImg.getHeight()>Brick.brickY)
		{
			rightDown=true;
		}
		if(which!=2)//变成火焰球后可穿透砖块
		{
			//判断哪一面受到撞击//////////////
			//上==============
			if(leftUp==true&&rightUp==true)
			{
				ySpeed=-ySpeed;
			}
			
			//右===========
			if(leftDown==true&&leftUp==true)
			{
				xSpeed=-xSpeed;
			}
			//左===========
			if(rightUp==true&&rightDown==true)
			{
				xSpeed=-xSpeed;
			}
			//下================
			if(rightDown==true&&leftDown==true)
			{
				ySpeed=-ySpeed;
			}
			//左上点和右下点特殊碰撞处理===
			if(rightDown==true&&leftUp==true)
			{
				ySpeed=-ySpeed;
				xSpeed=-xSpeed--;
			}
			//右上点和左下点特殊碰撞处理===
			else if(leftDown==true&&rightUp==true)
			{
				ySpeed=-ySpeed;
				xSpeed=-xSpeed--;
			}
			//对于只有一点碰撞的处理///////////////////
			//左上点===
			if(leftUp==true&&leftDown==false&&rightUp==false&&rightDown==false)
			{
				if(ySpeed>0&&xSpeed<0)
				{
					xSpeed=-xSpeed;
				}
				else if(xSpeed>0&&ySpeed<0)
				{
					ySpeed=-ySpeed;
				}
				else
				{
					ySpeed=-ySpeed;
					xSpeed=-xSpeed;
				}
			}
			//左下点===
			else if(leftUp==false&&leftDown==true&&rightUp==false&&rightDown==false)
			{
				if(xSpeed<0&&ySpeed<0)
				{
					xSpeed=-xSpeed;
				}
				else if(xSpeed>0&&ySpeed>0)
				{
					ySpeed=-ySpeed;
				}
				else
				{
					xSpeed=-xSpeed;
					ySpeed=-ySpeed;
				}
			}
			//右上点===
			else if(leftUp==false&&leftDown==false&&rightUp==true&&rightDown==false)
			{
				if(xSpeed<0&&ySpeed<0)
				{
					ySpeed=-ySpeed;
				}
				else if(xSpeed>0&&ySpeed>0)
				{
					xSpeed=-xSpeed;
				}
				else
				{
					ySpeed=-ySpeed;
					xSpeed=-xSpeed;
				}
			}
			//右下点===
			else if(leftUp==false&&leftDown==false&&rightUp==false&&rightDown==true)
			{
				if(xSpeed>0&&ySpeed<0)
				{
					xSpeed=-xSpeed;
				}
				else if(xSpeed<0&&ySpeed>0)
				{
					ySpeed=-ySpeed;
				}
				else 
				{
					ySpeed=-ySpeed;
					xSpeed=-xSpeed;
				}
			}
		}
		//以防卡在挡板里的BUG
		for(;ballY+ballImg.getHeight()>mc.getHeight()-Brick.brickH+2&&ballY+ballImg.getHeight()<mc.getHeight()&&ballX+ballImg.getWidth()>Brick.brickX+2&&ballX<Brick.brickX+Brick.brickW&&Brick.brickY>mc.getHeight()-20;)
		{
			System.out.println("卡入挡板BUG处理循环启动");
			ballY-=2;
		}
		//碰撞后立即移动一次,制造反弹加速效果和一定程度上避免卡死BUG======
		if(rightDown==true||leftDown==true||rightUp==true||leftUp==true)
		{
			//对火焰球的穿透处理
			if(which==2&&ballY>mc.backGroundY+mc.backGround.getHeight()-30)
			{
				ySpeed=-ySpeed;
			}
			//===========
			ballY+=ySpeed;
			ballX+=xSpeed;
			Brick.hp--;
		}
		leftUp=false;
		rightUp=false;
		leftDown=false;
		rightDown=false;	
	}
	public void recycleRes()
	{
		mc=null;
		ballImg=null;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -