You can make most single player games multiplayer, however you have to be really careful how you approach your single player game structure. It is far easier to turn a multiplayer game into a single player game that vice-versa (think Left 4 Dead, that kind of stuff).
For example, how would you approach a player picking up something in the world, in the context of a multiplayer game. After all, you could have two players wanting to pick it up.
You can start with a server-client approach, which is by far the safest (versus peer-to-peer, where each player does whatever it wants). The server manages every objects (creation, destruction, updates, interactions), clients are basically just remote terminals that send requests to the server (request_pickup(health_pickup), request_pickpocket(jim_bob), ...). Think of it as a M.U.D., but not using console inputs ("walk_left", "walk_right", "pickup health", "eat rope"), but the game itself and player controls. It however requires you to structure your game accordingly.
Objects communicate with each other via messages (jim_bob->send_message(health_pickup, REQUEST_PICKUP), health_pickup->send_message(jim_bob, GIVE_HEALTH, 25)). That makes it easier to interact in a multiplayer environment.
Secondly, it gives you an opportunity to abstract the network layer (bascially 'simulate' how a real network would behave like). You can introduce random latency in your message delivery (put messages in a holding queue). You wouldn't want to do such a messaging system with out of order delivery, or considering packet loss though, so you can start with the assumption that messages will only get delayed arbitrarily, which is what TCP will give you.
The rest would be fighting problems inherent to networked games. In a gameplay perspective, it's mostly latency. You may want to look into lag compensation, client-side prediciton to reduce the impact of variable latency on the player interactivity. But packet loss, packets out of order, packet duplications, connectivity, all that jazz can be dealt with at the lower layer, outside the domain of the game management layer.
Edited by papalazaru, 29 August 2012 - 06:37 AM.