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

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

 

 

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 21624
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 20236
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 22287
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 28039
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 29329
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 24652
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 45586
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 181135
70 부동소수점 숫자(실수)에 대한 참고 글 [1] 험프리 2016.12.14 1215
69 [DelphiCon 요약] Spring4D 소개 - 델파이 개발을 한수준 높이기 (Introduction to Spring4D - Taking Delphi Development to the Next Level) 관리자 2021.01.08 1206
68 델파이로 빅데이터 데이터베이스 연동하기(Cassandra, Couchbase, MongoDB) 험프리 2017.10.30 1171
67 Thalmic Labs의 MYO Armband Delphi SDK Beta7입니다. 쭈니아빠 2015.04.18 1160
66 [Delphi week 2015] 윈도우 3.11에서 델파이1.0 사용하기 관리자 2015.02.13 1155
65 [10.4] 커스텀 매니지드 레코드(Custom Managed Records) 험프리 2020.05.14 1154
64 [추가된 문법] DLL 정적 호출 시 지연 호출(Delayed)-델파이 2010 추가 김원경 2016.12.27 1146
63 [팁] VLC 플레이어(ActiveX Import 해) 사용하기 file 험프리 2020.09.22 1129
62 20150204 VCL 개발자를 위한 Speed UP! RAD스튜디오 관리자 2015.02.05 1126
61 [VCL] TaskDialog 컴포넌트 소개 Humphery 2015.02.25 1119
60 [따라하기] 인공지능 오목게임(6) - 흑백 바둑알 놓고 위치저장 file 대화마을 2017.10.01 1113
59 델파이 웹 개발: TMS WEB CORE VS. UNIGUI VS. INTRAWEB 관리자 2020.12.10 1080
58 윈도우10에서 활용 가능한 델파이만의 5가지 기능들 관리자 2020.02.04 1036
57 데브기어 컴포넌트 컨버터 원리와 구조 설명 험프리 2019.10.11 1034
56 [무료 온라인 세미나] Delphi Week 2015 file 관리자 2015.02.07 1033
55 수원과학대 학생이 델파이로 개발한 '축구 리그 앱' 관리자 2017.11.24 1004
» [따라하기] 인공지능 오목게임(5) - 바둑알 놓기 [2] file 대화마을 2017.09.22 989
53 델파이 코드 주석 추가 및 문서화 방안 험프리 2019.05.30 957
52 [DelphiCon 요약] 델파이 고성능 구현 (High Performance Delphi) 관리자 2020.12.27 952
51 [VCL] TaskDialog 컴포넌트 소개 Humphery 2015.02.03 941