\// Hero.java
 
package dave.game;
 
import android.view.KeyEvent;
 
public class Hero {
    private int x;
    private int y;
    private int width;
    private int height;
    private GameView view;
    private final int velocity = 6; // 속도
    private int dir = KeyEvent.KEYCODE_ENTER;
 
    public Hero(GameView view) {
        this.view = view;
        width = 25;
        height = 25;
        x = (view.getWidth() - width) / 2;
        y = (view.getHeight() - height) / 2;
    }
 
    public int getX() {
        return x;
    }
 
    public int getY() {
        return y;
    }
 
    public int getWidth() {
        return width;
    }
 
    public int getHeight() {
        return height;
    }
     
    public void setDir(int dir) {
        this.dir = dir;
        }
     
    public void move(){
        if (dir == KeyEvent.KEYCODE_DPAD_UP) {
            this.y -= velocity;
            if (y < 0)
                y = 0;
        }
 
        if (dir == KeyEvent.KEYCODE_DPAD_DOWN) {
            this.y += velocity;
            if (y > view.getHeight() - this.height) {
                y = view.getHeight() - this.height;
            }
        }
 
        if (dir == KeyEvent.KEYCODE_DPAD_LEFT) {
            this.x -= velocity;
            if (x < 0)
                x = 0;
        }
 
        if (dir == KeyEvent.KEYCODE_DPAD_RIGHT) {
            this.x += velocity;
            if (x > view.getWidth() - this.width)
                x = view.getWidth() - this.width;
        }
    }
}


// GameView.java
 
package dave.game;
 
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.SurfaceView;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.os.Handler;
import android.os.Message;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
 
public class GameView extends SurfaceView implements Callback {
    private LoopHandler mLoopHandler = new LoopHandler();// 루프 핸들러
    private SurfaceHolder mHolder = null;// 서피스 홀더
    private Resources res = null;// 이미지 등의 리소스 핸들
    private Hero hero;
    private Bitmap heroImage;
    private int i, bulletCnt = 15; // 한 화면에 나올 총알 갯수
    private Bullet bullet[] = new Bullet[bulletCnt]; // 총알들은 배열로 관리한다.]
    private int life = 5;
    private String lifeStr = "";
    private long startTime;
    private long playTime;
    private String timeStr = "";
 
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        return super.onTouchEvent(event);
    }
 
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        hero.setDir(keyCode);
        if (this.life == 0) {
            life = 5;
            for (i = 0; i < bulletCnt; i++)
                bullet[i].init();
            startTime = System.currentTimeMillis();
            mLoopHandler.start();
        }
        return super.onKeyDown(keyCode, event);
    }
 
    class LoopHandler extends Handler {
        private boolean bStop;
 
        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            if (bStop == false)
                GameView.this.loop();
            super.handleMessage(msg);
        }
 
        private void sleep(long delayMillis) {
            this.removeMessages(0);
            sendMessageDelayed(obtainMessage(0), delayMillis);
        }
 
        private void stop() {
            bStop = true;
        }
 
        private void start() {
            bStop = false;
            GameView.this.loop();
        }
    };
 
    public void loop() {
        // 이 곳에 루프가 돌때 실행할 내용을 적는다.
        doWork();// 계산을 한다.
        doDraw();// 그림을 그린다.
        mLoopHandler.sleep(100);
    }
 
    private void doWork() {
        hero.move();
        for (i = 0; i < bulletCnt; i++) {
            bullet[i].move();
            if (bullet[i].getX() > hero.getX()
                    && bullet[i].getY() > hero.getY()
                    && bullet[i].getX() + bullet[i].getWidth() < hero.getX()
                            + hero.getWidth()
                    && bullet[i].getY() + bullet[i].getHeight() < hero.getY()
                            + hero.getHeight()) {
                life--;
                bullet[i].init();// 충돌한 총알은 새로 생성
                if (life == 0) {
                    mLoopHandler.stop();
                    break;
                }
            }
        }
    }
 
    @Override
    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
        // TODO Auto-generated method stub
    }
 
    @Override
    public void surfaceCreated(SurfaceHolder arg0) {
        // TODO Auto-generated method stub
        hero = new Hero(this);
        heroImage = BitmapFactory.decodeResource(res, R.drawable.hero);
        for (i = 0; i < bulletCnt; i++)
            bullet[i] = new Bullet(hero, this);
        startTime = System.currentTimeMillis();
        mLoopHandler.start();
    }
 
    @Override
    public void surfaceDestroyed(SurfaceHolder arg0) {
        // TODO Auto-generated method stub
        mLoopHandler.stop();
    }
 
    public GameView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
        setFocusable(true);// 이 뷰가 포커스를 가지게 한다.
        mHolder = getHolder();
        mHolder.addCallback(this);
        res = context.getResources();
    }
 
    private void doDraw() {
        Canvas canvas = mHolder.lockCanvas(null);// 백버퍼에 그린다.
        Paint bPaint = new Paint(Paint.ANTI_ALIAS_FLAG);// 검은색
        bPaint.setColor(0xff000000);
        Paint wPaint = new Paint(Paint.ANTI_ALIAS_FLAG);// 흰색
        wPaint.setColor(0xffffffff);
        canvas.drawRect(0, 0, 320, 430, wPaint);// 화면을 희게 지운다.
        // 여기에 이미지나 텍스트를 그린다.
        canvas.drawBitmap(this.heroImage, hero.getX(), hero.getY(), null);
        for (i = 0; i < bulletCnt; i++)
            canvas.drawRect(bullet[i].getX(), bullet[i].getY(),
                    bullet[i].getX() + bullet[i].getWidth(), bullet[i].getY()
                            + bullet[i].getHeight(), bPaint);
        lifeStr = "남은 생명 : " + this.life;
        canvas.drawText(lifeStr, 120, 30 + bPaint.getTextSize(), bPaint);
        if (this.life == 0)
            canvas.drawText("게임 오버!", 120, 70 + bPaint.getTextSize(), bPaint);
        playTime = (System.currentTimeMillis() - startTime) / 100;
        timeStr = "playTime : " + playTime;
        canvas.drawText(timeStr, 200, 30 + bPaint.getTextSize(), bPaint);
        mHolder.unlockCanvasAndPost(canvas);// 프론트 버퍼로 출력
    }
}


이렇게 Hero.java 와 GameView.java 두 소스가 있습니다.

이 게임은 캐릭터가 있고 사방으로부터 날라오는 미사일을 피해 기록을 남기는 게임입니다.

그러나 이게임은 터치가아닌 버튼 클릭으로 방향조절하게 구현되있습니다. 이것을 터치로 방향을 바꾸는 것을 구현하려고합니다. 제가 실력이 부족해서 구현을 못하고있습니다.

원래 실행되는 게임의 x좌표만 기준으로 보자면 터치시 x좌표가 캐릭터기준으로 좌측인지 우측인지 보고 그방향으로 움직이게 구현을 하여야 겠지만 그런것은 제가 공부하면서 해보겠습니다.  

저는 그냥 터치한 X좌표값을 Hero.java 클래스의 getX() 의 리턴값으로 반환하는 소스까지만 구현해주시면 감사하겠습니다.