Stage1SurfaceView安异游戏第一关源代码

package com.test.view;

import java.io.InputStream; import java.util.Timer; import java.util.TimerTask;

import com.test.main.R; import com.test.activity.Stage1Activity; import com.test.activity.SuccessActivity; import com.test.my.MyAnimSkill; import com.test.my.MyAnimation; import com.test.my.MyFulluse; import com.test.my.MyIButtonfour; import com.test.my.MyImageButton;

import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Paint.Style; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; import android.widget.Toast;

public class Stage1SurfaceView extends SurfaceView implements Callback,Runnable {  private Context context;  private int screenwidth;  private int screenheight;  private Canvas canvas;  private Paint paint;  private SurfaceHolder holder;  private boolean isrun;  private boolean isloadok;    private Bitmap mapgrassbg;  private Bitmap smallmap;  private int gamemapwidth;  private int gamemapheight;  private int smallmapx;  private int smallmapy;  private MyIButtonfour controldirection;    private MyImageButton controlattack;  private MyImageButton backblood;    private MyImageButton bigattack1;  private MyImageButton bigattack2;  private MyImageButton bigattack3;  private MyAnimSkill big1anim[];  private MyAnimSkill big2anim[];  private MyAnimSkill big3anim[];  private MyAnimSkill big4anim;    private Bitmap bigattackbm1;  private Bitmap bigattackbm2;  private Bitmap bigattackbm3;  private Bitmap bigattackbm4;  private boolean isuseskill;  private boolean isstartskill;    private int skilltype;  private int skilldirection;  private int skillcount;  private int skillmovex;  private int skillmovey;    private Timer timer;  private Bitmap bignone;  private Bitmap gamerole;  private int progressblood;  private int progressmagic;  private int stoptime;  private int delaytime;  private int goldmoney;  private int medicinesum;  private MyImageButton okbutton;  private MyImageButton cancelbutton;  private Bitmap info_show;  private int infox;  private int infoy;  private boolean isexit;    private MyAnimation []mainrole;  private MyAnimation [][]enemies;  private Bitmap money1;  private Bitmap money2;  //0:right; 1:left; 2:up; 3:down; 4:rattack; 5:lattack; 6:berattack; 7:belattack;8:rdead; 9:ldead  private int rolestate;  private int myimagex;  private int myimagey;  private int myposx;  private int myposy;  private int myindexx;  private int myindexy;  private int myscreenx;  private int myscreeny;  private int mapx;  private int mapy;  private int [][]gamemap;  private int mapxcount;  private int mapycount;  private int MAP_LENGH=15;  private int backmyposx;  private int backmyposy;  private int backmyscreenx;  private int backmyscreeny;  private int []enemystate;//0:left; 1:right;  private int []enemyx;  private int []enemyy;  private int []enemyposx;  private int []enemyposy;  private int []enemydelay;  private int []beattackcount;  private int [][]moneyposition;  private int MY_STEP=10;    private boolean isdead;  private boolean isclick;  private boolean isattack;  private boolean isbeattacked;  private boolean isup;  private boolean isdown;  private boolean isleft;  private boolean isright;  private int bossbeattacksum1;  private boolean []isgothere;  private int touchsum;  private int clickx;  private int clicky;  private int doorx;  private int doory;  private Bitmap doorpic;  private int endpoint=1;  private int minutes;  private int seconds;    public Stage1SurfaceView(Context context, int w, int h) {   super(context);   this.context = context;   screenwidth = w;   screenheight = h;   paint=new Paint();   medicinesum=MyFulluse.medicinesum;   progressblood=MyFulluse.progressblood;   progressmagic=MyFulluse.progressmagic;   new Thread(){    @Override    public void run() {     initMyView();     isloadok=true;    }   }.start();   holder = getHolder();   holder.addCallback(this);   setFocusable(true);  }

