마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 오목만드는데 바둑알이 안그려져요...

0 추천

어떤 안드로이드오목오픈소스를 보고 참고해서 새로 만들고있는데 바둑판까지는 그려지는데 아무리해도 터치이벤트했을때 바둑알이 안그려지네요.. 

터치이벤트가 실행될때마다 카운트가 1씩 증가하면서 홀수일때 흑돌 짝수일때 백돌을 그리는 방식인데 onDraw()메소드에 넣어도 안되고 터치이벤트에 넣어도 안됩니다... 

 

public class OmokView extends View {
     private int LINE_WIDTH = getWidth() / 10; // 오목판 줄 간격
     private int STONE_SIZE = (int) (LINE_WIDTH * 0.8); // 돌의 크기
     private int X0; // 바둑판을 그리기 시작할 x좌표의 위치
     private int Y0; // 바둑판을 그리기 시작할 y좌표의 위치
     int STONE_COUNT = 0;
     String STONE_COLOR = null;
     int STONE_X = 0;
     int STONE_Y = 0;
 
     public OmokView(Context context) {
          super(context);
     }
 
     public void onDraw(Canvas canvas) { // 바둑판과 돌들을 그리기 위한 메소드
          X0 = getWidth() / 10;
          Y0 = getWidth() / 10;
          Paint background = new Paint();
          background.setColor(getResources().getColor(R.color.puzzle_background)); // 바둑판
 
          canvas.drawRect(0, 0, getWidth(), getHeight(), background);
 
          // 바둑판 줄 긋기
          for (int i = 1; i <= NewGame.LINE_NUM; i++) {
               canvas.drawLine(X0, i * Y0, X0 * NewGame.LINE_NUM, i * Y0,
               new Paint());
               canvas.drawLine(i * X0, Y0, i * X0, Y0 * NewGame.LINE_NUM, new Paint());
          }
 
          Paint stone_paint = new Paint();
          if (STONE_COUNT != 0 && STONE_COUNT % 2 == 1) {
               stone_paint.setColor(Color.BLACK);
               canvas.drawCircle(STONE_X, STONE_Y, STONE_SIZE / 2, stone_paint);
          } else {
               stone_paint.setColor(Color.WHITE);
               canvas.drawCircle(STONE_X, STONE_Y, STONE_SIZE / 2, stone_paint);
          }
     }
 
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
 
// 1. x 또는 y의 값이 오목판의 밖을 벗어난 곳이면 메서드를 종료한다.
//if (x < X0 || x > X0 * NewGame.LINE_NUM)
//return false;
//if (y < Y0 || y > Y0 * NewGame.LINE_NUM)
//return false;
 
// 2. x와 y의 값을 클릭한 곳에서 가장 가까운 교차점으로 변경한다.(반올림)
if ((x % X0) >= LINE_WIDTH / 2) {
     x = x - (x % X0) + X0;
     STONE_X = x + X0;
} else {
     STONE_X = x - (x % X0);
}
if ((y % Y0) >= LINE_WIDTH / 2) {
     y = y - (y % Y0) + Y0;
     STONE_Y = y + Y0;
} else
     STONE_Y = y - (y % Y0);
 
 
// int ArrX = (x - X0) / LINE_WIDTH; // 돌배열에 저장할 row
// int ArrY = (y - Y0) / LINE_WIDTH; // 돌배열에 저장할 column
 
STONE_COUNT++;
invalidate();
 
 
return super.onTouchEvent(event);
}
 
}
 
익명사용자 님이 2014년 6월 8일 질문
2014년 6월 8일 수정

1개의 답변

0 추천
x 또는 y의 값이 오목판의 밖을 벗어난 곳이면 종료한다고 되어있는데 해당 부분의 조건을 만족하여서 그렇게 되는 것이 아닌가요? 그리고... 앞서 말한 조건을 만족하지 않는다고 하여도 돌이 하나만 그려질꺼같은데 말이에요...
인연 (31,880 포인트) 님이 2014년 6월 9일 답변
...