Skip to content

Instantly share code, notes, and snippets.

@nelsonlaquet
Created May 4, 2012 03:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nelsonlaquet/2591878 to your computer and use it in GitHub Desktop.
Save nelsonlaquet/2591878 to your computer and use it in GitHub Desktop.
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