기타 강좌

//함수의 선언부입니다 앞의 함수가 뒤의 함수를 호출하거나 선언부가 없으면 이리저리 꼬여서 잘 동작안해요~
void gotoxy(int x, int y);
void FileToArray(char * filename, int map[][45]);
void ArrayToScreen(int map[][45]);
void input(int map[][45]);
POINT getheroxy(int map[][45]);
int heroUp(int map[][45]);
int heroDown(int map[][45]);
int heroRight(int map[][45]);
int heroLeft(int map[][45]);
void move(int map[][45],POINT src,int direction);
int clear(int map[][45]);

//콘솔 커서의 좌표를 옮기는 함수입니다. 그냥 그렇구나 하고 외워서 씁니당
void gotoxy(int x, int y)
{
COORD Cur;
Cur.X=x;
Cur.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Cur);
}

//파일읽어서 배열에 넣기
//선행학습 : 2차원 배열을 인수로 전달
// 파일 입출력 함수
// 무한루프와 무한루프 푸는 방법
// 문자와 문자열의 차이

void FileToArray(char * filename, int map[][45])
{
FILE * fp;
int ch,x,y;
fp = fopen(filename,"rt");

x=0,y=0;
while(1){
if((ch = fgetc(fp))!=EOF)
{
if(ch != '\n')
{
map[y][x]=ch;
x++;
}else if(ch =='\n')
{
map[y][x]=EndOfLine;
y++;
x=0;
}
}else if(ch == EOF)
{
map[y][x]=EndOfArray;
break;
}
}
}

//배열읽어서 화면에 출력
//선행학습 : 2차원 배열 인수로 받기
// 문자열과 문자의 차이알기
// switch문 알기
void ArrayToScreen(int map[][45])
{
int x,y;
x=0,y=0;
gotoxy(0,0);
while(1)
{
if(map[y][x]==EndOfLine)
{
y++;
x=0;
   putc('\n',stdout);
}else if(map[y][x]==EndOfArray)
{
break;
}
else
{
switch(map[y][x])
{
case hero_over_air: printf("★"); break;
case stone_over_air: printf("●"); break;
case wall_over_air: printf("■"); break;
case stone_over_holl: printf("●"); break;
case hero_over_holl: printf("★"); break;
case air: printf(" "); break;
case holl: printf("◎"); break;
}

x++;
}
}
}
//입력받아서 적절한 함수 실행
//선행학습 : GetAsyncKeyState사용법
// static 변수와 printf는 디버깅용으로 써놨음 몰라도됨;
void input(int map[][45])
{
static int a=0;
printf("\n  %d  \r",a++);
if(GetAsyncKeyState(VK_LEFT))
heroLeft(map);
if(GetAsyncKeyState(VK_RIGHT))
heroRight(map);
if(GetAsyncKeyState(VK_UP))
heroUp(map);
if(GetAsyncKeyState(VK_DOWN))
heroDown(map);
}

//주인공 찾아서 해당 좌표 리턴
//선행학습 : POINT구조체 사용법
// 2차원배열 인수로 받기
// 무한루프
// 무한루프 나가기

POINT getheroxy(int map [][45])
{
int x,y;
POINT p;
x=0;y=0;
while(1)
{
if(map[y][x]==EndOfLine)
{
x=0;
y++;
}
if(map[y][x]==hero_over_air || map[y][x]==hero_over_holl)
{
p.x=x;
p.y=y;
return p;
}
if(map[y][x]==EndOfArray)
{
break;
}
x++;
}
printf("error: found no hero");
p.x=0;
p.y=0;
return p;
}
//주인공을 위로 아래로 왼쪽으로 오른쪽으로 움직이기 전 움직일수있나 보고 움직이는함수부르기
int heroUp(int map[][45])
{
POINT xy = getheroxy(map);
if(map[xy.y-1][xy.x]==air || map[xy.y-1][xy.x]==holl)
{
move(map,xy,direction_up);
return 1;//성공
}
if(map[xy.y-1][xy.x]==stone_over_air || map[xy.y-1][xy.x]==stone_over_holl)
{
if(map[xy.y-2][xy.x]==air || map[xy.y-2][xy.x]==holl)
{
xy.y--;
move(map,xy,direction_up);
xy.y++;

move(map,xy,direction_up);
return 1;//성공
}
}
return 0;//실패
}
int heroDown(int map[][45])
{
POINT xy = getheroxy(map);
if(map[xy.y+1][xy.x]==air || map[xy.y+1][xy.x]==holl)
{
move(map,xy,direction_down);
return 1;//성공
}
if(map[xy.y+1][xy.x]==stone_over_air || map[xy.y+1][xy.x]==stone_over_holl)
{
if(map[xy.y+2][xy.x]==air || map[xy.y+2][xy.x]==holl)
{
xy.y++;
move(map,xy,direction_down);
xy.y--;

move(map,xy,direction_down);
return 1;//성공
}
}
return 0;//실패
}

