<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>SilvrGame</title>
	<atom:link href="http://silvrgame.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://silvrgame.net</link>
	<description>Browser-Based-Game Development with Microsoft Silverlight</description>
	<pubDate>Wed, 17 Oct 2007 15:26:11 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>de</language>
			<item>
		<title>Generierung des Spielfeldes in Silverlight</title>
		<link>http://silvrgame.net/2007-10-09/generierung-des-spielfeldes-in-silverlight/</link>
		<comments>http://silvrgame.net/2007-10-09/generierung-des-spielfeldes-in-silverlight/#comments</comments>
		<pubDate>Tue, 09 Oct 2007 17:38:53 +0000</pubDate>
		<dc:creator>Mariusz</dc:creator>
		
		<category><![CDATA[.expression blend]]></category>

		<category><![CDATA[.silverlight]]></category>

		<guid isPermaLink="false">http://silvrgame.net/2007-10-09/generierung-des-spielfeldes-in-silverlight/</guid>
		<description><![CDATA[Nach der Theorie - und einer etwas l&#228;ngeren Pause - folgt nun die Praxis.
Visual Studio 2008 Beta 2 Projekt zum Download: SilvrGame_Map_Source.zip
Starte dein Visual Studio 2008 Beta 2 und erzeuge ein neues Silverlight Projekt mit dem Namen SilvrGame_Map. Nachdem Visual Studio dein Projekt erzeugt hat, siehst du den Quelltext deiner Page.xaml Datei vor dir. Wie [...]]]></description>
			<content:encoded><![CDATA[<p>Nach der Theorie - und einer etwas l&#228;ngeren Pause - folgt nun die Praxis.</p>
<p>Visual Studio 2008 Beta 2 Projekt zum Download: <a href="http://silvrgame.net/source/SilvrGame_Map_Source.zip" title="SilvrGame_Map_Source Download" class="liinternal">SilvrGame_Map_Source.zip</a></p>
<p>Starte dein Visual Studio 2008 Beta 2 und erzeuge ein neues Silverlight Projekt mit dem Namen SilvrGame_Map. Nachdem Visual Studio dein Projekt erzeugt hat, siehst du den Quelltext deiner Page.xaml Datei vor dir. Wie zu vermuten war, absolut unspektakul&#228;r. Nur um auf Nummer sicher zu gehen, &#228;ndere in dieser Datei den Wert  Background Attributes von White auf Black und starte eine neue Debugger Instanz. Sollte sich ein Browserfenster &#246;ffnen und dir ein schwarzen Rechteck darstellen, dann kannst du dir sicher sein, dass deine Silverlight Installation noch intakt ist <img src='http://silvrgame.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Das Gr&#246;bste w&#228;re damit auch schon getan, der Rest ist nur noch die Theorie aus dem vorherigen Beitrag in die Praxis umzusetzen. Kleinigkeit!<br />
Es hat sich herauskristallisiert, dass wir vorerst zwei Objekte f&#252;r die Generierung des Spielfeldes ben&#246;tigen: die Kachel (Tile) und das Spielfeld (Map) ansich. F&#252;ge also deinem Projekt eine neue Klasse mit dem Namen <em>TileBase</em> hinzu und schreibe folgenden Code rein:</p>
<textarea name="code" class="csharp:nogutter" cols="60" rows="15">
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace SilvrGame_Map
{
    public class TileBase : Control
    {
        private bool m_walkable;
        private Point m_position;

        public Point Position
        {
            set
            {
                m_position = value;
                this.SetValue<double>(Canvas.LeftProperty, value.X - Width);
                this.SetValue<double>(Canvas.TopProperty, value.Y - Height);
            }
            get
            {
                return m_position;
            }
        }

        public bool Walkable
        {
            get { return m_walkable; }
            set { m_walkable = value; }
        }
    }
}
</textarea>
<p>Die Klasse <em>TileBase</em> bildet das Grundger&#252;st f&#252;r jede Kachel, die wir in unserem Spiel generieren. Die Kachel erstellst du nachher in Expression Blend als <em>UserControl</em>. Aus diesem Grund leiten wir <em>TileBase</em> von <em>Control</em> und nachher das UserControl aus Blend von TileBase ab. Dazu aber sp&#228;ter mehr.<br />
Da ein Control von Haus aus die Eigenschaften <em>Width</em> und <em>Height</em> mitbringt, hast du deine Klasse nur um zwei weitere Eigenschaften, n&#228;mlich <em>m_walkable</em> und <em>m_position</em>, erg&#228;nzt. Durch das Property <em>Position</em> stellen wir nur sicher, dass jede erstellte Kachel an ihrem linken, oberen Eck ausgerichtet wird. Dies erleichtert uns nachher die Platzierung der Kacheln auf dem Spielfeld.</p>
<p>Das Grundger&#252;st steht, nun ist es an der Zeit deiner Kachel ein Gesicht zu verpassen. Klicke im Solution Explorer mit der rechten Maustaste auf <em>Page.xaml</em> und w&#228;hle Open in <em>Expression Blend&#8230;</em> aus. Hast du zuvor Expression Blend installiert, dann &#246;ffnet sich nun dein Silverlight Projekt in Expression Blend. Ist dem nicht so, dann installiere es jetzt, starte dein Visual Studio nach der Installation neu und f&#252;hre den Schritt erneut aus. Vor dir erscheint nun ungef&#228;hr dasselbe Fenster, wie das hier:</p>
<p><a href="http://silvrgame.net/images/game_tut/01_map/01_blend.jpg" title="Expression Blend Screenshot" target="_blank"><img src="http://silvrgame.net/images/game_tut/01_map/01_blend_thumb.jpg" title="Expression Blend" alt="Expression Blend" height="431" width="638" /></a></p>
<p>Ich werde hier auf die Funktionalit&#228;t von Expression Blend nicht n&#228;her eingehen, dazu gibt es im www einige Tutorials.<br />
Du siehst hier nun deine <em>Page.xaml</em> Datei, nichts was dich vom Hocker rei&#223;en sollte <img src='http://silvrgame.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> Um ein UserControl zu erstellen, klicke einfach auf <em>File</em>, dann <em>New Item&#8230;</em> und w&#228;hle <em>Silverlight UserControl</em> aus. Gebe als Namen <strong>Tile.xaml</strong> ein und best&#228;tige deine Eingabe mit einem Klick auf <em>OK</em>.</p>
<p><a href="http://silvrgame.net/images/game_tut/01_map/02_blend.jpg" title="Expression Blend Screenshot"><img src="http://silvrgame.net/images/game_tut/01_map/02_blend_thumb.jpg" title="Expression Blend UserControl" alt="Expression Blend UserControl" height="430" width="638" /></a></p>
<p>Jetzt zeichnest du dir deine Kachel, dazu musst du</p>
<ol>
<li> In der Tool Palette das Rectangle Werkzeug ausw&#228;hlen, dann im mittleren Bereich des Bildschirms (deiner Arbeitsfl&#228;che) ein Recht einzeichnen. K&#252;mmere dich vorerst nicht um die Eigenschaften des Rechtecks.</li>
<li>Im <em>Object and Timeline</em> Panel siehst du dann neben dem UserControl noch ein weiteren Eintrag: Rectangle. Markiere das UserControl (wenn es gelb umrahmt ist, ist es markiert) und benenne es von UserControl in <em>Tile</em> um. Dasselbe machst du mit dem Rectangle Objekt. Dieses benennst du, wie auf dem Bild zu sehen ist, in <em>Body</em> um.</li>
<li>Die F&#252;lleigenschaft bel&#228;sst du bei wei&#223;, hier &#228;nderst du nur die Farbe des Randes (<em>Stroke</em>) in ein etwas dunkleres grau um.</li>
<li>Im <em>Layout</em> Panel widmest du dich den Eigenschaften des Rechtecks. Eine Breite und H&#246;he von 40 Einheiten ist f&#252;r unser Vorhaben durchaus OK. Die Ausrichtung setzt du auf Auto. Sie wird nachher per Code angepasst.</li>
</ol>
<p>So schnell erstellt man sich ein UserControl in Expression Blend. Ok, es ist nichts Aufwendiges, aber was nicht ist, kann vielleicht noch werden <img src='http://silvrgame.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> Speichere dein Projekt in Expression Blend ab und wechsle dann zu Visual Studio, welches dich eleganter weise daraufhinweist, dass sich etwas an deiner Projektstruktur ge&#228;ndert hat und du diese nachladen kannst, sofern du m&#246;chtest. Und Ja, du m&#246;chtest <img src='http://silvrgame.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> Sofort erscheint in deinem Solution Explorer ein neues Objekt, n&#228;mlich <em>Tile.xaml</em> und darunter <em>Tile.xaml.cs</em>. Diese &#246;ffnest du in deinem Editor und schreibst folgenden Code rein:</p>
<textarea name="code" class="csharp:nogutter" cols="60" rows="15">
using System;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;

namespace SilvrGame_Map
{
    public class Tile : TileBase
    {
        private FrameworkElement m_root;
        private Rectangle m_body;

        public Tile(Point position, bool walkable)
        {
            Stream s = this.GetType().Assembly.GetManifestResourceStream("SilvrGame_Map.Tile.xaml");
            m_root = this.InitializeFromXaml(new StreamReader(s).ReadToEnd());
            m_body = m_root.FindName("Body") as Rectangle;

            if (!walkable)
            {
                SolidColorBrush _notWalkableColor = new SolidColorBrush(Color.FromRgb(0, 0, 0));
                m_body.Fill = _notWalkableColor;
            }

            Position = position;
        }

        public Tile(double tileSize, Point position, bool walkable)
            : this(position, walkable)
        {
            m_root.Width = tileSize;
            m_root.Height = tileSize;

            m_body.Width = tileSize;
            m_body.Height = tileSize;
        }
    }
}
</textarea>
<p>Wie schon oben erw&#228;hnt, lassen wir unser UserControl nicht von <em>Control</em>, sondern von <em>TileBase</em> erben und geben ihm unsere erg&#228;nzten Eigenschaften, wie ob es begehbar ist und dessen Position. F&#252;r unsere Kachel brauchen wir neben dem <em>FrameworkElement m_root</em>, welches die Kachel als Ganzes abbildet, noch ein <em>Rectangle</em> Objekt <em>m_body</em>, das wir mit dem gezeichneten Rechteck aus Expression Blend im Konstruktor der Klasse referenzieren.</p>
<textarea name="code" class="csharp:nogutter" cols="60" rows="15">
Stream s = this.GetType().Assembly.GetManifestResourceStream("SilvrGame_Map.Tile.xaml");
m_root = this.InitializeFromXaml(new StreamReader(s).ReadToEnd());
m_body = m_root.FindName("Body") as Rectangle;
</textarea>
<p>Als &#220;bergabeparameter bekommt der Konstruktor einmal einen boolschen Wert, ob die Kachel begehbar ist oder nicht und ein Punkt zum Positionieren der Kacheln. Nach der Initialisierung und Referenzierung der Elementen unser Kachel, muss nur noch gepr&#252;ft werden, ob die Kachel f&#252;r den &#8220;Held&#8221; als nicht begehbar deklariert wurde, ist dies der Fall, so f&#228;rben wir die Kachel schwarz. Zum Schluss wird die Kachel noch an ihre richtige Stelle positioniert.</p>
<p>Der zweite Konstruktor wird um die Kachelgr&#246;&#223;e erg&#228;nzt. Sprich, durch den Aufruf dieses Konstruktors k&#246;nnen wir die Gr&#246;&#223;e der Kachel per Code &#228;ndern, so kann es durchaus vorkommen, dass wir nicht die Default-Kachel von 40 x 40 Einheiten haben wollen, sondern vielleicht Kacheln der Gr&#246;&#223;e 25 x 25 Einheiten.</p>
<textarea name="code" class="csharp:nogutter" cols="60" rows="15">
public Tile(double tileSize, Point position, bool walkable)
    : this(position, walkable)
{
    m_root.Width = tileSize;
    m_root.Height = tileSize;

    m_body.Width = tileSize;
    m_body.Height = tileSize;
}
</textarea>
<p>Ein weiterer, noch wichtigerer Grund ist, dass die Spielfeldklasse die Kachelgr&#246;&#223;e verwaltet und somit entscheidet, wie gro&#223;/klein die Kacheln erzeugt werden.<br />
Somit w&#228;re unsere Kachel soweit fertig. Machen wir uns endlich an das Spielfeld ran. Hierzu f&#252;gst du deinem Projekt eine neue Klasse hinzu, n&#228;mlich <em>Map</em>. Wie gerade erw&#228;hnt, verwaltet das Spielfeld die Gr&#246;&#223;e jeder Kachel und bekommt deswegen diese Eigenschaft als Attribut - <em>m_tileSize</em>. Desweiteren muss das Spielfeld wissen, auf welchen Canvas Objekt es die Kacheln legen soll. Hierzu bekommt es ein ein Canvas Objekt - <em>m_parentCanvas</em> - als Attribut. Was noch bleibt ist neben einem Container f&#252;r die generierten Kacheln - hier ein Array <em>m_mapTiles</em> - noch das Spielfeldformat - <em>m_map</em>. Das Spielfeldformat gibt die gibt unserer Karte die richtige Struktur, es legt fest, welche Kacheln begehbar sind und welche nicht. Zus&#228;tzlich entscheidet es &#252;ber die Gr&#246;&#223;e des Spielfeldes und der Anzahl der darin vorkommenden Kacheln.</p>
<textarea name="code" class="csharp:nogutter" cols="60" rows="15">
private Canvas m_parentCanvas;
private double m_tileSize;
private Tile[,] m_mapTiles;

// Initialisize the map format
private int[,] m_map =
{
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
    {1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
    {1, 0, 1, 0, 0, 0, 1, 0, 0, 1},
    {1, 0, 1, 0, 0, 0, 1, 1, 0, 1},
    {1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
};
</textarea>
<p>Jetzt fehlt uns nur noch der Konstruktor, der die Spielfeldattribute initialisiert und eine Methode - <em>BuildMap()</em> - zur Generierung des Spielfeldes.</p>
<textarea name="code" class="csharp:nogutter" cols="60" rows="15">
public Map(Canvas rootCanvas, double tileSize)
{
    m_parentCanvas = rootCanvas;
    m_tileSize = tileSize;
    m_mapTiles = new Tile[m_map.GetLength(0), m_map.GetLength(1)];
}

public void BuildMap(bool centered)
{
    for (int i = 0; i &lt; m_map.GetLength(0); i++)
    {
        for (int j = 0; j &lt; m_map.GetLength(1); j++)
        {
            bool walkable = true;

            if (m_map[i, j] == 1)
            {
                walkable = false;
            }
            // calculate the tile position depends on the centered parameter
            Point cellPosition;
            if (centered)
            {
                double canvasMiddle = m_parentCanvas.Height / 2 - (m_tileSize * m_map.GetLength(0) / 2);
                double canvasCenter = m_parentCanvas.Width / 2 - (m_tileSize * m_map.GetLength(1) / 2);

                cellPosition = new Point(j * m_tileSize + canvasCenter, i * m_tileSize + canvasMiddle);
            }
            else
            {
            cellPosition = new Point(j * m_tileSize, i * m_tileSize);
            }

            Tile _tile = new Tile(m_tileSize, cellPosition, walkable);

            m_parentCanvas.Children.Add(_tile);
            m_mapTiles[i, j] = _tile;
        }
    }
}
</textarea>
<p>Ich habe der Methode <em>BuildMap()</em> als &#220;bergabeparameter einen boolschen Wert mitgegeben, der festlegt, ob das Spielfeld sowohl horizontal als auch vertikal zentriert dargestellt wird. Sonst w&#252;rde es oben links in der Ecke kleben und das sah f&#252;r mich nicht so sch&#246;n aus.</p>
<p>Nun hast du es aber geschafft. Zum Schlu&#223; musst du nur noch in dem <em>Page_Loaded</em> EventHandler der <em>Page.xaml.cs</em> Datei eine Instanz der Map Klasse erzeugen und ihre Methode <em>BuildMap()</em> mit den dazugeh&#246;rigen &#220;bergabeparametern aufrufen. Das wars dann auch schon.</p>
<textarea name="code" class="csharp:nogutter" cols="60" rows="15">
Map _map = new Map(this, 60);
_map.BuildMap(true);
</textarea>
<p>Im Browser kannst du dann das Ergebnis deiner harten Arbeit betrachten <img src='http://silvrgame.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> Im Firefox sollte es dann ungef&#228;hr so aussehen:<br />
<a href="http://silvrgame.net/images/game_tut/01_map/03_mapscreenshot.jpg" title="Map Screenshot" target="_blank"><img src="http://silvrgame.net/images/game_tut/01_map/03_mapscreenshot_thumb.jpg" title="Firefox Screenshot" alt="Firefox Screenshot" /></a></p>
<p>Im n&#228;chsten Artikel bringen wir ein wenig Leben ins Spiel und f&#252;gen dem Ganzen einen Held hinzu, den wir dann hoffentlich auf unsere Karte bewegen k&#246;nnen <img src='http://silvrgame.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://silvrgame.net/2007-10-09/generierung-des-spielfeldes-in-silverlight/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Silverlight l&#228;uft nur mit dem Firefox</title>
		<link>http://silvrgame.net/2007-10-04/silverlight-laeuft-nur-mit-dem-firefox/</link>
		<comments>http://silvrgame.net/2007-10-04/silverlight-laeuft-nur-mit-dem-firefox/#comments</comments>
		<pubDate>Thu, 04 Oct 2007 10:27:37 +0000</pubDate>
		<dc:creator>Mariusz</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://silvrgame.net/2007-10-04/silverlight-laeuft-nur-mit-dem-firefox/</guid>
		<description><![CDATA[Komischerweise kann ich meine Silverlight Beispiele nur im Firefox begutachten. Im Internet Explorer kriege ich bei mir unter Vista den Hinweis zum Download der Runtimes und unter Windows 2003 Server [VirtualPC] bleibt die Webseite des IE&#8217;s wei&#223;.
Eine Neuinstallation der Runtime brachte keine Erfolge. Kann mir das Ph&#228;nomen leider nicht erkl&#228;ren, den auf der silverlight.net Webseite [...]]]></description>
			<content:encoded><![CDATA[<p>Komischerweise kann ich meine Silverlight Beispiele nur im Firefox begutachten. Im Internet Explorer kriege ich bei mir unter Vista den Hinweis zum Download der Runtimes und unter Windows 2003 Server [VirtualPC] bleibt die Webseite des IE&#8217;s wei&#223;.</p>
<p>Eine Neuinstallation der Runtime brachte keine Erfolge. Kann mir das Ph&#228;nomen leider nicht erkl&#228;ren, den auf der silverlight.net Webseite springt das PlugIn an und zeigt den Inhalt mit Animation an. Ist nur etwas &#228;rgerlich das Ganze, da ich einige Tabs im FF offen habe und bei jedem Testrun, muss ich meinen Firefox schlie&#223;en, weil Visual Studio eine Instanz des Browsers &#246;ffnen muss, damit ich darin debuggen kann.</p>
<p>Gibts da eurerseits irgendwelche Erfahrungswerte bez&#252;glich Lauff&#228;higkeit mit dem IE und dem Debuggen von Silverlight Projekten?</p>
]]></content:encoded>
			<wfw:commentRss>http://silvrgame.net/2007-10-04/silverlight-laeuft-nur-mit-dem-firefox/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Das Spielfeld (Map)</title>
		<link>http://silvrgame.net/2007-09-19/das-spielfeld-map/</link>
		<comments>http://silvrgame.net/2007-09-19/das-spielfeld-map/#comments</comments>
		<pubDate>Wed, 19 Sep 2007 19:04:14 +0000</pubDate>
		<dc:creator>Mariusz</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://silvrgame.net/2007-09-19/das-spielfeld-map/</guid>
		<description><![CDATA[Da wir die Kachel-Technik im vorherigen Artikel erkl&#228;rt haben, bietet es sich nur an, diese Technik f&#252;r die Generierung unseres Spielfeldes zu benutzen.
  Wie wir an diesem Bild links erkennen k&#246;nnen, ist das Spielfeld eine zwei dimensionale Fl&#228;che, die sich in Spalten und Zeilen untergliedern l&#228;sst. Das programmiertechnische Pendant in C# dazu w&#228;re ein [...]]]></description>
			<content:encoded><![CDATA[<p>Da wir die Kachel-Technik im vorherigen Artikel erkl&#228;rt haben, bietet es sich nur an, diese Technik f&#252;r die Generierung unseres Spielfeldes zu benutzen.</p>
<p><img src="http://silvrgame.net/images/game_tut/spielfeld.jpg" class="alignleft" title="Spielfeld" alt="Spielfeld" height="150" width="250" />  Wie wir an diesem Bild links erkennen k&#246;nnen, ist das Spielfeld eine zwei dimensionale Fl&#228;che, die sich in Spalten und Zeilen untergliedern l&#228;sst. Das programmiertechnische Pendant in C# dazu w&#228;re ein zwei dimensionales Array. Wem diese Datenstruktur nicht gel&#228;ufig ist, so m&#246;chte ich ihn/sie an dieser Stelle auf die <a href="http://msdn.microsoft.com/library/deu/" title="MSDN Online Bibliothek" target="_blank" class="liexternal">MSDN Online Bibliothek</a> aufmerksam machen, in der <a href="http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/cpref/html/frlrfsystemarrayclasstopic.asp" title="MSDN Library - Array-Klasse" target="_blank" class="liexternal">Arrays</a> ausf&#252;hrlich erkl&#228;rt werden.</p>
<p><img src="http://silvrgame.net/images/game_tut/spielfeld_01.jpg" class="alignleft" title="Array Spielfeld" alt="Array Spielfeld" height="170" width="270" />  Betrachten wir unser Spiel aus der Sicht eines Arrays, so beginnt die Adressierung der Spalten und Zeilen jeweils bei 0. In unserem Beispiel besteht das Spieldfeld aus 10 Spalten und 6 Zeilen, was genau 60 Kacheln entspricht. Die blau markierte Kachel w&#252;rden wir also wie folgt ansprechen:</p>
<textarea name="code" class="c#:nogutter" cols="60" rows="15">
map[3][7];
</textarea>
<p>Also halten wir fest, dass ein Spielfeld auf einer bestimmten Anzahl an Spalten und einer bestimmten Anzahl an Zeilen beruht, deren Produkt die Anzahl der ben&#246;tigten Kacheln ergibt. Klingt recht einfach, oder? Und ja, das ist es auch.</p>
<p>Was uns also noch fehlt, sind die Kacheln. Welche Eigenschaften k&#246;nnen Kacheln den gebrauchen?<br />
Eine bestimmte H&#246;he und Breite w&#228;re sicherlich sinnvoll. Wie sieht es mit der Eigenschaft aus, ob das Feld begehbar ist oder nicht? Denn nicht alle dargestellten Kacheln auf dem Spielfeld k&#246;nnen von unserem Helden (Spielfigur) betreten werden. Eine Mauer oder Wasser sind je nach Spielprinzip nicht begehbar. Diese drei Eigenschaften f&#252;r eine Kachel sollte uns f&#252;rs erste reichen.</p>
<p>Somit h&#228;tten wir schon ein wenig beschrieben, wie ein Spielfeld und die darin befindlichen Kacheln aufgebaut sind. Was ist noch fehlt, um mit dem Programmieren endlich anzufangen ist das Format des Spielfeldes. Die Frage, die sich uns an dieser Stelle stellt ist, wie speichern wir unser Spielfeld ab?<br />
Klar in einem Array, aber woher wissen wir, welche Kachel begehbar ist und welche nicht? Wie werden diese identifiziert? In unserem Fall gestaltet sich die L&#246;sung des Problems recht einfach. Wir unterscheiden vorerst nur zwei Zust&#228;nde, begehbar oder nicht begehbar. Also w&#252;rde ich die Zahl  1  f&#252;r den Zustand nicht begehrbar definieren und die Zahl 0 f&#252;r den Zustand begehbar.</p>
<p><img src="http://silvrgame.net/images/game_tut/spielfeld_02.jpg" class="alignleft" title="Spielfeld begehbar" alt="Spielfeld begehbar" height="150" width="250" />  Um ein Spielfeld, wie wir es hier im linken Bild sehen, aufzubauen, m&#252;ssen wir f&#252;r jede schwarze Kachel eine 1 und f&#252;r jede wei&#223;e Kachel eine 0 schreiben. in C# sieht das folgenderma&#223;en aus:</p>
<textarea name="code" class="c#:nogutter" cols="60" rows="15">
int[,] map = {
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
    {1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
    {1, 1, 0, 0, 0, 0, 0, 0, 0, 1},
    {1, 0, 1, 1, 0, 0, 1, 1, 0, 1},
    {1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
};
</textarea>
<p>Man k&#246;nnte das Format des Spielfeldes sicherlich auch in eine seperate Datei auslagern, sei es XML, TXT oder ein eigenes Dateiformat. Ich habe mich f&#252;r das 2D Array entschieden, weil es erstens f&#252;r kleine Spiele die g&#228;ngiste Methode ist, zweitens es die Kollisions- und Pfadberechnung relativ einfach macht und drittens es zahlreiche Beispiele im Internet gibt, die auf dieser Methode aufbauen. Wieso sollten wir uns dann das Leben schwerer machen?</p>
<p>Im n&#228;chsten Artikel werden wir dann endlich anfangen unsere Gedanken in C# Code umzuwandeln. Wir konstruieren uns mit Expression Blend eine Kachel und bauen mit dieser Kachel unser erstes Spielfeld auf. Man darf also gespannt sein <img src='http://silvrgame.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://silvrgame.net/2007-09-19/das-spielfeld-map/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tile-Based-Games</title>
		<link>http://silvrgame.net/2007-09-13/tile-based-games/</link>
		<comments>http://silvrgame.net/2007-09-13/tile-based-games/#comments</comments>
		<pubDate>Thu, 13 Sep 2007 09:55:08 +0000</pubDate>
		<dc:creator>Mariusz</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://silvrgame.net/2007-09-13/tile-based-games/</guid>
		<description><![CDATA[Was sind Tile-Based-Games? Wortw&#246;rtlich &#252;bersetzt bedeutet das &#8220;Auf Kacheln basierendes Spiel&#8221;, was die Sache eigentlich ganz gut erkl&#228;rt. Jedoch sagen Bilder meistens mehr als tausend W&#246;rter und deswegen hier eins zur Verdeutlichung:

Mini Adventure (Lights of Laminos)
Auf diesem Bild kann man das Prinzip sehr gut erkennen. Die Spielfl&#228;che ist in viele kleine Kacheln untergliedert und findet [...]]]></description>
			<content:encoded><![CDATA[<p>Was sind Tile-Based-Games? Wortw&#246;rtlich &#252;bersetzt bedeutet das &#8220;Auf Kacheln basierendes Spiel&#8221;, was die Sache eigentlich ganz gut erkl&#228;rt. Jedoch sagen Bilder meistens mehr als tausend W&#246;rter und deswegen hier eins zur Verdeutlichung:</p>
<p style="text-align: center"><img src="http://silvrgame.net/images/tile_based_map.jpg" title="Tile-Based-Map" alt="Tile-Based-Map" /></p>
<p style="text-align: center"><a href="http://www.cokeandcode.com/node/308" title="Coke and Code" target="_blank" class="liexternal">Mini Adventure (Lights of Laminos)</a></p>
<p>Auf diesem Bild kann man das Prinzip sehr gut erkennen. Die Spielfl&#228;che ist in viele kleine Kacheln untergliedert und findet seinen Ursprung vor langer langer Zeit. Fr&#252;her, als es auf den Speicherverbrauch ankam und man um jedes Bit gek&#228;mpft hat, war dieses Prinzip der Kartengenerierung von Vorteil. Man konnte mit wenig Grafikelementen eine komplette Spielwelt erstellen und bei Bedarf einzelne Elemente austauschen ohne dabei gro&#223;e Datenmengen nachladen zu m&#252;ssen.<br />
Ich habe auf diesem Bild das Raster eingezeichnet und die Fl&#228;chenbereiche markiert, die aus ein und derselben Grafik bestehen. Die braun hinterlegten Vierecke haben dasselbe Muster, genau so die blau hinterlegten und die gr&#252;n hinterlegten Fl&#228;chen.Dieses Prinzip birgt aber nicht nur den Vorteil von geringen Datengr&#246;&#223;en, sondern auch die &#8220;einfache&#8221; Realisierung von Pathfinding Algorithmen oder Kollisionberechnungen. Desweiteren gibt es unz&#228;hlige Informationen und Webseiten, die sich mit diesem Thema befassen und das erm&#246;glicht uns eine relativ einfache Umsetzung der Theorie in Silverlight bzw. C# <img src='http://silvrgame.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Im n&#228;chsten Beitrag k&#252;mmern wir uns um die Generierung solcher Spielfl&#228;chen und zeigen anhand eines kleines Beispiels in Silverlight, wie einfach es ist eine solche Karte zu erstellen.</p>
]]></content:encoded>
			<wfw:commentRss>http://silvrgame.net/2007-09-13/tile-based-games/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Vorbereitungen</title>
		<link>http://silvrgame.net/2007-09-11/vorbereitungen/</link>
		<comments>http://silvrgame.net/2007-09-11/vorbereitungen/#comments</comments>
		<pubDate>Tue, 11 Sep 2007 18:13:31 +0000</pubDate>
		<dc:creator>Mariusz</dc:creator>
		
		<category><![CDATA[.silverlight]]></category>

		<guid isPermaLink="false">http://silvrgame.net/2007-09-11/vorbereitungen/</guid>
		<description><![CDATA[Um mit dem Programmieren anfangen zu k&#246;nnen, brauchen wir selbstverst&#228;ndlich die daf&#252;r ben&#246;tigten Werkzeuge. Dazu z&#228;hlen die Entwicklungsumgebung, die Silverlight Runtimes und was sicherlich nicht verkehrt ist Microsoft Blend, wenn wir nicht vorhaben alles per Hand im XAML zu schreiben.
Hier die Links zu den Downloads:


   Microsoft Visual Studio 2008 Beta 2 und Silverlight [...]]]></description>
			<content:encoded><![CDATA[<p>Um mit dem Programmieren anfangen zu k&#246;nnen, brauchen wir selbstverst&#228;ndlich die daf&#252;r ben&#246;tigten Werkzeuge. Dazu z&#228;hlen die Entwicklungsumgebung, die Silverlight Runtimes und was sicherlich nicht verkehrt ist Microsoft Blend, wenn wir nicht vorhaben alles per Hand im XAML zu schreiben.</p>
<p>Hier die Links zu den Downloads:</p>
<blockquote>
<ul>
<li>   <a href="http://www.microsoft.com/silverlight/tools.aspx" title="Silverlight Development Tools" target="_blank" class="liexternal">Microsoft Visual Studio 2008 Beta 2 und Silverlight 1.1 Alpha Refresh</a></li>
<li><a href="http://www.microsoft.com/expression/products/download.aspx?key=blend2preview" title="Expression Blend 2.0 August Preview" target="_blank" class="liexternal">Microsoft Expression Blend 2 August Preview</a></li>
</ul>
</blockquote>
<p>Hinter dem ersten Link verbergen sich alle weiterf&#252;hrenden Link zu den Entwicklungswekzeugen f&#252;r Silverlight 1.1 Alpha Refresh. Auf <a href="http://silverlight.net/GetStarted/" title="Silverlight GetStarted" target="_blank" class="liexternal">Silverlight GetStarted</a> gibt es diese Link auch nochmal. Von dort ben&#246;tigt ihr einmal das <em>Silverlight 1.1 Development Software Kit Alpha Refresh,</em> <em>Visual Studio 2008 Beta</em> - hier empfiehlt sich die Professional Version, und zum Schluss noch die <em>Silverlight Alpha Tools for Visual Studio 2008 Beta</em>.</p>
<p>Bei der Installation ist zu beachten, dass sofern andere Betas vom Visual Studio installiert sind, diese vorher deinstalliert werden m&#252;ssen.<br />
Nach Erfolgreichen Installieren der Tools, startet ihr Visual Studio Beta 2 und erstellt ein neues Projekt -&gt; Silverlight Projekt und nennt es &#8220;FirstStep&#8221;. In diesem neu angelegtem Projekt befindet sich eine Page.xaml Datei, durch einen Doppelklick auf diese Datei &#246;ffnet ihr sie in eurem Editor. Folgenden Inhalt m&#252;sste diese Datei aufweisen:</p>
<textarea name="code" class="xml:nogutter" cols="60" rows="15">
&lt;Canvas x:Name="parentCanvas"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Loaded="Page_Loaded"
x:Class="FirstStep.Page;assembly=ClientBin/FirstStep.dll"
Width="640"
Height="480"
Background="White"&gt;
&lt;/Canvas&gt;
</textarea>
<p>&#196;ndert hier die Background Eigenschaft von <em>White</em> auf <em>Black</em> und starte das Projekt durch dr&#252;cken der F5 Taste im Debugger. Bei einer funktionierenden Installation von Silverlight sollte nun ein neues Browserfenster ge&#246;ffnet werden, welches eine 640&#215;480 Pixel gro&#223;e schwarze Fl&#228;che darstellt.</p>
<p>Gl&#252;ckwunsch, Silverlight l&#228;uft <img src='http://silvrgame.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://silvrgame.net/2007-09-11/vorbereitungen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hallo und Herzlich Willkommen</title>
		<link>http://silvrgame.net/2007-09-11/hallo-und-herzlich-willkommen/</link>
		<comments>http://silvrgame.net/2007-09-11/hallo-und-herzlich-willkommen/#comments</comments>
		<pubDate>Tue, 11 Sep 2007 10:35:37 +0000</pubDate>
		<dc:creator>Mariusz</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://silvrgame.net/2007-09-11/hallo-und-herzlich-willkommen/</guid>
		<description><![CDATA[Wenn dein erster Gedanke &#8220;&#196;h, ich hab doch nach Silverlight und Browser-Games gesucht!? Wieso bin ich hier gelandet?&#8220; ist, dann keine Sorge, du bist hier genau richtig!
Da ich mir fest vorgenommen habe ein 2D Browser-Based-Game zu entwickeln und dabei nicht auf Adobe Flash zur&#252;ck greifen m&#246;chte, werde ich meine Erfolge, Probleme und Zwischenschritte beim Spieleentwickeln [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn dein erster Gedanke <strong>&#8220;<em>&#196;h, ich hab doch nach Silverlight und Browser-Games gesucht!? Wieso bin ich hier gelandet?</em>&#8220;</strong> ist, dann keine Sorge, du bist hier genau richtig!</p>
<p>Da ich mir fest vorgenommen habe ein 2D Browser-Based-Game zu entwickeln und dabei nicht auf Adobe Flash zur&#252;ck greifen m&#246;chte, werde ich meine Erfolge, Probleme und Zwischenschritte beim Spieleentwickeln mit <a href="http://silverlight.net/" title="Microsoft Silverlight" target="_blank" class="liexternal">Microsoft Silverlight</a> hier darlegen. Das Ziel ist momentan nicht die Realisierung eines Browserspiels from the Scratch an bis Ende, sondern eher ein Sammelsurium an Informationen, Links, Beispielen und Ideen rund um 2D Spieleentwicklung, insbesondere Tile-Based-Games, im Browser.<br />
Da ich erst vor kurzem angefangen habe mich mit Silverlight 1.1 Alpha Refresh auseinander zu setzen und bemerkt habe, dass f&#252;r mich der Anfang viele H&#252;rden bereit hielt, will ich hier den Einstieg f&#252;r alle anderen etwas erleichtern und ihnen eine Richtung weisen. Ob mir das gelingt, steht auf einem anderen Blatt geschrieben <img src='http://silvrgame.net/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /><br />
Ich werde mich ausschlie&#223;lich mit Silverlight 1.1 besch&#228;ftigen, da es mir die M&#246;glichkeit bietet, die Logik dahinter mit C# umzusetzen und ich mich halbwegs in dieser Programmiersprache wohlf&#252;hle.</p>
<p><strong>&#8220;<em>Aber, ich dachte ich finde hier Tips &amp; Tricks zu Silverlight oder HowTo&#8217;s wie ich ein Browserspiel entwickeln kann, da ich selber gerade dabei bin eins zu programmieren!</em>&#8220;</strong></p>
<p>Und da liegst du richtig. Aller Anfang ist schwer und momentan sieht es hier auch noch etwas leer aus, aber mit der Zeit wird sich hier der Inhalt f&#252;llen und du wirst hoffentlich deinen gesuchten Content hier wiederfinden k&#246;nnen. Selbstverst&#228;ndlich bist du ganz herzlich eingeladen am Geschehen aktiv mitzuwirken. Ideen, Verbesserungsvorschl&#228;ge, Hinweise und &#196;hnliches wird hier sehr gerne gesehen und darf in Form von Kommentaren hinterlassen werden.<br />
Ich freue mich &#252;ber jedes Feedback, sei es Lob oder aber auch Kritik.</p>
<p><strong>&#8220;&#196;&#228;h Silverlight? Ne, lass mal. Hab ich nix am Hut mit, eigentlich suche ich nur das Weblog von Mariusz [Bionic]! Hast du es zuf&#228;llig irgendwo gesehen?&#8221;</strong></p>
<p>Ach du kennst Silverlight gar nicht? Dann wirds aber h&#246;chste Eisenbahn. Auf der Website von <a href="http://silverlight.net/" title="Silverlight" target="_blank" class="liexternal">Silverlight</a> kannst du dir einen sehr guten &#220;berblick, &#252;ber diese technologie verschaffen. Interessiert dich nicht? Auch nicht schlimm. Das private Weblog von mir - Mariusz - findest du hier -&gt; <a href="http://bionic.kopfschmerzgenerator.de" title="Bionic's blOg" class="liexternal">Bionic&#8217;s blOg</a>.<br />
Ich werde versuchen in diesem Blog themenbezogen zu schreiben und das private in meinem anderen Blog unter zu bringen.</p>
<p><strong>&#8220;<em>Ja gut! Alles sch&#246;n und gschmeidig. Wann gehts den los?</em>&#8220;</strong></p>
<p><strong>JETZT!</strong><br />
Ich w&#252;nsche viel Spa&#223; beim Lesen und Ausprobieren <img src='http://silvrgame.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://silvrgame.net/2007-09-11/hallo-und-herzlich-willkommen/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
