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

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

 

 

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 15417
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13960
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16496
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22049
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23267
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18921
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39245
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174696
269 [고객 사례- 델파이, 모바일, 전략] 축구 전술 기획 앱 - Soccer Playview 관리자 2021.08.20 1364
268 REST 웹서비스, 델파이에서 어떻게 활용해야 할까요? 관리자 2021.08.11 1209
267 델파이용 로우 코드 앱 마법사(LOW CODE APP WIZARD) 관리자 2021.06.25 1283
266 TEdgeBrowser에서 스크립트 실행하기와 소스 보기 관리자 2021.06.22 2284
265 [개발 예제] 웹 소켓 서버&클라이언트 채팅 프로그램 관리자 2021.06.08 2309
264 내가 델파이를 계속 선택하는 이유 관리자 2021.06.01 1183
263 [오브젝트 파스칼을 처음 접하는 사람들을 위한] 무료 튜토리얼 비디오 (DEREK BANAS) 관리자 2021.05.25 500
262 델파이 코드 정적 분석기 V2.4 출시 및 무료 다운로드 관리자 2021.05.25 737
261 NEW! 델파이 오브젝트 파스칼 스타일 가이드 관리자 2021.05.04 511
260 머신 러닝: 윈도우 앱에 적용하는 5가지 방법(파이썬과 델파이) 관리자 2021.04.30 501
259 파스칼(PASCAL) 언어 50년과 델파이(DELPHI) 관리자 2021.03.31 971
258 가장 강력한 ‘데이터베이스 연동’ 기능을 자체적으로 제공하는 프레임워크는? (델파이 VS. WPF VS. ELECTRON) 관리자 2021.03.04 669
257 [UX Summit 요약] 윈도우10에 멋진 플루언트UI 룩앤필을 델파이로 구현하기 #2 (Giving your Apps the Fluent UI Look and Feel with Delphi #2) 관리자 2021.03.02 726
256 [고객 사례- 델파이, 교육] 교육용 프로그래밍 도구 – DEVFLOWCHARTER 관리자 2021.02.19 535
255 26년, 델파이 이야기 관리자 2021.02.17 2290
254 [DelphiCon 요약] 델파이로 웹 다루기 (Powering the Web with Delphi) file 관리자 2021.02.16 1116
253 [고객 사례- 금융, 델파이] 주식, 화폐 등 금융 정보 분석 소프트웨어 - 게임스탑, 비트코인, 아마존, 구글 등 관리자 2021.02.04 627
252 ‘장기 활용 가능성’이 가장 뛰어난 프레임워크는? (델파이 VS. WPF VS. ELECTRON) 관리자 2021.02.01 462
251 [델파이 웹개발] 델파이로 풀스택 웹 개발하기 - uniGUI 활용 (Full Stack Web Development with uniGUI for Delphi) file 관리자 2021.02.01 4289