<div> <div>#include <stdio.h></div> <div>#include <conio.h></div> <div>#include <windows.h></div> <div><br></div> <div>void clrscr(void);</div> <div>void gotoxy(int x, int y);</div> <div><br></div> <div>#define ScreenWidth 80</div> <div>#define ScreenHeight 24</div> <div><br></div> <div>int Block_x[4][4] = {</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{ -1, 0, 0, 1 },</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{ -1, 0, 0, 0 },</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{ -1, 0, 0, 1 },</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span> { 0, 0, 0, 1 }</div> <div>};</div> <div><br></div> <div>int Block_y[4][4] = {</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{ 0, 0, -1, 0 },</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{ 0, 0, 1, -1 },</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{ 0, 0, 1, 0 },</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{ -1, 0, 1, 0 }</div> <div>};</div> <div><br></div> <div>void DrawBoundary();</div> <div><br></div> <div>void DrawBlock(int x, int y, int dir, char c);</div> <div><br></div> <div>int main()</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int x = ScreenWidth / 4, y = ScreenHeight / 4;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int dir = 0;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int oldx = -1, oldy = -1;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int oldDir = -1;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>char key = 0;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>DrawBoundary();</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>while (key != 27){<span class="Apple-tab-span" style="white-space:pre;"> </span>// ESC</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (oldDir >= 0)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>DrawBlock(oldx, oldy, oldDir, ' ');</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>DrawBlock(x, y, dir, 'O');</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>key = _getch();</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>oldDir = dir;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>oldx = x;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>oldy = y;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>switch (key){</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case 'u':</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>dir = (dir + 1) % 4;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case 'o':</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>dir = (dir + 3) % 4;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case 'i':</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (y > 3)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>y--;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case 'k':</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (y < ScreenHeight - 2)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>y++;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case 'j':</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (x > 3)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>x--;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>case 'l':</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (x < ScreenWidth - 2)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>x++;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return 0;</div> <div>}</div> <div><br></div> <div>void DrawBoundary()</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int i = 0;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>system("cls");</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>gotoxy(1, 1);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (i = 0; i < ScreenWidth; i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>putchar('#');</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (i = 1; i <= ScreenHeight; i++){</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>gotoxy(1, i);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>putchar('#');</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>gotoxy(ScreenWidth, i);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>putchar('#');</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>gotoxy(1, ScreenHeight);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (i = 0; i < ScreenWidth; i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>putchar('#');</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>gotoxy(2, ScreenHeight);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf(" Move : 'i', 'j', 'k' and 'l' keys. Rotate : 'u' and 'o'. ESC : finish. ");</div> <div>}</div> <div><br></div> <div>void DrawBlock(int x, int y, int dir, char c)</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int i = 0;</div> <div><br></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>gotoxy(x - Block_x[dir][i], y - Block_y[dir][i]);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>putchar(c);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div>}</div> <div><br></div> <div><br></div> <div><br></div> <div>void gotoxy(int x, int y)<span class="Apple-tab-span" style="white-space:pre;"> </span>// move cursor to (x, y)</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>COORD Pos = { x - 1, y - 1 };</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);</div> <div>}</div></div> <div><br></div> <div>해당 소스는 교수님께 첨부받은 테트리스.c 파일중 일부 발췌했습니다.</div> <div>완벽히 테트리스 기능이 아닌 그냥 기본적인 움직임만 컨트롤 하는 소스입니다.</div> <div>왠만한 코드분석은 끝낸상태에서 궁금한 점이 생겨 염치불구하고 글 써 봅니다.</div> <div><br></div> <div>"ㅗ"이런모양의 블럭을 키보드 i j k l 입력으로 상 하 좌 우로 움직이며 u o 입력으로 방향전환이 됩니다.</div> <div>이 소스를 살짝 응용하여 프로젝트 과제를 수행도중 아무리 찍어도 안나와서... ㅠㅠ</div> <div><span style="font-size:9pt;line-height:1.5;"><br></span></div> <div><span style="font-size:9pt;line-height:1.5;">제작하려는 프로그램 중 한 기능인데</span></div> <div><br></div> <div>"ㅗ" 이모양과 "ㅜ" 이 모양으로 선택하고 enter키를 눌렀을때 </div> <div>ㅗ ㅜ 모양과 일치 한지 안한지 검사가 필요합니다.</div> <div>디버깅으로 아무리 찍어봐도 0과 1 -1로 구성댄 배열의 숫자변화가 없어서</div> <div>어떻게 ㅗ ㅜ 를 표현하는지가 궁금합니다.</div> <div><br></div> <div>제가 하고자하는 조건검사는</div> <div>Block_ㅗ<b> </b>배열에는 ㅗ라고 정렬된 0,1,-1</div> <div>Block_ㅜ 배열에는 ㅜ라고 정의된 0,1,-1이 있으며</div> <div><br></div> <div>Block_x 와 Block_ㅗ 가 같은지에 대한 조건검사가 필요합니다.</div> <div><br></div> <div>디버깅할때</div> <div> ○</div> <div>○○○ 이렇게 순차적으로 그려줄줄 알았는데</div> <div> ○ ○</div> <div>○○ -> ○○ -> ○○○ 이런식으로 그림을 그리더라고요..</div> <div><br></div> <div>도움! 한번 요청해보겠습니다 ㅠ</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.