Avangs

  • 게임 정보
    • 게임 소개
    • 게임 리뷰
    • 게임 실황
    • 게임 공략
    • 모바일 테스트
  • 게임 작품
    • 완성작 게임
    • 체험판 게임
    • 한글판 게임
    • 온라인 게임
    • 추천작 제작자 저장소
  • 투표선정 작품
    • 아방스 추천작
    • 완성 기대작
    • 투표 신청
    • 투표소
    • 투표 결과
  • 강좌
    • 아방스 칼럼
    • 비주얼노벨 강좌
    • 알만툴 강좌
      • MZ 강좌
      • MV 강좌
      • VX Ace 강좌
      • VX 강좌
      • XP 강좌
      • 2003 강좌
      • 2000 강좌
    • 게임메이커 강좌
    • 울프툴 강좌
    • 3D 게임제작 강좌
    • 2D 게임제작 강좌
    • 그래픽 제작 강좌
    • 기타 강좌
  • 질문과 답변
    • 자주 묻는 질문
    • 질문과 답변
    • 제작의뢰
  • 커뮤니티
    • 구인·구직·외주
    • 테스트 요청
    • 자유게시판
    • 게임계 소식
    • 유머&정보
    • 사이트링크
    • 이벤트&대회
  • 창작
    • 게임 기획
    • 맵배치
    • 글쓰기
    • 그리기
    • 음악
  • 자료실
    • 게임제작툴
    • 예제 및 샘플
    • 그래픽 소재
      • 오리지널 소재
      • 이차창작 소재
      • 수정·개조 소재
      • 외부 소재
    • 사운드 소재
    • 확장·플러그인·스크립트
      • MZ 플러그인
      • MV 플러그인
      • Ace 스크립트
      • VX 스크립트
      • XP 스크립트
      • 2k3 플러그인
      • VN 플러그인·확장
    • 외부 소재사이트
    • 기타 자료
      • 한글화툴
      • 무료 폰트
      • 유틸리티
    • 디자인 참고자료
  • 고객센터
    • 공지사항
    • 건의 및 신고
    • 핫 이슈
로그인 회원가입
Avangs
  • 게임 정보
    • 게임 소개
    • 게임 리뷰
    • 게임 실황
    • 게임 공략
    • 모바일 테스트
  • 게임 작품
    • 완성작 게임
    • 체험판 게임
    • 한글판 게임
    • 온라인 게임
    • 추천작 제작자 저장소
  • 투표선정 작품
    • 아방스 추천작
    • 완성 기대작
    • 투표 신청
    • 투표소
    • 투표 결과
  • 강좌
    • 아방스 칼럼
    • 비주얼노벨 강좌
    • 알만툴 강좌
      • MZ 강좌
      • MV 강좌
      • VX Ace 강좌
      • VX 강좌
      • XP 강좌
      • 2003 강좌
      • 2000 강좌
    • 게임메이커 강좌
    • 울프툴 강좌
    • 3D 게임제작 강좌
    • 2D 게임제작 강좌
    • 그래픽 제작 강좌
    • 기타 강좌
  • 질문과 답변
    • 자주 묻는 질문
    • 질문과 답변
    • 제작의뢰
  • 커뮤니티
    • 구인·구직·외주
    • 테스트 요청
    • 자유게시판
    • 게임계 소식
    • 유머&정보
    • 사이트링크
    • 이벤트&대회
  • 창작
    • 게임 기획
    • 맵배치
    • 글쓰기
    • 그리기
    • 음악
  • 자료실
    • 게임제작툴
    • 예제 및 샘플
    • 그래픽 소재
      • 오리지널 소재
      • 이차창작 소재
      • 수정·개조 소재
      • 외부 소재
    • 사운드 소재
    • 확장·플러그인·스크립트
      • MZ 플러그인
      • MV 플러그인
      • Ace 스크립트
      • VX 스크립트
      • XP 스크립트
      • 2k3 플러그인
      • VN 플러그인·확장
    • 외부 소재사이트
    • 기타 자료
      • 한글화툴
      • 무료 폰트
      • 유틸리티
    • 디자인 참고자료
  • 고객센터
    • 공지사항
    • 건의 및 신고
    • 핫 이슈
로그인

NOTICE

공지사항
더보기
  • 마지막 용사 추천작 선정투표 결과 안내(~2025-03-22) 03.23
  • 투표 결과 (2024-09-08) 1 09.08

Recently Added Games

최근 등록 게임
  • 퍼즐/보드 알파벳 용사 2 file 04.08
  • 롤플레잉 스틱 파이터 섬 1 체험판 file 03.31
  • 어드벤쳐 9th Existence file 03.26
  • 어드벤쳐 악역스타 훈발이 file 03.13
  • 기타 [공포] 뱀파준의 저주 file 03.01
