<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
	<channel>
		<title>BlitzBasic Portal Worklogs - Wie man den BCC gewinnt</title>
		<link>https://www.blitzforum.de/worklogs/502/</link>
		<description>Worklog von Xeres</description>
		<language>de</language>
		<managingEditor>mail@blitzforum.de</managingEditor>
		<webMaster>mail@blitzforum.de</webMaster>
		<pubDate>Sun, 20 May 2012 16:10:55 +0200</pubDate>
		<lastBuildDate>Sun, 20 May 2012 16:10:55 +0200</lastBuildDate>

		<item>
			<title>Wie man einen guten Blitz Code Contest veranstaltet!</title>
			<link>https://www.blitzforum.de/worklogs/502/#3547</link>
			<guid>https://www.blitzforum.de/worklogs/502/#3547</guid>
			<author>Xeres</author>
			<description>Zum BCC geh&amp;ouml;rt auch die rituelle Weitergabe der Veranstaltung an den Gewinner – was also tun, wenn man gewinnt?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Recherche &amp;amp; Vorbereitung&lt;/b&gt;&lt;br /&gt;Kreative Momente kommen und gehen. Man kann nicht darauf vertrauen, dass man einen genialen Einfall bekommt, wenn man ihn braucht. Darum, wann immer euch etwas einf&amp;auml;llt, schreibt es auf! Ein kleines, schwarzes Notizbuch mit Regelideen (auch wenn es nur Ausschnitte sind) ist seine Bytes in Gold wert.&lt;br /&gt;Die meisten Wettbewerbe im Forum laufen schon eine ganze Weile – nutzt die vorhergegangenen Themen ruhig als Vergleich! Vielleicht war eure Idee so &amp;auml;hnlich schon mal dabei?&lt;br /&gt;Wie pr&amp;auml;zise man auch glaubt, alle M&amp;ouml;glichkeiten mit Regeln abgedeckt zu haben, es gibt immer einen Graubereich der gefunden (und ausgenutzt) wird.&lt;br /&gt;Wenn ihr also nicht wisst, ob man etwas Bestimmtes mit einer Sprache umsetzen kann, solltet ihr euch an jemanden Wenden, der mehr Ahnung hat, bevor ihr die Regeln festlegt.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Faire Regeln&lt;/b&gt;&lt;br /&gt;Als Veranstalter d&amp;uuml;rft ihr entscheiden, was erlaubt und verboten sein soll. Bestimmt ihr ein Codelimit, oder begrenzt ihr die Arbeit der Teilnehmer auf andere Art?&lt;br /&gt;Lasst ihr alle Dateien zu, oder nur ausgew&amp;auml;hlte? &lt;br /&gt;Das Codelimit ist der h&amp;auml;ufigste Streitpunkt: Ein Limit f&amp;uuml;hrt zu gecrunchtem (unleserlich verk&amp;uuml;rztem) Code und m&amp;ouml;glicherweise unsauberen, aber eben auch kreativen L&amp;ouml;sungen. Ohne Limit ist der Code sauberer und die Teilnehmer k&amp;ouml;nnen fr&amp;ouml;hlich vor sich hin coden, ohne extra auf die Begrenzung achten zu m&amp;uuml;ssen.&lt;br /&gt;Welche Variante ihr w&amp;auml;hlt, h&amp;auml;ngt von dem ab, was ihr erreichen wollt. Ich bin der Ansicht, interessante, kreative Beitr&amp;auml;ge entstehen durch etwas Zwang. Wenn ein Spiel in 20 KB Spa&amp;szlig; macht, geht es auch mit 16 KB ohne Schnickschnack – das kondensierte, reine Spielprinzip sozusagen.&lt;br /&gt;Grafik ist die zweite gro&amp;szlig;e Fragestellung. Gute Grafik t&amp;auml;uscht ab und an &amp;uuml;ber Probleme mit der grundlegenden Spielmechanik hinweg, aber wer verzichtet schon freiwillig auf etwas H&amp;uuml;bsches?&lt;br /&gt;Bilder aus dem Code heraus zu generieren ist eine M&amp;ouml;glichkeit, die man f&amp;uuml;r die Regeln im Hinterkopf behalten sollte. &lt;br /&gt;Am besten sind immer einfache und eindeutige Regeln. 16 KB Grafik ist in Ordnung. „Benutzt wenige Bilder“ ist total ungeeignet.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ein Thema&lt;/b&gt;&lt;br /&gt;Vielleicht wollt ihr nicht zu komplizierte Regeln verwenden und stattdessen ein Ziel setzen, dass erreicht werden soll. Simple Themen (#29 - Uhr) k&amp;ouml;nnen so verschieden gel&amp;ouml;st werden, dass jeder etwas originelles Beitragen kann.&lt;br /&gt;Ein spezielles Genre (#57 - Towerdefense) macht den Vergleich der Beitr&amp;auml;ge sehr viel einfacher – zieht aber vielleicht nicht alle gleicherma&amp;szlig;en an.&lt;br /&gt;Wichtig finde ich, dass es eine Richtung gibt; „Programmiert ein Spiel“ mit den Regeln „Alles ist erlaubt“ ist einfach uninteressant. Es ist keine Herausforderung dabei.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Die Zeit&lt;/b&gt;&lt;br /&gt;Die Dauer des Wettbewerbs sollte man nicht zu kurz halten. Ideen finden, programmieren und testen braucht seine Zeit. M&amp;ouml;glichst jeder sollte 3-4 Wochenenden an Gelegenheit erhalten – oder besser etwas mehr. &lt;br /&gt;Zu viel Zeit kann aber auch nicht gut sein (insbesondere wenn keine Codegrenze vorgegeben ist). Zu viele Feature-Baustellen k&amp;ouml;nnen ein Projekt zum Stillstand bringen (oder den ganzen Wettbewerb einstauben lassen) und es ist einfacher, in einem kurzen Zeitraum neu ein zu steigen als mit 3 Wochen Nachteil zu starten.&lt;br /&gt;Also auch hier: Gut abw&amp;auml;gen.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Gastgeberpflichten&lt;/b&gt;&lt;br /&gt;Besonders zum Beginn des Wettbewerbs sollte man Anwesend sein um m&amp;ouml;glichst alle Fragen beantworten k&amp;ouml;nnen (auch wenn die Antworten schon gegeben und mehrfach in den Regeln besprochen wurden).&lt;br /&gt;Im Gegensatz zur Teilnahme, bei der wir wie zu Beginn des Worklogs andere Teilnehmer verschrecken wollten, geht es als Veranstalter darum, m&amp;ouml;glichst attraktive Konditionen zu bieten. Ein h&amp;uuml;bscher Header, ausgefeilte Regeln, ein ganz besonderes Thema, (digitale) Troph&amp;auml;en f&amp;uuml;r die Gewinner und ihr werdet in der Erinnerung des Portals &lt;i&gt;ewig&lt;/i&gt; leben!&lt;br /&gt;&lt;br /&gt;Bis zum n&amp;auml;chsten Contest, den ich versuche zu gewinnen!&lt;br /&gt;&lt;br /&gt;Xeres.&lt;br /&gt;</description>
			<pubDate>Sun, 20 May 2012 16:10:55 +0200</pubDate>
		</item>

		<item>
			<title>Kompilieren für Linux</title>
			<link>https://www.blitzforum.de/worklogs/502/#3542</link>
			<guid>https://www.blitzforum.de/worklogs/502/#3542</guid>
			<author>Xeres</author>
			<description>Alles ist zusammengebaut. Was nicht rechtzeitig fertig wurde gestrichen. Jetzt bleibt nur noch die Release Version zu kompilieren und zeitig ab zu geben!&lt;br /&gt;F&amp;uuml;r das beliebteste OS Windows ist das kaum ein Problem, aber was ist mit den lang b&amp;auml;rtigen Hippie-Nerds, die die ganze Zeit von Freiheit schwafeln? Jede Stimme ist wichtig, also installieren wir uns ein Linux!&lt;br /&gt;Nat&amp;uuml;rlich nur virtuell, diese Betriebssysteme sind gef&amp;auml;hrlich f&amp;uuml;r reale Hardware!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Schritt 1: Die virtuelle Umgebung&lt;/b&gt;&lt;br /&gt;&lt;a href=&quot;https://www.virtualbox.org/wiki/Downloads&quot; target=&quot;_blank&quot;&gt;VirtualBox&lt;/a&gt; l&amp;auml;sst euch multiple Rechner simulieren, um eure Software in allen m&amp;ouml;glichen Umgebungen zu testen. Keine Probleme mit Bootsektoren oder &amp;uuml;berschriebenen Festplatten!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Schritt 2: Ubuntu - weil darum!&lt;/b&gt;&lt;br /&gt;Ein leerer, virtueller Rechner macht noch nicht viel Sinn, darum installieren wir ein Betriebssystem. &lt;a href=&quot;http://www.ubuntu.com/download/desktop&quot; target=&quot;_blank&quot;&gt;Ubuntu&lt;/a&gt; ist nicht nur nett an zu sehen, der Paketmanager macht es auch einfacher, die n&amp;ouml;tigen Dinge zu installieren, um BlitzMax zur Arbeit zu bewegen.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Schritt 3: Installieren &amp;amp; Einrichten&lt;/b&gt;&lt;br /&gt;Man installiere nun also die VirtualBox auf Windows und lege virtuell das Image der Ubuntu Distribution ein. Auch die virtuelle Installation braucht ein Weilchen, also macht euch zwischen drin einen Tee und spielt ein, zwei Runden &lt;a href=&quot;https://www.blitzforum.de/showcase/472/&quot; target=&quot;_blank&quot;&gt;eines genialen Spiels&lt;/a&gt;.&lt;br /&gt;Sobald Ubuntu bereit ist, zieht eure Linux-Version von BlitzMax mittels eures &lt;a href=&quot;http://www.dropbox.com&quot; target=&quot;_blank&quot;&gt;Dropbox Accounts&lt;/a&gt; auf das System (Dropbox f&amp;uuml;r Linux installieren, versteht sich). Noch werdet ihr die Module nicht bauen k&amp;ouml;nnen, weil euch die n&amp;ouml;tigen Development Pakete fehlen.&lt;br /&gt;Also auf zur Paketverwaltung!&lt;br /&gt;folgende Pakete solltet ihr suchen, finden &amp;amp; installieren:&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox0&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('0')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox0&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('0')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox0&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('0');&quot;&gt;g++&lt;br /&gt;libx11-xcb-dev&lt;br /&gt;libxxf86vm-dev&lt;br /&gt;libfreetype6-dev&lt;br /&gt;libfltk1.1-dev&lt;br /&gt;libxpm-dev&lt;br /&gt;libglew1.6-dev&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Jetzt sollten die Module &amp;amp; Beispielcodes kompilierbar sein!&lt;br /&gt;Wenn nicht: Versucht heraus zu finden, welches Paket die fehlenden Header (.h) oder was auch immer enth&amp;auml;lt und installiert die &lt;i&gt;dev&lt;/i&gt; Version. Viel Gl&amp;uuml;ck dabei!&lt;br /&gt;&lt;br /&gt;Euer Projekt sollte nun nur noch minimal angepasst werden m&amp;uuml;ssen, z.B. um den Pfad f&amp;uuml;r einen Font korrekt zu setzen:&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]?Win32&lt;br /&gt;	SetImageFont(LoadImageFont(getenv_(&amp;quot;windir&amp;quot;) + &amp;quot;\fonts\&amp;quot; + &amp;quot;Arial.ttf&amp;quot;, 24))&lt;br /&gt;?Linux&lt;br /&gt;	SetImageFont(LoadImageFont(&amp;quot;/usr/share/fonts/truetype/freefont/FreeSans.ttf&amp;quot;, 24))&lt;br /&gt;?[/syntax]&lt;br /&gt;&lt;br /&gt;Und tadaa - ihr seid Multi-Platform und k&amp;ouml;nnt euch auf 1-2 zus&amp;auml;tzliche Stimmen freuen! Nicht vergessen das Projekt nochmal h&amp;uuml;bsch dar zu stellen bei der Abgabe. &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Aktuelle Version:&lt;/b&gt; &lt;a href=&quot;http://dl.dropbox.com/u/2075178/SoupCraft.zip&quot; target=&quot;_blank&quot;&gt;SoupCraft.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;In der n&amp;auml;chsten Ausgabe:&lt;/b&gt;&lt;br /&gt;Tr&amp;ouml;stende Worte f&amp;uuml;r die Verlierer in eurer Siegesrede.&lt;br /&gt;Wie man einen spannenden BCC veranstalltet.&lt;br /&gt;</description>
			<pubDate>Wed, 16 May 2012 13:17:17 +0200</pubDate>
		</item>

		<item>
			<title>Titel werden überbewertet</title>
			<link>https://www.blitzforum.de/worklogs/502/#3538</link>
			<guid>https://www.blitzforum.de/worklogs/502/#3538</guid>
			<author>Xeres</author>
			<description>Der BCC dauert nicht mehr all zu lange. Machen wir's kurz:&lt;br /&gt;Die Hintergrundebenen sind mit ein paar B&amp;auml;umchen versehen und die Fr&amp;uuml;chte haben ihre Pl&amp;auml;tze gefunden. Wenn man sie abschie&amp;szlig;t, wird ein Respawntimer gestartet. So bleibt der Spieler nie lange ohne Zutaten.&lt;br /&gt;Jeder TEnemy-Type gibt &amp;uuml;ber seine ToString-Methode seinen Namen zur&amp;uuml;ck, wenn er getroffen wird und dieser wird aus dem aktiven Rezept gestrichen. Sobald das Rezept Komplett ist, wird die Reaktion-Funktion aufgerufen. Die n&amp;ouml;tigen Rezepte und Reaktionen sind nun recht einfach zu erstellen. Sie stehen zwar nur im Quellcode und nicht in einer fancy-pantsy txt Datei, aber das w&amp;auml;re das kleinste Problem.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://img441.imageshack.us/img441/2075/soupcraft.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Was wirklich noch fehlt: Duh-du-duuuun &lt;b&gt;SOUND&lt;/b&gt;.&lt;br /&gt;Oft &amp;uuml;bersehen und &amp;uuml;bergangen werden regelm&amp;auml;&amp;szlig;ig Spiele erstellt, die nett an zu sehen sind aber keinen richtigen Charakter haben. Selbst eine kleine Prise Sound schafft die n&amp;ouml;tige Immersion um den Spieler von &amp;quot;Ich klicke Bilder weg&amp;quot; zu &amp;quot;Ich vernichte sinnlos Lebewesen&amp;quot; bringen. Visuelle Wahrnehmung ist nur ein Teil unseres Bildes von der Umgebung. Je mehr unterschiedliche Quellen zur Verf&amp;uuml;gung stehen, desto intensiver ist ein Erlebnis.&lt;br /&gt;Welche M&amp;ouml;glichkeiten haben wir, passende Sounds zu bekommen?&lt;br /&gt;&lt;br /&gt;1) Clips aus einem Online Soundarchiv heraussuchen.&lt;br /&gt;Auf den ersten Blick nicht schlecht: Schnell und einfach, oder? Kommt darauf an. Wenn man Stundenlang den perfekten Sound aus 1000 vorgefertigten St&amp;uuml;cken heraussuchen muss, ist man sicher nicht besonders schnell.  Zudem fehlt die Einheitlichkeit, wenn es keinen richtig passenden Sound gibt. Das Ergebnis kann dann tats&amp;auml;chlich schlimmer sein, als keinen Sound zu haben, weil Gehirne klasse darin sind Muster und kleine Fehler in diesen fest zu stellen.&lt;br /&gt;Man greife auf vorgefertigte Sounds also nur zur&amp;uuml;ck, wenn man es wirklich nicht selbst besser machen kann. &lt;br /&gt;&lt;br /&gt;2) Sound Generatoren&lt;br /&gt;Mal eben ein paar zuf&amp;auml;llige Sounds? Besonders wenn die Zeit dr&amp;auml;ngt, w&amp;auml;re ein Tool toll, dass mit ein paar Parametern einen Sound generiert. Gl&amp;uuml;cklicherweise gibt es exakt sowas: &lt;a href=&quot;http://www.drpetter.se/project_sfxr.html&quot; target=&quot;_blank&quot;&gt;sfxr&lt;/a&gt;.&lt;br /&gt;Der Ludum Dare Code-Contest l&amp;auml;uft nur f&amp;uuml;r 48 Stunden und genau f&amp;uuml;r so arge Beschr&amp;auml;nkungen ist das Progr&amp;auml;mmchen wie geschaffen. Ein Pling, Klich und Wuhuhuhu macht aus einem mittelm&amp;auml;&amp;szlig;igen Beitrag einen Gewinner.&lt;br /&gt;&lt;br /&gt;3) Sounds in Handarbeit&lt;br /&gt;Wenn man ein halbwegs gutes Mikrofon sein eigen nennt, kann man auch versuchen, Soundeffekte per Hand zu erstellen. Bleche Sch&amp;uuml;tteln um Donner zu erzeugen, T&amp;uuml;ten knistern f&amp;uuml;r elektrische Entladungen oder sanft ins Mikrofon hauchen um statisches rauschen zu bekommen.&lt;br /&gt;Nachtteile sind Offensichtlich: Zeit und etwas k&amp;ouml;nnen sind Voraussetzung. Daf&amp;uuml;r klingt es nicht zu k&amp;uuml;nstlich und es ist selbst gemacht.&lt;br /&gt;&lt;br /&gt;4) Bezahlt einen richtigen K&amp;uuml;nstler&lt;br /&gt;Es geht nichts &amp;uuml;ber Handgeschmiedeten, eigens angepassten Sound. Am besten mit epischer Musik dazu. &lt;br /&gt;Das gilt auch f&amp;uuml;r Grafik. Und Code, wenn wir ehrlich sind.&lt;br /&gt;Ein kreativer Schreiberling f&amp;uuml;r die Handlung wird auch nicht schaden.&lt;br /&gt;Am besten also, ihr leitet nur das Team.&lt;br /&gt;Wer soll das alles Bezahlen? Kickstarter, ihr Noobs!&lt;br /&gt;&lt;br /&gt;Wir sehen uns dann!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Aktuelle Version:&lt;/b&gt; &lt;a href=&quot;http://dl.dropbox.com/u/2075178/SoupCraft.zip&quot; target=&quot;_blank&quot;&gt;SoupCraft.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;In der n&amp;auml;chsten Ausgabe:&lt;/b&gt;&lt;br /&gt;Was hei&amp;szlig;t &amp;quot;Abgabe war gestern&amp;quot;?!</description>
			<pubDate>Sun, 13 May 2012 13:08:27 +0200</pubDate>
		</item>

		<item>
			<title>Steht ein Pilz im Wald, kommt ein Jäger und trinkt's au</title>
			<link>https://www.blitzforum.de/worklogs/502/#3530</link>
			<guid>https://www.blitzforum.de/worklogs/502/#3530</guid>
			<author>Xeres</author>
			<description>Mit Kirschkernen ist nicht zu Spa&amp;szlig;en! Die zerpfl&amp;uuml;cken einen Pilz blitzschnell in mikroskopisch kleine Teilchen (vor allem, weil Partikeleffekte noch etwas warten k&amp;ouml;nnen).&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://img31.imageshack.us/img31/7562/soupcraft2.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Die m&amp;ouml;glichen Ziele sind Abk&amp;ouml;mlinge eines TEnemy-Objektes (was Namen angeht, bin ich nicht zu kreativ...) und k&amp;ouml;nnen sich in drei Entfernungsstufen befinden.&lt;br /&gt;Falls sich ein Objekt hinter einem H&amp;uuml;gel versteckt, kann man es nicht treffen. Wir wir wissen, unterliegen &lt;a href=&quot;http://www.quantenwelt.de/elementar/fermionen.html&quot; target=&quot;_blank&quot;&gt;Fermionen&lt;/a&gt; dem Pauli-Prinzip.&lt;br /&gt;Jetzt muss das Gem&amp;uuml;se nur noch an ein paar Stellen gepflanzt werden (zuf&amp;auml;llige Verteilung s&amp;auml;he einfach doof aus). Punkte gibt es auch schon, die mit dem selben Skalierungsfaktor bedacht werden: Was weiter weg ist, z.B. 50% kleiner ist, gibt doppelt so viele Punkte. Ist ein simples Konzept, darum lasst es mich f&amp;uuml;r euch (nicht du pers&amp;ouml;nlich, du bist kl&amp;uuml;ger als der Rest hier *zwinker*) nochmal erkl&amp;auml;ren: Die Schwierigkeit des Zielens wird durch eine h&amp;ouml;here Punktzahl kompensiert - damit sollte der Spieler alle Ebenen beachten.&lt;br /&gt;&lt;br /&gt;Nun brauchen wir nur noch ein paar Ziele, die m&amp;ouml;glichst Nachwachsen (timer) und dann in einen Kessel geworfen werden (rezepte).&lt;br /&gt;&lt;br /&gt;Wie ihr an entsprechender Stelle nachschlagen k&amp;ouml;nnt, hat sich kaum jemand getraut, seine Projektideen vor zu stellen! Ich w&amp;uuml;rde ja mit dem Finger auf sie deuten und sie auslachen, aber dazu habe ich zu viel Klasse und ich lasse mich auch ungern beim popeln unterbrechen (nichts geht &amp;uuml;ber die direkte Massage des Gehirns).&lt;br /&gt;Wie dem auch sei, taktischer Erstschlag gelungen. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Aktuelle Version:&lt;/b&gt; &lt;a href=&quot;http://dl.dropbox.com/u/2075178/SoupCraft.zip&quot; target=&quot;_blank&quot;&gt;SoupCraft.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;In der n&amp;auml;chsten Ausgabe:&lt;/b&gt;&lt;br /&gt;Wie man Suppe kocht.&lt;br /&gt;Realit&amp;auml;tsgetreue Soundkulissen.&lt;br /&gt;Wie man aus Blei Gold macht.</description>
			<pubDate>Mon, 30 Apr 2012 17:54:22 +0200</pubDate>
		</item>

		<item>
			<title>...und es macht jetzt schon mehr Spaß als WoW!</title>
			<link>https://www.blitzforum.de/worklogs/502/#3528</link>
			<guid>https://www.blitzforum.de/worklogs/502/#3528</guid>
			<author>Xeres</author>
			<description>Wo waren wir... achja, unser Highscore sortiert sich, aber der User sieht davon noch nicht all zu viel.&lt;br /&gt;Die Draw-Funktion ist schnell angepasst - aber DrawText hat das kleine Problem, dass der Text immer Linksb&amp;uuml;ndig angezeigt wird. F&amp;uuml;r Zahlen nicht optimal, &amp;uuml;berschreiben wir diese Funktion also einfach mit einer besseren.&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Function DrawText(_txt:String, _x:Float, _y:Float, _HX:Float = 0.5, _HY:Float = 0.5)&lt;br /&gt;	Local scale_X:Float, scale_Y:Float&lt;br /&gt;	GetScale(scale_X, scale_Y)&lt;br /&gt;	brl.max2d.DrawText(_txt, Int(_x - (Float(TextWidth(_txt)) * scale_X * _HX)), Int(_y - (Float(TextHeight(_txt)) * scale_Y * _HY)))&lt;br /&gt;End Function[/syntax]&lt;br /&gt;&lt;br /&gt;Mit Beachtung der Skalierung und des Handle-Faktors - wie &amp;uuml;berall normalerweise mittig zentriert - steht einem richtigem Highscore nichts im Wege.&lt;br /&gt;Leider ist die Liste beim Start leer, laden wir also eine! ...wir haben noch keine gespeichert? Falls es soweit kommt, f&amp;uuml;llen wir den Highscore einfach mit ein paar Werten.&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Function Load()&lt;br /&gt;	Local File:TStream = ReadStream(THighscore.FilePath)&lt;br /&gt;	If Not(File) Then THighscore.Fill() ; Return&lt;br /&gt;&lt;br /&gt;	While Not(File.Eof())&lt;br /&gt;		Local n:String = File.ReadLine()&lt;br /&gt;		Local p:Int = File.ReadInt()&lt;br /&gt;		THighscore.Add(n, p)&lt;br /&gt;	Wend&lt;br /&gt;	&lt;br /&gt;	File.Close()&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Function Fill()&lt;br /&gt;	For Local i:Int = 0 Until 10&lt;br /&gt;		THighscore.Add(&amp;quot;Xeres&amp;quot;, i * i * 15 + i * 10 + 10)&lt;br /&gt;	Next&lt;br /&gt;End Function[/syntax]&lt;br /&gt;&lt;br /&gt;Die Punkte lassen sich sp&amp;auml;ter noch anpassen, erst mal brauchen wir nur Platzhalter.&lt;br /&gt;Okay! Jetzt gehen wir aber sicher, dass wir alles n&amp;ouml;tige speichern! Freundlicherweise stellt BlitzMax die OnEnd-Funktion bereit, der man Funktionen nennen kann, die vor dem Beenden noch ausgef&amp;uuml;hrt werden sollen.&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Global Points:Int, Time:Int, PlayerName:String = getenv_(&amp;quot;USERNAME&amp;quot;)&lt;br /&gt;&lt;br /&gt;LoadOptions()&lt;br /&gt;THighscore.Load()&lt;br /&gt;&lt;br /&gt;OnEnd(THighscore.Save)&lt;br /&gt;OnEnd(SaveOptions)[/syntax]&lt;br /&gt;&lt;br /&gt;Das funktioniert garantiert, solange das Spiel nicht abst&amp;uuml;rzt und wir m&amp;uuml;ssen uns keinen Kopf machen, ob wir jede Form von abbrechen/beenden bedacht haben.&lt;br /&gt;Man beachte: Keine Klammern - die Funktionen werden nicht aufgerufen!&lt;br /&gt;Man beachte au&amp;szlig;erdem: Erst Variablen mit Standardwerten f&amp;uuml;llen, dann ggf. laden.&lt;br /&gt;In den Optionen steht momentan nur der Spielername, aber solange wir den Spieler nicht freundlich am Arm ber&amp;uuml;hren k&amp;ouml;nnen, gibt nichts so viel Sympathie, wie der Simple Fakt, dass wir uns seinen Namen gemerkt haben.&lt;br /&gt;Wenn er mehr als einmal Spielt, selbstredend.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Aktuelle Version:&lt;/b&gt; &lt;a href=&quot;http://dl.dropbox.com/u/2075178/SoupCraft.zip&quot; target=&quot;_blank&quot;&gt;SoupCraft.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;In der n&amp;auml;chsten Ausgabe:&lt;/b&gt;&lt;br /&gt;Zielen &amp;amp; Pusten - wie man Kirschkerne auf t&amp;ouml;dliche Geschwindigkeiten bringt.&lt;br /&gt;Wie man ein Hausboot aus Zahnstochern baut.&lt;br /&gt;Zombies selbst gemacht: Gr&amp;auml;ber entweihen f&amp;uuml;r Anf&amp;auml;nger.&lt;br /&gt;</description>
			<pubDate>Tue, 24 Apr 2012 15:43:31 +0200</pubDate>
		</item>

		<item>
			<title>Dein wahrer Name lautet... %USERNAME%</title>
			<link>https://www.blitzforum.de/worklogs/502/#3526</link>
			<guid>https://www.blitzforum.de/worklogs/502/#3526</guid>
			<author>Xeres</author>
			<description>Richtige Spiele kann man verlieren. Entweder man muss von vorne anfangen oder man bekommt einen geh&amp;ouml;rigen Malus (das Gegenteil von Bonus). Um zu einem Spielbaren Zustand zu kommen, sollte man sich also so fr&amp;uuml;h wie m&amp;ouml;glich daran machen, den Spieler verlieren lassen zu k&amp;ouml;nnen.&lt;br /&gt;In unserem Fall ist das das Zeitlimit.&lt;br /&gt;Und da wir gerade dabei sind, k&amp;uuml;mmern wir uns doch noch um Punkte und den Namen des Spielers. Um sp&amp;auml;ter gar keine Probleme zu bekommen, sollten diese Variablen vor dem Start des Spiels auf ihre Startwerte zur&amp;uuml;ckgesetzt werden.&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Global Points:Int, Time:Int, PlayerName:String = getenv_(&amp;quot;USERNAME&amp;quot;)&lt;br /&gt;&lt;br /&gt;'[...]&lt;br /&gt;&lt;br /&gt;Function ResetGame()&lt;br /&gt;	Points = 0&lt;br /&gt;	Time = ms + 90500 '* 1:30'50	&lt;br /&gt;End Function[/syntax]&lt;br /&gt;&lt;br /&gt;Gut, gut. Um die die Zeit gescheit dar zu stellen, formatieren wir sie in ein netteres Format.&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Function MakeTime:String(_time:Int)&lt;br /&gt;	'* _time [ms]&lt;br /&gt;	Local parts:String[]&lt;br /&gt;	&lt;br /&gt;	'* Minuten&lt;br /&gt;	If _time &amp;gt;= 60000 Then&lt;br /&gt;		parts:+[String(_time / 60000)]&lt;br /&gt;		_time = (_time Mod 60000)&lt;br /&gt;	Else&lt;br /&gt;		parts:+[&amp;quot;0&amp;quot;]&lt;br /&gt;	EndIf&lt;br /&gt;	&lt;br /&gt;	'* Sekunden&lt;br /&gt;	If _time &amp;gt;= 1000 Then&lt;br /&gt;		parts:+[String(_time / 1000)]&lt;br /&gt;		If _time / 1000 &amp;lt; 10 Then parts[parts.Length - 1] = &amp;quot;0&amp;quot; + parts[parts.Length - 1]&lt;br /&gt;		_time = (_time Mod 1000)&lt;br /&gt;	Else&lt;br /&gt;		parts:+[&amp;quot;00&amp;quot;]&lt;br /&gt;	EndIf&lt;br /&gt;	&lt;br /&gt;	Return &amp;quot;:&amp;quot;.join(parts)&lt;br /&gt;	&lt;br /&gt;End Function[/syntax]&lt;br /&gt;&lt;br /&gt;Nun kann das Spiel verloren gehen!&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Function Run_Play()&lt;br /&gt;&lt;br /&gt;	'* Spiel vorbei!&lt;br /&gt;	If Time - ms &amp;lt;= 0 Then&lt;br /&gt;		FlushKeys()&lt;br /&gt;		GameState = GS_HighIn&lt;br /&gt;		Return&lt;br /&gt;	EndIf&lt;br /&gt;&lt;br /&gt;	DrawText(MakeTime(Time - ms), gfx_w *.02, gfx_h *.05)&lt;br /&gt;	DrawText(Points, gfx_w *.02, gfx_h *.1)&lt;br /&gt;	&lt;br /&gt;	If mh2 Then Time:+5000&lt;br /&gt;	If mh1 Then Time:-5000&lt;br /&gt;	&lt;br /&gt;End Function[/syntax]&lt;br /&gt;&lt;br /&gt;Den Spielernamen, den wir geschickter Weise vom Betriebssystem erfragt haben, ist ein guter Anfang, aber vielleicht will sich jemand ja anders nennen (wir tun mal einfach so, als h&amp;auml;tte der Spieler nicht-imagin&amp;auml;re Freunde), also braucht es eine Input-routine.&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Function Run_HighIn()&lt;br /&gt;&lt;br /&gt;	DrawText(PlayerName + &amp;quot;&amp;lt;&amp;quot;, gfx_w *.5, gfx_h *.5)&lt;br /&gt;	Local c:Int = GetChar()&lt;br /&gt;	If c &amp;gt; 31 And PlayerName.Length &amp;lt; 16 Then PlayerName:+Chr(c)&lt;br /&gt;	&lt;br /&gt;	If KeyHit(KEY_BACKSPACE) And PlayerName.Length &amp;gt; 0 Then PlayerName = PlayerName[..PlayerName.Length - 1]&lt;br /&gt;	If KeyHit(KEY_ENTER) Then&lt;br /&gt;		THighScore.Add(PlayerName, Points)&lt;br /&gt;		GameState = GS_High&lt;br /&gt;	EndIf&lt;br /&gt;	&lt;br /&gt;End Function[/syntax]&lt;br /&gt;&lt;br /&gt;Das bringt uns zum n&amp;auml;chsten Problem: Die Highscoreliste.&lt;br /&gt;Zu kompliziert ist es nicht. Wir wollen:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Namen &amp;amp; Punkte verwalten&lt;br /&gt;&lt;li&gt;Nach Punkten Sortieren&lt;br /&gt;&lt;li&gt;Das ganze Anzeigen&lt;br /&gt;&lt;li&gt;und nat&amp;uuml;rlich Speichern/Laden&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Wir m&amp;uuml;ssen uns nicht gro&amp;szlig;artig mit Sortieralgorithmen aufhalten - wir vertrauen einfach darauf, dass BlitzMax eine Liste mit ~11 Eintr&amp;auml;gen in der durchschnittlichen Lebensspanne eines Menschen verarbeiten kann.&lt;br /&gt;Damit das funktioniert, &amp;uuml;berschreiben wir nur die Compare-Methode, die jedes Objekt besitzt. Selbstredend benutzen wir die Punktedifferenz von zwei Objekten, um einen Vergleich an zu stellen.&lt;br /&gt;Gleiche Punktzahlen bedeuten, das kein Tausch stattfindet - warum ist das signifikant? Ganz einfach: Stellt euch vor, ihr habt drei Tage versucht den Highscore eures (cheatenden) Freundes zu knacken, aber ihr habt trotzdem nur exakt seine Punktzahl erreicht. Es gibt keine zwei Personen auf einem Platz, also muss einer von euch oben stehen.&lt;br /&gt;A) Der Eintrag wurde nicht &amp;uuml;bertroffen, also steht ihr unter eurem Freund.&lt;br /&gt;B) Der Eintrag ist neuer, also steht ihr &amp;uuml;ber eurem Freund.&lt;br /&gt;Hier gibt es keine wirkliches richtig oder falsch - es ist eine Designentscheidung, die ihr bewusst treffen solltet. Ich f&amp;uuml;r meinen Teil halte es f&amp;uuml;r positiver, wenn der neue Eintrag weiter oben steht.&lt;br /&gt;Aus diesem Grund werden neue Eintr&amp;auml;ge mit &lt;i&gt;AddFirst&lt;/i&gt; in die Liste aufgenommen.&lt;br /&gt;&lt;br /&gt;Und um sicher zu gehen, dass alles l&amp;auml;uft, wie es soll noch ein kurzer Test:&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Type THighscore&lt;br /&gt;&lt;br /&gt;	Field Name:String, Points:Int&lt;br /&gt;	&lt;br /&gt;	Global List:TList = New TList&lt;br /&gt;	&lt;br /&gt;	Function Add(_name:String, _points:Int)&lt;br /&gt;		Local H:THighscore = New THighscore&lt;br /&gt;		H.Name = _name&lt;br /&gt;		H.Points = _points&lt;br /&gt;		THighscore.List.AddFirst(H)	'* Neue Eintr&amp;auml;ge stehen weiter oben in der Liste&lt;br /&gt;		THighscore.List.Sort() '* Sort() benutzt die Compare-Methode des Objekts, siehe unten&lt;br /&gt;	End Function&lt;br /&gt;	&lt;br /&gt;	Method Compare:Int(withObject:Object)&lt;br /&gt;		Local H2:THighscore = THighscore(withObject)&lt;br /&gt;		Return H2.Points - Self.Points&lt;br /&gt;	End Method&lt;br /&gt;	&lt;br /&gt;	Method ToString:String()&lt;br /&gt;		Return Self.Name + &amp;quot; ~~ &amp;quot; + Self.Points&lt;br /&gt;	End Method&lt;br /&gt;	&lt;br /&gt;	Function Draw()&lt;br /&gt;		'* Nur zu Debugzwecken&lt;br /&gt;		For Local H:THighscore = EachIn THighscore.List&lt;br /&gt;			Print(H.ToString())&lt;br /&gt;		Next&lt;br /&gt;	End Function&lt;br /&gt;&lt;br /&gt;End Type&lt;br /&gt;&lt;br /&gt;'* Testen!&lt;br /&gt;THighscore.Add(&amp;quot;Ich&amp;quot;, 5)&lt;br /&gt;THighscore.Add(&amp;quot;Du&amp;quot;, 10)&lt;br /&gt;THighscore.Add(&amp;quot;Ich2&amp;quot;, 2)&lt;br /&gt;THighscore.Add(&amp;quot;Du2&amp;quot;, 10)&lt;br /&gt;THighscore.Draw()[/syntax]&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Aktuelle Version:&lt;/b&gt; &lt;a href=&quot;http://dl.dropbox.com/u/2075178/SoupCraft.zip&quot; target=&quot;_blank&quot;&gt;SoupCraft.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;In der n&amp;auml;chsten Ausgabe:&lt;/b&gt;&lt;br /&gt;Wie man Daten geschickt speichert und l&amp;auml;dt.&lt;br /&gt;Warum man stirbt, wenn man sich ausschlie&amp;szlig;lich von Hasenfleisch ern&amp;auml;hrt.&lt;br /&gt;Wie man sein Zimmer mit einer kleinen Quantit&amp;auml;t TNT innerhalb von 5/100 Sekunden perfekt aufr&amp;auml;umt.&lt;br /&gt;</description>
			<pubDate>Mon, 23 Apr 2012 15:37:35 +0200</pubDate>
		</item>

		<item>
			<title>Das Menü und wie man es präsentiert</title>
			<link>https://www.blitzforum.de/worklogs/502/#3525</link>
			<guid>https://www.blitzforum.de/worklogs/502/#3525</guid>
			<author>Xeres</author>
			<description>Das Beispielhafte Bild f&amp;uuml;r Kn&amp;ouml;pfe vom letzten mal habe ich noch mit einem netten Glanzlicht versehen, damit es h&amp;uuml;bsch Web2.0-glossy aussieht und die restlichen Kn&amp;ouml;pfe gemacht (siehe Screenshot &amp;amp; Download).&lt;br /&gt;&lt;br /&gt;Ein sauberer, aufger&amp;auml;umter Eindruck ist wichtig, darum vergesst nie, mindestens einen Unterordner zu erstellen, der alle Medien enth&amp;auml;lt.&lt;br /&gt;Nachdem nun Buttons funktionieren, wird es Zeit, den Code etwas zu strukturieren. Die Hauptschleife enth&amp;auml;lt nur noch das n&amp;ouml;tigste. Welcher Programmteil ausgew&amp;auml;hlt wird, ist in der Variable &lt;i&gt;GameState&lt;/i&gt; gespeichert und die m&amp;ouml;glichen Zust&amp;auml;nde in Konstanten - leicht lesbar und 67% weniger Fehlerbehaftet als &amp;uuml;berall Zahlen ein zu tragen.&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Const GS_MainMenu:Int = 0, GS_Play:Int = 1, GS_High:Int = 2, GS_Achi:Int = 3&lt;br /&gt;Global GameState:Int = GS_MainMenu&lt;br /&gt;&lt;br /&gt;'[...]&lt;br /&gt;&lt;br /&gt;Select GameState&lt;br /&gt;	Case GS_MainMenu; Run_MainMenu()&lt;br /&gt;	Case GS_Play; Run_Play()&lt;br /&gt;	Case GS_High; Run_High()&lt;br /&gt;	Case GS_Achi; Run_Achi()&lt;br /&gt;End Select&lt;br /&gt;&lt;br /&gt;'[...]&lt;br /&gt;&lt;br /&gt;Function Run_MainMenu()&lt;br /&gt;&lt;br /&gt;	'* Spielen&lt;br /&gt;	If ButtonImg(MenuButtons, 0, gfx_w *.5, gfx_h *.2) Then&lt;br /&gt;		GameState = GS_Play&lt;br /&gt;	EndIf&lt;br /&gt;	&lt;br /&gt;	'* Highscore&lt;br /&gt;	If ButtonImg(MenuButtons, 2, gfx_w *.5, gfx_h *.4) Then&lt;br /&gt;		GameState = GS_High&lt;br /&gt;	EndIf&lt;br /&gt;	&lt;br /&gt;	'* Errungenschaften&lt;br /&gt;	If ButtonImg(MenuButtons, 4, gfx_w *.5, gfx_h *.6) Then&lt;br /&gt;		GameState = GS_Achi&lt;br /&gt;	EndIf&lt;br /&gt;	&lt;br /&gt;	'* Beenden&lt;br /&gt;	If ButtonImg(MenuButtons, 6, gfx_w *.5, gfx_h *.8) Then&lt;br /&gt;		End&lt;br /&gt;	EndIf&lt;br /&gt;		&lt;br /&gt;End Function[/syntax]&lt;br /&gt;&lt;br /&gt;Das Men&amp;uuml; l&amp;auml;uft damit. Ein guter Zeitpunkt, den psychologischen Kampf gegen den Rest der Teilnehmer mit einem taktischen Erstschlag zu er&amp;ouml;ffnen. Demotiviere Teilnehmer sind verlierende Teilnehmer! &lt;br /&gt;Wichtige Informationen sind nat&amp;uuml;rlich:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Der Titel&lt;br /&gt;Er sollte sich gleich zu Anfang in das Ged&amp;auml;chtnis des Wahlvolkes einbrennen. &lt;br /&gt;&lt;li&gt;Das Genre&lt;br /&gt;Es sollte ansprechend formuliert werden, was den Spieler erwartet.&lt;br /&gt;&lt;li&gt;Die (geplanten) Features&lt;br /&gt;Versprecht nichts, was ihr nie einhalten k&amp;ouml;nnt aber &amp;uuml;bertreibt ruhig zu 25% - ihr wisst ja, wie Werbung funktioniert. &lt;br /&gt;Offensichtlich falsche S&amp;auml;tze, die man nie benutzen sollte sind sowas wie &amp;quot;St&amp;uuml;rzt nicht ab&amp;quot; oder &amp;quot;Macht Spa&amp;szlig;&amp;quot; - lasst das A die W&amp;auml;hler entscheiden weil es B total subjektiv ist.  &lt;br /&gt;&lt;li&gt;Ein Screenshot&lt;br /&gt;Benutzt immer einen guten, vorzeigbaren Screenshot. Nehmt nicht den erst besten, sondern einen, der tats&amp;auml;chlich etwas interessantes vorzeigt. Keine weiten, leeren Fl&amp;auml;chen; bunte, effektreiche Explosionen!&lt;br /&gt;Und bindet das Bild in einer Foren freundlichen Gr&amp;ouml;&amp;szlig;e direkt ein. Lasst nie jemanden eure Werbung suchen! &lt;br /&gt;&lt;li&gt;Der Download&lt;br /&gt;Kein muss (zu diesem Zeitpunkt) aber es zeigt ganz deutlich &amp;quot;Ja, ich arbeite daran und meine ma&amp;szlig;losen &amp;Uuml;bertreibungen der Features werden tats&amp;auml;chlich bald Wirklichkeit!&amp;quot;.&lt;br /&gt;Auch hier: Ein h&amp;uuml;bscher, aussagekr&amp;auml;ftiger Direktlink ist einem Sonderzeichendurchfall von einer Webadresse, die zu einer superlahmen, von Werbung strotzenden Hostingseite f&amp;uuml;hrt, weit &amp;uuml;berlegen!&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://www.blitzforum.de/forum/viewtopic.php?p=401736#401736&quot; target=&quot;_blank&quot;&gt;Beispiel&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Aktuelle Version:&lt;/b&gt; &lt;a href=&quot;http://dl.dropbox.com/u/2075178/SoupCraft.zip&quot; target=&quot;_blank&quot;&gt;SoupCraft.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;In der n&amp;auml;chsten Ausgabe:&lt;/b&gt;&lt;br /&gt;Wie erzeugt man waffenf&amp;auml;hige Kirschkerne?&lt;br /&gt;Highscores sammeln, sortieren und Speichern.&lt;br /&gt;Warum Feuchtigkeitscreme kein Ersatz f&amp;uuml;r Ketchup ist. &lt;br /&gt;</description>
			<pubDate>Sun, 22 Apr 2012 01:01:55 +0200</pubDate>
		</item>

		<item>
			<title>Buttons mit Inkscape</title>
			<link>https://www.blitzforum.de/worklogs/502/#3524</link>
			<guid>https://www.blitzforum.de/worklogs/502/#3524</guid>
			<author>Xeres</author>
			<description>&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://img32.imageshack.us/img32/7324/inkscapelogo.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;F&amp;uuml;r ein Men&amp;uuml; brauchen wir Kn&amp;ouml;pfe. Die passenden Grafiken erstellen wir mit &lt;a href=&quot;http://inkscape.org/&quot; target=&quot;_blank&quot;&gt;Inkscape&lt;/a&gt; - wir wollen schlie&amp;szlig;lich gewinnen! ...und Vektorgrafiken lassen sich einfach vergr&amp;ouml;&amp;szlig;ern und verkleinern ohne an Qualit&amp;auml;t zu verlieren. Inkscape ist kostenlos und leicht zu bedienen.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Schritt 1: Ein Rechteck muss her&lt;/b&gt;&lt;br /&gt;Buttons sind Quaderf&amp;ouml;rmig, also ziehen wir mit dem Rechteck-Tool eine passende Fl&amp;auml;che auf. Die aggressiven, spitzen Ecken b&amp;auml;ndigen wir mit einem kleinen Zug an den runden Anfassern und machen sie damit zu sanften, abgerundeten, verst&amp;auml;ndnisvollen Ecken.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://img441.imageshack.us/img441/3555/ink1.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Danach wechseln wir zum Zeiger-Tool und setzen H&amp;ouml;he &amp;amp; Breite des Buttons auf die Werte, die wir brauchen.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://img585.imageshack.us/img585/2274/ink2.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Schritt 2: Die richtige Schrift&lt;/b&gt;&lt;br /&gt;Es gibt sooo viele Schriftarten - welche passt hier am besten?&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://img88.imageshack.us/img88/7388/wahl.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Gratulation! Du hast die richtige Antwort &lt;b&gt;C&lt;/b&gt; gew&amp;auml;hlt!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A&lt;/b&gt;: Comic Sans. Wenn es Webseiten gibt, die sich der Ausrottung einer Schriftart verschrieben haben, sollte man sich sehr sicher sein, dass man sie einigerma&amp;szlig;en richtig einsetzt. Hier ist sie sicherlich fehl am Platz.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;B&lt;/b&gt;: Chiller. Was exakt ist so gruselig in dem Spiel? Wir machen leichte Unterhaltung, aber nichts, was einem einen Schauer &amp;uuml;ber den R&amp;uuml;cken jagd. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;C&lt;/b&gt;: Starcraft. Oh ja! Wenn unser Spiel &amp;auml;hnlich hei&amp;szlig;t und &amp;auml;hnlich aussieht... dann muss es doch auch total gut sein, oder? &lt;br /&gt;&lt;br /&gt;&lt;b&gt;D&lt;/b&gt;: Walbot. Hey, wir wollen nicht an einen altdeutschen Gasthof erinnern. Au&amp;szlig;erdem ist es saum&amp;auml;&amp;szlig;ig zu lesen!&lt;br /&gt;&lt;br /&gt;Was war das? Ihr habt keine 1000 Schriften zur Auswahl? Na dann aber los ins Internet! Es gibt viele Seiten, auf denen Schriftarten kostenlos und frei benutzbar auf euch warten. Starcraft fand ich zum Beispiel auf &lt;a href=&quot;http://www.dafont.com/&quot; target=&quot;_blank&quot;&gt;DaFont&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Schritt 3: Der Farbton muss stimmen&lt;/b&gt;&lt;br /&gt;Knopf und Beschriftung sind sch&amp;ouml;n und gut, aber ohne die richtige Farbe wird das nichts. Die Schrift sollte lesbar sein, also achten wir auf gen&amp;uuml;gend Kontrast.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://img688.imageshack.us/img688/1475/ink3.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Der Hintergrund bekommt einen Kreisf&amp;ouml;rmigen Farbverlauf, der in die L&amp;auml;nge gezogen die Hintergrundbeleutung spielt. Ein dunkles Rot im Vordergrund sorgt f&amp;uuml;r Kontrast.&lt;br /&gt;Wir duplizieren das ganze ([Strg]+D) erst einmal. Dann drehen wir im Hintergrund die Farbintensit&amp;auml;t etwas h&amp;ouml;her. Die Schrift wird ein sattes Gelb. Als finish dublizieren wir die Schrift nochmal und machen sie unscharf.&lt;br /&gt;Der Rest ist einfach: Alle Objekte eines Knopfes werden mit [Strg]+G zu einer Gruppe zusammengefasst. Wir richten die Buttons aneinander aus, gruppieren sie nochmals zu einem Objekt zusammen und exportieren das Ergebnis:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://img851.imageshack.us/img851/5286/buttonstart.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Codetechnisch brauchen wir nun eine Funktion, die einen von beiden Frames anzeigt (abh&amp;auml;ngig von der Maus) und einen Mausklick registriert.&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Function ButtonImg:Int(_img:TImage, _frame:Int, _x:Int, _y:Int)&lt;br /&gt;	If mouseInRect(_x - _img.width / 2, _y - _img.height / 2, _img.width, _img.height)&lt;br /&gt;		DrawImage(_img, _x, _y, _frame + 1) '* Hover Frame&lt;br /&gt;		If mh1 Then Return True '* Mausklick berichten&lt;br /&gt;	Else&lt;br /&gt;		DrawImage(_img, _x, _y, _frame)	'* Inaktiver Frame&lt;br /&gt;	EndIf&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Function mouseInRect:Int(x:Int, y:Int, w:Int, h:Int)&lt;br /&gt;	If mx &amp;lt;= x Then Return False&lt;br /&gt;	If my &amp;lt;= y Then Return False&lt;br /&gt;	If mx &amp;gt;= x + w Then Return False&lt;br /&gt;	If my &amp;gt;= y + h Then Return False&lt;br /&gt;	Return True	&lt;br /&gt;End Function[/syntax]&lt;br /&gt;&lt;br /&gt;Die mouseInRect Funktion ist bekannt aus Klassikern wie &lt;a href=&quot;https://www.blitzforum.de/forum/viewtopic.php?t=26870&quot; target=&quot;_blank&quot;&gt;Mouse on the Road&lt;/a&gt;. &lt;br /&gt;Jetzt noch alles zusammenbauen...&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]SuperStrict&lt;br /&gt;&lt;br /&gt;AppTitle = &amp;quot;SoupCraft&amp;quot;&lt;br /&gt;Global gfx_w:Int = 1024&lt;br /&gt;Global gfx_h:Int = 512&lt;br /&gt;Graphics(gfx_w, gfx_h, 0, 60)&lt;br /&gt;AutoMidHandle(True)&lt;br /&gt;SeedRnd MilliSecs()&lt;br /&gt;Local Frametimer:TTimer = TTimer.Create(60)&lt;br /&gt;&lt;br /&gt;Global mx:Int, my:Int, mh1:Int, mh2:Int, md1:Int, md2:Int, ms:Float&lt;br /&gt;&lt;br /&gt;Global test:TImage = LoadAnimImage(&amp;quot;ButtonStart.png&amp;quot;, 256, 64, 0, 2)&lt;br /&gt;&lt;br /&gt;SetColor(255, 255, 255)&lt;br /&gt;SetClsColor(0, 0, 0)&lt;br /&gt;SetBlend(ALPHABLEND)&lt;br /&gt;&lt;br /&gt;Repeat&lt;br /&gt;	Cls&lt;br /&gt;	&lt;br /&gt;	ms = MilliSecs()&lt;br /&gt;	mx = MouseX()&lt;br /&gt;	my = MouseY()&lt;br /&gt;	mh1 = MouseHit(1)&lt;br /&gt;	mh2 = MouseHit(2)&lt;br /&gt;	md1 = MouseDown(1)&lt;br /&gt;	md2 = MouseDown(2)&lt;br /&gt;&lt;br /&gt;	If ButtonImg(test, 0, gfx_w *.5, gfx_h *.5) Then&lt;br /&gt;		End&lt;br /&gt;	EndIf&lt;br /&gt;&lt;br /&gt;	&lt;br /&gt;	Flip(0)&lt;br /&gt;	Frametimer.Wait()&lt;br /&gt;	If KeyHit(KEY_ESCAPE) Or AppTerminate() Then End&lt;br /&gt;Forever&lt;br /&gt;End&lt;br /&gt;&lt;br /&gt;Function ButtonImg:Int(_img:TImage, _frame:Int, _x:Int, _y:Int)&lt;br /&gt;	If mouseInRect(_x - _img.width / 2, _y - _img.height / 2, _img.width, _img.height)&lt;br /&gt;		DrawImage(_img, _x, _y, _frame + 1) '* Hover Frame&lt;br /&gt;		If mh1 Then Return True '* Mausklick berichten&lt;br /&gt;	Else&lt;br /&gt;		DrawImage(_img, _x, _y, _frame)	'* Inaktiver Frame&lt;br /&gt;	EndIf&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Function mouseInRect:Int(x:Int, y:Int, w:Int, h:Int)&lt;br /&gt;	If mx &amp;lt;= x Then Return False&lt;br /&gt;	If my &amp;lt;= y Then Return False&lt;br /&gt;	If mx &amp;gt;= x + w Then Return False&lt;br /&gt;	If my &amp;gt;= y + h Then Return False&lt;br /&gt;	Return True	&lt;br /&gt;End Function[/syntax]&lt;br /&gt;&lt;br /&gt;&lt;b&gt;In der n&amp;auml;chsten Ausgabe:&lt;/b&gt;&lt;br /&gt;Wie man die Spielzust&amp;auml;nde organisiert.&lt;br /&gt;Wie man drei&amp;szlig;ig Tage in einer Salzw&amp;uuml;se &amp;uuml;berleben kann.&lt;br /&gt;Wie man einen Grizzlyb&amp;auml;r umschubst.&lt;br /&gt;</description>
			<pubDate>Fri, 20 Apr 2012 15:32:02 +0200</pubDate>
		</item>

		<item>
			<title>Planungsphase</title>
			<link>https://www.blitzforum.de/worklogs/502/#3523</link>
			<guid>https://www.blitzforum.de/worklogs/502/#3523</guid>
			<author>Xeres</author>
			<description>Die Super-duper Spielidee ist gefunden, nun braucht es etwas Details!&lt;br /&gt;Ich mag es, das Spielfeld erst einmal mit einer kleinen Skizze zu definieren.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://img209.imageshack.us/img209/5120/planak.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Wichtige Informationen m&amp;uuml;ssen sp&amp;auml;ter einen gut sichtbaren Platz finden (Zeit, Munition).&lt;br /&gt;Um eine Tiefenwirkung zu erzielen, benutzen wir parallax scrolling (Bodenwellen, H&amp;uuml;gel, Berge) und ein paar Hindernisse wie B&amp;auml;ume, Geb&amp;auml;ude usw. machen das Spiel nicht zu einfach. &lt;br /&gt;Schie&amp;szlig;en tut man nicht nur auf H&amp;uuml;hner, sondern auch auf Obst &amp;amp; Gem&amp;uuml;se (mit Kirschkernkannonen und Granatapfelwerfern) - und kann daraus Suppen kochen!&lt;br /&gt;Jedes Rezept kann eine Wirkung bekommen, z.B. mehr Zeit, mehr Munition, bessere Waffen - der &amp;uuml;bliche Upgrade Spa&amp;szlig;!&lt;br /&gt;Das befriedigt J&amp;auml;ger &amp;amp; Sammler Instinkte - zusammen mit einem Highscore (besser als andere sein zu wollen hat sich evolutionstechnisch auch durchgesetzt) sollte das s&amp;uuml;chtig machen.&lt;br /&gt;&lt;br /&gt;Dann mal ran an den Code!&lt;br /&gt;Selbstverst&amp;auml;ndlich benutzen wir BlitzMax. Wir wollen schlie&amp;szlig;lich gewinnen.&lt;br /&gt;&lt;br /&gt;Erst mal nur der Standardm&amp;auml;&amp;szlig;ige Anfang.&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]SuperStrict&lt;br /&gt;&lt;br /&gt;AppTitle = &amp;quot;SoupCraft&amp;quot;&lt;br /&gt;Global gfx_w:Int = 1024&lt;br /&gt;Global gfx_h:Int = 512&lt;br /&gt;Graphics(gfx_w, gfx_h, 0, 60)&lt;br /&gt;AutoMidHandle(True)&lt;br /&gt;SeedRnd MilliSecs()&lt;br /&gt;Local Frametimer:TTimer = TTimer.Create(60)&lt;br /&gt;&lt;br /&gt;Global mx:Int, my:Int, mh1:Int, mh2:Int, md1:Int, md2:Int, ms:Float&lt;br /&gt;&lt;br /&gt;SetColor(0, 0, 0)&lt;br /&gt;SetClsColor(255, 255, 255)&lt;br /&gt;SetBlend(ALPHABLEND)&lt;br /&gt;&lt;br /&gt;Repeat&lt;br /&gt;	Cls&lt;br /&gt;	&lt;br /&gt;	ms = MilliSecs()&lt;br /&gt;	mx = MouseX()&lt;br /&gt;	my = MouseY()&lt;br /&gt;	mh1 = MouseHit(1)&lt;br /&gt;	mh2 = MouseHit(2)&lt;br /&gt;	md1 = MouseDown(1)&lt;br /&gt;	md2 = MouseDown(2)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;	Flip(0)&lt;br /&gt;	Frametimer.Wait()&lt;br /&gt;	If KeyHit(KEY_ESCAPE) Or AppTerminate() Then End&lt;br /&gt;Forever&lt;br /&gt;End&lt;br /&gt;[/syntax]&lt;br /&gt;&lt;br /&gt;Ein Breitbildformat ist Trumpf: genug &amp;Uuml;bersicht in der Richtung, die wichtig ist. Was am Himmel oder am Boden passiert, k&amp;uuml;mmert den Spieler nicht.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Kommentar-Kommentar&lt;/b&gt;&lt;br /&gt;Zitat:&lt;div class=&quot;quotebox&quot;&gt;Kein 3D? Ich hab beim letzten BCC alles falsch gemacht&lt;/div&gt;In der Tat!&lt;br /&gt;Zus&amp;auml;tzliche Dimensionen machen nichts besser - nur anders. Schlimmstenfalls kauert der Spieler orientierungslos, verwirrt &amp;amp; ver&amp;auml;ngstigt in einer Ecke, bestenfalls denkt er sich &amp;quot;Mit einem HDR shader h&amp;auml;tte ich vielleicht sogar Spa&amp;szlig;...&amp;quot;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;In der n&amp;auml;chsten Ausgabe:&lt;/b&gt;&lt;br /&gt;Wie man ein Men&amp;uuml; zusammen zaubert.&lt;br /&gt;Wie man die daf&amp;uuml;r passende Grafik erstellt.&lt;br /&gt;</description>
			<pubDate>Thu, 19 Apr 2012 15:48:03 +0200</pubDate>
		</item>

		<item>
			<title>Idee &amp; Konzept</title>
			<link>https://www.blitzforum.de/worklogs/502/#3522</link>
			<guid>https://www.blitzforum.de/worklogs/502/#3522</guid>
			<author>Xeres</author>
			<description>Das Wichtigste bei einem Wettbewerb ist es, sich mit den Regeln vertraut zu machen! Gute Stichpunkte, die es ein zu halten gilt, finden sich meistens im Eingangstext:&lt;br /&gt;&lt;br /&gt;Zitat:&lt;div class=&quot;quotebox&quot;&gt;Programmiert ein Spiel, in dem eine oder mehrere Fr&amp;uuml;chte vorkommen. [...]&lt;br /&gt;- Keine Codebegrenzung&lt;br /&gt;- Maximale Gr&amp;ouml;&amp;szlig;e aller externen Ressourcen: 2 MiB&lt;br /&gt;[...] ihr k&amp;ouml;nnt einsenden bis einschlie&amp;szlig;lich zum 16. Mai 2012 &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Okay, nun muss man sich Fragen:&lt;br /&gt;Was f&amp;uuml;r ein Spiel m&amp;ouml;chte ich schreiben?&lt;br /&gt;Was f&amp;uuml;r ein Spiel kann ich schreiben?&lt;br /&gt;Was f&amp;uuml;r ein Spiel wird beim Volk gut ankommen?&lt;br /&gt;&lt;br /&gt;Ein WoW 2.0 kommt sicher gut an, aber weder von Zeit noch Umfang passt es in die Regeln.&lt;br /&gt;Ein billiger Snake-Clone w&amp;auml;re eine sichere Wahl. Jeder wei&amp;szlig; schon, was er spielt - aber das ist mir wirklich zu langweilig.&lt;br /&gt;Lieber etwas brutales - ein Ballerspiel! Kein 3D, nicht zu kompliziert - wer erinnert sich an dieses kleine Werbespiel f&amp;uuml;r &lt;a href=&quot;http://de.wikipedia.org/wiki/Moorhuhn_%28Computerspiel%29&quot; target=&quot;_blank&quot;&gt;Johnnie Walker&lt;/a&gt;? &lt;br /&gt;&lt;br /&gt;Jaaa, das ist gut. &lt;br /&gt;Um was spielt man? Punkte! &lt;br /&gt;Wie lange? Bis die Zeit abl&amp;auml;uft!&lt;br /&gt;Auf was schie&amp;szlig;t man...?&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://img690.imageshack.us/img690/9206/uhohl.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Welchen Titel nimmt man, um maximalen Erfolg zu garantieren?&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;SoupCraft&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;In der n&amp;auml;chsten Ausgabe:&lt;/b&gt;&lt;br /&gt;Wie man ein Projekt richtig beginnt.&lt;br /&gt;Wie man mit einsch&amp;uuml;chternden Screenshots und/oder Men&amp;uuml;demos die Konkurrenz klein h&amp;auml;lt. &lt;br /&gt;Und wo sind da die Fr&amp;uuml;chte?&lt;br /&gt;&lt;br /&gt;Bis dann!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links:&lt;/b&gt;&lt;br /&gt;&lt;a href=&quot;https://www.blitzforum.de/forum/viewtopic.php?t=38529&quot; target=&quot;_blank&quot;&gt;BCC #61 - Fr&amp;uuml;chte&lt;/a&gt;</description>
			<pubDate>Wed, 18 Apr 2012 22:12:53 +0200</pubDate>
		</item>


	</channel>
</rss>