int heroLeft(int map[][45])
{
POINT xy = getheroxy(map);
if(map[xy.y][xy.x-1]==air || map[xy.y][xy.x-1]==holl)
{
move(map,xy,direction_left);
return 1;//성공
}
if(map[xy.y][xy.x-1]==stone_over_air || map[xy.y][xy.x-1]==stone_over_holl)
{
if(map[xy.y][xy.x-2]==air || map[xy.y][xy.x-2]==holl)
{
xy.x--;
move(map,xy,direction_left);
xy.x++;
move(map,xy,direction_left);
return 1;//성공
}
}
return 0;//실패
}
int heroRight(int map[][45])
{
POINT xy = getheroxy(map);
if(map[xy.y][xy.x+1]==air || map[xy.y][xy.x+1]==holl)
{
move(map,xy,direction_right);
return 1;//성공
}
if(map[xy.y][xy.x+1]==stone_over_air || map[xy.y][xy.x+1]==stone_over_holl)
{
if(map[xy.y][xy.x+2]==air || map[xy.y][xy.x+2]==holl)
{
xy.x++;
move(map,xy,direction_right);
xy.x--;
move(map,xy,direction_right);
return 1;//성공
}
}
return 0;//실패
}





//돌이나 주인공 움직이기
//선행학습 : switch문
// 매크로(#define)
//
void move(int map[][45],POINT tomove,int direction)//움직일 목표칸이 비어있을때에만 호출
{
switch(direction)
{
case direction_up:
if(map[tomove.y][tomove.x]== stone_over_air)
{

map[tomove.y][tomove.x]=air;
if(map[tomove.y-1][tomove.x]==air)
map[tomove.y-1][tomove.x]=stone_over_air;
if(map[tomove.y-1][tomove.x]==holl)
map[tomove.y-1][tomove.x]=stone_over_holl;
}else if(map[tomove.y][tomove.x]== hero_over_air)
{
map[tomove.y][tomove.x]=air;
if(map[tomove.y-1][tomove.x]==air)
map[tomove.y-1][tomove.x]=hero_over_air;
if(map[tomove.y-1][tomove.x]==holl)
map[tomove.y-1][tomove.x]=hero_over_holl;
}
//
if(map[tomove.y][tomove.x]== stone_over_holl)
{

map[tomove.y][tomove.x]=holl;
if(map[tomove.y-1][tomove.x]==air)
map[tomove.y-1][tomove.x]=stone_over_air;
if(map[tomove.y-1][tomove.x]==holl)
map[tomove.y-1][tomove.x]=stone_over_holl;
}else if(map[tomove.y][tomove.x]== hero_over_holl)
{
map[tomove.y][tomove.x]=holl;
if(map[tomove.y-1][tomove.x]==air)
map[tomove.y-1][tomove.x]=hero_over_air;
if(map[tomove.y-1][tomove.x]==holl)
map[tomove.y-1][tomove.x]=hero_over_holl;
}
//
break;

case direction_down:
if(map[tomove.y][tomove.x]== stone_over_air)
{

map[tomove.y][tomove.x]=air;
if(map[tomove.y+1][tomove.x]==air)
map[tomove.y+1][tomove.x]=stone_over_air;
if(map[tomove.y+1][tomove.x]==holl)
map[tomove.y+1][tomove.x]=stone_over_holl;
}else if(map[tomove.y][tomove.x]== hero_over_air)
{
map[tomove.y][tomove.x]=air;
if(map[tomove.y+1][tomove.x]==air)
map[tomove.y+1][tomove.x]=hero_over_air;
if(map[tomove.y+1][tomove.x]==holl)
map[tomove.y+1][tomove.x]=hero_over_holl;
}
//
if(map[tomove.y][tomove.x]== stone_over_holl)
{

map[tomove.y][tomove.x]=holl;
if(map[tomove.y+1][tomove.x]==air)
map[tomove.y+1][tomove.x]=stone_over_air;
if(map[tomove.y+1][tomove.x]==holl)
map[tomove.y+1][tomove.x]=stone_over_holl;
}else if(map[tomove.y][tomove.x]== hero_over_holl)
{
map[tomove.y][tomove.x]=holl;
if(map[tomove.y+1][tomove.x]==air)
map[tomove.y+1][tomove.x]=hero_over_air;
if(map[tomove.y+1][tomove.x]==holl)
map[tomove.y+1][tomove.x]=hero_over_holl;
}
//
break;

case direction_left:
if(map[tomove.y][tomove.x]== stone_over_air)
{

map[tomove.y][tomove.x]=air;
if(map[tomove.y][tomove.x-1]==air)
map[tomove.y][tomove.x-1]=stone_over_air;
if(map[tomove.y][tomove.x-1]==holl)
map[tomove.y][tomove.x-1]=stone_over_holl;
}else if(map[tomove.y][tomove.x]== hero_over_air)
{
map[tomove.y][tomove.x]=air;
if(map[tomove.y][tomove.x-1]==air)
map[tomove.y][tomove.x-1]=hero_over_air;
if(map[tomove.y][tomove.x-1]==holl)
map[tomove.y][tomove.x-1]=hero_over_holl;
}
//
if(map[tomove.y][tomove.x]== stone_over_holl)
{

map[tomove.y][tomove.x]=holl;
if(map[tomove.y][tomove.x-1]==air)
map[tomove.y][tomove.x-1]=stone_over_air;
if(map[tomove.y][tomove.x-1]==holl)
map[tomove.y][tomove.x-1]=stone_over_holl;
}else if(map[tomove.y][tomove.x]== hero_over_holl)
{
map[tomove.y][tomove.x]=holl;
if(map[tomove.y][tomove.x-1]==air)
map[tomove.y][tomove.x-1]=hero_over_air;
if(map[tomove.y][tomove.x-1]==holl)
map[tomove.y][tomove.x-1]=hero_over_holl;
}
//
break;

case direction_right:
if(map[tomove.y][tomove.x]== stone_over_air)
{

map[tomove.y][tomove.x]=air;
if(map[tomove.y][tomove.x+1]==air)
map[tomove.y][tomove.x+1]=stone_over_air;
if(map[tomove.y][tomove.x+1]==holl)
map[tomove.y][tomove.x+1]=stone_over_holl;
}else if(map[tomove.y][tomove.x]== hero_over_air)
{
map[tomove.y][tomove.x]=air;
if(map[tomove.y][tomove.x+1]==air)
map[tomove.y][tomove.x+1]=hero_over_air;
if(map[tomove.y][tomove.x+1]==holl)
map[tomove.y][tomove.x+1]=hero_over_holl;
}
//
if(map[tomove.y][tomove.x]== stone_over_holl)
{

map[tomove.y][tomove.x]=holl;
if(map[tomove.y][tomove.x+1]==air)
map[tomove.y][tomove.x+1]=stone_over_air;
if(map[tomove.y][tomove.x+1]==holl)
map[tomove.y][tomove.x+1]=stone_over_holl;
}else if(map[tomove.y][tomove.x]== hero_over_holl)
{
map[tomove.y][tomove.x]=holl;
if(map[tomove.y][tomove.x+1]==air)
map[tomove.y][tomove.x+1]=hero_over_air;
if(map[tomove.y][tomove.x+1]==holl)
map[tomove.y][tomove.x+1]=hero_over_holl;
}
//
break;

}
}

