Combat outcomes are randomly determined and simple. Each unit's chance of winning is proportional to the relevant strength. For example, if a Veteran Battleship (attack strength 27) attacks a non-veteran Militia that's on a plain or desert (defensive strength 1), the Battleship has a 27/28 chance of winning.
The loser disappears from the game. The winner stays where it is, unharmed; if it was the attacker and has movement points remaining, it can attack something else immediately.
A number of units can be stacked in the same square. If the stack is attacked and loses, the entire stack of units will be destroyed. There are two exceptions: units in a City, and units in a Fortress. In these cases, units defend one at a time. If a unit defending a city is destroyed, the city also loses one population point, unless it has City Walls.