풀이 1)
int move_right(int size, int *x){
int xx = x[0];
if(*x != size-1){
xx += 1;
}
return xx;
}
int move_left(int size, int *x){
int xx = x[0];
if(*x != 0){
xx -= 1;
}
return xx;
}
int move_up(int size, int *y){
int yy = *y;
if(*y != 0){
yy -= 1;
}
return yy;
}
int move_down(int size, int *y){
int yy = *y;
if(*y != size-1){
yy += 1;
}
return yy;
}
void main(){
// 실습예제 : 함수, 2차원 배열 (더블포인터 학습준비)
// -> 마리오 무브
// . 2차원 배열 맵 그리기 (10 X 10)
// . 이동할 방향을 입력받아,
// ㄴ 동서남북
// . 캐릭터를 이동시킨다.
// ㄴ 함수실행
srand(time(0));
int size = 10;
int map[10][10] = {0};
// 캐릭터 배치
int MARIO = 7;
int x = rand() % 10;
int y = rand() % 10;
int run = 1;
while(run){
map[y][x] = MARIO;
// print_map(map, size);
printf("---- MARIOMOVE ----\n");
for(int y=0; y<size; y++){
for(int x=0; x<size; x++){
if(map[y][x] == MARIO){
printf("● ");
}
else if(map[y][x] == 0){
printf("+ ");
}
}
printf("\n");
}
printf("-------------------\n");
printf("4) left\n6) right\n8) up\n2) down\n>> 방향키: ");
int dir;
scanf("%d", &dir);
if(dir == 6){
map[y][x] = 0;
x = move_right(size, &x);
}
else if(dir == 4){
map[y][x] = 0;
x = move_left(size, &x);
}
else if(dir == 8){
map[y][x] = 0;
y = move_up(size, &y);
}
else if(dir == 2){
map[y][x] = 0;
y = move_down(size, &y);
}
}
}
풀이 2) 더블포인터 : 맵그리기
더보기
// 더블포인터 맵그리기 함수
void print_map(int **pp, int size){
int p1 = 7;
printf("---- MARIOMOVE ----\n");
for(int y=0; y<size; y++){
for(int x=0; x<size; x++){
if(pp[y][x] == p1){
printf("● ");
}
else if(pp[y][x] == 0){
printf("+ ");
}
}
printf("\n");
}
printf("-------------------\n");
}
int move_right(int size, int *x){
int xx = x[0];
if(*x != size-1){
xx += 1;
}
return xx;
}
int move_left(int size, int *x){
int xx = x[0];
if(*x != 0){
xx -= 1;
}
return xx;
}
int move_up(int size, int *y){
int yy = *y;
if(*y != 0){
yy -= 1;
}
return yy;
}
int move_down(int size, int *y){
int yy = *y;
if(*y != size-1){
yy += 1;
}
return yy;
}
int main(){
srand(time(0));
int size = 10;
//int map[10][10] = {0};
//더블포인터 사용
int **map = new int*[size]; // int *p = new int[size]; // int **pp = &p;
for(int i=0; i<size; i++){
map[i] = new int[size];
for(int j=0; j<size; j++){
map[i][j] = 0;
}
}
delete[] map; // map의 heap메모리를 지워줌, 포인터 map을 삭제하는 것이 아님
// 캐릭터 배치
int MARIO = 7;
int x = rand() % 10;
int y = rand() % 10;
int run = 1;
while(run){
map[y][x] = MARIO;
print_map(map, size);
printf("4) left\n6) right\n8) up\n2) down\n>> 방향키: ");
int dir;
scanf("%d", &dir);
if(dir == 6){
map[y][x] = 0;
x = move_right(size, &x); // 함수의 한계, 포인터의 필요성
}
else if(dir == 4){
map[y][x] = 0;
x = move_left(size, &x);
}
else if(dir == 8){
map[y][x] = 0;
y = move_up(size, &y);
}
else if(dir == 2){
map[y][x] = 0;
y = move_down(size, &y);
}
}
return 0;
}
'C > ☞' 카테고리의 다른 글
[50]-A. 기억력 게임 (0) | 2020.07.23 |
---|---|
[50] 기억력 게임 (0) | 2020.07.23 |
[49] 마리오 무브 (0) | 2020.07.23 |
[48] 배열과 함수 (0) | 2020.07.23 |
[47] 연습문제 : 함수 (0) | 2020.07.23 |
댓글