 private void initMyView() {   controldirection=new MyIButtonfour(context, R.drawable.controldirection, 10, screenheight-115);   controlattack=new MyImageButton(context, R.drawable.controlattack, screenwidth-100, screenheight-100);   bigattack1=new MyImageButton(context, R.drawable.bigattack1, screenwidth-170, screenheight-80);//左边   bigattack2=new MyImageButton(context, R.drawable.bigattack2, screenwidth-161, screenheight-161);//左上   bigattack3=new MyImageButton(context, R.drawable.bigattack3, screenwidth-80, screenheight-170);//上边   bigattackbm1=getBitMap(R.drawable.bigattack1);   bigattackbm2=getBitMap(R.drawable.bigattack2);   bigattackbm3=getBitMap(R.drawable.bigattack3);   bigattackbm4=getBitMap(R.drawable.bigattack4);   bignone=getBitMap(R.drawable.bignone);   backblood=new MyImageButton(context, R.drawable.backblood, screenwidth-240, screenheight-80);   gamerole=getBitMap(R.drawable.role);   info_show=getBitMap(R.drawable.info_show);      int infow=info_show.getWidth();   int infoh=info_show.getHeight();   infox=(screenwidth-infow)>>1;   infoy=((screenheight-infoh)>>1)-15;   okbutton=new MyImageButton(context, R.drawable.okbutton, infox+50, infoy+180);   cancelbutton=new MyImageButton(context, R.drawable.cancelbutton, infox+210, infoy+180);   initMaps();   initMainrole();   initEnemies();   initBigSkill();   if (timer==null) {    TimerTask task=new TimerTask() {     @Override     public void run() {      if (progressmagic<100 && !isexit) {       if (stoptime<delaytime) {        stoptime++;        int n=100/delaytime;        progressmagic+=n;       }else {        progressmagic=100;       }      }      seconds++;      if (seconds>=60) {       seconds=0;       minutes++;      }     }    };    timer=new Timer();    timer.schedule(task, 0, 1000);   }  }    private void initMaps() {   gamemapwidth=screenwidth+240;   gamemapheight=screenheight+180;   doorx=gamemapwidth-35;//35=15+20   doory=(gamemapheight-80)>>1;//居中   doorpic=getBitMap(R.drawable.doorpic);   mapgrassbg=getBitMap(R.drawable.mapgrassbg);   mapgrassbg=resizeBitMap(mapgrassbg, gamemapwidth, gamemapheight);   mapxcount=gamemapwidth/MAP_LENGH;//x轴总index   mapycount=gamemapheight/MAP_LENGH;//y轴总index   gamemap=new int[mapycount][mapxcount];//初始化地图,0为可行走,1为碰墙   for (int i = 0; i < 6; i++) {//前6行,6*15=90px    for (int j = 0; j < mapxcount; j++) {     gamemap[i][j]=1;    }   }   for (int i = mapycount-6; i < mapycount; i++) {//后6行    for (int j = 0; j < mapxcount; j++) {     gamemap[i][j]=1;    }   }   for (int i = 0; i < 1; i++) {//前1列    for (int j = 0; j < mapycount; j++) {     gamemap[j][i]=1;    }   }   for (int i = mapxcount-1; i < mapxcount; i++) {//后1列    for (int j = 0; j < mapycount; j++) {     gamemap[j][i]=1;    }   }   //初始化小地图   int smallwidth=mapxcount*2;   int smallheight=(mapycount-10)*2;//最前和最后的5行,并扩大2倍   smallmap=getBitMap(R.drawable.smallmap);   smallmap=resizeBitMap(smallmap, smallwidth, smallheight);   smallmapx=screenwidth-smallwidth-10;   smallmapy=10;  }

 private void initMainrole() {   myposx=120;   myposy=150;   myimagex=myposx-75;   myimagey=myposy-95;   myindexx=myposx/MAP_LENGH;   myindexy=myposy/MAP_LENGH;   myscreenx=myposx;   myscreeny=myposy;   //主角初始化   mainrole=new MyAnimation[10];   mainrole[0]=new MyAnimation(context, new int[]{     R.drawable.rolerm1,R.drawable.rolerm2,R.drawable.rolerm3,     R.drawable.rolerm4,R.drawable.rolerm5,R.drawable.rolerm6,     R.drawable.rolerm7,R.drawable.rolerm8 }, true);   mainrole[1]=new MyAnimation(context, new int[]{     R.drawable.rolelm1,R.drawable.rolelm2,R.drawable.rolelm3,     R.drawable.rolelm4,R.drawable.rolelm5,R.drawable.rolelm6,     R.drawable.rolelm7,R.drawable.rolelm8 }, true);   mainrole[2]=new MyAnimation(context, new int[]{     R.drawable.roleum1,R.drawable.roleum2,R.drawable.roleum3,     R.drawable.roleum4,R.drawable.roleum5,R.drawable.roleum6,     R.drawable.roleum7,R.drawable.roleum8 }, true);   mainrole[3]=new MyAnimation(context, new int[]{     R.drawable.roledm1,R.drawable.roledm2,R.drawable.roledm3,     R.drawable.roledm4,R.drawable.roledm5,R.drawable.roledm6,     R.drawable.roledm7,R.drawable.roledm8 }, true);   mainrole[4]=new MyAnimation(context, new int[]{     R.drawable.roleattackr1,R.drawable.roleattackr2,R.drawable.roleattackr3,     R.drawable.roleattackr4,R.drawable.roleattackr5,R.drawable.roleattackr6,     R.drawable.roleattackr7,R.drawable.roleattackr8,R.drawable.roleattackr9,     R.drawable.roleattackr10 }, true);   mainrole[5]=new MyAnimation(context, new int[]{     R.drawable.roleattackl1,R.drawable.roleattackl2,R.drawable.roleattackl3,     R.drawable.roleattackl4,R.drawable.roleattackl5,R.drawable.roleattackl6,     R.drawable.roleattackl7,R.drawable.roleattackl8,R.drawable.roleattackl9,     R.drawable.roleattackl10 }, true);   mainrole[4].setFlag(7);   mainrole[5].setFlag(7);   mainrole[6]=new MyAnimation(context, new int[]{     R.drawable.rolebra1,R.drawable.rolebra2,R.drawable.rolebra3,     R.drawable.rolebra4,R.drawable.rolebra5 }, false);   mainrole[7]=new MyAnimation(context, new int[]{     R.drawable.rolebla1,R.drawable.rolebla2,R.drawable.rolebla3,     R.drawable.rolebla4,R.drawable.rolebla5 }, false);   mainrole[8]=new MyAnimation(context, new int[]{     R.drawable.rolerd1,R.drawable.rolerd2,R.drawable.rolerd3,     R.drawable.rolerd4,R.drawable.rolerd5,R.drawable.rolerd6,     R.drawable.rolerd7,R.drawable.rolerd8,R.drawable.rolerd9 }, false);   mainrole[9]=new MyAnimation(context, new int[]{     R.drawable.roleld1,R.drawable.roleld2,R.drawable.roleld3,     R.drawable.roleld4,R.drawable.roleld5,R.drawable.roleld6,     R.drawable.roleld7,R.drawable.roleld8,R.drawable.roleld9 }, false);  }    private void initEnemies() {   enemystate=new int[3];   enemyx=new int[3];   enemyy=new int[3];   enemyposx=new int[3];   enemyposy=new int[3];   enemydelay=new int[3];   beattackcount=new int[3];   isgothere=new boolean[4];   moneyposition=new int[3][3];   enemyposx[0]=315;   enemyposy[0]=160;   enemyx[0]=enemyposx[0]-105;   enemyy[0]=enemyposy[0]-110;   enemyx[1]=210;   enemyy[1]=150;   enemyx[2]=screenwidth-205;   enemyy[2]=110;   enemies=new MyAnimation[3][2];   for (int i = 0; i <2; i++) {    enemies[i][0]=new MyAnimation(context, new int[]{      R.drawable.eonefootl1,R.drawable.eonefootl2,R.drawable.eonefootl3,      R.drawable.eonefootl4,R.drawable.eonefootl5,R.drawable.eonefootl6,      R.drawable.eonefootl7 }, true);    enemies[i][1]=new MyAnimation(context, new int[]{      R.drawable.eonefootr1,R.drawable.eonefootr2,R.drawable.eonefootr3,      R.drawable.eonefootr4,R.drawable.eonefootr5,R.drawable.eonefootr6,      R.drawable.eonefootr7 }, true);   }   enemies[2][0]=new MyAnimation(context, new int[]{     R.drawable.esnakel1,R.drawable.esnakel2,R.drawable.esnakel3,     R.drawable.esnakel4,R.drawable.esnakel5,R.drawable.esnakel6,     R.drawable.esnakel7,R.drawable.esnakel8 }, true);   enemies[2][1]=new MyAnimation(context, new int[]{     R.drawable.esnaker1,R.drawable.esnaker2,R.drawable.esnaker3,     R.drawable.esnaker4,R.drawable.esnaker5,R.drawable.esnaker6,     R.drawable.esnaker7,R.drawable.esnaker8 }, true);   money1=getBitMap(R.drawable.money1);   money2=getBitMap(R.drawable.money2);  }    private void initBigSkill() {   big1anim=new MyAnimSkill[2];   big1anim[0]=new MyAnimSkill(context, new int[]{ R.drawable.bigr1,R.drawable.bigr2,     R.drawable.bigr3,R.drawable.bigr4,R.drawable.bigr5,R.drawable.bigr6,     R.drawable.bigr7,R.drawable.bigr8,R.drawable.bigr9,R.drawable.bigr10}, false);   big1anim[1]=new MyAnimSkill(context, new int[]{ R.drawable.bigl1,R.drawable.bigl2,     R.drawable.bigl3,R.drawable.bigl4,R.drawable.bigl5,R.drawable.bigl6,     R.drawable.bigl7,R.drawable.bigl8,R.drawable.bigl9,R.drawable.bigl10}, false);   big2anim=new MyAnimSkill[8];   for (int i = 0; i < 8; i++) {    big2anim[i]=new MyAnimSkill(context, new int[]{ R.drawable.big2_1,      R.drawable.big2_2,R.drawable.big2_3 } , true);   }      big3anim=new MyAnimSkill[8];   Bitmap bm3=getBitMap(R.drawable.big3);   Bitmap[]bmps1=new Bitmap[8];   int sum=0;   int w=bm3.getWidth()/5;   int h=bm3.getHeight()/2;   for (int i = 0; i < 2; i++) {    for (int j = 0; j < 5; j++) {     if (sum<=7) {      bmps1[sum]=Bitmap.createBitmap(bm3, j*w, i*h ,w ,h);      sum++;     }    }   }   for (int i = 0; i < 8; i++) {    big3anim[i]=new MyAnimSkill(context, bmps1, true);   }      Bitmap bm4=getBitMap(R.drawable.big4);   Bitmap[]bmps2=new Bitmap[20];   sum=0;   w=bm4.getWidth()/5;   h=bm4.getHeight()/4;   for (int i = 0; i < 4; i++) {    for (int j = 0; j < 5; j++) {     bmps2[sum]=Bitmap.createBitmap(bm4, j*w, i*h ,w ,h);     sum++;    }   }   big4anim=new MyAnimSkill(context, bmps2, false);  }    private Bitmap getBitMap(int resId) {   BitmapFactory.Options opt = new BitmapFactory.Options();   opt.inPreferredConfig = Bitmap.Config.RGB_565;   opt.inPurgeable = true;   opt.inInputShareable = true;   InputStream is = context.getResources().openRawResource(resId);   return BitmapFactory.decodeStream(is, null, opt);  }    private Bitmap resizeBitMap(Bitmap bitmap, int w, int h) {   int width = bitmap.getWidth();   int height = bitmap.getHeight();   Matrix matrix = new Matrix();   float scaleWidth = ((float) w / width);   float scaleHeight = ((float) h / height);   matrix.postScale(scaleWidth, scaleHeight);   Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height,     matrix, true);   return newbmp;  }    public void closeTimer() {   if (timer!=null) {    timer.cancel();    timer=null;   }  }    private void updateDraw() {   if (isloadok) {    canvas.drawBitmap(mapgrassbg, mapx, mapy, paint);    if (!isdead) {     if (!isexit) {      if (isattack) {       drawEnemywithRole(1);       roleAttackEnemy();       if (touchsum==2 && isclick && (isright||isleft||isup||isdown)) {        updateRoleLocation();       }      }else if (isright && isclick) {       drawEnemywithRole(1);       updateRoleLocation();      }else if (isleft && isclick) {       drawEnemywithRole(1);       updateRoleLocation();      }else if (isup && isclick) {       drawEnemywithRole(1);       updateRoleLocation();      }else if (isdown && isclick) {       drawEnemywithRole(1);       updateRoleLocation();      }else if (isbeattacked) {       drawEnemywithRole(1);      }else {       drawEnemywithRole(0);      }      updateEnemyLocation();//更新怪位置      judgeToDoor();//判断是否到达传送门     }     if (progressblood<=0) {      progressblood=1;      isdead=true;     }    }else {     if (enemystate[0]==0) {      mainrole[8].drawAnimation(canvas, paint, myimagex, myimagey);     }else {      mainrole[9].drawAnimation(canvas, paint, myimagex, myimagey);     }     for (int i = 0; i < 3; i++) {      if (!enemies[i][enemystate[i]].isMisDead()) {//绘制敌人       enemies[i][enemystate[i]].setMisEnd(true);       enemies[i][enemystate[i]].setPlayid(0);       enemies[i][enemystate[i]].drawAnimation(canvas, paint, enemyx[i], enemyy[i]);      }     }     showDeadInfo();    }    drawMoney();    touchBigSkill();    controldirection.drawMyButton(canvas, paint);    controlattack.drawMyButton(canvas, paint);    if (MyFulluse.isbigattack1) {     drawBigSkill(MyFulluse.setbig1, screenwidth-170, screenheight-80);    }    if (MyFulluse.isbigattack2) {     drawBigSkill(MyFulluse.setbig2, screenwidth-161, screenheight-161);    }    if (MyFulluse.isbigattack3) {     drawBigSkill(MyFulluse.setbig3, screenwidth-80, screenheight-170);    }    canvas.drawBitmap(gamerole, 10, 5, paint);    drawProgress();    drawSmallMap();    drawMedicineSum();    drawChooseBack();   }else {//未加载完显示界面    drawStrtip("加载中...", 18, screenwidth/2-50, screenheight/2);   }  }    private void updateRoleLocation() {   if (isclick) {    if (isdown) {     myposy+=MY_STEP;     if (myscreeny >= screenheight-100) {      if (myindexy>=mapycount-19 && myindexy<mapycount-7) {//10+6=16       mapy-=MY_STEP;       doory-=MY_STEP;       for (int i = 0; i < 3; i++) {        enemyy[i]-=10;        if (moneyposition[i][2]==1) {         moneyposition[i][1]-=10;        }       }      }else {       myscreeny+=MY_STEP;      }     }else {      myscreeny+=MY_STEP;     }    }else if (isup) {     myposy-=MY_STEP;     if (myscreeny<=100) {      if (myindexy>=7 && myindexy<19) {       mapy+=MY_STEP;       doory+=MY_STEP;       for (int i = 0; i < 3; i++) {        enemyy[i]+=10;        if (moneyposition[i][2]==1) {         moneyposition[i][1]+=10;        }       }      }else {       myscreeny-=MY_STEP;      }     }else {      myscreeny-=MY_STEP;     }    }else if (isright) {     myposx+=MY_STEP;     if (myscreenx>=screenwidth-100) {      if (myindexx>=mapxcount-25 && myindexx<mapxcount-6) {//16+2+5=23       mapx-=MY_STEP;       doorx-=MY_STEP;       for (int i = 0; i < 3; i++) {        enemyx[i]-=10;        if (moneyposition[i][2]==1) {         moneyposition[i][0]-=10;        }       }      }else {       myscreenx+=MY_STEP;      }     }else {      myscreenx+=MY_STEP;     }    }else if (isleft) {     myposx-=MY_STEP;     if (myscreenx<=100) {      if (myindexx>=6 && myindexx<25) {//对称       mapx+=MY_STEP;       doorx+=MY_STEP;       for (int i = 0; i < 3; i++) {        enemyx[i]+=10;        if (moneyposition[i][2]==1) {         moneyposition[i][0]+=10;        }       }      }else {       myscreenx-=MY_STEP;      }     }else {      myscreenx-=MY_STEP;     }    }    //防止地图越界    if (mapx>=0) {     mapx=0;    }else if (mapx<=-(gamemapwidth-screenwidth)) {     mapx=-(gamemapwidth-screenwidth);    }    if (mapy>=0) {     mapy=0;    }else if (mapy<=-(gamemapheight-screenheight)) {     mapy=-(gamemapheight-screenheight);    }    //在二维数组中的索引    myindexx=myposx/MAP_LENGH;    myindexy=myposy/MAP_LENGH;    if (gamemap[myindexy][myindexx]==1) {     myposx=backmyposx;     myposy=backmyposy;     myscreenx=backmyscreenx;     myscreeny=backmyscreeny;    }else {     backmyposx=myposx;     backmyposy=myposy;     backmyscreenx=myscreenx;     backmyscreeny=myscreeny;    }    myimagex=myscreenx-75;    myimagey=myscreeny-95;   }  }    private void updateEnemyLocation() {   //enemy1和2   for (int i = 0; i < 2; i++) {    if (enemydelay[i]<=6) {     enemydelay[i]++;    }else if (!enemies[i][enemystate[i]].isMisDead()) {     enemies[i][enemystate[i]].setMisEnd(false);     enemyposx[i]=enemyx[i]+105;     enemyposy[i]=enemyy[i]+110;     if (enemyposx[i]<myscreenx-60) {      enemystate[i]=1;//右移      if (Math.abs(enemyposx[i]-myscreenx)>60) {       enemyx[i]+=4;      }     }else if (enemyposx[i]>myscreenx+60) {      enemystate[i]=0;//左移      if (Math.abs(enemyposx[i]-myscreenx)>60) {       enemyx[i]-=4;      }     }     if ((Math.abs(enemyposx[i]-myscreenx)<140)) {      if (Math.abs(enemyposy[i]-myscreeny)>40) {//纵轴       if (enemyposy[i]<myscreeny-40) {        enemyy[i]+=4;       }else if (enemyposy[i]>myscreeny+40) {        enemyy[i]-=4;       }      }      if (Math.abs(enemyposy[1]-enemyposy[0])<40) {//enemy1和2不能重合       if (enemyposy[1]>=enemyposy[0]) {        enemyy[0]-=4;        enemyy[1]+=4;       }else {        enemyy[0]+=4;        enemyy[1]-=4;       }      }     }     if (Math.abs(enemyposx[i]-myscreenx)<60 && Math.abs(enemyposy[i]-myscreeny)<60) {      if (progressblood>=0 && enemies[i][enemystate[i]].getFlag() && !enemies[i][enemystate[i]].isMisEnd()) {       progressblood-=2;       if (isattack || isup || isdown || isleft || isright) {        isbeattacked=false;       }else {        isbeattacked=true;        if (enemystate[i]==0) {         rolestate=6;        }else {         rolestate=7;        }        if (mainrole[rolestate].getPlayid()==4) {         mainrole[rolestate].setPlayid(0);        }       }       if (progressblood<=0) {        progressblood=1;        isdead=true;       }      }else {       isbeattacked=false;      }     }    }    if(enemies[i][enemystate[i]].isMisDead() && bossbeattacksum1<4){     //重新定位     enemies[i][0].setMisDead(false);     enemies[i][1].setMisDead(false);     if (i==0) {      if (Math.abs(myscreenx-10)<=Math.abs(myscreenx+270-gamemapwidth)) {       enemyx[i]=gamemapwidth-270;       if (Math.abs(enemyposx[1]-enemyposx[0])<=80) {        enemyx[0]-=90;       }       enemyy[i]=50;       enemystate[i]=0;      }else {       enemyx[i]=5;       enemyy[i]=60;       enemystate[i]=1;      }     }else {      if (Math.abs(myscreenx-10)<=Math.abs(myscreenx+210-gamemapwidth)) {       enemyx[i]=gamemapwidth-210;       if (Math.abs(enemyposx[1]-enemyposx[0])<=80) {        enemyx[1]+=90;       }       enemyy[i]=150;       enemystate[i]=0;      }else {       enemyx[i]=5;       enemyy[i]=160;       enemystate[i]=1;      }     }     beattackcount[i]=0;    }   }//end for      //enemy 3   if (enemydelay[2]<=6) {    enemydelay[2]++;   }else if (!enemies[2][enemystate[2]].isMisDead()) {    enemies[2][enemystate[2]].setMisEnd(false);    enemyposx[2]=enemyx[2]+100;    enemyposy[2]=enemyy[2]+90;    if (enemyposx[2]<myscreenx-30) {     enemystate[2]=1;//右移     if (Math.abs(enemyposx[2]-myscreenx)>70) {      enemyx[2]+=6;     }    }else if (enemyposx[2]>myscreenx+30) {     enemystate[2]=0;//左移     if (Math.abs(enemyposx[2]-myscreenx)>70) {      enemyx[2]-=6;     }    }    if (Math.abs(enemyposy[2]-myscreeny)>30) {//纵轴     if (enemyposy[2]<myscreeny-20) {      enemyy[2]+=6;     }else if (enemyposy[2]>myscreeny+30) {      enemyy[2]-=6;     }    }    if (Math.abs(enemyposx[2]-myscreenx)<80 && Math.abs(enemyposy[2]-myscreeny)<80) {     if (progressblood>=0 && enemies[2][enemystate[2]].getFlag() && !enemies[2][enemystate[2]].isMisEnd()) {      progressblood-=3;      if (isattack || isup || isdown || isleft || isright) {       isbeattacked=false;      }else {       isbeattacked=true;       if (enemystate[2]==0) {        rolestate=6;       }else {        rolestate=7;       }       if (mainrole[rolestate].getPlayid()==4) {        mainrole[rolestate].setPlayid(0);       }      }      if (progressblood<=0) {       progressblood=1;       isdead=true;      }     }else {      isbeattacked=false;     }    }   }   if(enemies[2][enemystate[2]].isMisDead() && bossbeattacksum1<4 && progressmagic!=0){    //重新定位    enemies[2][0].setMisDead(false);    enemies[2][1].setMisDead(false);    bossbeattacksum1++;//计算boss被攻击总数    if (Math.abs(myscreenx-enemyx[2])<=Math.abs(myscreenx-gamemapwidth+190)) {     enemyx[2]=gamemapwidth-190;     enemyy[2]=100;     enemystate[2]=0;    }else {     enemyx[2]=65;     enemyy[2]=110;     enemystate[2]=1;    }    beattackcount[2]=0;   }  }    private void roleAttackEnemy() {   for (int i = 0; i < 3; i++) {    if (!enemies[i][enemystate[i]].isMisDead()) {     if (Math.abs(enemyposx[i]-myscreenx)<70 && Math.abs(enemyposy[i]-myscreeny)<70) {      if (progressblood>=0 && mainrole[rolestate].getFlag()) {       enemies[i][enemystate[i]].setPlayid(0);       enemies[i][enemystate[i]].setMisEnd(true);       if (rolestate==4 && myscreenx<=enemyposx[i]+70) {        enemyx[i]+=2;        enemydelay[i]=0;        beattackcount[i]++;       }else if(rolestate==5 && myscreenx>=enemyposx[i]-70){        enemyx[i]-=2;        enemydelay[i]=0;        beattackcount[i]++;       }      }     }    }    if (beattackcount[i]>=10) {     enemies[i][0].setMisDead(true);     enemies[i][1].setMisDead(true);    }   }  }    private void showDeadInfo() {   StringBuffer deadinfo=new StringBuffer("诶, 挑战失败,继续加油吧。 ");   String str2=deadinfo.toString();   String str=deadinfo.substring(0,endpoint);   if (endpoint<str2.length()) {    endpoint++;   }   int x=(screenwidth-300)>>1;   int y=30;   drawStrtip(str, 24, x, y);  }    private void drawSmallMap() {   canvas.drawBitmap(smallmap, smallmapx, smallmapy, paint);   int x=smallmapx+myindexx*2;   int y=smallmapy+(myindexy-5)*2;   paint.setColor(Color.BLACK);   canvas.drawRect(x, y, x+4, y+4, paint);   paint.setColor(Color.YELLOW);   x=smallmapx+(gamemapwidth-35)*2/15;   y=smallmapy+(gamemapheight-160)/15;   canvas.drawRect(x, y, x+6, y+10, paint);//12=2*3;10=2*5;  }    @SuppressWarnings("static-access")  private void drawProgress() {   int color=paint.getColor();   paint.setColor(Color.BLACK);   paint.setStyle(Style.FILL.STROKE);   int w=55;   int h=20;   canvas.drawRect(w, h, w+150, h+12, paint);   canvas.drawRect(w, h+20, w+150, h+32, paint);   int w1=150*progressblood/100;   int w2=150*progressmagic/100;   paint.setColor(Color.RED);   paint.setStyle(Style.FILL);   canvas.drawRect(w+1, h+1, w+w1, h+11, paint);   paint.setColor(Color.GRAY);   canvas.drawRect(w+1, h+21, w+w2, h+31, paint);   paint.setColor(color);  }    private void drawMedicineSum() {   if (medicinesum>0) {    backblood.drawMyButton(canvas, paint);    String str=String.valueOf(medicinesum);    int x=screenwidth-210-(int)paint.measureText(str);    int y=screenheight-40;    drawStrtip(str, 18, x, y);   }  }    private void drawMoney() {   for (int i = 0; i < 3; i++) {    if (moneyposition[i][2]==1) {     canvas.drawBitmap(money1, moneyposition[i][0]-20, moneyposition[i][1], paint);     canvas.drawBitmap(money2, moneyposition[i][0], moneyposition[i][1], paint);    }    if (moneyposition[i][2]==1 && Math.abs(moneyposition[i][0]-myscreenx)<40 && Math.abs(moneyposition[i][1]-myscreeny)<80) {     if (i==2) {      goldmoney+=4;      drawStrtip("金币 +4", 14, myscreenx, myscreeny-90);     }else {      goldmoney+=2;      drawStrtip("金币 +2", 14, myscreenx, myscreeny-90);     }     System.out.println(goldmoney);     moneyposition[i][2]=0;    }   }  }    private void drawBigSkill(int type, int w, int h){   switch (type) {   case 1:    canvas.drawBitmap(bigattackbm1, w, h, paint);    break;   case 2:    canvas.drawBitmap(bigattackbm2, w, h, paint);    break;   case 3:    canvas.drawBitmap(bigattackbm3, w, h, paint);    break;   case 4:    canvas.drawBitmap(bigattackbm4, w, h, paint);    break;   default:    canvas.drawBitmap(bignone, w, h, paint);    break;   }  }    private void drawEnemies() {   if (enemyy[2] >= enemyy[1] && enemyy[2] >= enemyy[0]) {//最后一只boss处于外面    for (int i = 0; i < 3; i++) {     if (!enemies[i][enemystate[i]].isMisDead()) {      enemies[i][enemystate[i]].drawAnimation(canvas, paint, enemyx[i], enemyy[i]);     }    }   }else if (enemyy[2] <= enemyy[1] && enemyy[2] <= enemyy[0]) {//最后一只boss处于里面    for (int i = 2; i >=0 ; i--) {     if (!enemies[i][enemystate[i]].isMisDead()) {      enemies[i][enemystate[i]].drawAnimation(canvas, paint, enemyx[i], enemyy[i]);     }    }   }else {//最后一只boss处于中间    if (enemyy[0]<enemyy[1]) {     if (!enemies[0][enemystate[0]].isMisDead()) {      enemies[0][enemystate[0]].drawAnimation(canvas, paint, enemyx[0], enemyy[0]);     }     if (!enemies[2][enemystate[2]].isMisDead()) {      enemies[2][enemystate[2]].drawAnimation(canvas, paint, enemyx[2], enemyy[2]);     }     if (!enemies[1][enemystate[1]].isMisDead()) {      enemies[1][enemystate[1]].drawAnimation(canvas, paint, enemyx[1], enemyy[1]);     }    }else {     if (!enemies[1][enemystate[1]].isMisDead()) {      enemies[1][enemystate[1]].drawAnimation(canvas, paint, enemyx[1], enemyy[1]);     }     if (!enemies[0][enemystate[0]].isMisDead()) {      enemies[0][enemystate[0]].drawAnimation(canvas, paint, enemyx[0], enemyy[0]);     }     if (!enemies[2][enemystate[2]].isMisDead()) {      enemies[2][enemystate[2]].drawAnimation(canvas, paint, enemyx[2], enemyy[2]);     }    }   }   for (int i = 0; i < 3; i++) {    if (enemies[i][enemystate[i]].isMisDead()) {     if (bossbeattacksum1<4) {      moneyposition[i][0]=enemyposx[i];      moneyposition[i][1]=enemyposy[i];      moneyposition[i][2]=1;     }else if (bossbeattacksum1>=4 && !isgothere[i]) {      moneyposition[i][0]=enemyposx[i];      moneyposition[i][1]=enemyposy[i];      moneyposition[i][2]=1;      isgothere[i]=true;     }    }   }  }    private void judgeToDoor() {   if (bossbeattacksum1>=4) {    if (!isgothere[3]) {     int n=0;     for (int i = 0; i < 3; i++) {      if (enemies[i][enemystate[i]].isMisDead()) {       n++;       if (n>=3) {        canvas.drawBitmap(doorpic, doorx, doory, paint);        if (myscreenx>doorx-5 && myscreenx<(doorx+44) && myscreeny>doory-10 && myscreeny<(doory+90)) {         System.out.println("success to door ok");         isgothere[3]=true;         isrun=false;         closeTimer();         MyFulluse.golden += goldmoney;         MyFulluse.progressblood=progressblood;         MyFulluse.progressmagic=progressmagic;         if (MyFulluse.stage==1) {          MyFulluse.stage += 1;         }         MyFulluse.tempstage=2;//下一关为2         MyFulluse.tempmoney=goldmoney;         MyFulluse.tempminutes=minutes;         MyFulluse.tempseconds=seconds;         saveSharedPre();         Intent intent=new Intent(context, SuccessActivity.class);         context.startActivity(intent);         Stage1Activity activity=(Stage1Activity) context;         activity.finish();        }       }      }     }    }   }  }    private void drawEnemywithRole(int type){   if (myscreeny>enemyposy[0]+20 && myscreeny>enemyposy[1]+20 && myscreeny>enemyposy[2]+20) {    drawEnemies();    if (type==0) {     mainrole[rolestate].drawFrame(canvas, paint, myimagex, myimagey, 0);    }else {     mainrole[rolestate].drawAnimation(canvas, paint, myimagex, myimagey);    }   }else {    if (type==0) {     mainrole[rolestate].drawFrame(canvas, paint, myimagex, myimagey, 0);    }else {     mainrole[rolestate].drawAnimation(canvas, paint, myimagex, myimagey);    }    drawEnemies();   }  }    private void touchBigSkill(){   if (isuseskill && !isdead) {    switch (skilltype) {    case 1:     System.out.println("大招1");     if (!isstartskill) {      skillmovex=myscreenx-75;      skillmovey=myscreeny-90;     }     isstartskill=true;     progressmagic=0;     stoptime=0;     delaytime=5;     big1anim[skilldirection].drawFrame(canvas, paint, skillmovex, skillmovey, skillcount);     for (int i = 0; i < 3; i++) {      if (big1anim[skilldirection].isAttackok(skillcount, enemyposx[i], enemyposy[i])) {       beattackcount[i]+=2;       if (skilldirection==0) {        enemyx[i]+=3;       }else {        enemyx[i]-=3;       }      }     }     skillcount++;     if (skillcount>=3) {      if (skilldirection==0) {       skillmovex+=15;      }else {       skillmovex-=15;      }     }     if (skillcount>=10) {      skillcount=0;      isstartskill=false;      isuseskill=false;     }     break;    case 2:     System.out.println("大招2");     if (!isstartskill) {      skillmovex=myscreenx-25;      skillmovey=myscreeny-25;     }     isstartskill=true;     progressmagic=0;     stoptime=0;     delaytime=7;     big2anim[0].drawAnimation(canvas, paint, skillmovex+skillcount, skillmovey);     big2anim[1].drawAnimation(canvas, paint, skillmovex, skillmovey+skillcount);     big2anim[2].drawAnimation(canvas, paint, skillmovex-skillcount, skillmovey);     big2anim[3].drawAnimation(canvas, paint, skillmovex, skillmovey-skillcount);     big2anim[4].drawAnimation(canvas, paint, skillmovex+(int)(skillcount*0.707), skillmovey+(int)(skillcount*0.707));     big2anim[5].drawAnimation(canvas, paint, skillmovex+(int)(skillcount*0.707), skillmovey-(int)(skillcount*0.707));     big2anim[6].drawAnimation(canvas, paint, skillmovex-(int)(skillcount*0.707), skillmovey+(int)(skillcount*0.707));     big2anim[7].drawAnimation(canvas, paint, skillmovex-(int)(skillcount*0.707), skillmovey-(int)(skillcount*0.707));     skillcount+=10;     for (int i = 0; i < 8; i++) {      if (big2anim[i].isAttackok(0, enemyposx[0], enemyposy[0])) {       beattackcount[0]+=4;      }else if (big2anim[i].isAttackok(0, enemyposx[1], enemyposy[1])) {       beattackcount[1]+=4;      }else if (big2anim[i].isAttackok(0, enemyposx[2], enemyposy[2])) {       beattackcount[2]+=4;      }     }     if (skillcount>=200) {      skillcount=0;      isstartskill=false;      isuseskill=false;     }     break;    case 3:     System.out.println("大招3");     if (!isstartskill) {      skillmovex=myscreenx-60;      skillmovey=myscreeny-150;     }     isstartskill=true;     progressmagic=0;     stoptime=0;     delaytime=9;     big3anim[0].drawAnimation(canvas, paint, skillmovex+skillcount, skillmovey);     big3anim[1].drawAnimation(canvas, paint, skillmovex, skillmovey+skillcount);     big3anim[2].drawAnimation(canvas, paint, skillmovex-skillcount, skillmovey);     big3anim[3].drawAnimation(canvas, paint, skillmovex, skillmovey-skillcount);     big3anim[4].drawAnimation(canvas, paint, skillmovex+(int)(skillcount*0.707), skillmovey+(int)(skillcount*0.707));     big3anim[5].drawAnimation(canvas, paint, skillmovex+(int)(skillcount*0.707), skillmovey-(int)(skillcount*0.707));     big3anim[6].drawAnimation(canvas, paint, skillmovex-(int)(skillcount*0.707), skillmovey+(int)(skillcount*0.707));     big3anim[7].drawAnimation(canvas, paint, skillmovex-(int)(skillcount*0.707), skillmovey-(int)(skillcount*0.707));     skillcount+=12;     for (int i = 0; i < 8; i++) {      if (big3anim[i].isAttackok(0, enemyposx[0], enemyposy[0])) {       beattackcount[0]+=5;      }else if (big3anim[i].isAttackok(0, enemyposx[1], enemyposy[1])) {       beattackcount[1]+=5;      }else if (big3anim[i].isAttackok(0, enemyposx[2], enemyposy[2])) {       beattackcount[2]+=5;      }     }     if (skillcount>=200) {      skillcount=0;      isstartskill=false;      isuseskill=false;     }     break;    case 4:     System.out.println("大招4");     skillmovex=myscreenx-96;     skillmovey=myscreeny-96;     progressmagic=0;     progressblood=100;     stoptime=0;     delaytime=12;     big4anim.drawFrame(canvas, paint, skillmovex, skillmovey, skillcount);     skillcount++;     if (skillcount>=20) {      skillcount=0;      isuseskill=false;     }     break;    default:     break;    }    for (int i = 0; i < 3; i++) {//判断是否击毙     if (beattackcount[i]>=10) {      enemies[i][0].setMisDead(true);      enemies[i][1].setMisDead(true);     }    }   }  }    private void drawStrtip(String tipstr, int size, int x, int y){   int color=paint.getColor();   paint.setColor(Color.WHITE);   paint.setTextSize(size);   canvas.drawText(tipstr, x+1, y, paint);   canvas.drawText(tipstr, x, y+1, paint);   canvas.drawText(tipstr, x-1, y, paint);   canvas.drawText(tipstr, x, y-1, paint);   paint.setColor(Color.BLACK);   canvas.drawText(tipstr, x, y, paint);   paint.setColor(color);  }    private void drawChooseBack() {   if (isexit && !isdead ) {//要退出显示的界面    mainrole[rolestate].drawFrame(canvas, paint, myimagex, myimagey, 0);    for (int i = 0; i < 3; i++) {     if (!enemies[i][enemystate[i]].isMisDead()) {//绘制敌人      enemies[i][enemystate[i]].setMisEnd(true);      enemies[i][enemystate[i]].setPlayid(0);      enemies[i][enemystate[i]].drawAnimation(canvas, paint, enemyx[i], enemyy[i]);     }    }    canvas.drawBitmap(info_show, infox, infoy, paint);    okbutton.drawMyButton(canvas, paint);    cancelbutton.drawMyButton(canvas, paint);    drawStrtip("提示:", 14, infox+50, infoy+70);    drawStrtip("任务未完成,", 14, infox+70, infoy+90);    drawStrtip("将获得金币"+goldmoney+"*50%,", 14, infox+70, infoy+110);    drawStrtip("是否退出?", 14, infox+70, infoy+130);   }   if (isdead) {    canvas.drawBitmap(info_show, infox, infoy, paint);    okbutton.drawMyButton(canvas, paint);    cancelbutton.drawMyButton(canvas, paint);    drawStrtip("提示:", 14, infox+50, infoy+70);    drawStrtip("使用生命符可原地复活", 14, infox+70, infoy+90);    drawStrtip("直接离开则这次金币将丢失", 14, infox+70, infoy+110);    drawStrtip("是否使用生命符?", 14, infox+70, infoy+130);   }  }    private void saveSharedPre() {   Stage1Activity myactivity=(Stage1Activity) context;   SharedPreferences sharedPreferences=myactivity.getSharedPreferences("fulluse", Activity.MODE_WORLD_WRITEABLE);   Editor editor=sharedPreferences.edit();   MyFulluse.medicinesum=medicinesum;   editor.putInt("golden", MyFulluse.golden);   editor.putInt("lifesum", MyFulluse.lifesum);   editor.putInt("stage", MyFulluse.stage);   editor.putInt("medicinesum", MyFulluse.medicinesum);   editor.putInt("progressblood", MyFulluse.progressblood);   editor.putInt("progressmagic", MyFulluse.progressmagic);   editor.commit();  }    public void setChoose(){   isexit=true;  }

 @Override  public boolean onTouchEvent(MotionEvent event) {   isclick=false;   isattack=false;   isbeattacked=false;   int action=event.getAction();   touchsum=event.getPointerCount();   for (int i = 0; i < touchsum; i++) {    clickx=(int) event.getX(i);    clicky=(int) event.getY(i);    if (controldirection.isClick(clickx, clicky) && !isexit) {     isclick=true;     if (controldirection.isUp(clickx, clicky)) {      isup=true;      isdown=false;      isleft=false;      isright=false;      rolestate=2;     }else if (controldirection.isDown(clickx, clicky)) {      isdown=true;      isup=false;      isleft=false;      isright=false;      rolestate=3;     }else if (controldirection.isLeft(clickx, clicky)) {      isleft=true;      isup=false;      isdown=false;      isright=false;      rolestate=1;     }else if (controldirection.isRight(clickx, clicky)) {      isright=true;      isup=false;      isdown=false;      isleft=false;      rolestate=0;     }else {      isup=false;      isdown=false;      isleft=false;      isright=false;      isclick=false;     }    }    if (controlattack.isClick(clickx, clicky)) {     isattack=true;     if (rolestate==0) {      rolestate=4;     }else if (rolestate==1) {      rolestate=5;     }else if (rolestate==2||rolestate==3) {      if (enemystate[0]==0) {       rolestate=4;      }else {       rolestate=5;      }     }else if (rolestate==6) {      rolestate=4;     }else if (rolestate==7) {      rolestate=5;     }    }   }   switch (action) {   case MotionEvent.ACTION_DOWN:    if (backblood.isClick(clickx, clicky)&& !isexit) {     if (progressblood!=100 && medicinesum>0 && !isdead) {      progressblood+=30;      medicinesum--;      if (progressblood>=100) {       progressblood=100;      }     }    }    if (progressmagic>=100 && !isexit && !isdead) {     if (MyFulluse.isbigattack1 && bigattack1.isClick(clickx, clicky)) {      skilltype=MyFulluse.setbig1;      if (rolestate==0 || rolestate==2 || rolestate==4 || rolestate==6) {       skilldirection=0;      }else {       skilldirection=1;      }      isuseskill=true;     }else if (MyFulluse.isbigattack2 && bigattack2.isClick(clickx, clicky)) {      skilltype=MyFulluse.setbig2;      if (rolestate==0 || rolestate==2 || rolestate==4 || rolestate==6) {       skilldirection=0;      }else {       skilldirection=1;      }      isuseskill=true;     }else if (MyFulluse.isbigattack3 && bigattack3.isClick(clickx, clicky)) {      skilltype=MyFulluse.setbig3;      if (rolestate==0 || rolestate==2 || rolestate==4 || rolestate==6) {       skilldirection=0;      }else {       skilldirection=1;      }      isuseskill=true;     }    }    if (isexit && !isdead) {     if (okbutton.isClick(clickx, clicky)) {      closeTimer();      MyFulluse.golden += goldmoney*0.5;      MyFulluse.progressblood=progressblood;      MyFulluse.progressmagic=progressmagic;      saveSharedPre();      Stage1Activity activity=(Stage1Activity) context;      activity.finish();     }else if (cancelbutton.isClick(clickx, clicky)) {      isexit=false;     }    }    if (isdead) {     if (okbutton.isClick(clickx, clicky)) {      if (MyFulluse.lifesum>0) {       MyFulluse.lifesum--;       Toast.makeText(context, "剩余生命符"+MyFulluse.lifesum, Toast.LENGTH_SHORT).show();       progressblood=100;       isdead=false;       isexit=false;      }else {       Toast.makeText(context, "对不起,已经没有生命符", Toast.LENGTH_SHORT).show();      }     }else if (cancelbutton.isClick(clickx, clicky)) {      closeTimer();      Stage1Activity activity=(Stage1Activity) context;      activity.finish();     }    }    break;   case MotionEvent.ACTION_UP:    isup=false;    isdown=false;    isleft=false;    isright=false;    isclick=false;    isattack=false;    break;   default:    break;   }   return true;  }

 @Override  public void run() {   while (isrun) {    synchronized (holder) {     canvas = holder.lockCanvas();     updateDraw();     holder.unlockCanvasAndPost(canvas);    }    try {     Thread.sleep(200);    } catch (InterruptedException e) {    }   }  }

 @Override  public void surfaceChanged(SurfaceHolder holder, int format, int width,    int height) {  }

 @Override  public void surfaceCreated(SurfaceHolder holder) {   isrun = true;   new Thread(this).start();  }

 @Override  public void surfaceDestroyed(SurfaceHolder holder) {   isrun = false;  }

}

 

 

posted @ 2012-05-31 20:21  我是小菜呀  阅读(282)  评论(1)    收藏  举报