Are you looking to write a program that auto generates the whole puzzle or will there be a puzzle creator? I'm not asking for an answer. It's a question you must answer because it greatly affects the code to be written.
You'll need to decide on a list of words to place on the grid. Are they entered manually or will the program read them randomly from some dictionary? How many words per puzzle? It may be impossible to place all the words if there are too many. Too few is probably a not a very challenging puzzle. Can words be placed in reverse order (backwards - ANANAB)?
When it's time to place the words on the grid you'll need to determine: 1) whether the word will be placed vertically, horizontally or diagonally; 2) in reverse or normal order; 3) where each word will start in the grid.
Note: You need to make sure that the start location is not too close to an edge. Also, if a word crosses a word already placed it can only do so at a shared letter. For instance "MANGO" can only cross PEACH where the letter A occurs in both words. This gets more complicated if a word crosses more than one already placed word and when words share more than one letter.
Once a starting location and direction have been determined it is merely a looping operation to place the word on the grid. For vertical placement the column won't change but the row will, for horizontal placement the opposite is true and with diagonal both vary.
In the case of vertical placement the loop is something like:
int column = columnStart;
for (int row = rowStart; row < rowStart + word.length; row++)
{
grid[row][column] = word[row-rowStart];
}
This, of course, assumes that both the start positions and direction have already been validated to not run off the edge or cross already placed words on non-shared letters. It also assumes that the variable
word is already in the desired order.
I would suggest placing the words first on an empty grid. That way you can easily inspect the grid to make sure it's placing words correctly before you go on to randomly fill in all the other empty grid spaces. One other thing to consider when randomly placing the remaining letters is that you want to make sure you don't place letters that form words already in the find list.