📄 scenemodel.java
字号:
mPlayer.setState(state);
/*
if(state == HF.STATE_ATTACK){
int x = 0,y =0;
if(mPlayer.mDirection == HF.STATE_MOVE_LEFT){
x = mPlayer.mX-13;
}
else if(mPlayer.mDirection == HF.STATE_MOVE_RIGHT){
x = mPlayer.mX+13;
}
y = mPlayer.mY-10;
fire(x,y,mPlayer.mDirection);//发射一颗子弹
}
*/
}
}
//向某个方向发射一颗子弹
private void fire(int x,int y,int direction) {
for(int i=0;i<MAX_BULLET;i++){
if(mBullets[i].mUsed == false){
if(fireNum>0) {
fireNum--;
} else
fireEmpty=true;
mBullets[i].create(HF.BULLET,10,x,y);
mBullets[i].mDirection = direction;
break;
}
}
}
private void enemyFire(int x,int y,int direction) {
for(int i=0;i<MAX_ENEMY_BULLET;i++) {
if(mEnemyBullets[i].mUsed == false){
mEnemyBullets[i].create(HF.BULLET,10,x,y);
mEnemyBullets[i].mDirection = direction;
break;
}
}
}
//检测是否有与场景的物品相冲突
private void checkCollison() {
for(int i=0;i<MAX_BULLET;i++){
if(mBullets[i].mUsed == true){
//子弹在场景中存在,判断是否射中了敌兵
for (int j = 0; j < MAX_PAWN; j++) {
if(mPawns[j].mUsed == true&& mPawns[j].mState != HF.STATE_DIE){
int dx = mBullets[i].mX-mPawns[j].mX;
int dy = mBullets[i].mY- mPawns[j].mY;
int xWidth = 200, yWidth = 280;
if(j == 0){
yWidth = 400; //对应要判断的是敌兵头目
}
//判断是否射中目标
if(dx*dx<xWidth&&dy*dy<yWidth){
//射中了敌人
mPawns[j].mLife = mPawns[j].mLife -2;
mBullets[i].reset();
for(int bi=0;bi<mBBlood.length;bi++){
if(mBBlood[bi].mUsed==false){
mBBlood[bi].mUsed=true;
mBBlood[bi].mX=mBullets[i].mX;
mBBlood[bi].mY=mBullets[i].mY;
break;
}
}
if(j>1){
if (mPawns[j].mLife <= 0) {
mKillPawn++;//杀死了一个敌兵
mScore.addScore(HF.LIFE_POINT*mPawnLife[mLevel-1]);
mPawns[j].setState(HF.STATE_DIE);
}
} else if(j==0){
//对应攻击到的是敌兵头目
mScore.addScore(HF.LIFE_POINT*2);
mCock.mLife -= 2;
if(mCock.mLife<=0){
mScore.addScore(mPlayer.mLife * HF.LIFE_POINT); //打死它后,额外主角剩下的血的得分
mCock.setState(HF.STATE_DIE);
if(HF.sound) {
back.stop();
win.play();
}
}
} else {
mScore.addScore(HF.LIFE_POINT*2);
mPreCock.mLife -= 2;
if(mPreCock.mLife<=0){
//mScore.addScore(mPlayer.mLife * HF.LIFE_POINT); //打死它后,额外主角剩下的血的得分
switch(mLevel) {
case 1:
mScore.addScore(mPlayer.mLife * HF.LIFE_POINT);
mPreCock.setState(HF.STATE_DIE);
mCock.mUsed = true;
mCock.setState(HF.STATE_MOVE_LEFT);
break;
case 2:
mScore.addScore(mPlayer.mLife * HF.LIFE_POINT);
mPreCock.desX=-50;
mPreCock.desY=mPreCock.mY;
mPreCock.setState(HF.STATE_MOVE_LEFT);
break;
case 3:
case 4:
case 5:
break;
}
//mCock.mUsed = true;
//mCock.setState(HF.STATE_MOVE_LEFT);
}
}
break;//子弹射中了敌人了,不可以在继续使用来判断
}
}
}
}
}
for(int i=0;i<MAX_ENEMY_BULLET;i++) {
if(mEnemyBullets[i].mUsed == true) {
//子弹在场景中存在,判断是否射中了黄忠
if(mPlayer.mUsed == true&& mPlayer.mState != HF.STATE_DIE) {
int dx = mEnemyBullets[i].mX-mPlayer.mX;
int dy = mEnemyBullets[i].mY-mPlayer.mY;
int xWidth = 200, yWidth = 280;
//判断是否射中目标
if(dx*dx<xWidth&&dy*dy<yWidth) {
//射中了敌人
mPlayer.mLife = mPlayer.mLife -2;//弓箭对黄忠的伤害
for(int bi=0;bi<mBBlood.length;bi++){
if(mBBlood[bi].mUsed==false){
mBBlood[bi].mUsed=true;
mBBlood[bi].mX=mEnemyBullets[i].mX;
mBBlood[bi].mY=mEnemyBullets[i].mY;
break;
}
}
if(dx<-5) {
//mPlayer.setPictureIndex (4);
mPlayer.mHurtCount = true;
} else {
//mPlayer.setPictureIndex (5);
mPlayer.mHurtCount = true;
}
mEnemyBullets[i].reset();
if (mPlayer.mLife <= 0) {
mPlayer.setState(HF.STATE_DIE);
if(HF.sound) {
back.stop();
lose.play();
}
}
break;//子弹射中了敌人了,不可以在继续使用来判断
}
}
}
}
}
boolean takeRes(){
boolean b=false;
for(int i=0;i<2;i++){
if(mCabinets[i].mUsed == true){
int dx = mCabinets[i].mX - mPlayer.mX;
int dy = mCabinets[i].mY - mPlayer.mY-7;
if(dx*dx+dy*dy<200){
mCabinets[i].reset();
if(mCabinets[i].mType==HF.CABINET){
hpSplashTime=10;
b=true;
}else{
// fireNum+=10;//增加火箭的数量+10
// fireEmpty=false;
}
}
}
}
return b;
}
//创建一个游戏场景画面,包括屋子,金属箱等物品的放置
private void createScene(int x1,int y1) {
//int counter = 0;
int x = 0;
int y = 0;
if(mLevel!=3) {
x = 10+Math.abs(mRandom.nextInt()%30);
y = BORDER_UP;
//首先创建上一排的布景
while(x<mSceneWidth){
int index = Math.abs(mRandom.nextInt()%4);
int width =mSceneImages[index].getWidth();
if(mRandom.nextInt()%3>0&&(x+width)<mSceneWidth){
//创建一个布景
for(int i=0;i<MAX_SCENEUNIT;i++){
if(mUpScenes[i].mUsed == false){
mUpScenes[i].create(index + 2, 10, x + x1, y);
break;
}
}
}
x = x+width+10;
}
x = 10+Math.abs(mRandom.nextInt()%30);
y = BORDER_DOWN+6;
//首先创建下一排的布景
while(x<mSceneWidth){
int index = Math.abs(mRandom.nextInt()%4);
int width =mSceneImages[index].getWidth();
if(mRandom.nextInt()%3>0&&(x+width)<mSceneWidth){
//创建一个布景
for(int i=0;i<MAX_SCENEUNIT;i++){
if(mDownScenes[i].mUsed == false){
mDownScenes[i].create(index + 2, 10, x + x1, y);
break;
}
}
}
x = x+width+10;
}
}
//如果是第在第一个场景,就要刷场景的名字
if(mSceneIndex == 0) {
mFramesPosiX = mSceneWidth+40;
mFramesPosiY = mSceneHeight>>1;
mFramesCount = 30;
bShowFrames = true;
//if(HF.sound)
// {
//HF.back.play();
// }
return;
}
//创建场景中的敌兵
// counter = 0;
int Height = BORDER_DOWN - BORDER_UP-20;
int count = 2+Math.abs(mRandom.nextInt()%3);
int index0 = Math.abs(mRandom.nextInt()%3);
int index = enemys[mLevel-1][index0];
for(int i=0;i<count;i++){
for(int k=2;k<MAX_PAWN;k++){
if(mPawns[k].mUsed == false){
x = 10+Math.abs(mRandom.nextInt()%mSceneWidth);
y = BORDER_UP+Math.abs(mRandom.nextInt()%Height);
//int t = getEnemyIndex(mPawns[k]);
System.out.println("敌人叙述"+index0);
mPawns[k].setImages(mPawnImages[index0]);
mPawns[k].create(index,mPawnLife[mLevel-1],x+x1,y);
// System.out.println("敌人"+mPawns[k]);
mPawns[k].setState(HF.STATE_MOVE_LEFT);
break;
}
}
}
//System.out.println("Scene"+(mSceneIndex+1)+"Create"+counter+"Pawns");
//创建场景中的药箱
int rate = mRandom.nextInt()%10;
if(rate>5){
for(int i=0;i<2;i++){
if(mCabinets[i].mUsed==false){
x = 10 + Math.abs(mRandom.nextInt() % mSceneWidth);
y = BORDER_UP+Math.abs(mRandom.nextInt() %(Height-20));
if(mRandom.nextInt()%2==0)
mCabinets[i].create(HF.CABINET,50,x+x1,y);
else
mCabinets[i].create(HF.ARROW,50,x+x1,y);
break;
}
}
}
}
/* private int getEnemyIndex(Character cter)
{
int i=0;
for( ;i<3;i++)
{
if(cter.mType == enemys[mLevel-1][i])
return i;
}
return i;
}
*/
/**
* 更新某个角色的状态
* @param cter 要更新的角色对象
* @param cStep 角色对象移动的步伐大小
* @param aLife 角色攻击一次能够消耗的生命值数
*/
private void refreshCharacter(Character cter,int cStep,int aLife,int atkDelay) {
if(cter.mState == HF.STATE_ATTACK||cter.mState == HF.STATE_DIE)
return;//已经是死亡状态或者正在攻击状态,跳过
int dx,dy;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -