Created
May 4, 2012 03:55
-
-
Save nelsonlaquet/2591878 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
using System.IO; | |
namespace ConsoleApplication2 | |
{ | |
enum GameObjectType | |
{ | |
Room, | |
Player, | |
Enemey | |
} | |
interface IGameObject | |
{ | |
GameObjectType Type { get; } | |
void Load(BinaryReader reader); | |
void Save(BinaryWriter writer); | |
} | |
class Room : IGameObject | |
{ | |
public GameObjectType Type { get { return GameObjectType.Room; } } | |
public string Name { get; set; } | |
public string Description { get; set; } | |
public void Load(BinaryReader reader) | |
{ | |
Name = reader.ReadString(); | |
Description = reader.ReadString(); | |
} | |
public void Save(BinaryWriter writer) | |
{ | |
writer.Write(Name); | |
writer.Write(Description); | |
} | |
} | |
class Player : IGameObject | |
{ | |
public GameObjectType Type { get { return GameObjectType.Player; } } | |
public string Name { get; set; } | |
public int Health { get; set; } | |
public void Load(BinaryReader reader) | |
{ | |
Name = reader.ReadString(); | |
Health = reader.ReadInt32(); | |
} | |
public void Save(BinaryWriter writer) | |
{ | |
writer.Write(Name); | |
writer.Write(Health); | |
} | |
} | |
class Enemey : IGameObject | |
{ | |
public GameObjectType Type { get { return GameObjectType.Enemey; } } | |
public string Name { get; set; } | |
public int Health { get; set; } | |
public void Load(BinaryReader reader) | |
{ | |
Name = reader.ReadString(); | |
Health = reader.ReadInt32(); | |
} | |
public void Save(BinaryWriter writer) | |
{ | |
writer.Write(Name); | |
writer.Write(Health); | |
} | |
} | |
class Game | |
{ | |
public Player Player { get; set; } | |
public List<IGameObject> GameObjects { get; private set; } | |
public Game() | |
{ | |
GameObjects = new List<IGameObject>(); | |
} | |
public void AddGameObject(IGameObject room) | |
{ | |
GameObjects.Add(room); | |
} | |
} | |
// {count of game objects}{room|player}{game object data}{room|player}{game object data} | |
// {2} {room} {room 1}{room 1 description} {player} {nelson}{100} | |
// count type data type data | |
class GameFilePersistence | |
{ | |
public void SaveGame(string filename, Game game) | |
{ | |
using (var bw = new BinaryWriter(File.Open(filename, FileMode.OpenOrCreate))) | |
{ | |
bw.Write(game.GameObjects.Count); | |
foreach (var gameObject in game.GameObjects) | |
{ | |
bw.Write((int)gameObject.Type); | |
gameObject.Save(bw); | |
} | |
} | |
} | |
public Game LoadGame(string filename) | |
{ | |
var game = new Game(); | |
using (var br = new BinaryReader(File.Open(filename, FileMode.Open))) | |
{ | |
var gameObjectCount = br.ReadInt32(); | |
for (var i = 0; i < gameObjectCount; i++) | |
{ | |
var type = (GameObjectType)br.ReadInt32(); | |
IGameObject obj = null; | |
switch (type) | |
{ | |
case GameObjectType.Room: obj = new Room(); break; | |
case GameObjectType.Player: obj = game.Player = new Player(); break; | |
case GameObjectType.Enemey: obj = new Enemey(); break; | |
} | |
obj.Load(br); | |
game.AddGameObject(obj); | |
} | |
} | |
return game; | |
} | |
} | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
var game = new Game(); | |
var room1 = new Room(); | |
room1.Name = "Room 1"; | |
room1.Description = "Room 1 description"; | |
var room2 = new Room(); | |
room2.Name = "Room 2"; | |
room2.Description = "Room 2 description"; | |
var player = new Player(); | |
player.Name = "Nelson"; | |
player.Health = 100; | |
var e1 = new Enemey(); | |
e1.Name = "Blegh"; | |
e1.Health = 32; | |
var e2 = new Enemey(); | |
e2.Name = "ASDASDAS"; | |
e2.Health = 423; | |
game.Player = player; | |
game.AddGameObject(player); | |
game.AddGameObject(room1); | |
game.AddGameObject(room2); | |
game.AddGameObject(e1); | |
game.AddGameObject(e2); | |
var persistence = new GameFilePersistence(); | |
persistence.SaveGame("game1.game", game); | |
var loadedGame = persistence.LoadGame("game1.game"); | |
foreach (var go in loadedGame.GameObjects) | |
{ | |
var room = go as Room; | |
if (room != null) | |
{ | |
Console.WriteLine("Room: {0}", room.Name); | |
} | |
var thePlayer = go as Player; | |
if (thePlayer != null) | |
{ | |
Console.WriteLine("Player: {0}", thePlayer.Name); | |
} | |
var enemey = go as Enemey; | |
if (enemey != null) | |
{ | |
Console.WriteLine("Enemey: {0}", enemey.Name); | |
} | |
} | |
Console.ReadKey(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment