Well, I had the same problem, and the suggestions here do not solve the problem, because it was stated that I thought I would add my solution ...
private void generateMap(int size) { // size is number of rings not counting center so array length is... mapHexs = new Hex[(size*2)+1,(size*2)+1]; // offsets to traverse (sw,w,nw,ne,e,se) from a tile int[,] offsetsOdd = new int[,] {{-1,-1},{-1,0},{-1,1},{0,1},{1,0},{0,-1}}; int[,] offsetsEven = new int[,] {{0,-1},{-1,0},{0,1},{1,1},{1,0},{1,-1}}; //start in the center int posX = size; int posY = size; // each ring for (int ring = 1; ring <= size; ring++) { // at the start of a ring step out one posX++; // each side for(int side = 0; side < 6; side++) { // tiles per side for(int idx = 0; idx < ring; idx++) { // odd or even line if(posY % 2 == 0) { posX += offsetsEven[side,0]; posY += offsetsEven[side,1]; } else { posX += offsetsOdd[side,0]; posY += offsetsOdd[side,1]; } mapHexs[posX,posY] = new Hex(); } } } }