X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fcarfire;a=blobdiff_plain;f=CarFire%2FCarFire%2FCarFire%2FGame.cs;h=1486e6572a66eb31db5b6413620342eb58efe85b;hp=937cd4d87a243d20a1cf6978eacc465b103a49cf;hb=60d05271b295d2ca94a0028059add525c1bbffb1;hpb=594f1f722dc8e405dff12baad8c2ef5481fa3fa7 diff --git a/CarFire/CarFire/CarFire/Game.cs b/CarFire/CarFire/CarFire/Game.cs index 937cd4d..1486e65 100644 --- a/CarFire/CarFire/CarFire/Game.cs +++ b/CarFire/CarFire/CarFire/Game.cs @@ -15,6 +15,10 @@ namespace CarFire public class GameState { #region Public Properties + private const int hitMonsterScore = 20; + private const int killMonsterScore = 100; + public int HitMonsterScore { get { return hitMonsterScore; } } + public int KillMonsterScore { get { return killMonsterScore; } } public long FrameNumber { get { return mFrameNumber; } } @@ -25,9 +29,9 @@ namespace CarFire public Map Map; public List Entities = new List(); public List mProjectiles = new List(); - public Player[] mCharacters = new Player[4]; + public Player[] mCharacters; public Display mDisplay; - + public AI AIData; #endregion @@ -42,6 +46,8 @@ namespace CarFire mNumberOfPlayers = numPlayers; mFrameNumber = 0; + mCharacters = new Player[numPlayers]; + mIsGameOver = new bool[numPlayers]; mIsTerminated = new bool[numPlayers]; @@ -223,7 +229,7 @@ namespace CarFire foreach (IEntity entity in State.Entities) { Point coordinates = entity.Coordinates; - grid[coordinates.X, coordinates.Y] = true; + if (State.Map.IsCellOpen(coordinates)) grid[coordinates.X, coordinates.Y] = false; } return grid; } @@ -233,13 +239,30 @@ namespace CarFire #region Public Methods - public bool IsCellOpen(Point point) + + public IEntity GetEntityAtCoordinates(Point point) { - if (!State.Map.IsCellOpen(point)) return false; foreach (IEntity entity in State.Entities) { - if (entity.Coordinates == point) return false; + if (entity.Coordinates == point) return entity; } + return null; + } + + public Player GetPlayerAtCoordinates(Point point) + { + foreach (Player player in State.mCharacters) + { + if (player != null && player.Coordinates == point) return player; + } + return null; + } + + public bool IsCellOpen(Point point) + { + if (!State.Map.IsCellOpen(point)) return false; + IEntity entity = GetEntityAtCoordinates(point); + if (entity != null && entity.IsCollidable) return false; return true; } @@ -260,7 +283,7 @@ namespace CarFire { State.mCharacters[i].Coordinates = State.Map.GetStartingPositionForPlayer(i + 1); } - State.Entities = State.Map.GetAllEntities(); + State.Entities = State.Map.GetAllEntities(this); } public void LoadContent(ContentManager contentManager) { @@ -311,10 +334,49 @@ namespace CarFire State.mDisplay = new Display(this); State.mDisplay.LoadContent(mContentManager); - State.Map = mContentManager.Load("Maps/stable"); - State.Map.Game = this; - State.Entities = State.Map.GetAllEntities(); - Map.DefaultTile = mContentManager.Load("default"); + // Load the tilemap. + Texture2D mapTiles = mContentManager.Load("graphics/wallAndFloorTilesNoEdgeScale"); + Tilemap tilemap = new Tilemap(mapTiles, 10, 7); + tilemap.SetTile(' ', new Point(4, 5), TileFlags.Default); + tilemap.SetTile('`', new Point(0, 1), TileFlags.Closed | TileFlags.Wall); + tilemap.SetTile('~', new Point(1, 1), TileFlags.Closed | TileFlags.Wall); + tilemap.SetTile('!', new Point(3, 1), TileFlags.Closed | TileFlags.Wall); + tilemap.SetTile('@', new Point(4, 1), TileFlags.Closed | TileFlags.Wall); + tilemap.SetTile('#', new Point(5, 1), TileFlags.Closed | TileFlags.Wall); + tilemap.SetTile('$', new Point(6, 1), TileFlags.Closed | TileFlags.Wall); + tilemap.SetTile('%', new Point(8, 1), TileFlags.Closed | TileFlags.Wall); + tilemap.SetTile('^', new Point(9, 1), TileFlags.Closed | TileFlags.Wall); + tilemap.SetTile('&', new Point(0, 2), TileFlags.Closed | TileFlags.Wall); + tilemap.SetTile('=', new Point(1, 2), TileFlags.Closed | TileFlags.Wall); + tilemap.SetTile('*', new Point(2, 2), TileFlags.Closed | TileFlags.Wall); + tilemap.SetTile('(', new Point(4, 2), TileFlags.Closed | TileFlags.Wall); + tilemap.SetTile(')', new Point(0, 3), TileFlags.Closed | TileFlags.Wall); + tilemap.SetTile('_', new Point(2, 3), TileFlags.Closed | TileFlags.Wall); + tilemap.SetTile('-', new Point(9, 3), TileFlags.Closed | TileFlags.Wall); + tilemap.SetTile(',', new Point(1, 4), TileFlags.Default); + tilemap.SetTile('+', new Point(2, 4), TileFlags.Default); + tilemap.SetTile('[', new Point(3, 4), TileFlags.Default); + tilemap.SetTile(']', new Point(4, 4), TileFlags.Default); + tilemap.SetTile('{', new Point(5, 4), TileFlags.Default); + tilemap.SetTile('}', new Point(6, 4), TileFlags.Default); + tilemap.SetTile('\\', new Point(8, 4), TileFlags.Default); + tilemap.SetTile('|', new Point(9, 4), TileFlags.Default); + tilemap.SetTile(';', new Point(0, 5), TileFlags.Default); + tilemap.SetTile(':', new Point(1, 5), TileFlags.Default); + tilemap.SetTile('\'', new Point(2, 5), TileFlags.Default); + tilemap.SetTile('"', new Point(3, 5), TileFlags.Default); + tilemap.SetTile('.', new Point(5, 5), TileFlags.Default); + tilemap.SetTile('<', new Point(6, 5), TileFlags.Default); + tilemap.SetTile('>', new Point(7, 5), TileFlags.Default); + tilemap.SetTile('/', new Point(8, 5), TileFlags.Default); + tilemap.SetTile('?', new Point(9, 5), TileFlags.Default); + Map.Tilemap = tilemap; + + // Load the first map. + State.Map = mContentManager.Load("Maps/level1"); + State.Entities = State.Map.GetAllEntities(this); + + //State.AIData = new AI(this); /* mPlayers.Clear();