GameGrid(BabyQ bq) {
		super();

		babyQ = bq;
		game = new BabyGame(babyQ);

		// an extra header row and column
		height = HEIGHT+1;		
		width = WIDTH+1;
		setLayout(new java.awt.GridLayout(height,width));

		// Generate the grid
		grid = new Location[height][width];
		grid[0][0] = new Location(0, 0, game);
		for (int i = height-1; i >= 0; i--) {
		    for (int j = 0; j < width; j++) {
				grid[i][j] = new Location(i, j, game);
		    }
		}
		grid[0][0].setEnabled(false);
		for (int i = 1; i < height; i++) {
		    grid[i][0].setText("" + i);
		    grid[i][0].setEnabled(false);
		}

		for (int i = 1; i < width; i++) {
			grid[0][i].setText("" + i);
		    grid[0][i].setEnabled(false);
		}

		// Render the grid in the panel - vertical order is
		// reversed so the matrix appears in a
		// "natural" way with origin at lower left
		for (int i = height-1; i >= 0; i--) {
		    for (int j = 0; j < width; j++) {
				add(grid[i][j]);
		    }
		}

		// Pass the Grid to the game and initialize the game
		game.initialize(this);
    }