안녕하세요 델파이 프로그래머 분들!

오늘은 바둑알을 놓는 세션을 해보겠습니다.

 

 

1. TTTBoard 이름의 Image 컴포넌트에서 MouseUp 이벤트 프로시져에서 전달되는 X, Y 좌표값 을 다음처럼 시험해 보죠.

 

 

procedure TMainForm.TTTBoardMouseUp(    ,,,,,        ; X, Y: Integer);

begin

      // X, Y 좌표 읽어보기

      Label1.Caption := ' X : ' + IntToStr(X) + ', Y : ' + IntToStr(Y);

end;

        X, Y 클릭값을 IntToStr() 으로 전환해서 Label에 보여 참조합니다. (LabelVisible속성 True로 설정 확인하세요)

 

 

2.  이제 바둑알을 놓아보겠습니다  클릭된 X, Y 지점에 img_white 컴포넌트를 사용해 흰돌을 놓습니다.

 

 

procedure TMainForm.TTTBoardMouseUp(    ,,,,,        ; X, Y: Integer);

begin

    , , ,

    // 마구 마구 바둑알 놓기

    TTTBoard.Canvas.Draw(X, Y, img_white.Picture.Graphic);

end;

 

 

3. 위의 단계를 실행 해 보시면 해결해야 될 다음의 문제점들이 보이시죠!

 

placeanywhere.png

 

1) 아무 곳에 바둑알이 놓여지는 문제

2) 테두리 밖에도 놓여지는 문제

3) 놓여진 장소에 또 놓여지는 문제

이런 문제점은 프로그래머의 끈기로 차근차근 해결해 나가야 합니다.

 

 

  

 

4. 위의 1) 의 문제를 가로 세로 교착점에만 놓기 위해서 다음 그림을 보고 생각해보죠

 

omok_XYcolumn_row.png

    

1) 그림에서 표시된건처럼 클릭위치(X, Y)를 좌표표시(Column, Row) 로 변환하면

교착점을 다음의 배열 형태로 표현할수 있습니다.

 

     (1, 1), (1, 2), , , , (1, 19)

     (2, 1), (2, 2), , , , (2, 19)

         , , , ,

     (19, 1), (19, 2), , , , (19, 19)

 

 

2) 그럼 X, Y를 좌표표시(Column, Row) 로 전환을 하기위해서 Round() 함수를 사용해 정수 값을 만들죠.

    Column := round(X / 18);

   Row := round(Y / 18);  

 

   Label2.Caption := ' Column : ' + IntToStr(Column) + ', Row : ' + IntToStr(Row);

 

 

   이 과정을 실행하여 Label 의 클릭X, Y 와 이를 변환한 Column,Row값을 확인하시면 편합니다.

 

 

5. 그래서 위의 경우를 총 정리하면 MouseUp 이벤트는 다음과 같이 됩니다.  

 

procedure TMainForm.TTTBoardMouseUp(  ,  , ,, X, Y: Integer);

var

Column, Row: Integer;

begin

, , ,

// Column, Row 좌표 계산하기

Column := Round(X / 18);

Row := Round(Y / 18);

 

 

// 테두리 밖의 영역에서는 제외하기

if (((Column > 0) and (Row > 0)) and (( Column < 20) and (Row < 20))) then

begin

   TTTBoard.Canvas.Draw((Column * 18) - 8, (Row * 18) - 8, img_white.Picture.Graphic);

end;

end;

 

 

여기서 (Column * 18), (Row * 18)에서 18을 곱하면 각  간격까지의 픽셀을 구할수있고  8은 위치조정을 한것입니다.

테두리 밖에도 놓여지는 문제를 해결하기위해서 다음의 구역제한을 합니다.

      if (((Column > 0) and (Row > 0)) and (( Column < 20) and (Row < 20))) then

        

 

다음 세션에서는

1) 백돌과 흑돌이 교대로 놓는 작업을 하고

2) Column Row 의 데이터 정보를 Record 에 저장을 할것입니다.

그래야 나중에 5개 연속된 경우가 있는지 컴퓨터에게 인공지능을 줄수 있으니까요.

3) 이미 바둑알이 놓여진 자리에 또 놓여지는 불상사가 없도록 방지도 하고요.

 

 

수고하셨습니다. 좋은 하루되십시오.

 

ps. 첨부된 프로젝트 참조하세요

 

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 14464
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13099
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 15606
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 21127
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 22375
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18009
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 38293
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 173804
106 TFrame의 생성 및 해제를 편하게 해주는 TFrame 관리 클래스입니다.. file 푸른솔 2017.12.15 1712
105 [개발자 Tip] 모바일 앱 개발 시 시간 낭비를 줄이는 Tip #1: 테스트하기 위해 기다리는 시간을 줄인다. 관리자 2016.12.26 863
104 [XE8] 모바일 튜토리얼 무료 다운로드(영문), 총 364페이지 관리자 2015.07.09 1530
103 [XE8] 스피드버튼의 이미지를 크게 표시할 수 있습니다. Humphery 2015.06.04 701
102 앱의 상태바(StatusBar) 제어하기(색상변경, 감추기, 투명하게) Humphery 2015.06.04 2328
101 파이어몽키에서 외부 라이브러리 연동하기(jar, so, a) [3] Humphery 2015.04.14 3536
100 [XE8] Android 단말기 연결안될때 SDK 확인 및 설치 Humphery 2015.04.11 1961
99 모바일 앱 라이프사이클 이벤트 처리하기 Humphery 2015.04.09 1560
98 모바일 앱 라이프 사이클 이벤트 처리하기(앱 완전 구동 후 실행하기) [1] Humphery 2015.04.09 940
97 [XE7] iOS 시뮬레이터 배포 시 'Please specify exact device preset UUID.' 오류 대응 Humphery 2015.02.26 1531
96 안드로이드 하드웨어 백버튼 제어하기 Humphery 2015.02.25 2516
95 파이어몽키 용 그리드 컴포넌트 안내 - FirePower Humphery 2015.02.23 1436
94 [Android] 폰번호 가져오기 [1] 타락천사 2014.09.05 38518
93 안드로이드 각종 설정값 제어 예제. c2design 2014.08.14 1943
92 Find the O/S Language Type c2design 2014.07.30 47678
91 QR 코드를 만들고 스캔(읽는) 방법 Humphery 2014.07.24 5240
90 GPS좌표 이용 날씨정보앱 런칭. file c2design 2014.07.15 2682
89 모바일 Bluetooth 연동 자료 Humphery 2014.06.24 6999
88 모바일(안드로이드, iOS) 연락처에 접근하는 방법 Humphery 2014.06.20 3417
87 사다리게임 소스와 함께 오픈(iOS, 구글 마켓 등록완료) [2] file c2design 2014.05.27 7002