<div>winapi 배우자마자 테트리스로 예제를 만들어보는데 상당히 어렵네요....</div> <div>api써서 그래픽 구현이나 그런 건 금방금방 했는데 이젠 그냥 c언어에서 턱하니 막히네요</div> <div>여기저기 물어봐도 도저히 답이 안 나와서 마지막으로 오유에 글을 써봅니다...ㅠㅠ</div> <div>오전 6시까진 덧글을 계속 확인할 수 있을 거 같습니다</div> <div><br></div>소스코드 전문입니다, 문제가 되는 함수 부분만 아래 적어뒀습니다 <div>https://gist.github.com/hanalen-/e39e0226c4a5409ed55f</div> <div><br></div> <div>참고를 많이 한 코드</div> <div>http://soen.kr/lecture/win32api/lec9/lec9-1-1.htm</div> <div><br></div> <div>우선 코드를 설명 드리면</div> <div><br></div> <div>1. 기본 블럭 배열은 4차원 배열</div> <div>block_shape[블럭 순서, random으로 출력][회전 모양, rot으로 구분][y][x] 이렇게 4차원 배열입니다</div> <div>2. 기본 화면 배열인 main[y][x]는 구현 완료</div> <div>3. 블럭 출력하고 돌리는 것까지 구현 완료, 그래픽 출력은 다 구현</div> <div>4. 블럭의 위치는 전역변수 nowx, nowy로 관리</div> <div>5. 블럭이 직접 배열에 들어가진 않고 그래픽만 보여주고 배열에는 끝에 다 가면 배열에 저장한다</div> <div><br></div> <div><br></div> <div>문제점: 벽 인식을 못 함, 충돌 인식도 못 할 것으로 예상 됨</div> <div>현재 screen.move_left()함수에서 해당 문제를 테스트 중</div> <div>끝에 가면 left_fi라는 bool변수에 끝에 갔다는 것을 알리는 값을 넣었었으나</div> <div>UP_KEY를 인식 했을 경우 left_fi를 초기화 해야하는 것을 알게 되었음</div> <div>if(left_fi)</div> <div>return 0;으로 빠져나오도록 조건을 걸었지만 위와 같은 이유로 무의미해짐</div> <div><br></div> <div>해결하려 한 것: 블럭을 다 struct로 만들어서 블럭은 모두 4개의 조합이니 각 블럭에 x,y좌표값을 갖도록 하고</div> <div>위 키로 모양을 돌릴 떄마다 좌표값을 옮기는 코드를 넣는다</div> <div>->코드가 비효율적인 거 같아서 폐기</div> <div>if(j==4 && lieft_fi==0) 으로 작동하게 하려고도 했었으나 실패</div> <div><br></div> <div><br></div> <div><br></div> <div><br></div> <div> <div>int move_left()</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="font-size:9pt;line-height:1.5;white-space:pre;"> </span><span style="font-size:9pt;line-height:1.5;">//충돌체크, 끝인지 체크하는 함수 추가?</span></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>//if(nowx==0)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>//return 0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int i,j;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if(check_around(nowx, nowy))</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return 0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>//if(main[nowy][nowx] == 0 && block_shape[random][rot][nowy][nowx]==0)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>//nowx--;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if(left_fi)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return 0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if(nowx==0)//왼쪽 끝까지 가면 블럭이 빈칸인지 확인</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for(i=0; i<4 ; i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for(j=0; j<4; j++)<span class="Apple-tab-span" style="white-space:pre;"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{//누를 때마다 for진입해서 nowx--가 무한정 걸리는 문제</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if(block_shape[random][rot][j][i]==1)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{<span class="Apple-tab-span" style="white-space:pre;"> </span>left_fi=1;<span class="Apple-tab-span" style="white-space:pre;"> </span>return 0;<span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if(j==4 && left_fi==0)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>nowx--;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return 0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>nowx--;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>egaku_block(0);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>egaku_block(1);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>ReleaseDC(sc_hWnd,hdc);<span class="Apple-tab-span" style="white-space:pre;"> </span>/*if(main[nowy][nowx]==0)</div></div> <div><br></div> <div>//함수 끝</div> <div><br></div> <div><br></div>
--------------------------------
<b>하</b>늘을<b>날</b>고싶은<b>엔</b>젤링 -> 하날엔
--------------------------------
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.