C언어
2012.01.25 20:35

func.h함수소개

profile
정체불명
조회 수 2398 추천 수 0 댓글 0
크게 작게 위로 아래로 댓글로 가기 인쇄
크게 작게 위로 아래로 댓글로 가기 인쇄
//함수의 선언부입니다 앞의 함수가 뒤의 함수를 호출하거나 선언부가 없으면 이리저리 꼬여서 잘 동작안해요~
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 >

0 추천 0 비추천
위로 아래로 댓글로 가기 인쇄
에디터 선택하기
✔ 텍스트 모드 ✔ 에디터 모드
?
댓글 쓰기 권한이 없습니다. 로그인 하시겠습니까?
Comment '0'

Category
  • css
  • C언어
  • XpressEngine
  • 게임기획
  • Vegas Pro
  • 시네마4D
  • 어도비 프리미어
  • 에프터 이펙트
    • 템플릿
    • 플러그인
  • 웹디자인 관련
  • 플래시
  • 기타
  • 메이킹 영상
  • OSX (맥)
  • 어플개발
  • 파이널컷X
List of Articles
분류 제목 글쓴이 날짜 조회 수
Vegas Pro 베가스 강좌 목록 아방스 2017.09.28 2330
파이널컷X 파컷 강좌 목록 아방스 2017.06.18 1726
파이널컷X [파이널 컷 X] 편집중 하드디스크 용량이 부족할때 랜더파일 삭제로 용량을 확보하자 아방스 2017.12.16 545
파이널컷X [파이널컷 프로 X] 10분만 투자해 기본편집부터 출력까지 배워봅시다. 아방스 2017.10.26 440
Vegas Pro [베가스 프로 15] 10분 안에 기본편집부터 출력까지 배워봅시다. 아방스 2017.09.28 508
어도비 프리미어 [프리미어 프로] 아무것도 몰라도 영상편집 할수 있다! 아방스 2017.09.28 464
Vegas Pro [베가스 프로 15] 추가된 새로운 기능 "픽처 인 픽처" 아방스 2017.09.27 377
Vegas Pro [베가스 프로 15] 트라이얼 버전 설치 방법 아방스 2017.09.06 1428
에프터 이펙트 [에프터이펙트 강좌] 프리미어 템플릿으로 내보내기 아방스 2017.08.01 636
에프터 이펙트 [에펙] 자막바 길이가 자동으로 조절되도록 만들어봅시다! 아방스 2017.08.01 699
어도비 프리미어 [프리미어 프로 cc 2017.1 강좌] 영상에 줌인 줌아웃 효과 주기 아방스 2017.08.01 1532
어도비 프리미어 [프리미어프로cc2017.1] 애니메이션 자막 템플릿 만들어보기 아방스 2017.08.01 553
어도비 프리미어 [프리미어프로cc2017.1] 자막바 길이자동 조절 ver. 2 file 아방스 2017.08.01 564
어도비 프리미어 [프리미어프로cc2017.1] 제목 메뉴와 자막 템플릿이 사라졌어요! 아방스 2017.08.01 1082
어도비 프리미어 [프리미어 프로 cc 2017.1] 새로운 기능 "문자도구" 설명 아방스 2017.08.01 1496
어도비 프리미어 [프리미어프로cc2017] 자동으로 길이 조절 되는 자막 바 file 아방스 2017.08.01 5110
어도비 프리미어 [프리미어cc2017] 프록시 편집에 대해서 아방스 2017.08.01 880
어도비 프리미어 [프리미어 프로 cc2017 강좌] 멀티캠 편집 방법 아방스 2017.08.01 960
어도비 프리미어 [프리미어 프로 cc2017 강좌] 오류 해결방법 '파일에 오디오 또는 동영상 스트림이 없습니다.' 아방스 2017.08.01 1530
어도비 프리미어 [프리미어 CC2017 강좌] 줌인드랜지션 무료 템플릿 (적용 및 사용법) file 아방스 2017.08.01 883
어도비 프리미어 [프리미어 프로 CC2017 강좌] 영상의 확대 축소 마음대로 하기 (매드무비제작) 아방스 2017.08.01 708
어도비 프리미어 [프리미어 프로 강좌] 서서히 원하는 색으로 물들이기 아방스 2017.08.01 274
쓰기
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Next
/ 19
AVANGS

게임 제작, 창작, 자료, 강좌를 연결하는 커뮤니티

  • 개인정보 취급방침

Copyright © 2026 Avangs