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

📄 chip.java

📁 简单的用Java做的小游戏主要是用了自己的框架来
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package role;

import java.awt.Image;
import java.awt.Rectangle;

import frame.GameStartFrame;

import assistant.PublicVar;
import assistant.MapRect;
import assistant.MoveImageChange;
import assistant.Music;

/**
 * 本类为松鼠角色类
 * 
 * @author Administrator
 * 
 * 
 */

public class Chip extends SportRole {
	/** 松鼠图片 */
	public static Image[][] chipImage;

	/** 图片切换对象 */
	private MoveImageChange moveImageChange = new MoveImageChange(4);

	/** 松鼠是否处于跳跃状态 */
	private boolean isSkipState;

	/** 跳跃计数器 */
	private int skipCount;

	/** 松鼠箱子对象 */
	public Box box;

	/** 地图区域临时变量 */
	private MapRect mapRect;

	/** 松鼠是否下蹲 */
	public boolean isSquat;

	/** 松鼠是否处于下落状态 */
	public boolean isChipDown;
	
	/**松鼠临时地图区域*/
	public Rectangle tempMapRect;
	
	/**松鼠临时碰撞区域*/
	public Rectangle tempHitRect;

	/**松鼠是否能向下跳跃*/
	private boolean isDownSkipable = true;
	
	/**松鼠生命值*/
	public  int life = 3;
	
	/**地图向上滚动计数器*/
	public static int mapUpCount;
	
	/**开火计数器*/
	private int fireCount;
	
	/**箱子是否能产生道具*/
	private boolean isCreateProp = true;
	
	/**松鼠是否被击中*/
	private boolean isByHit;
	
	/**松鼠被击中计数器*/
	private int byHitCount;
	
	/**是否无敌*/
	public boolean byHit = false;
	/**无敌计数器*/
	private int hitCount;
	

	/**向左移动图片组*/
	private Image[] moveLeftImage = {Chip.chipImage[1][1],
			Chip.chipImage[1][2], Chip.chipImage[1][3]};
	
	/**向右移动图片组*/
	private Image[] moveRightImage = {Chip.chipImage[0][1],
			Chip.chipImage[0][2], Chip.chipImage[0][3]};
	
	/**扛箱子向左移动图片组*/
	private Image[] moveLeftInBoxImage = {Chip.chipImage[1][0],
			Chip.chipImage[1][7], Chip.chipImage[1][8]};
	
	/**扛箱子向右移动图片组*/
	private Image[] moveRightInBoxImage = {Chip.chipImage[0][0],
			Chip.chipImage[0][7], Chip.chipImage[0][8]};
	
	/**无敌图片切换对象*/
	private MoveImageChange moveHitImageChange = new MoveImageChange(2);
	
	/**向左移动图片组*/
	private Image[] moveHitLeftImage = {Chip.chipImage[1][1],Chip.chipImage[3][1],
			Chip.chipImage[1][2],Chip.chipImage[3][2], Chip.chipImage[1][3],Chip.chipImage[3][3]};
	
	/**向右移动图片组*/
	private Image[] moveHitRightImage = {Chip.chipImage[0][1],Chip.chipImage[2][1],
			Chip.chipImage[0][2],Chip.chipImage[2][2], Chip.chipImage[0][3],Chip.chipImage[2][3]};
	
	/**扛箱子向左移动图片组*/
	private Image[] moveHitLeftInBoxImage = {Chip.chipImage[1][0],Chip.chipImage[3][0],
			Chip.chipImage[1][7],Chip.chipImage[3][7], Chip.chipImage[1][8],Chip.chipImage[3][8]};
	
	/**扛箱子向右移动图片组*/
	private Image[] moveHitRightInBoxImage = {Chip.chipImage[0][0],Chip.chipImage[2][0],
			Chip.chipImage[0][7],Chip.chipImage[2][7], Chip.chipImage[0][8],Chip.chipImage[2][7]};
	
	/**站立向左图片组*/
	private Image[] standHitLeftImage = {Chip.chipImage[1][5],Chip.chipImage[3][5]};
	
	/**站立向右图片组*/
	private Image[] standHitRightImage = {Chip.chipImage[0][5],Chip.chipImage[2][5]};
	
	/**站立有箱子向左图片组*/
	private Image[] standHitLeftInBoxImage = {Chip.chipImage[1][0],Chip.chipImage[3][0]};
	
	/**站立有箱子向右图片组*/
	private Image[] standHitRightInBoxImage = {Chip.chipImage[0][0],Chip.chipImage[2][0]};
	
