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

📄 paopao.java

📁 泡泡是一个j2me环境下开发的小游戏
💻 JAVA
字号:
import java.util.Random;
/* =================================================*
 * 泡泡类(包括:泡泡的发射点,颜色,摆动方向、摆幅、移动、波动)
 * 作者:郭松柏 2004-10-20
 * 发射点:先判断小人的位置,然后根据该关卡的发射范围,用随机数产
 * 生,把屏幕分成6格,当在某格范围内时则从该格中心发射,防止泡泡重叠;
 * 泡泡颜色:为随机产生,先生成一个随机数(在泡泡图片数组长度范围
 * 内)根据数组序号确定泡泡颜色
 * 摆动方向:产生一随机数(0或1),决定摆动方向
 * 波动:由2个移动组成,Y方向移动和X方向移动,Y方向为递减,X方向
 * 先给定一个摆动范围(随关卡逐渐增大),再有起始摆动方向决定是++
 * 还是--,当到达摆幅边界时,采取相反的动作
 * =================================================*/
public class PaoPao
{
    /*----------泡泡----------*/
	protected int ppImgNum; //图片序号-对应颜色
    protected int ppWidth;  //宽(px)
    protected int ppHeight; //高(px)
    public int ppX;         //X坐标
    public int ppY;         //Y坐标
    protected int offX;     //波动偏移
    protected int v;        //速度px/50ms-20FPS
    protected boolean ppAlive;  //生状态
    private int odds;       //出现几率(100%)
    private int sendRange;  //发射点范围(px)
    protected int xLeave;   //发射点X坐标(px)
    protected int yLeave;   //发射点Y坐标(px)
    private int rl;         //是否在波幅右边
    private int waveRange;  //摆幅
	private int wave;       //波数组
	private int poleX;      //小人的X坐标
	/*----------其他----------*/
	private int scWidth;     //屏幕宽(px)
    private int scHeight;    //屏幕高(px)
    private int scBlank=6;   //屏幕空白
    private int partNum=6;   //格子数
    private int level;       //关卡
    Random rd=new Random();  //随机数
    GameLogic gl=new GameLogic();
	/**==============================**
	 **            构造器
	 **==============================**/
    protected PaoPao(int poleX,int ppW,int ppH,int scWidth,int scHeight,int level){
    	this.ppAlive=true;  //活
    	/*----------传递参数----------*/
    	this.scWidth=scWidth;    //屏幕宽度
    	this.scHeight=scHeight;  //屏幕高度
    	this.level=level;        //关数
    	this.ppWidth=ppW;        //图片宽度
    	this.ppHeight=ppH;       //图片高度

       	v=getV(level);   //获得速度
    	sendRange=getSendRange(level); //发射范围

    	/*----------重要参数----------*/
		this.ppImgNum=getPPImgNum();    //图片序号
		this.ppX=getXsend(poleX);       //发射x坐标
		this.ppY=scHeight;              //发射y坐标
		wave=Math.abs(rd.nextInt()%2);  //发射时摆动方向
    	waveRange=getWaveRange(level);  //波幅
    }

	/**==============================**
	 **        泡泡移动TimerTask
	 **==============================**/
    protected void ppMove(){
		if (ppAlive) {
			offX = getWave();  //波动
			ppX = ppX + offX;  //X坐标
			ppY = ppY - v;     //Y坐标
		}
    }

	/**==============================**
	 **             波动
	 **==============================**/
	private int getWave(){
 		if (wave == 1){  //向右
			if (offX < waveRange){
				offX++;
			}else{
				wave = 0;
				offX--;
			}
		}else{  //向左
			if (offX > (-waveRange)){
				offX--;
			}else{
				wave = 1;
				offX++;
			}
		}
 		return offX;
	}

	/**==============================**
	 **       设置各种颜色泡泡出现几率
	 **==============================**/
    protected int getPPImgNum(){
    	//0到99为泡泡出现几率随机数
    	odds=Math.abs(rd.nextInt()%100);
		if(odds>=20 && odds<25)       //绿 5%
			ppImgNum=1;
		else if(odds>=50 && odds<58)  //黄 8%
			ppImgNum=2;
		else if(odds>=70 && odds<75)  //蓝 5%
			ppImgNum=3;
		else                          //红 82%
			ppImgNum=0;
		return ppImgNum;
    }
    