int clear(int map[][45])
{
int x,y;
x=0;y=0;
while(1)
{
if(map[y][x]==EndOfLine)
{
y++;
x=0;
}
if(map[y][x]==EndOfArray)
{
return 1;//clear
}
if(map[y][x]==hero_over_holl || map[y][x]==holl)
{
return 0;//clear false
}
x++;
}
return -1;//can't reach
}

Who's 정체불명

profile

두팔과 의지가 있는데 무엇을 못 하겠는가!

< http://mpnp.tistory.com >


List of Articles
분류 제목 글쓴이 날짜 조회 수
Vegas Pro 베가스 강좌 목록 아방스 2017.09.28 912
파이널컷X 파컷 강좌 목록 아방스 2017.06.18 798
기타 캠타시아 사용법 강좌 11 아방스 2008.03.26 8470
기타 캠타시아 설정 방법. 3 아방스 2008.03.09 6435
C언어 컴파일러 다운하세용.. 1 제니스 2009.06.13 2686
기타 컴퓨터에 설치된 코덱 확인방법 아방스 2010.05.31 2232
C언어 코르뉴의 자료구조 기초 - 자기 참조 구조체(1/3) 코르뉴 2009.12.11 2924
기타 클로버 자동업데이터기 사용법 4 file fgdr147 2009.05.21 2023
웹디자인 관련 테이블은 이제 그만 쉬어야 할 때. 3 아방스 2007.11.07 2688
기타 특별한 게임제작 특강! '게임제작, 어렵지 않아요!' 수퍼말이오 2015.10.28 341
기타 파이썬 총 강좌파일 올립니다... 3 file - 하늘 - 2009.09.10 7010
C언어 파일읽어서 배열에 넣고 다시배열에서 읽어서 화면에 출력 정체불명 2012.01.21 2705
에프터 이펙트 펜툴을 이용해서 키프레임 추가,삭제 및 수정방법 아방스 2011.12.08 5207
기타 포샵 빛나는 공 4 제니스 2008.06.22 3075
기타 포토샵 크기 조절 1 제니스 2008.06.22 3914
기타 포토스케이프 - 사진 색감 보정하기 아방스 2010.11.04 2782
기타 폴더 100개 일괄적으로 만들기 정체불명 2014.11.02 744
C언어 푸쉬푸쉬 data structure.h 의 내용 file 정체불명 2012.01.25 2599
C언어 푸쉬푸쉬 func.h파일 file 정체불명 2012.01.25 2868
기타 프로그래밍 scheme 빨간 공을 움직이다가 특정 좌표에 가면 파랗게 만들어 보자. file 정체불명 2010.10.06 2648
기타 프로그래밍 스킴 7줄로 윈도우창에 그림을 출력하고 움직여보자. file 정체불명 2010.10.04 2477
기타 프로그래밍 스킴 Scheme 1 다운로드부터 문법 대부분을 314초만에 알려줄게요 9 file 정체불명 2010.10.02 4828
Board Pagination Prev 1 ... 8 9 10 11 12 13 14 15 16 17 18 19 Next
/ 19