	/**跳跃向左图片组*/
	private Image[] skipHitLeftImage = {Chip.chipImage[1][6],Chip.chipImage[3][6]};
	
	/**跳跃向右图片组*/
	private Image[] skipHitRightImage = {Chip.chipImage[0][6],Chip.chipImage[2][6]};
	
	/**下蹲向左图片组*/
	private Image[] squatHitLeftImage = {Chip.chipImage[1][4],Chip.chipImage[3][4]};
	
	/**下蹲向右图片组*/
	private Image[] squatHitRightImage = {Chip.chipImage[0][4],Chip.chipImage[2][4]};
	
	/**被击中向左图片组*/
	private Image[] hitLeftImage = {Chip.chipImage[1][9],Chip.chipImage[3][9]};
	
	/**被击中向右图片组*/
	private Image[] hitRightImage = {Chip.chipImage[0][9],Chip.chipImage[2][9]};
	
	
	/**
	 * 构造方法
	 * 
	 * @param x X坐标
	 * @param y Y坐标
	 * @param state 松鼠状态
	 */
	public Chip(int x, int y, int state) {
		super(x, y, 40, 40, state);
		this.tempMapRect=new Rectangle(x,y+height,width,10);
		this.tempHitRect=new Rectangle(x+width,y,10,height);
		this.speed = 5;// 设置移动速度
		this.byHit = true;//产生松鼠无敌
		this.img = Chip.chipImage[0][5];
	}
	
	
	

	/**
	 * 松鼠移动方法
	 */
	@Override
	public void move() {
		this.setImage();// 设置当前松鼠图片
		
		if(isByHit == false){//未被击中
			this.setState();// 设置状态
			this.setHit();// 设置碰撞
			this.setBox();//设置松鼠箱子属性
			
			if(PublicVar.isBoss == false){//如果不是Boss窗体
				this.setMapMove();//设置地图移动
			}
			this.setChipAddress();//让松鼠始终停在画面上
		}
		else{//被击中
			this.setbyHit();

		}
		
		this.setNotHit();//设置无敌状态

	}
	
	/**
	 * 设置松鼠无敌状态
	 *
	 */
	private void setNotHit(){
		if(byHit == true && PublicVar.cheat == false){//如果无敌
			hitCount++;
			
			if(hitCount>100){
				byHit = false;
				hitCount = 0;
			}
		}
	}
	
	/**
	 * 设置被击中
	 *
	 */
	private void setbyHit(){
		this.byHitCount++;//计数器增加
		byHit = true;//设置无敌
		
		 if(this.byHitCount < 5){//设置松鼠向上移动
			if(this.state == PublicVar.RIGHT){
				this.x-=10;
			}
			else{
				this.x+=10;
			}
			this.y-=8;
			this.setChipAddress();//设置松鼠停在画面

			if(this.box != null){//设置箱子
				this.setBoxAddress();
			}
		}
		 else{//设置松鼠下落
				if(this.life == 0){//生命为零,则松鼠死亡
					PublicVar.isChipDie = true;
				}
				else{
					this.byHitCount = 0;//计数器归零
					isByHit = false;
				}
		}
	}
	
	/*
	 * 让角色始终在画面上(X轴)
	 */
	private void setChipAddress(){
		
		if (this.x < 0) {
			this.x = 0;
		} else if (this.x > 600) {
			this.x = 600;
		}
	}
	
	/**
	 * 设置箱子属性
	 *
	 */
	private void setBox(){
		if(this.box!=null){//如果松鼠手上拿着箱子
			
			//如果能够产生道具
			if(isCreateProp){
				if(this.box.flowerProp){//产生花
					PublicVar.roleList.add(new Flower(this.box.x+5,
							this.box.y));
				}
				else if(this.box.hartProp){//产生心
					PublicVar.roleList.add(new Heart(this.box.x+5,
							this.box.y+5));
				}
				isCreateProp = false;//一个箱子只能产生一个道具
			}
			
			this.setBoxAddress();//设置箱子跟随松鼠移动
		}
		else{//能够产生道具
			isCreateProp = true;
		}
	}
	/**
	 * 设置箱子位置
	 */
	private void setBoxAddress(){
		this.box.x=this.x;
		this.box.y=this.y-box.height;
	}
	
	/**
	 * 设置角色状态和移动
	 *
	 */
	private void setState() {
		
		this.setLeftRightState();//左右
		
		this.setFireState();//开火
		this.setSkipState();//跳跃
		
		this.setSquatState();//下蹲
		
		if(this.y>550){//松鼠摔死
			PublicVar.isChipDie = true;
		}
	}
	
