1. ## 2D Arrays Application

Hello, I am making a program that lets you "walk" you character by entering the coordinates. The map's border would be the number 8 and the path would be the number 0 and my character would be the number 1. Note that the character cannot step on the border. I think I'm more than halfway on this program. Am I going in the right direction? I mean, am I missing something? I just need to do the "move up, down, left, right codes". Here's the code.

Code:
```#include <stdio.h>
#include <string.h>

void setMap(int num_row, int num_col);
void printMap(int map[100][100], int num_row, int num_col);
void playGame(int map[100][100], int num_row, int num_col);

main()
{
int map[100][100];
char name[50];
int num_row, num_col, choice;

printf("Enter name: ");
scanf("%s", name);
printf("Hello %s!\n", name);

do
{
printf("[1] Game Start\n[2] Logout\n");
printf("Enter choice: ");
scanf("%d", &choice);

switch(choice)
{
case 1: printf("Enter number of rows: ");
scanf("%d", &num_row);
printf("Enter number of columns: ");
scanf("%d", &num_col);
setMap(num_row, num_col);
break;

case 2: printf("Bye!\n");
getchar();
getchar();
break;

default: printf("Error! Choice invalid!\n");
}
} while(choice!=2);
}

void setMap(int num_row, int num_col)
{
int i, j;
int map[100][100];

for(i=0; i<1; i++)
{
for(j=0; j<num_col; j++)
{
map[i][j]=8;
}
}

for(j=0; j<1; j++)
{
for(i=0; i<num_row; i++)
{
map[i][j]=8;
}
}

for(i=num_row-1; i<num_row; i++)
{
for(j=0; j<num_col; j++)
{
map[i][j]=8;
}
}

for(j=num_col-1; j<num_col; j++)
{
for(i=0; i<num_row; i++)
{
map[i][j]=8;
}
}

for(i=0; i<num_row; i++)
{
for(j=0; j<num_col; j++)
{
if(map[i][j]!=8)
{
map[i][j]=0;
}
}
}

printMap(map, num_row, num_col);

}

void printMap(int map[100][100], int num_row, int num_col)
{
int i, j;

for (i=0; i<num_row; i++)

{
for(j=0; j<num_col; j++)
{
printf("%d ", map[i][j]);
}
putchar('\n');
}
playGame(map, num_row, num_col);
}

void playGame(int map[100][100], int num_row, int num_col)
{
int i, j, a, b, choice2;
char direction[10];

do
{
printf("Plant the character (row col): ");
scanf("%d %d", &a, &b);
if(i==0 || i==num_row-1 || j==0 || j==num_col-1)
{
printf("You cannot plant your character there.\n");
}
else
{
for (i=0; i<num_row; i++)
{
for(j=0; j<num_col; j++)
{
if(i==a && j==b)
{
map[i][j]=1;
}

printf("%d ", map[i][j]);
}
putchar('\n');
}
}
} while(i==0 || i==num_row-1 || j==0 || j==num_col-1);

printf("[1] Move Player\n[2] Sign Out\n");
printf("Enter choice: ");
scanf("%d", &choice2);

switch(choice2)
{
case 1: printf("Where do you want to go (up, down, left, right)? ");
scanf("%s", direction);
if(strcmp(direction, "up")==0)
{
printf("down\n");
/*codes for moving the character up.....*/
}
else if(strcmp(direction, "down")==0)
{
printf("down\n");
/*codes for moving the character down.....*/
}
else if(strcmp(direction, "left")==0)
{
printf("left\n");
/*codes for moving the character left.....*/
}
else if(strcmp(direction, "right")==0)
{
printf("down\n");
/*codes for moving the character up.....*/
}

case 2: printf("Bye!\n");
}

getchar();
getchar();
}```

2. What are you having problems with exactly?

Quzah.

3. This code works well but I made it as a chain reaction functions by calling the next function inside the setMap function and so on(function in a function in a function--FUNCTIONCEPTION!). I want the functions to be out of each other.
When I modify this part:
Code:
```switch(choice)        {
case 1: printf("Enter number of rows: ");
scanf("%d", &num_row);
printf("Enter number of columns: ");
scanf("%d", &num_col);
setMap(num_row, num_col);
break;```
to this:
Code:
```switch(choice)        {
case 1: printf("Enter number of rows: ");
scanf("%d", &num_row);
printf("Enter number of columns: ");
scanf("%d", &num_col);

setMap(num_row, num_col);
printMap(map, num_row, num_col);
playGame(map, num_row, num_col);

break;```
assuming the user inputs rows and columns, the output shows:
0 0 0 0 0
0 1 0 0 0
0 0 0 0 0
0 0 0 0 0

The correct output should be(also the output of the 'functionception'):
8 8 8 8 8
8 1 0 0 8
8 0 0 0 8
8 8 8 8 8

4. you need to pass 'map' to setMap. setMap is initializing a local copy of map, not the one from your main

5. You, sir, are a genius. Thank you. Now, I just need to do the 'move' codes. I'll give you an update later.

