끝이보인다. 돌5개 확인하기 5개확인 함수 int check(x,y) { int px,py; int count; //가로 px=x; py=y; count=0; while(px>1 && board[px-2][y] == 1)px-=2; while(px<=36 && board[px][y] == 1) { count++; px+=2; } if(count==5) { return 1; } //세로 px=x; py=y; count=0; while(py>0 && board[x][py-1]==1)py--; while(py<=18 && board[x][py++]==1)count++; if(count==5) { return 1; } //대각선 ↘ px=x; py=y; count=0; while(px > 0 && py > 0 && board[px-2][py-1]==1) { px-=2; py--; } while(px<=36 && py<=18 && board[px][py++] == 1) { px+=2; count++; } if(count==5) { return 1; } //대각선 ↙ px=x; py=y; count=0; while(px < 36 && py > 0 && board[px+2][py-1]==1) { px+=2; py--; } while(px>=0 && py<=18 && board[px][py++] == 1) { px-=2; count++; } if(count==5) { return 1; } return 0; } 같은 돌이 있는 곳으로 최대한 왼쪽으로 이동후 오른쪽으로 가면서 돌을 세는 방법 이 함수는 move함수의 case ENTER:마지막에 추가해주시면 됩니다. 요렇게 case ENTER : if(board[x][y] == 0) { board[x][y]=1; gotoxy(x,y); puts("○"); if(check(x,y)) { system("CLS"); printf("승리"); system("PAUSE"); exit(0); } } break;
#include #include #define UP 72 #define DOWN 80 #define LEFT 75 #define RIGHT 77 #define ENTER 13 int x=0,y=0; int oldx=0,oldy=0; int board[38][19]; void gotoxy(int, int); void draw(); void move(); int knock(int,int); int check(x,y); int main() { draw(); while(1) { move(); } system("PAUSE"); return 0; } void gotoxy(int x, int y) { COORD XY = {x, y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), XY); } void draw() { char a[39][39]= { "┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐", "├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤", "└┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┘" }; int count; printf("%s\n",a[0]); for(count=0;count<17;count++) printf("%s\n",a[1]); printf("%s",a[2]); } void move() { char input=0; input=getch(); switch(input) { case UP : if(y>0) { y-=1; oldy=y+1; gotoxy(x,y); puts("⊙"); if(knock(x,oldy)) { gotoxy(x,oldy); if(oldy==18) { if(x==0) { puts("└"); } if(x==36) { puts("┘"); } else if(x!=0&&x!=36) { puts("┴"); } } else if(x==0) { puts("├"); } else if(x==36) { puts("┤"); } else { puts("┼"); } } } break; case DOWN : if(y<18) { y+=1; oldy=y-1; gotoxy(x,y); puts("⊙"); if(knock(x,oldy)) { gotoxy(x,oldy); if(oldy==0) { if(x==0) { puts("┌"); } if(x==36) { puts("┐"); } else if(x!=0&&x!=36) { puts("┬"); } } else if(x==0) { puts("├"); } else if(x==36) { puts("┤"); } else { puts("┼"); } } } break; case LEFT : if(x>0) { x-=2; oldx=x+2; gotoxy(x,y); puts("⊙"); if(knock(oldx,y)) { gotoxy(oldx,y); if(oldx==36) { if(y==0) { puts("┐"); } if(y==18) { puts("┘"); } else if(y!=0&&y!=36) { puts("┤"); } } else if(y==18) { puts("┴"); } else if(y==0) { puts("┬"); } else { puts("┼"); } } } break; case RIGHT : if(x<36) { x+=2; oldx=x-2; gotoxy(x,y); puts("⊙"); if(knock(oldx,y)) { gotoxy(oldx,y); if(oldx==0) { if(y==0) { puts("┌"); } if(y==18) { puts("└"); } else if(y!=0&&y!=36) { puts("├"); } } else if(y==18) { puts("┴"); } else if(y==0) { puts("┬"); } else { puts("┼"); } } } break; case ENTER : if(board[x][y] == 0) { board[x][y]=1; gotoxy(x,y); puts("○"); if(check(x,y)) { system("CLS"); printf("승리"); system("PAUSE"); exit(0); } } break; } } int knock(x,y) { gotoxy(x,y); puts("○"); if(board[x][y]==1) return 0; else return 1; } int check(x,y) { int px,py; int count; //가로 px=x; py=y; count=0; while(px>1 && board[px-2][y] == 1)px-=2; while(px<=36 && board[px][y] == 1) { count++; px+=2; } if(count==5) { return 1; } //세로 px=x; py=y; count=0; while(py>0 && board[x][py-1]==1)py--; while(py<=18 && board[x][py++]==1)count++; if(count==5) { return 1; } //대각선 ↘ px=x; py=y; count=0; while(px > 0 && py > 0 && board[px-2][py-1]==1) { px-=2; py--; } while(px<=36 && py<=18 && board[px][py++] == 1) { px+=2; count++; } if(count==5) { return 1; } //대각선 ↙ px=x; py=y; count=0; while(px < 36 && py > 0 && board[px+2][py-1]==1) { px+=2; py--; } while(px>=0 && py<=18 && board[px][py++] == 1) { px-=2; count++; } if(count==5) { return 1; } return 0; }
끝이 보이는구나~~~
대단... 노력에 감탄했습니다.
move함수에 if문이 많아서그렇지 move함수만빼면 몇줄 안돼요 ㅠㅠ 더 간단하게 하고싶은데 선을 넘었으니..
수고 많으셨네요. 저런 프로그램을 만드는 것부터 시작해서 OS까지 만들어보시기 바랍니다 :)
저는 아직 멀었죠 ㅎㅎ. OS가 명령어 처리하는 것도 어떻게 하는건지 모르겠던데.....
죄송한데요,,, 제가 엄청,, 초보거든요,,,,, return1은 뭐고 return0은 뭐가요??
함수를 사용한 곳에 return 1이면 1, return 0이면 0을 돌려줍니다. 전체소스중 233줄에 if(check(x,y))에 보면 check(x,y)는 1또는 0을 돌려줍니다. if(1)또는 if(0)이 되겠죠. if(1)이면 if문안의 내용을실행하고 if(0)이면 실행하지 않습니다.
흐억 궁금증 하나 ㅇㅅㅇ... 님 무슨 컴파일러를 쓰시나요 ?ㅇㅅㅇ 제가 6.0을쓰는데 getch는 conio.h가 있어야만하고 그런데 혹시 최신버전은 stdio.h에 getch가 있나요 !?
: secret
: name
: password
: homepage
Tistory Cumulus Flash tag cloud by BLUEnLIVE requires Flash Player 9 or better.
대단... 노력에 감탄했습니다.
move함수에 if문이 많아서그렇지 move함수만빼면 몇줄 안돼요 ㅠㅠ
더 간단하게 하고싶은데
선을 넘었으니..
수고 많으셨네요. 저런 프로그램을 만드는 것부터 시작해서 OS까지 만들어보시기 바랍니다 :)
저는 아직 멀었죠 ㅎㅎ.
OS가 명령어 처리하는 것도 어떻게 하는건지 모르겠던데.....
죄송한데요,,, 제가 엄청,, 초보거든요,,,,, return1은 뭐고 return0은 뭐가요??
함수를 사용한 곳에 return 1이면 1, return 0이면 0을 돌려줍니다.
전체소스중 233줄에 if(check(x,y))에 보면 check(x,y)는 1또는 0을 돌려줍니다.
if(1)또는 if(0)이 되겠죠.
if(1)이면 if문안의 내용을실행하고 if(0)이면 실행하지 않습니다.
흐억 궁금증 하나 ㅇㅅㅇ... 님 무슨 컴파일러를 쓰시나요 ?ㅇㅅㅇ 제가 6.0을쓰는데
getch는 conio.h가 있어야만하고 그런데 혹시 최신버전은 stdio.h에 getch가 있나요 !?