	/**
	 * 设置下蹲状态
	 *
	 */
	private void setSquatState(){
	
		if (PublicVar.isDown) {
			this.isSquat = true;//处于下蹲状态
		} else {
			this.isSquat = false;
		}
	}
	
	/**
	 * 设置左右状态
	 *
	 */
	private void setLeftRightState(){
		/**
		 * 根据按键,判断状态
		 */
		if (PublicVar.isRight && this.isSquat == false) {//按下右键,并且角色没有下蹲时
			this.state = PublicVar.RIGHT;
			this.x += this.speed;
			
		} else if (PublicVar.isLeft && this.isSquat == false) {//按下左键,并且角色没有下蹲时
			this.state = PublicVar.LEFT;
			this.x -= this.speed;
		}
	}
	
	/**
	 * 设置跳跃状态
	 *
	 */
	private void setSkipState(){
//		向下跳跃状态
		if(PublicVar.isDown && PublicVar.isSkip &&
				this.isDownSkipable==true && this.isSkipState == false){
			this.y+=this.speed;
			this.isChipDown=true;
			if(this.height ==0 ){
				this.setSquatRest();
			}
		}

		/**
		 * 按下跳跃键
		 */

		if (PublicVar.isSkip && this.isSkipState == false
				&& this.isChipDown == false && PublicVar.isDown == false) {
			this.isSkipState = true;//角色处于跳跃状态
		}
		
		/**
		 * 角色跳跃状态,运动轨迹
		 */
		if (this.isSkipState) {
			this.skipCount++;//记数器增加

			if (skipCount < 32) {//上升
				this.y-=this.speed;
			} else{//下降
				this.isChipDown = true;
				
			}
		}
		
		/*松鼠下落*/
		if(this.isChipDown){
			this.y+=this.speed;
		}
	}
	
	
	
	/**设置开火延迟*/
	private int fcount;
	/**
	 * 设置按下开火键状态
	 *
	 */
	private void setFireState(){
		
		/*按下开火键*/
		if(PublicVar.isFire){

			if(this.box==null){//捡箱子
				if(fireCount>3){//60毫秒之后开火
					for (int i = 0; i < PublicVar.roleList.size(); i++) {
						BaseRole role=PublicVar.roleList.get(i);
						
						if(role.getClass() == Box.class && 
								tempHitRect.intersects(role.rect) && 
								((Box)role).state == Box.START){
							this.box=(Box)role;
							this.box.setState(Box.ACTIVE);
							break;
						}
					}
				}
				fireCount++;
			}
			else{//箱子移动
				fcount++;
				if(fcount>3){//60毫秒之后开火
					
					//设置松鼠拿着的箱子扔出
					this.box.setState(Box.ISMOVE);
					
					Music.playSingleMusic(Music.PLAY_CHUCK);
					
					/*设置箱子移动方向*/
					if(PublicVar.isUp){//向上
						this.box.setMoveState(PublicVar.UP);
						
					}
					else{//向左、向右
						this.box.setMoveState(this.state);
						
						/*设置箱子起始位置*/
						
							if(this.state==PublicVar.RIGHT){//向右
								this.box.x=this.x+this.width+10;
							}
							else if(this.state==PublicVar.LEFT){//向左
								
								this.box.x=this.x-this.width-10;
							}
							
						if(this.isSquat == false){
							this.box.y = this.y;
						}
					}
					this.box=null;//将松鼠拿着箱子设置为空
					fireCount=0;//开火计数器归零
					fcount = 0;
	
					
				}
			}
			

			}
		
	}
	
	
	/**
	 * 设置图片
	 *
	 */
	private void setImage() {
		switch (state) {
		case PublicVar.LEFT:// 向左		
			if(this.byHit){
				this.setLeftRightImage(PublicVar.isLeft,moveHitImageChange,
						this.moveHitLeftImage,this.moveHitLeftInBoxImage,
						null,this.standHitLeftImage,//没有箱子站立
						null,this.standHitLeftInBoxImage,//有箱子站立
						null,this.skipHitLeftImage,//跳跃
						null,this.squatHitLeftImage//下蹲
						);
			}
			else{
				this.setLeftRightImage(PublicVar.isLeft,moveImageChange,
						moveLeftImage,moveLeftInBoxImage,
						Chip.chipImage[1][5],null,//没有箱子站立
						Chip.chipImage[1][0],null,//有箱子站立
						Chip.chipImage[1][6],null,//跳跃

⌨️ 快捷键说明

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