Jypeli  9
The simple game programming library
TileMap.cs
Siirry tämän tiedoston dokumentaatioon.
1 using System;
2 using System.IO;
3 using System.Collections.Generic;
4 using System.Linq;
5 
6 namespace Jypeli
7 {
13  public class TileMap : AbstractTileMap<char>
14  {
15  private Dictionary<char, Func<GameObject>> oldLegend = new Dictionary<char, Func<GameObject>>();
16  private static string[] textExtensions = { ".txt", ".dat" };
17 
18  protected override char Null
19  {
20  get { return ' '; }
21  }
22 
27  public Func<GameObject> this[char c]
28  {
29  get { return oldLegend[c]; }
30  set { oldLegend[c] = value; }
31  }
32 
37  public TileMap( char[,] tiles )
38  : base(tiles)
39  {
40  }
41 
42 #if !WINDOWS_STOREAPP
43 
48  public static TileMap FromFile( string path )
49  {
50  char[,] tiles = ReadFromFile( path );
51  return new TileMap( tiles );
52  }
53 
54 #endif
55 
60  public static TileMap FromStringArray(string[] lines)
61  {
62  char[,] tiles = ReadFromStringArray(lines);
63  return new TileMap(tiles);
64  }
65 
70  public static TileMap FromLevelAsset(string assetName)
71  {
72  assetName = "Content/" + assetName;
73  assetName = Game.FileExtensionCheck(assetName, textExtensions);
74  char[,] tiles = ReadFromFile(assetName);
75  return new TileMap(tiles);
76  }
77 
81  public void Insert()
82  {
83  double h = Game.Instance.Level.Height / tiles.GetLength(0);
84  double w = Game.Instance.Level.Width / tiles.GetLength(1);
85  Insert(w, h);
86  }
87 
97  public void Insert( double tileWidth, double tileHeight )
98  {
99  Game game = Game.Instance;
100  int width = tiles.GetLength( 1 );
101  int height = tiles.GetLength( 0 );
102 
103  game.Level.Width = width * tileWidth;
104  game.Level.Height = height * tileHeight;
105 
106  for ( int y = height - 1; y >= 0; y-- )
107  {
108  for ( int x = 0; x < width; x++ )
109  {
110  char symbol = tiles[y, x];
111  if ( oldLegend.ContainsKey( symbol ) )
112  {
113  Func<GameObject> create = oldLegend[symbol];
114  GameObject o = create();
115  o.X = game.Level.Left + ( x * tileWidth ) + ( tileWidth / 2 );
116  o.Y = game.Level.Top - ( y * tileHeight ) - ( tileHeight / 2 );
117  game.Add( o );
118  }
119  }
120  }
121  }
122 
123 #if !WINDOWS_STOREAPP
124 
130  internal static char[,] ReadFromFile( string path )
131  {
132  var tileBuffer = new List<char[]>();
133 
134  using (StreamReader input = File.OpenText(path))
135  {
136  string line;
137  while ( ( line = input.ReadLine() ) != null )
138  {
139  tileBuffer.Add( line.ToCharArray() );
140  }
141  }
142 
143  return ListToArray(tileBuffer);
144  }
145 
146 #endif
147 
148  internal static char[,] ReadFromStringArray(string[] lines)
149  {
150  var tileBuffer = new List<char[]>();
151 
152  for (int i = 0; i < lines.Length; i++ )
153  {
154 
155  tileBuffer.Add(lines[i].ToCharArray());
156 
157  }
158 
159  return ListToArray(tileBuffer);
160  }
161 
162  private static char[,] ListToArray(List<char[]> list)
163  {
164  int finalWidth = list.Max(cs => cs.Length);
165 
166  char[,] tiles = new char[list.Count, finalWidth];
167 
168  for (int y = 0; y < list.Count; y++)
169  {
170  char[] row = list.ElementAt(y);
171 
172  for (int x = 0; x < row.Length; x++)
173  {
174  tiles[y, x] = row[x];
175  }
176  }
177 
178  return tiles;
179  }
180  }
181 }
Jypeli.Level.Height
double Height
Kentän korkeus.
Definition: Level.cs:113
Jypeli
Definition: Automobile.cs:5
Jypeli.TileMap.Insert
void Insert()
Asettaa oliot kenttään aiemmin annettujen merkkien perusteella.
Definition: TileMap.cs:81
Jypeli.Level.Width
double Width
Kentän leveys.
Definition: Level.cs:104
Jypeli.TileMap.textExtensions
static string[] textExtensions
Definition: TileMap.cs:16
Jypeli.TileMap.FromFile
static TileMap FromFile(string path)
Lukee ruutukentän tiedostosta.
Definition: TileMap.cs:48
Jypeli.TileMap.oldLegend
Dictionary< char, Func< GameObject > > oldLegend
Definition: TileMap.cs:15
Jypeli.Game.FileExtensionCheck
static string FileExtensionCheck(string file, string[] extensions)
Etsii millä päätteellä annettu tiedosto löytyy
Definition: Content.cs:195
Jypeli.TileMap.TileMap
TileMap(char[,] tiles)
Luo uuden ruutukartan.
Definition: TileMap.cs:37
Jypeli.Level.Top
double Top
Kentän yläreunan y-koordinaatti.
Definition: Level.cs:147
Jypeli.Game.Instance
static Game Instance
Käynnissä olevan pelin pääolio.
Definition: Game.cs:90
Jypeli.TileMap.ReadFromStringArray
static char[,] ReadFromStringArray(string[] lines)
Definition: TileMap.cs:148
Jypeli.Game.Add
void Add(Light light)
Lisää valon peliin. Nykyisellään valoja voi olla ainoastaan yksi kappale. Toistaiseksi ei tuettu Wind...
Definition: Effects.cs:27
Jypeli.TileMap
Ruutukartta, jonka avulla olioita voidaan helposti asettaa tasavälein ruudukkoon. Ruutukartta koostuu...
Definition: TileMap.cs:14
Jypeli.TileMap.FromLevelAsset
static TileMap FromLevelAsset(string assetName)
Lukee ruutukentän Content-projektin tekstitiedostosta.
Definition: TileMap.cs:70
Jypeli.TileMap.Null
override char Null
Definition: TileMap.cs:19
Jypeli.TileMap.ReadFromFile
static char[,] ReadFromFile(string path)
Lukee kentän ruudut tiedostosta.
Definition: TileMap.cs:130
Jypeli.AbstractTileMap< char >::tiles
TileType[,] tiles
Definition: AbstractTileMap.cs:39
Jypeli.TileMap.Insert
void Insert(double tileWidth, double tileHeight)
Asettaa oliot kenttään aiemmin annettujen merkkien perusteella.
Definition: TileMap.cs:97
Jypeli.AbstractTileMap
Definition: AbstractTileMap.cs:8
System
Definition: CFFauxAttributes.cs:29
Jypeli.TileMap.FromStringArray
static TileMap FromStringArray(string[] lines)
Lukee ruutukentän merkkijonotaulukosta.
Definition: TileMap.cs:60
Jypeli.TileMap.ListToArray
static char[,] ListToArray(List< char[]> list)
Definition: TileMap.cs:162
Jypeli.Level.Left
double Left
Kentän vasemman reunan x-koordinaatti.
Definition: Level.cs:131
Jypeli.GameObject
Pelialueella liikkuva olio. Käytä fysiikkapeleissä PhysicsObject-olioita.
Definition: Appearance.cs:34
Jypeli.Game
Definition: Content.cs:46
Jypeli.Game.Level
Level Level
Aktiivinen kenttä.
Definition: Game.cs:133