새로운 글
새로운 덧글

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

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

 

 

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. 첨부된 프로젝트 참조하세요

 

번호 제목 글쓴이 날짜 조회 수
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 3566
공지 이 달의 기술자료 & 기술레터 관리자 2017.02.06 640
공지 [프로그래밍 강의] 2018.8 ~ 2018.11 관리자 2015.01.22 6198
공지 RAD Studio(Delphi, C++Builder) 시작하기 관리자 2015.06.30 11080
공지 RAD 스튜디오로 개발된 모바일 앱 사례(17년 12월 13일 업데이트) 험프리 2014.01.16 148150
203 델파이 외국 서적을 번역해서 국내 시장에 내놓는것도 좋을거란 생각이... 얼짱나 2018.08.13 63
202 델파이로 3D 크레딧 스크롤 구현하기(소스제공) file 험프리 2018.05.09 233
201 패키지 개발방식과 DLL개발방식의 차이와 장단점 김원경 2018.05.02 791
200 RFID 리더(한미IT RF Prisma) 연동하기 - 델파이에서 JAR 이용 [1] 험프리 2017.12.19 478
199 수원과학대 학생이 델파이로 개발한 '축구 리그 앱' 관리자 2017.11.24 427
198 델파이로 빅데이터 데이터베이스 연동하기(Cassandra, Couchbase, MongoDB) 험프리 2017.10.30 371
197 [따라하기] 인공지능 오목게임(7) - 오목게임 승자(5돌) 결정 지능프로그램 file 대화마을 2017.10.17 642
196 [따라하기] 인공지능 오목게임(6) - 흑백 바둑알 놓고 위치저장 file 대화마을 2017.10.01 324
» [따라하기] 인공지능 오목게임(5) - 바둑알 놓기 [2] file 대화마을 2017.09.22 346
194 [REST API] 다음 Kakao > 로컬 > 주소검색 연동하기 험프리 2017.09.18 1547
193 [따라하기] 인공지능 오목게임(4) - 바둑판 그리기 [2] file 대화마을 2017.09.18 457
192 [따라하기] 인공지능 오목게임(3) - 디자인 구성하기 file 대화마을 2017.09.14 739
191 [따라하기] 인공지능 오목게임(2) - 최종결과물 [2] file 대화마을 2017.09.14 475
190 [따라하기] 인공지능 오목게임(1) - 만들기 [2] file 대화마을 2017.09.12 1095
189 TListView 행별로 배경색 설정 및 글꼴변경하기 험프리 2017.09.08 317
188 [FireDac] FDConnection 데이터베이스 Connection 설정 file 김원경 2017.09.01 615
187 델파이의 새 달력콤포넌트 기능향상 및 버그수정.. 나비스 2017.08.18 378
186 QR/바코드 스캐너 앱 샘플코드(ZXing, TFrameStand 사용) [1] 험프리 2017.08.04 896
185 블루투스 바코드 스캐너(BI-07) 안드로이드 라이브러리를 델파이에서 연동하는 방법 file 험프리 2017.03.24 1017
184 리팩토링 3-메소드 추출 file 김원경 2017.02.24 303


광고 모듈이 설치되어 있지 않아 실행을 중단합니다..