6. Code:
```
#include <stdio.h>
#include <string.h>

void setMap(int map[100][100], int num_row, int num_col); /*prototype*/
void printMap(int map[100][100], int num_row, int num_col);
void playGame(int map[100][100], int num_row, int num_col);

main()
{
int map[100][100]; /*variable declaraion*/
char name[50];
int num_row, num_col, choice;

printf("Enter name: "); /*input name*/
scanf("%s", name);
printf("Hello %s!\n", name);

do
{
printf("Enter choice: ");
scanf("%d", &choice);

switch(choice)
{
case 1: do /*loop until num_row>=5*/
{
printf("Enter number of rows(greater than or equal to 5)): ");
scanf("%d", &num_row);
if(num_row<5)
{
printf("Must be greater than or equal to 5\n");
}
} while(num_row<5);
do /*loop until num_col>=5*/
{
printf("Enter number of columns(greater than or equal to 5)): ");
scanf("%d", &num_col);
if(num_col<5)
{
printf("Must be greater than of equal to 5\n");
}
} while(num_col<5);
setMap(map, num_row, num_col); /*credits to user 'dmh2000' of Cboard for pointing the error here*/
printMap(map, num_row, num_col);
playGame(map, num_row, num_col);
break;

case 2: printf("Bye!\n");
break;

default: printf("Error! Choice invalid!\n");
}
} while(choice!=2);
}

void setMap(int map[100][100], int num_row, int num_col)
{
int i, j;
for(i=0; i<1; i++) /*border on first row*/
{
for(j=0; j<num_col; j++)
{
map[i][j]=8;
}
}

for(j=0; j<1; j++) /*border on first column*/
{
for(i=0; i<num_row; i++)
{
map[i][j]=8;
}
}

for(i=num_row-1; i<num_row; i++) /*border on last row*/
{
for(j=0; j<num_col; j++)
{
map[i][j]=8;
}
}

for(j=num_col-1; j<num_col; j++) /*border on last column*/
{
for(i=0; i<num_row; i++)
{
map[i][j]=8;
}
}

for(i=0; i<num_row; i++) /*set 0 to walkable path*/
{
for(j=0; j<num_col; j++)
{
if(map[i][j]!=8)
{
map[i][j]=0;
}
}
}
}

void printMap(int map[100][100], int num_row, int num_col)
{
int i, j;

for (i=0; i<num_row; i++) /*print map*/
{
for(j=0; j<num_col; j++)
{
printf("%d ", map[i][j]);
}
putchar('\n');
}
}

void playGame(int map[100][100], int num_row, int num_col)
{
int i, j, a, b, choice2; /*variable declaration*/
char direction[10];

do /*loop if coordinates invalid*/
{
printf("Plant the character (row col): "); /*starting point*/
scanf("%d %d", &a, &b);
if(a==0 || a==num_row-1 || a<0 || a>num_row-1 || b==0 || b<0 || b>num_col-1 || b==num_col-1) /*borders and coordinates not in map*/
{
printf("You cannot plant your character there.\n");
}
else
{
for (i=0; i<num_row; i++)
{
for(j=0; j<num_col; j++)
{
if(i==a && j==b) /*plant character in (a,b)*/
{
map[i][j]=1;
}

printf("%d ", map[i][j]);
}
putchar('\n');
}
}
} while(a==0 || a==num_row-1 || a<0 || a>num_row-1 || b==0 || b<0 || b>num_col-1 || b==num_col-1);

do
{
printf("[1] Move Player\n[2] Sign Out\n"); /*menu*/
printf("Enter choice: ");
scanf("%d", &choice2);

switch(choice2)
{
case 1: printf("Where do you want to go (up, down, left, right)? ");
scanf("%s", direction);
if(strcmp(direction, "up")==0) /*check for input*/
{
if(a==1) /*border*/
{
printf("Obstacle detected. Can't move up.\n");
}
else
{
for (i=0; i<num_row; i++)
{
for(j=0; j<num_col; j++)
{
if(i==a-1 && j==b) /*set 1 to new coordinate*/
{
map[i][j]=1;
}
map[a][b]=0; /*reset (a,b) to 0*/
printf("%d ", map[i][j]);
}
putchar('\n');
}
a--;  /*set a to the new value of a for next move*/
}
}
else if(strcmp(direction, "down")==0) /*check for input*/
{
if(a==num_row-2) /*border*/
{
printf("Obstacle detected. Can't move down.\n");
}
else
{
for (i=0; i<num_row; i++)
{
for(j=0; j<num_col; j++)
{
if(i==a+1 && j==b) /*set 1 to new coordinate*/
{
map[i][j]=1;
}
map[a][b]=0; /*reset (a,b) to 0*/
printf("%d ", map[i][j]);
}
putchar('\n');
}
a++; /*set a to the new value of a for next move*/
}
}
else if(strcmp(direction, "left")==0) /*check for input*/
{
if(b==1) /*border*/
{
printf("Obstacle detected. Can't move left.\n");
}
else
{
for (i=0; i<num_row; i++)
{
for(j=0; j<num_col; j++)
{
if(i==a && j==b-1) /*set 1 to new coordinate*/
{
map[i][j]=1;
}
map[a][b]=0; /*reset (a,b) to 0*/
printf("%d ", map[i][j]);
}
putchar('\n');
}
b--;  /*set b to the new value of a for next move*/
}
}
else if(strcmp(direction, "right")==0) /*check for input*/
{
if(b==num_col-2)
{
printf("Obstacle detected. Can't move right.\n");
}
else
{
for (i=0; i<num_row; i++)
{
for(j=0; j<num_col; j++)
{
if(i==a && j==b+1) /*set 1 to new coordinate*/
{
map[i][j]=1;
}
map[a][b]=0; /*reset (a,b)*/
printf("%d ", map[i][j]);
}
putchar('\n');
}
b++;  /*set b to the new value of b for next move*/
}
}
break;

case 2: printf("Bye!\n");
break;
default: printf("Error! Invalid choice!\n");
}
} while(choice2!=2);
}```