Feedback

C# - Tilemap aus Datei entnehmen (Laden)

Veröffentlicht von am 8/11/2013
(0 Bewertungen)
Hey!
Hier ist ein recht einfaches Beispiel wie Ihr eine Tilemap, bestehend aus Zahlen, laden und zeichnen könnt!

Die Seite wird geupdatet um neue Funktionen
zu veranschaulichen.

"Materialien"
Texturen(Wand/Boden)
Eine Tilemap, zB:
1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 1 0 0 0 0 1
1 0 0 0 0 0 0 1 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1 1
(Tile1.map)

Code
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
//Zunächst implementieren wir die IO-Namespace.
using System.IO;
public class Form1
{
	//Deklaration und das Laden!
	private string MapPath = "Tile1.map";
	//Einen StreamReader der den MapPath als Konstruktorfülle inne ist.
	private StreamReader ReadFile_Length = new StreamReader(MapPath);
	private string Map;
	//Ein Array um den "Pointer" eine Zeile dazu zu addieren
	private string[] StringBuffer_Y = File.ReadAllLines(MapPath);
	//Mapinformationen
	//---Tile data--- 
	private int MapX;
	private int MapY;

	private string Map_Y_LineInString;
	//Rectangles

	//---Tiles---
	private Rectangle Wand;

	private Rectangle Boden;
	//1 = Wand
	//0 = Boden

	//---TileTexturen---
	private Bitmap WandTexture = new Bitmap("Textures\\wand.png");

	private Bitmap BodenTexture = new Bitmap("Textures\\boden.png");


	private void Form1_Load(object sender, EventArgs e)
	{
		DoubleBuffered = true;
		//Und die Map in den String laden!
		Map = ReadFile_Length.ReadToEnd();
	}

	//das Zeichnen

	private void DrawTile(object sender, PaintEventArgs e)
	{
		try {
			//Alle Zeilen durchlaufen
			for (y = 0; y <= Map.Length; y++) {
				Map_Y_LineInString = StringBuffer_Y[y];
				for (x = 0; x <= Map_Y_LineInString.Length / 2; x++) {
					//Jedes Zeichen durchlaufen
					//Und bei " " splitten!
					string[] ConvertMap = Map_Y_LineInString.Split(' ');
					//Stück für Stück,Zeichen für Zeichen, ein Rectangle setzen.
					switch (ConvertMap[Convert.ToInt32(x)]) {

						case "0":
							//Die Koordinaten auslesen.
							MapX = Convert.ToInt32(x * 20);
							MapY = y * 20;
							Boden = new Rectangle(MapX, MapY, 20, 20);
							e.Graphics.DrawImage(BodenTexture, Boden);
							break;
						case "1":
							MapX = Convert.ToInt32(x * 20);
							MapY = y * 20;
							Wand = new Rectangle(MapX, MapY, 20, 20);
							e.Graphics.DrawImage(WandTexture, Wand);
							break;
					}

				}
			}
		//Fertig!
		} catch {
		}
	}
	public Form1()
	{
		
	Load += Form1_Load;
        Paint += DrawTile;
	}
}
Abgelegt unter Tilemap, C#, 2d.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!