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

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

 

 

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 21585
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 20216
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 22270
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 28018
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 29304
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 24630
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 45559
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 181079
643 [RAD 서버] 비콘펜스 소개 및 데모(실내외 길찾기, 지역진입 감지하기) [1] 험프리 2017.04.13 1018
642 [베를린] 윈도우10에서 블루투스LE와 비콘을 활용할 수 있습니다. 관리자 2016.05.30 1016
641 [FMX] 안드로이드 패키지 버전 구하기 튜토리얼 file 험프리 2017.09.01 1015
640 [10.4 시드니][업데이트 1] What's NEW! 신기능 자세히 보기 [2] 관리자 2020.09.03 1012
639 RAD스튜디오 로드맵 - 2019년 5월 관리자 2019.05.24 1012
638 엔터프라이즈 커넥터로 'VCL 애플리케이션에서 엑셀 데이터 가져오기&편집하기' file 김원경 2019.09.27 1011
637 [마이그레이션 사례] 워프비전(64-bit 애플리케이션) 험프리 2019.05.24 1007
636 수원과학대 학생이 델파이로 개발한 '축구 리그 앱' 관리자 2017.11.24 1004
635 [시애틀] FireDAC NoSQL 드라이버로 몽고DB를 완벽 지원합니다. Humphery 2015.09.04 1004
634 [도서/PDF/소스코드] 시작하는 사람들을 위한 델파이 프로그래밍-모듈 20. StringGrid 실습 관리자 2019.03.29 1002
633 델파이/C++빌더 개발자를 위한 웹 개발 with ExtJS! 관리자 2018.06.04 1001
632 [개발환경] Git 설치와 저장소 구성(1) 험프리 2019.06.20 997
631 [스타터] C++빌더로 2D 게임을 완성해보세요 (소스코드 제공) file 관리자 2016.10.28 993
» [따라하기] 인공지능 오목게임(5) - 바둑알 놓기 [2] file 대화마을 2017.09.22 988
629 [10.4 시드니 신기능] 컨트롤 개별 VCL 스타일 적용(Per-Control Style) 적용 험프리 2020.05.19 977
628 [시애틀] 비콘펜스(BeaconFence)등 새로운 오픈 소스와 컴포넌트 패키지를 IDE에서 직접 확보할 수 있습니다. Humphery 2015.09.07 976
627 모바일 앱 라이프 사이클 이벤트 처리하기(앱 완전 구동 후 실행하기) [1] Humphery 2015.04.09 968
626 [10.3.3][업데이트][핫픽스] RAD 스튜디오, 델파이, C++빌더 10.3.3 패치 목록 [1] 험프리 2019.12.26 964
625 XE8 새로운 기능외의 개선사항 Humphery 2015.04.16 961
624 [XE8] 오프라인에서 도움말을 볼 수 있습니다.(CHM 형식) Humphery 2015.04.17 960