我是菜鸟,编了个小游戏,想加个触屏功能,怎么做?
只要能选中就可

解决方案 »

  1.   

    package com.android.test;import com.android.test.R;
    import android.content.Context;
    import android.content.res.Resources;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.Rect;
    import android.graphics.Bitmap.Config;
    import android.media.MediaPlayer;
    import android.view.KeyEvent;
    import android.view.View;public class GameView<Canvas1> extends View {
    Bitmap goon;
    boolean isSound = true;
     MediaPlayer gamesound;
     int time;
    private Bitmap[] bmp1 = new Bitmap[20];
    int color = 0;
    int []ltx = new int[20];
    int []lty = new int[20];
    Rect[] rectpeople = new Rect[20];
        int t;
        int flagStart=1;
        int flagWin;
        int level;
        boolean[] tag = {true,false,false,false,false,false,false,false,false,false}; private final Paint paint = new Paint();

    public GameView(Context context) {
    super(context);
    level0();
    Resources res = context.getResources();
    bmp1[0]=BitmapFactory.decodeResource(res, R.drawable.caocao);
    bmp1[1]=BitmapFactory.decodeResource(res, R.drawable.guanyu);
    bmp1[2]=BitmapFactory.decodeResource(res, R.drawable.zhaoyun);

    bmp1[3]=BitmapFactory.decodeResource(res, R.drawable.machao);
    bmp1[4]=BitmapFactory.decodeResource(res, R.drawable.zhangfei);
    bmp1[5]=BitmapFactory.decodeResource(res, R.drawable.huangzhong);

    bmp1[6]=BitmapFactory.decodeResource(res, R.drawable.soldier);
    bmp1[7]=BitmapFactory.decodeResource(res, R.drawable.soldier);
    bmp1[8]=BitmapFactory.decodeResource(res, R.drawable.soldier);
    bmp1[9]=BitmapFactory.decodeResource(res, R.drawable.soldier);

    setFocusable(true);
    }
    /*****************************************************
    desc:是否隐藏
    ******************************************************/
    boolean IsHitting(Rect rcSour, Rect rcDest)
    {
    boolean b_Result=true; 
    if(rcSour.left>=rcDest.right && rcSour.right>rcDest.left)  //rcSour在右侧
    b_Result=false; 
    if(rcSour.left<rcDest.right && rcSour.right<=rcDest.left)  //rcSour在左侧
    b_Result=false; 
    if(rcSour.top>=rcDest.bottom && rcSour.bottom>rcDest.top)  //rcSour在下侧
    b_Result=false; 
    if(rcSour.top<rcDest.bottom && rcSour.bottom<=rcDest.top)  //rcSour在上侧
    b_Result=false; 
    return b_Result; 
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub

    Bitmap newb = Bitmap.createBitmap(bmp1[0].getWidth(),bmp1[0].getHeight(),Config.ARGB_8888);
    Canvas canvas = new Canvas(newb);
    int i;
    for(int j=0;j<10;j++)
    {
    if(tag[j]==true)
    t=j;
    }
    if (flagStart == 1) {
    switch (keyCode) {
    case KeyEvent.KEYCODE_DPAD_UP:
    if(rectpeople[t].top>0)  //在游戏界面内
    {
    lty[t]-=90;
    rectpeople[t].top-=90;
    rectpeople[t].bottom-=90;
    for(i=0;i<10;i++) //逐个比较是否与其它矩形重叠
    {
    if(IsHitting(rectpeople[t],rectpeople[i])&& i!=t) //重叠后退回原位
    {
    lty[t]+=90;
    rectpeople[t].top+=90;
    rectpeople[t].bottom+=90;
    tag[t]=false;
    tag[i]=true;
     drawRectFrame(canvas);
    break;
    }
    }
    }
    break;
    case KeyEvent.KEYCODE_DPAD_DOWN:
    if(rectpeople[0].bottom==450 &&rectpeople[0].right==270 && tag[0])
    {
    time=0;
    if(time<20){
    time++;
    }
    level++;
    selectLever(level%5); }
    if(rectpeople[t].bottom<450)
    {
    lty[t]+=90;
    rectpeople[t].top+=90;
    rectpeople[t].bottom+=90;
    drawRectFrame(canvas);
    for(i=0;i<10;i++) //逐个比较是否与其它矩形重叠
    {
    if(IsHitting(rectpeople[t],rectpeople[i]) && i!=t) //重叠后退回原位
    {
    lty[t]-=90;
    rectpeople[t].top-=90;
    rectpeople[t].bottom-=90;
    tag[t]=false;
    tag[i]=true;
    drawRectFrame(canvas);
    break;
    }
    }
    }
    break;
    case KeyEvent.KEYCODE_DPAD_LEFT:
    if(rectpeople[t].left>75)
    {
    ltx[t]-=90;
    rectpeople[t].right-=90;
    rectpeople[t].left-=90;
    for(i=0;i<10;i++) //逐个比较是否与其它矩形重叠
    {
    if(IsHitting(rectpeople[t],rectpeople[i]) && i!=t) //重叠后退回原位,移动焦点
    {
    ltx[t]+=90;
    rectpeople[t].right+=90;
    rectpeople[t].left+=90;
    tag[t]=false;
    tag[i]=true;
    drawRectFrame(canvas);
    break;
    }
    }
    }
    break;
    case KeyEvent.KEYCODE_DPAD_RIGHT:

    if(rectpeople[t].right<360)
    {
    ltx[t]+=90;
    rectpeople[t].right+=90;
    rectpeople[t].left+=90;
    for(i=0;i<10;i++) //逐个比较是否与其它矩形重叠
    {
    if(IsHitting(rectpeople[t],rectpeople[i]) && i!=t) //重叠后退回原位,移动焦点
    {
    ltx[t]-=90;
    rectpeople[t].right-=90;
    rectpeople[t].left-=90;
    tag[t]=false;
    tag[i]=true;
    drawRectFrame(canvas);
    break;
    }
    }
    }
    break;
    case KeyEvent.KEYCODE_MENU:
    level++;
    selectLever(level%5);
    break;
    case KeyEvent.KEYCODE_DPAD_CENTER:
    if(rectpeople[0].bottom==450 &&rectpeople[0].right==270 && tag[0])
    {
    level++;
    selectLever(level%5);
                  break;
    }
    }
    postInvalidate();
    }
    return super.onKeyDown(keyCode, event);
    }

      

  2.   

    private void selectLever(int  flevel) {
    // TODO Auto-generated method stub
    switch(flevel)
    {
    case 1:
     level0();
     break;
    case 2:
    level1();
    break;
    case 3:
    level2();
    break;
    case 0:
    level3();
    break;
    case 4:
    level4();
    break;
    }
    }
    private void level4() {
    // TODO Auto-generated method stub
    rectpeople[0] = new Rect(0, 0, 180, 180);
    rectpeople[1] = new Rect(0, 180, 180, 270);
    rectpeople[2] = new Rect(180, 0, 270, 180); rectpeople[3] = new Rect(0, 270, 90, 450);
    rectpeople[4] = new Rect(270, 0, 360, 180);
    rectpeople[5] = new Rect(90, 270, 180, 450); rectpeople[6] = new Rect(180, 180, 270, 270);
    rectpeople[7] = new Rect(180, 270, 270, 360);
    rectpeople[8] = new Rect(270, 180, 360, 270);
    rectpeople[9] = new Rect(270, 270, 360, 360);

    ltx[0] = 0;// 曹操
    lty[0] = 0; ltx[1] = 0;// 关羽
    lty[1] = 180; ltx[2] = 180;
    lty[2]=0;

    ltx[3]=0;
    lty[3]=270;

    ltx[4]=270;
    lty[4]=0;

    ltx[5]=90;
    lty[5]=270;

    ltx[6]=180;
    lty[6]=180;

    ltx[7]=180;
    lty[7]=270;

    ltx[8]=270;
    lty[8]=180;

    ltx[9]=270;
    lty[9]=270;

    }
    private void level0() {
    // TODO Auto-generated method stub

    rectpeople[0] = new Rect(90, 180, 270, 360);
    rectpeople[1] = new Rect(90, 180, 270, 180);

    rectpeople[2] = new Rect(0, 0, 90, 180);
    rectpeople[3] = new Rect(0, 180, 90, 360);
    rectpeople[4] = new Rect(270, 0, 360, 180);
    rectpeople[5] = new Rect(270, 180, 360, 360); rectpeople[6] = new Rect(90, 0,180, 90);
    rectpeople[7] = new Rect(180, 0, 270, 90);
    rectpeople[8] = new Rect(0, 360, 90,450);
    rectpeople[9] = new Rect(270, 360, 360, 450);

    ltx[0] = 90;// 曹操
    lty[0] = 180; ltx[1] = 90;// 关羽
    lty[1] = 90; ltx[2] = 0;
    lty[2] = 0;

    ltx[3] = 0;
    lty[3] = 180;
     
    ltx[4] = 270;
    lty[4] = 0;

    ltx[5] = 270;
    lty[5] = 180;

    ltx[6] = 90;
    lty[6] = 0;

    ltx[7] = 180;
    lty[7] = 0;

    ltx[8] = 0;
    lty[8] = 360;

    ltx[9] = 270;
    lty[9] = 360;
    } private void level2() {
        rectpeople[0] = new Rect(90,0,270,180);
    rectpeople[1] = new Rect(90,180,270,270);
    rectpeople[2] = new Rect(90,270,180,450);

    rectpeople[3] = new Rect(180,270,270,450);
    rectpeople[4] = new Rect(0,180,90,360);
    rectpeople[5] = new Rect(270,180,360,360);

    rectpeople[6] = new Rect(0,0,90,90);
    rectpeople[7] = new Rect(0,90,90,180);
    rectpeople[8] = new Rect(270,0,360,90);
    rectpeople[9] = new Rect(270,90,360,180);

        ltx[0]=90;//曹操
    lty[0]=0;

    ltx[1]=90;//关羽
    lty[1]=180;

    ltx[2]=90;
    lty[2]=270;

    ltx[3]=180;
    lty[3]=270;

    ltx[4]=0;
    lty[4]=180;

    ltx[5]=270;
    lty[5]=180;

    ltx[6]=0;
    lty[6]=0;

    ltx[7]=0;
    lty[7]=90;

    ltx[8]=270;
    lty[8]=0;

    ltx[9]=270;
    lty[9]=90;
    } private void level1() {
    rectpeople[0] = new Rect(90,0,270,180);
    rectpeople[1] = new Rect(90,180,270,270);
    rectpeople[2] = new Rect(270,0,360,180);

    rectpeople[3] = new Rect(0,270,90,450);
    rectpeople[4] = new Rect(0,0,90,180);
    rectpeople[5] = new Rect(270,270,360,450);

    rectpeople[6] = new Rect(0,180,90,270);
    rectpeople[7] = new Rect(270,180,360,270);
    rectpeople[8] = new Rect(90,270,180,360);
    rectpeople[9] = new Rect(180,270,270,360);

    ltx[0]=90;//曹操
    lty[0]=0;                         ltx[1]=90;//关羽
    lty[1]=180;

    ltx[2]=270;
    lty[2]=0;

    ltx[3]=0;
    lty[3]=270;

    ltx[4]=0;
    lty[4]=0;

    ltx[5]=270;
    lty[5]=270;

    ltx[6]=0;
    lty[6]=180;

    ltx[7]=270;
    lty[7]=180;

    ltx[8]=90;
    lty[8]=270;

    ltx[9]=180;
    lty[9]=270;
    } private void level3() {
    rectpeople[0] = new Rect(90,0,270,180);
    rectpeople[1] = new Rect(90,180,270,270);
    rectpeople[2] = new Rect(0,0,90,180);

    rectpeople[3] = new Rect(270,0,360,180);
    rectpeople[4] = new Rect(0,180,90,360);
    rectpeople[5] = new Rect(270,180,360,360);

    rectpeople[6] = new Rect(90,270,180,360);
    rectpeople[7] = new Rect(180,270,270,360);
    rectpeople[8] = new Rect(0,360,90,450);
    rectpeople[9] = new Rect(270,360,360,450);

    ltx[0]=90;//曹操
    lty[0]=0;

    ltx[1]=90;//关羽
    lty[1]=180;

    ltx[2]=0;
    lty[2]=0;

    ltx[3]=270;
    lty[3]=0;

    ltx[4]=0;
    lty[4]=180;

    ltx[5]=270;
    lty[5]=180;

    ltx[6]=90;
    lty[6]=270;

    ltx[7]=180;
    lty[7]=270;

    ltx[8]=0;
    lty[8]=360;

    ltx[9]=270;
    lty[9]=360;
    }

    @Override
    protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);
    Init(canvas);
    drawRectFrame(canvas);
    }

    /*
     * 绘制焦点
     */

    private void drawRectFrame(Canvas canvas)
    {
    paint.setColor(Color.RED);
    //tag[0]=true;
    int i;
    for(i=0;i<10;i++)
    {
    if(tag[i]==true)
    {
    canvas.drawLine(rectpeople[i].left, rectpeople[i].top, rectpeople[i].left, rectpeople[i].bottom, paint);
    canvas.drawLine(rectpeople[i].left, rectpeople[i].top, rectpeople[i].right, rectpeople[i].top, paint);
    canvas.drawLine(rectpeople[i].right, rectpeople[i].top, rectpeople[i].right, rectpeople[i].bottom, paint);
    canvas.drawLine(rectpeople[i].left, rectpeople[i].bottom, rectpeople[i].right, rectpeople[i].bottom, paint);
    }
    }
    }

    private void Init(Canvas canvas)
    {
    Paint paint = new Paint();
    paint.setColor(Color.RED); for(int i=0;i<10;i++)
    {
    canvas.drawBitmap(bmp1[i], ltx[i],lty[i], paint);
    }
    canvas.drawLine(0, 450, 360, 450, paint);
    canvas.drawLine(0, 0, 0, 450, paint);
    canvas.drawLine(0, 0, 360, 0, paint);
    canvas.drawLine(360, 0, 360, 450, paint);
    }

    }