안드로이드 개발 질문/답변
(글 수 45,052)
package rakuseven.G1;
import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.util.AttributeSet; import android.util.Log; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.SurfaceHolder.Callback;
public class RandomRun extends SurfaceView implements Callback {
Context mCtx;
class ImgThread extends Thread{
private Bitmap mImgBack;
private int cnt = 0;
private SurfaceHolder mSurfaceHolder;
int xpos = 10;
int ypos = 150;
int BGmove = 0;
int CENTER = 4;
Horses horses;
public ImgThread(SurfaceHolder surfaceHolder, Context context){
mSurfaceHolder = surfaceHolder;
Resources res = context.getResources();
mImgBack = BitmapFactory.decodeResource(res, R.drawable.bglong);
horses = new Horses(context);
}
public void run()
{
for (int k =0; k <5 ; k++)
{
horses.Horse[k].start();
}
while(true){
boolean changed = false;
for (int k =0; k <5 ; k++)
{
if(horses.Horse[k].preStep != horses.Horse[k].LOCATION){
changed = true;
}
}
Canvas canvas = null;
if (changed) {
try {
canvas = mSurfaceHolder.lockCanvas(null);
synchronized (mSurfaceHolder) {
canvas.drawBitmap(mImgBack, BGmove, 0, null);
cnt++;
for (int k =0; k <5 ; k++)//k는 말순번애기하는거
{
if(horses.Horse[CENTER].LOCATION < 200)
{
xpos = horses.Horse[k].LOCATION;
}
else
if(horses.Horse[CENTER].LOCATION >= 200 && horses.Horse[CENTER].LOCATION <= 1100)
{
xpos = 200 - (horses.Horse[CENTER].LOCATION -horses.Horse[k].LOCATION);
BGmove = 200 - horses.Horse[CENTER].LOCATION;
}
else
if(horses.Horse[CENTER].LOCATION > 1100)
{
xpos = horses.Horse[k].LOCATION - 900;
}
int temp =horses.Horse[k].FRAME % 10;
horses.Horse[k].mHImage[k][temp].setBounds(xpos, ypos + (k * 40),xpos + 100, ypos + (k * 40) + 100);
horses.Horse[k].mHImage[k][temp].draw(canvas);
}
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setTextSize(18);
if(horses.NUMBER > 5){
paint.setColor(0xa0ffffff);
canvas.drawRect(100, 85,400,220,paint);
canvas.drawText("- 순위 -", 200, 100, paint);
for(int i = 1; i <= 5; i++){
for(int j = 0; j < 5; j++){
if(i == horses.Horse[j].RANK){
canvas.drawText(i+"등: "+horses.Horse[j].NAME, 170, 100+(i*22), paint);
canvas.drawText(100-(i*10)+"점", 300, 100+(i*22), paint);
}
}
}
break;
}
sleep(1);
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (canvas != null) {
mSurfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
changed = false;
}
}
}
private ImgThread thread;
public RandomRun(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
mCtx = context;
SurfaceHolder holder = getHolder();
holder.addCallback(this);
thread = new ImgThread(holder, context);
setFocusable(true);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
thread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
boolean retry = true;
while(retry){
try{
thread.join();
retry = false;
}catch(InterruptedException e){
}
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
//thread.setX((int)event.getX());
event.getAction();
return true;
}
}경마게임입니다.. 말이 랜덤하게 들어와서 순위가 정해지는 게임인데
http://rakuseven.blog.me/30090510991 사이트 소스를 시험해 보는 중인데
레이스가 끝나고 재시작버튼이 뜨는데 까지는 bitmap으로는 쉽게 띄우는데 ..
그 뒤에 다시 main(게임 시작하는 부분)으로 가서 레이스를 재시작하게 만들고 싶은데 ..
어떻게 해야 할지 조언좀 부탁드립니다 ㅠ




스레드에 들어가는 run 부분을 while 문으로 묶어서 계속 돌릴지 혹은 초기화 시켜 주실지 상태값을 while문에 넘겨 주시면 될것 같습니다..