📄 leveleditordeu.html
字号:
this.parent = parent;<br><br>
// Gesamtzahl von Leveln<br>
levels_in_total = Integer.parseInt (((Applet)parent).getParameter (C_LevelEditor.total_levels));<br><br>
// Initialisierung des Arrays<br>
level_array = new Level [levels_in_total];<br>
</ul>
}<br><br>
/* Diese Methode liest alle Level in der HTML Seite ein, erzeugt ein<br>
dementsprechendes Level und speichert es in dem Levelarray. */<br>
public Level [] readLevels ()<br>
{<br>
<ul>
for (int i = 1; i <= levels_in_total; i++)<br>
{<br>
<ul>
// Neues Level generieren<br>
Level level = new Level ();<br><br>
// Alle wichtigen Informationen über das Level holen und setzen<br>
level.setAuthor (((Applet)parent).getParameter ("Level" + i + "_" + C_LevelEditor.author));<br>
level.setName (((Applet)parent).getParameter ("Level" + i + "_" + C_LevelEditor.name));<br>
level.setComment (((Applet)parent).getParameter ("Level" + i + "_" + C_LevelEditor.comment));<br><br>
// Levelzeilen einlesen und im Level speichern<br>
for (int j = 0; j < C_LevelEditor.number_of_lines; j++)<br>
{<br>
<ul>
level.setLine (((Applet)parent).getParameter ("Level" + i + "_Line" + j), j);
</ul>
}<br><br>
// Level speichern<br>
level_array [i-1] = level;<br>
</ul>
}<br>
return level_array;<br></ul>
}</ul>
}
</ul>
<h4>Die Klasse Level</h4>
<p align="justify">Nachdem wir nun alle Level eingelesen haben, wollen wir sie in unserem Spiel darstellen. Dazu haben wir die Klasse Level. Wie schon oben erwähnt ist die wichtigste Instanzvariable der Klasse Level das zweidimensionale Array stone_map. In diesem Array werden die Stoneobjecte gespeichert, die im jeweils zur Zeile und Spalte der Matrix äquivalenten Rasterquadrat des Levels gezeichnet werden sollen. Die Klasse Level verfügt zunächst einmal über diverse Methoden um die Informationen aus den Levelparametern zu speichern. Interessanter ist da schon die Methode setLine(...). In ihr wird die Information aus einem bestimmten Levelparameter, der ja eine Zeile der stone_map Matrix darstellt, in Stoneobjecte übersetzt, die Details seht ihr dann im Sourcecode. Zu guter Letzt hat die Klasse Level noch die Methode paintLevel(...), die das gesammte Array des Levels durchläuft und die Stoneobjecte zeichnet.</p>
<ul>
import java.util.*;<br>
import java.awt.*;<br><br>
public class Level<br>
{<br>
<ul>
// Variablen<br>
private String author;<br>
private String name;<br>
private String comment;<br><br>
// Levelmatrix, speichert die Steinobjecte<br>
private Stone [] [] stone_map;<br>
public Level ()<br>
{<br>
<ul>
// Initialisierung der Matrix, alle Felder werden mit Null initialisiert<br>
stone_map = new Stone [C_LevelEditor.number_of_lines] <br> [C_LevelEditor.number_of_cols];<br>
</ul>
}<br><br>
// Methode übersetzt jeweils eine Zeile der Leveldefinition in Levelelemente<br>
public void setLine (String line, int line_index)<br>
{<br>
<ul>
char [] entrys = line.toCharArray();<br><br>
// Durchlaufen jedes Buchstabens und übersetzen in Stoneobject oder Null <br>
for (int i = 0; i < C_LevelEditor.number_of_cols; i++)<br>
{<br>
<ul>
Stone stone = null;<br><br>
// Bei Buchstaben 'r' erzeugen eines roten Steines<br>
if (entrys[i] == 'r')<br>
{<br>
<ul>stone = new Stone (line_index, i, Color.red);<br></ul>
}<br><br>
// Erzeugung der anderen Levelelemente analog<br>
...<br><br>
// Ist kein bekannter Buchstabe vorhanden, so keinen Stein erzeugen<br>
else<br>
{<br>
<ul>// do nothing<br></ul>
}<br><br>
// Stein im Array speichern<br>
if (stone == null)<br>
{<br>
<ul>// do nothing</ul>
}<br>
else<br>
{<br>
<ul>stone_map [line_index] [i] = stone;<br></ul>
}<br>
</ul>
}<br>
</ul>
}<br><br>
// set Methoden für die Levelinformationen<br>
...<br><br>
// Methode zeichnet das Level<br>
public void paintLevel (Graphics g)<br>
{<br>
<ul>
// Gesammtes Stonearray durchlaufen<br>
for (int i = 0; i < stone_map.length; i++)<br>
{<br>
<ul>
for (int j = 0; j < stone_map[i].length; j++)<br>
{<br>
<ul>
Stone stone = stone_map [i][j];<br><br>
// Entweder Stein zeichnen oder nichts zeichnen<br>
if (stone == null)<br>
{<br>
<ul>// draw nothing<br></ul>
}<br>
else<br>
{<br>
<ul> stone.drawStone(g);<br></ul>
}<br>
</ul>
}<br></ul>
}<br><br>
// zeichnen der Informationen<br>
g.setColor (Color.yellow);<br>
g.drawString (comment, 50, 250);<br>
g.drawString (name, 50, 270);<br>
g.drawString (author, 50, 290);<br>
</ul>
}<br>
</ul>
}
</ul>
<h3>Zusammenfassung</h3>
<p align="justify">Wir haben also nun gelernt, wie man Level in der HTML - Seite definieren könnte, wie man die so definierten Level in das Spiel einließt und dort zum Erzeugen bzw. Zeichnen des Levels verwendet. Wie immer gibt es viele verschiedene Möglichkeiten, dies zu bewerkstelligen und nicht nur die eine, die wir hier vorgestellt haben. Obwohl wir euch mit diesem Leveleditor möglicherweise einiges an Arbeit erspart haben (da ihr das Einlesen und Abspeichern fast eins zu eins übernehmen könnt), steht euch die größte Aufgabe noch bevor. Ihr müsst euer Spiel darauf einrichten, mit jedem beliebigen Level zu funktionieren, was gar nicht so einfach ist und natürlich ist dieser Leveleditor noch in keinster Weise auf euer Spiel abgestimmt, was Zeilen- und Spaltenzahlt, die verwendeten Levelelemente... angeht. Also, viel Spaß beim Erweitern des Leveleditors und wenn ihr ein Spiel unter Verwendung dieses Editors geschrieben habt, würde ich mich freuen, wenn ihr mir es zusendet. Wie immer am Ende eines Kapitels könnt ihr euch den Sourcecode runterladen und euch das fertige Applet ansehen.</p>
<p><a href="SourceCodes/Leveleditor/Leveleditor.zip">SourceCode download</a><br>
<a href="Applets/Leveleditor/Leveleditor.html">Applet ansehen</a>
<h4>Nächstes Kapitel</h4>
<a href="ScrollingDeu.html">Scrolling</a>
<!-- InstanceEndEditable -->
</div>
</td>
</tr>
<tr>
<td colspan="11" style="background-color:#990000" align="center">
<table width="100%" style="padding:0"><tr>
<td width="88" bgcolor="#993300"><div align="center" style="font-size:10px; color: #FFFFFF;"> <a href="#top"> to top </a></div></td>
<td><div align="center" style="font-size:10px; color: #FFFFFF;">
<a href="mailto:javacooperation@gmx.de">Fabian Birzele</a>, 2001-2004.<br>
web-design: <a href="http://www.freehand.str.ru/">Vadim Murzagalin</a>, 2004.
</div></td>
<td width="88">
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</body>
<!-- InstanceEnd --></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -