First make sure all your normals are consistent, and all pointing out. If some of them are backwards, that will wreak havoc on the shading.
The difference between smooth shading and flat shading is in how the normals are interpolated.
Flat shading uses one surface normal per face, to define the surface's shading. Which makes one color for each face.

Smooth shading takes uses the vertex normals, one normal for each vertex. Which blends the normals of the agents faces to create a smooth transition between the two faces.

What I think is happening in your mesh, is that the top is not completely flat and the small edges are making a problem for the smooth shading.
Because you are exporting it for a game, blenders shading model really does not matter. The game engine will control the shading, however it probably will use its own smooth shading.
To ensure that the sides and the top do not get lumped together in some smooth shading artifact, I would recommend adding a Edge Split modifier. Set the Split Angle to something around 80°.

Doing so will separate any faces that meet at an angle of 80° or higher. Because the faces will be separate, it will eliminate any chance of smooth shading artifacts around the edges.