	/**==============================**
	 **         发射点X\Y坐标
	 **==============================**/
    //*======X坐标======*//
    protected int getXsend(int poleX){
        /*scBlank到(scWidth-ppWidth-scBlank)为生成泡泡的X坐标范围*/
     	int geWidth=(scWidth-scBlank*2)/partNum;  //分geNum格,每格宽度
     	int offPos=ppWidth/2;          //由于泡泡原点在左上方,要偏差其宽度一半
     	int leftOff=poleX-sendRange;   //小人左边
     	int rightOff=poleX+sendRange;  //小人右边
     	 //|     =   0 | =  如左图:|表示边界,0表示小人,=表示发射范围
     	if(rightOff>scWidth-scBlank){
     		xLeave=leftOff+Math.abs(rd.nextInt()%(scWidth-scBlank-leftOff));
     	}else{
     		  // = | 0   =     |  如左图:|表示边界,0表示小人,=表示发射范围
     		if(leftOff < scBlank)
                xLeave=scBlank+Math.abs(rd.nextInt()%(rightOff-scBlank));
     		else  // |=   0   =   |  如左图:|表示边界,0表示小人,=表示发射范围
     			xLeave=leftOff+Math.abs(rd.nextInt()%(rightOff-leftOff));
     	}
     	//循环产生格子
     	for(int i=0;i<partNum;i++){
            if(xLeave>=scBlank+geWidth*i && xLeave<scBlank+geWidth*(i+1))
            	xLeave=scBlank+geWidth*(i*2+1)/2-offPos;
     	}
    	return xLeave;
    }
    //*======Y坐标======*//
    protected int getYsend(){
    	yLeave=scHeight;
    	return yLeave;
    }

	/**==============================**
	 **          当前X/Y坐标
	 **==============================**/
    //*======X坐标======*//
    protected int getX(){
    	return ppX;
    }
    //*======Y坐标======*//
    protected int getY(){
    	return ppY;
    }
    
	/**==============================**
	 **             速度
	 **==============================**/
    //*======设置速度======*//
    protected int getV(int level)
	{
    	switch (level){
    	    case 1:{
        	this.v=2;
        	break;
        	}
    	    case 2:{
    	    	this.v=2;
        	break;
        	}
    	    case 3:{
    	    	this.v=3;
        	break;
        	}
    	    case 4:{
    	    	this.v=3;
        	break;
        	}
    	    case 5:{
    	    	this.v=4;
        	break;
        	}
    	    case 6:{
    	    	this.v=4;
        	break;
        	}
    	    case 7:{
    	    	this.v=5;
        	break;
        	}
    	    case 8:{
    	    	this.v=5;
        	break;
        	}
    	}
    	return v;
	}
    
	/**==============================**
	 **             摆幅
	 **==============================**/
    protected int getWaveRange(int level)
	{
    	switch (level){
    	    case 1:{
        	this.waveRange=2;
        		break;
        	}
    	    case 2:{
    	    	this.waveRange=2;
        		break;
        	}
    	    case 3:{
    	    	this.waveRange=3;
        		break;
        	}
    	    case 4:{
    	    	this.waveRange=3;
        		break;
        	}
    	    case 5:{
    	    	this.waveRange=4;
        		break;
        	}
    	    case 6:{
    	    	this.waveRange=4;
        		break;
        	}
    	    case 7:{
    	    	this.waveRange=5;
        		break;
        	}
    	    case 8:{
    	    	this.waveRange=5;
        		break;
        	}
    	}
    	return waveRange;
	}
    
	/**==============================**
	 **           泡泡发射范围
	 **==============================**/
    protected int getSendRange(int level)
	{
    	switch (level){
    	    case 1:{
        		this.sendRange=ppWidth*3;
        		break;
        	}
    	    case 2:{
    	    	this.sendRange=ppWidth*3;
        		break;
        	}
    	    case 3:{
    	    	this.sendRange=ppWidth*3;
        		break;
        	}
    	    case 4:{
    	    	this.sendRange=ppWidth*2;
        		break;
        	}
    	    case 5:{
    	    	this.sendRange=ppWidth*2;
        		break;
        	}
    	    case 6:{
    	    	this.sendRange=ppWidth*2;
        		break;
        	}
    	    case 7:{
    	    	this.sendRange=ppWidth;
        		break;
        	}
    	    case 8:{
    	    	this.sendRange=ppWidth;
        		break;
        	}
    	}
    	return sendRange;
	}

}

⌨️ 快捷键说明

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