<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<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>
	<lastBuildDate>Wed, 17 Oct 2007 15:26:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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 &#8211; und einer etwas lÃ¤ngeren Pause &#8211; 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 &#8211; und einer etwas lÃ¤ngeren Pause &#8211; 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Ã¤r. Nur um auf Nummer sicher zu gehen, Ã¤ndere in dieser Datei den Wert  Background Attributes von White auf Black und starte eine neue Debugger Instanz. Sollte sich ein Browserfenster Ã¶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Ã¶bste wÃ¤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Ã¼r die Generierung des Spielfeldes benÃ¶tigen: die Kachel (Tile) und das Spielfeld (Map) ansich. FÃ¼ge also deinem Projekt eine neue Klasse mit dem Namen <em>TileBase</em> hinzu und schreibe folgenden Code rein:</p>
<p>using System;<br />
using System.Windows;<br />
using System.Windows.Controls;<br />
using System.Windows.Documents;<br />
using System.Windows.Ink;<br />
using System.Windows.Input;<br />
using System.Windows.Media;<br />
using System.Windows.Media.Animation;<br />
using System.Windows.Shapes;</p>
<p>namespace SilvrGame_Map<br />
{<br />
    public class TileBase : Control<br />
    {<br />
        private bool m_walkable;<br />
        private Point m_position;</p>
<p>        public Point Position<br />
        {<br />
            set<br />
            {<br />
                m_position = value;<br />
                this.SetValue<double>(Canvas.LeftProperty, value.X &#8211; Width);<br />
                this.SetValue<double>(Canvas.TopProperty, value.Y &#8211; Height);<br />
            }<br />
            get<br />
            {<br />
                return m_position;<br />
            }<br />
        }</p>
<p>        public bool Walkable<br />
        {<br />
            get { return m_walkable; }<br />
            set { m_walkable = value; }<br />
        }<br />
    }<br />
}</p>
<p>Die Klasse <em>TileBase</em> bildet das GrundgerÃ¼st fÃ¼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Ã¤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Ã¤mlich <em>m_walkable</em> und <em>m_position</em>, ergÃ¤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Ã¼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Ã¤hle Open in <em>Expression Blend&#8230;</em> aus. Hast du zuvor Expression Blend installiert, dann Ã¶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Ã¼hre den Schritt erneut aus. Vor dir erscheint nun ungefÃ¤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" class="liimagelink"><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Ã¤t von Expression Blend nicht nÃ¤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ÃŸ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Ã¤hle <em>Silverlight UserControl</em> aus. Gebe als Namen <strong>Tile.xaml</strong> ein und bestÃ¤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" class="liimagelink"><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Ã¤hlen, dann im mittleren Bereich des Bildschirms (deiner ArbeitsflÃ¤che) ein Recht einzeichnen. KÃ¼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Ã¼lleigenschaft belÃ¤sst du bei weiÃŸ, hier Ã¤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Ã¶he von 40 Einheiten ist fÃ¼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Ã¤ndert hat und du diese nachladen kannst, sofern du mÃ¶chtest. Und Ja, du mÃ¶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Ã¤mlich <em>Tile.xaml</em> und darunter <em>Tile.xaml.cs</em>. Diese Ã¶ffnest du in deinem Editor und schreibst folgenden Code rein:</p>
<p>using System;<br />
using System.IO;<br />
using System.Windows;<br />
using System.Windows.Controls;<br />
using System.Windows.Media;<br />
using System.Windows.Shapes;</p>
<p>namespace SilvrGame_Map<br />
{<br />
    public class Tile : TileBase<br />
    {<br />
        private FrameworkElement m_root;<br />
        private Rectangle m_body;</p>
<p>        public Tile(Point position, bool walkable)<br />
        {<br />
            Stream s = this.GetType().Assembly.GetManifestResourceStream(&#8220;SilvrGame_Map.Tile.xaml&#8221;);<br />
            m_root = this.InitializeFromXaml(new StreamReader(s).ReadToEnd());<br />
            m_body = m_root.FindName(&#8220;Body&#8221;) as Rectangle;</p>
<p>            if (!walkable)<br />
            {<br />
                SolidColorBrush _notWalkableColor = new SolidColorBrush(Color.FromRgb(0, 0, 0));<br />
                m_body.Fill = _notWalkableColor;<br />
            }</p>
<p>            Position = position;<br />
        }</p>
<p>        public Tile(double tileSize, Point position, bool walkable)<br />
            : this(position, walkable)<br />
        {<br />
            m_root.Width = tileSize;<br />
            m_root.Height = tileSize;</p>
<p>            m_body.Width = tileSize;<br />
            m_body.Height = tileSize;<br />
        }<br />
    }<br />
}</p>
<p>Wie schon oben erwÃ¤hnt, lassen wir unser UserControl nicht von <em>Control</em>, sondern von <em>TileBase</em> erben und geben ihm unsere ergÃ¤nzten Eigenschaften, wie ob es begehbar ist und dessen Position. FÃ¼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>
<p>Stream s = this.GetType().Assembly.GetManifestResourceStream(&#8220;SilvrGame_Map.Tile.xaml&#8221;);<br />
m_root = this.InitializeFromXaml(new StreamReader(s).ReadToEnd());<br />
m_body = m_root.FindName(&#8220;Body&#8221;) as Rectangle;</p>
<p>Als Ãœ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Ã¼ft werden, ob die Kachel fÃ¼r den &#8220;Held&#8221; als nicht begehbar deklariert wurde, ist dies der Fall, so fÃ¤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Ã¶ÃŸe ergÃ¤nzt. Sprich, durch den Aufruf dieses Konstruktors kÃ¶nnen wir die GrÃ¶ÃŸe der Kachel per Code Ã¤ndern, so kann es durchaus vorkommen, dass wir nicht die Default-Kachel von 40 x 40 Einheiten haben wollen, sondern vielleicht Kacheln der GrÃ¶ÃŸe 25 x 25 Einheiten.</p>
<p>public Tile(double tileSize, Point position, bool walkable)<br />
    : this(position, walkable)<br />
{<br />
    m_root.Width = tileSize;<br />
    m_root.Height = tileSize;</p>
<p>    m_body.Width = tileSize;<br />
    m_body.Height = tileSize;<br />
}</p>
<p>Ein weiterer, noch wichtigerer Grund ist, dass die Spielfeldklasse die KachelgrÃ¶ÃŸe verwaltet und somit entscheidet, wie groÃŸ/klein die Kacheln erzeugt werden.<br />
Somit wÃ¤re unsere Kachel soweit fertig. Machen wir uns endlich an das Spielfeld ran. Hierzu fÃ¼gst du deinem Projekt eine neue Klasse hinzu, nÃ¤mlich <em>Map</em>. Wie gerade erwÃ¤hnt, verwaltet das Spielfeld die GrÃ¶ÃŸe jeder Kachel und bekommt deswegen diese Eigenschaft als Attribut &#8211; <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 &#8211; <em>m_parentCanvas</em> &#8211; als Attribut. Was noch bleibt ist neben einem Container fÃ¼r die generierten Kacheln &#8211; hier ein Array <em>m_mapTiles</em> &#8211; noch das Spielfeldformat &#8211; <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Ã¤tzlich entscheidet es Ã¼ber die GrÃ¶ÃŸe des Spielfeldes und der Anzahl der darin vorkommenden Kacheln.</p>
<p>private Canvas m_parentCanvas;<br />
private double m_tileSize;<br />
private Tile[,] m_mapTiles;</p>
<p>// Initialisize the map format<br />
private int[,] m_map =<br />
{<br />
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},<br />
    {1, 0, 0, 0, 0, 0, 0, 0, 0, 1},<br />
    {1, 0, 1, 0, 0, 0, 1, 0, 0, 1},<br />
    {1, 0, 1, 0, 0, 0, 1, 1, 0, 1},<br />
    {1, 0, 0, 0, 0, 0, 0, 0, 0, 1},<br />
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}<br />
};</p>
<p>Jetzt fehlt uns nur noch der Konstruktor, der die Spielfeldattribute initialisiert und eine Methode &#8211; <em>BuildMap()</em> &#8211; zur Generierung des Spielfeldes.</p>
<p>public Map(Canvas rootCanvas, double tileSize)<br />
{<br />
    m_parentCanvas = rootCanvas;<br />
    m_tileSize = tileSize;<br />
    m_mapTiles = new Tile[m_map.GetLength(0), m_map.GetLength(1)];<br />
}</p>
<p>public void BuildMap(bool centered)<br />
{<br />
    for (int i = 0; i &lt; m_map.GetLength(0); i++)<br />
    {<br />
        for (int j = 0; j &lt; m_map.GetLength(1); j++)<br />
        {<br />
            bool walkable = true;</p>
<p>            if (m_map[i, j] == 1)<br />
            {<br />
                walkable = false;<br />
            }<br />
            // calculate the tile position depends on the centered parameter<br />
            Point cellPosition;<br />
            if (centered)<br />
            {<br />
                double canvasMiddle = m_parentCanvas.Height / 2 &#8211; (m_tileSize * m_map.GetLength(0) / 2);<br />
                double canvasCenter = m_parentCanvas.Width / 2 &#8211; (m_tileSize * m_map.GetLength(1) / 2);</p>
<p>                cellPosition = new Point(j * m_tileSize + canvasCenter, i * m_tileSize + canvasMiddle);<br />
            }<br />
            else<br />
            {<br />
            cellPosition = new Point(j * m_tileSize, i * m_tileSize);<br />
            }</p>
<p>            Tile _tile = new Tile(m_tileSize, cellPosition, walkable);</p>
<p>            m_parentCanvas.Children.Add(_tile);<br />
            m_mapTiles[i, j] = _tile;<br />
        }<br />
    }<br />
}</p>
<p>Ich habe der Methode <em>BuildMap()</em> als Ãœbergabeparameter einen boolschen Wert mitgegeben, der festlegt, ob das Spielfeld sowohl horizontal als auch vertikal zentriert dargestellt wird. Sonst wÃ¼rde es oben links in der Ecke kleben und das sah fÃ¼r mich nicht so schÃ¶n aus.</p>
<p>Nun hast du es aber geschafft. Zum SchluÃŸ 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Ã¶rigen Ãœbergabeparametern aufrufen. Das wars dann auch schon.</p>
<p>Map _map = new Map(this, 60);<br />
_map.BuildMap(true);</p>
<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Ã¤hr so aussehen:<br />
<a href="http://silvrgame.net/images/game_tut/01_map/03_mapscreenshot.jpg" title="Map Screenshot" target="_blank" class="liimagelink"><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Ã¤chsten Artikel bringen wir ein wenig Leben ins Spiel und fÃ¼gen dem Ganzen einen Held hinzu, den wir dann hoffentlich auf unsere Karte bewegen kÃ¶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>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Silverlight lÃ¤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ÃŸ.
Eine Neuinstallation der Runtime brachte keine Erfolge. Kann mir das PhÃ¤nomen leider nicht erklÃ¤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ÃŸ.</p>
<p>Eine Neuinstallation der Runtime brachte keine Erfolge. Kann mir das PhÃ¤nomen leider nicht erklÃ¤ren, den auf der silverlight.net Webseite springt das PlugIn an und zeigt den Inhalt mit Animation an. Ist nur etwas Ã¤rgerlich das Ganze, da ich einige Tabs im FF offen habe und bei jedem Testrun, muss ich meinen Firefox schlieÃŸen, weil Visual Studio eine Instanz des Browsers Ã¶ffnen muss, damit ich darin debuggen kann.</p>
<p>Gibts da eurerseits irgendwelche Erfahrungswerte bezÃ¼glich LauffÃ¤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>
		<slash:comments>5</slash:comments>
		</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Ã¤rt haben, bietet es sich nur an, diese Technik fÃ¼r die Generierung unseres Spielfeldes zu benutzen.
  Wie wir an diesem Bild links erkennen kÃ¶nnen, ist das Spielfeld eine zwei dimensionale FlÃ¤che, die sich in Spalten und Zeilen untergliedern lÃ¤sst. Das programmiertechnische Pendant in C# dazu wÃ¤re ein [...]]]></description>
			<content:encoded><![CDATA[<p>Da wir die Kachel-Technik im vorherigen Artikel erklÃ¤rt haben, bietet es sich nur an, diese Technik fÃ¼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Ã¶nnen, ist das Spielfeld eine zwei dimensionale FlÃ¤che, die sich in Spalten und Zeilen untergliedern lÃ¤sst. Das programmiertechnische Pendant in C# dazu wÃ¤re ein zwei dimensionales Array. Wem diese Datenstruktur nicht gelÃ¤ufig ist, so mÃ¶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Ã¼hrlich erklÃ¤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Ã¼rden wir also wie folgt ansprechen:</p>
<p>map[3][7];</p>
<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Ã¶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Ã¶nnen Kacheln den gebrauchen?<br />
Eine bestimmte HÃ¶he und Breite wÃ¤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Ã¶nnen von unserem Helden (Spielfigur) betreten werden. Eine Mauer oder Wasser sind je nach Spielprinzip nicht begehbar. Diese drei Eigenschaften fÃ¼r eine Kachel sollte uns fÃ¼rs erste reichen.</p>
<p>Somit hÃ¤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Ã¶sung des Problems recht einfach. Wir unterscheiden vorerst nur zwei ZustÃ¤nde, begehbar oder nicht begehbar. Also wÃ¼rde ich die Zahl  1  fÃ¼r den Zustand nicht begehrbar definieren und die Zahl 0 fÃ¼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Ã¼ssen wir fÃ¼r jede schwarze Kachel eine 1 und fÃ¼r jede weiÃŸe Kachel eine 0 schreiben. in C# sieht das folgendermaÃŸen aus:</p>
<p>int[,] map = {<br />
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},<br />
    {1, 0, 0, 0, 0, 0, 0, 0, 0, 1},<br />
    {1, 1, 0, 0, 0, 0, 0, 0, 0, 1},<br />
    {1, 0, 1, 1, 0, 0, 1, 1, 0, 1},<br />
    {1, 0, 0, 0, 0, 0, 0, 0, 0, 1},<br />
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}<br />
};</p>
<p>Man kÃ¶nnte das Format des Spielfeldes sicherlich auch in eine seperate Datei auslagern, sei es XML, TXT oder ein eigenes Dateiformat. Ich habe mich fÃ¼r das 2D Array entschieden, weil es erstens fÃ¼r kleine Spiele die gÃ¤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Ã¤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>
		<slash:comments>0</slash:comments>
		</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Ã¶rtlich Ã¼bersetzt bedeutet das &#8220;Auf Kacheln basierendes Spiel&#8221;, was die Sache eigentlich ganz gut erklÃ¤rt. Jedoch sagen Bilder meistens mehr als tausend WÃ¶rter und deswegen hier eins zur Verdeutlichung:

Mini Adventure (Lights of Laminos)
Auf diesem Bild kann man das Prinzip sehr gut erkennen. Die SpielflÃ¤che ist in viele kleine Kacheln untergliedert und findet [...]]]></description>
			<content:encoded><![CDATA[<p>Was sind Tile-Based-Games? WortwÃ¶rtlich Ã¼bersetzt bedeutet das &#8220;Auf Kacheln basierendes Spiel&#8221;, was die Sache eigentlich ganz gut erklÃ¤rt. Jedoch sagen Bilder meistens mehr als tausend WÃ¶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Ã¤che ist in viele kleine Kacheln untergliedert und findet seinen Ursprung vor langer langer Zeit. FrÃ¼her, als es auf den Speicherverbrauch ankam und man um jedes Bit gekÃ¤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ÃŸe Datenmengen nachladen zu mÃ¼ssen.<br />
Ich habe auf diesem Bild das Raster eingezeichnet und die FlÃ¤chenbereiche markiert, die aus ein und derselben Grafik bestehen. Die braun hinterlegten Vierecke haben dasselbe Muster, genau so die blau hinterlegten und die grÃ¼n hinterlegten FlÃ¤chen.Dieses Prinzip birgt aber nicht nur den Vorteil von geringen DatengrÃ¶ÃŸen, sondern auch die &#8220;einfache&#8221; Realisierung von Pathfinding Algorithmen oder Kollisionberechnungen. Desweiteren gibt es unzÃ¤hlige Informationen und Webseiten, die sich mit diesem Thema befassen und das ermÃ¶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Ã¤chsten Beitrag kÃ¼mmern wir uns um die Generierung solcher SpielflÃ¤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>
		<slash:comments>4</slash:comments>
		</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Ã¶nnen, brauchen wir selbstverstÃ¤ndlich die dafÃ¼r benÃ¶tigten Werkzeuge. Dazu zÃ¤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Ã¶nnen, brauchen wir selbstverstÃ¤ndlich die dafÃ¼r benÃ¶tigten Werkzeuge. Dazu zÃ¤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Ã¼hrenden Link zu den Entwicklungswekzeugen fÃ¼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Ã¶tigt ihr einmal das <em>Silverlight 1.1 Development Software Kit Alpha Refresh,</em> <em>Visual Studio 2008 Beta</em> &#8211; 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Ã¼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 Ã¶ffnet ihr sie in eurem Editor. Folgenden Inhalt mÃ¼sste diese Datei aufweisen:</p>
<p>&lt;Canvas x:Name=&#8221;parentCanvas&#8221;<br />
xmlns=&#8221;http://schemas.microsoft.com/client/2007&#8243;<br />
xmlns:x=&#8221;http://schemas.microsoft.com/winfx/2006/xaml&#8221;<br />
Loaded=&#8221;Page_Loaded&#8221;<br />
x:Class=&#8221;FirstStep.Page;assembly=ClientBin/FirstStep.dll&#8221;<br />
Width=&#8221;640&#8243;<br />
Height=&#8221;480&#8243;<br />
Background=&#8221;White&#8221;&gt;<br />
&lt;/Canvas&gt;</p>
<p>Ã„ndert hier die Background Eigenschaft von <em>White</em> auf <em>Black</em> und starte das Projekt durch drÃ¼cken der F5 Taste im Debugger. Bei einer funktionierenden Installation von Silverlight sollte nun ein neues Browserfenster geÃ¶ffnet werden, welches eine 640&#215;480 Pixel groÃŸe schwarze FlÃ¤che darstellt.</p>
<p>GlÃ¼ckwunsch, Silverlight lÃ¤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>
		<slash:comments>0</slash:comments>
		</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;Ã„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Ã¼ck greifen mÃ¶chte, werde ich meine Erfolge, Probleme und Zwischenschritte beim Spieleentwickeln [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn dein erster Gedanke <strong>&#8220;<em>Ã„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Ã¼ck greifen mÃ¶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Ã¼r mich der Anfang viele HÃ¼rden bereit hielt, will ich hier den Einstieg fÃ¼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ÃŸlich mit Silverlight 1.1 beschÃ¤ftigen, da es mir die MÃ¶glichkeit bietet, die Logik dahinter mit C# umzusetzen und ich mich halbwegs in dieser Programmiersprache wohlfÃ¼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Ã¼llen und du wirst hoffentlich deinen gesuchten Content hier wiederfinden kÃ¶nnen. SelbstverstÃ¤ndlich bist du ganz herzlich eingeladen am Geschehen aktiv mitzuwirken. Ideen, VerbesserungsvorschlÃ¤ge, Hinweise und Ã„hnliches wird hier sehr gerne gesehen und darf in Form von Kommentaren hinterlassen werden.<br />
Ich freue mich Ã¼ber jedes Feedback, sei es Lob oder aber auch Kritik.</p>
<p><strong>&#8220;Ã„Ã¤h Silverlight? Ne, lass mal. Hab ich nix am Hut mit, eigentlich suche ich nur das Weblog von Mariusz [Bionic]! Hast du es zufÃ¤llig irgendwo gesehen?&#8221;</strong></p>
<p>Ach du kennst Silverlight gar nicht? Dann wirds aber hÃ¶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 Ãœberblick, Ã¼ber diese technologie verschaffen. Interessiert dich nicht? Auch nicht schlimm. Das private Weblog von mir &#8211; Mariusz &#8211; 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Ã¶n und gschmeidig. Wann gehts den los?</em>&#8220;</strong></p>
<p><strong>JETZT!</strong><br />
Ich wÃ¼nsche viel SpaÃŸ 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>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
