📄 chip.java
字号:
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 + -