⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 landscapedeu.html

📁 java tutorial all about java game design
💻 HTML
📖 第 1 页 / 共 2 页
字号:
  <ol start="1" type="1">
  <li>Wir legen zun&auml;chst zuf&auml;llig einen Startpunkt fest.</li>
  <li>Nun initialisieren wir den zweiten Punkt bzw. die zweite Linie so, dass sie sich nur um eins plus oder minus von der anderen, ersten Zahl unterscheidet.</li>
  <li>Wir initialisieren auf diese Art und Weise alle Eintr&auml;ge im Array, indem wir vom letzten Eintrag entweder 1 abziehen oder hinzuaddieren.</li>
  <li>Die Entscheidung &uuml;ber addieren oder subtrahieren &uuml;berlassen wir ebenfalls dem Zufall, wobei in 90% der F&auml;lle die eingeschlagene Richtung (also plus oder minus eins) beibehalten wird, w&auml;hrend sie in 10% der F&auml;lle wechseln soll.</li>
  </ol>
  <img src="tutorial_pics/Landscape2.gif" align="left" border="0">
  <p align="justify">Wie ihr hier sehen k&ouml;nnt ist das Ergebniss dieses Ansatzes schon ziemlich brauchbar.
  Es gibt nur ein paar kleine Probleme und "Unsch&ouml;nheiten". Zu einen passiert es immer wieder, dass die "Berge" und "T&auml;ler" &uuml;ber die Ober- und Untergrenzen des Applets hinausgehen. Zum Anderen sind die meisten Landschaften noch sehr monoton. In dem nun folgenden Teil m&ouml;chte ich euch meinen "fertigen" Ansatz zur Generierung der Zufallslandschaft vorstellen. Davor noch kurz ein paar Hinweise. Zum einen habe ich nun einen weiteren Parameter eingef&uuml;hrt, der auch auf die H&ouml;he der Addition bzw. Subtraktion Einfluss hat, wodurch steilere und weniger steilere Berge entstehen. Zum anderen variiere ich die Farbe der Linien und speichere diese &Auml;nderungen in einem Colorarray. Zu guter Letzt halte ich noch die H&ouml;he bzw. Tiefe der Linien in einem gewissen Maximal- und Minimalbereich um Berge und T&auml;ler nicht zu hoch oder zu tief werden zu lassen.</p>
  <br clear=all> <br>

  <h3>Der Algorithmus</h3>

  <ul>public void generateLandscape ()<br>
  {<ul>
       /* Initialisierung von plus, diese Variable bestimmt, wieviel hinzugez&auml;hlt bzw.      abgezogen wird */<br>
       plus = 1;<br><br>

       // Initialisierung des Faktors (Wert + oder - 1)
       faktor = 1;

       // Initialisierung des Startwertes der Oberfl&auml;che<br>
       start = Math.abs(300 + (rnd.nextInt() % 50));<br><br>

       // Speichern des Startwertes an der ersten Stelle des Arrays<br>
       map [0] = start;<br><br>

       // Initialisierung der Startwerte f&uuml;r die Farben<br>
       int greenvalue = 200;<br>
       int redvalue = Math.abs(rnd.nextInt() % 200);<br>
       int bluevalue = Math.abs(rnd.nextInt() % 201);<br><br>

       // Speichern des ersten Startwertes f&uuml;r das Farbenarray<br>
       colors [0] = new Color (redvalue, greenvalue, bluevalue);<br><br>

       // Loop zur Initialisierung aller anderen Arrayfelder<br>
       for (int i = 1; i &lt; mapsize; i ++)<br>
       {<ul>
            // Speichern der letzten Arrayposition des H&ouml;henarrays<br>
            last = map [i - 1];<br><br>

            // Entscheidet, ob die eingeschlagene Richtung gewechselt wird<br>
            change = Math.abs(rnd.nextInt() % 10);<br>

            // In 10% der F&auml;lle &auml;ndert sich die Richtung und m&ouml;glicherweise plus<br>
            if (change &gt; 8)<br>
            {<ul>
               // &Auml;ndern der Richtung<br>
               faktor = - (faktor);<br><br>

               // Wieviel wird addiert bzw. substrahiert<br>
               plus = 1 + Math.abs(rnd.nextInt() % 2);<br>
            </ul>}<br><br>

            /* Wird ein bestimmter Wert unter- bzw. &uuml;berschritten, dann wird die Richtung ge&auml;ndert */
            if (last &gt; 350 || last &lt; 120)<br>
            {<ul>
                 // &Auml;ndern der Richtung<br>
                 faktor = - (faktor);<br>
            </ul>}<br><br>

            // H&auml;lt die Farbwerte immer in einem bestimmten Rahmen<br>
            if (greenvalue &gt; 240)<br>
            {<ul>
                 // Wenn Farbwert zu gro&szlig; wird, erniedrigen des Wertes<br>
                 greenvalue -= 10;<br>
            </ul>}<br>
            else if (greenvalue &lt; 100)<br>
            {<ul>
                 // Wenn Farbwert zu klein wird erh&ouml;hen des Farbwertes<br>
                 greenvalue += 10;<br>
             </ul>}<br><br>

             // Werte f&uuml;r das Feld an i - Stelle werden berechnet<br>
             map [i] = last + (faktor * plus);<br><br>

             /** Um die Farbewerte f&uuml;r zunehmende H&ouml;he heller werden zu lassen, wird              der Faktor umgekehrt. Dies ist wegen dem umgekehrten Koordinatensystem               von Java n&ouml;tig */<br>
             greenvalue = greenvalue + (-faktor * plus);<br>
             colors [i] = new Color (redvalue, greenvalue, bluevalue);<br>
       </ul>}
  </ul>}
  </ul>

  <p align="justify">
  <img src="tutorial_pics/Landscape3.gif" align=left border="0" >Sind die beiden Arrays erst einmal initialisiert, so kann die Landschaft mit einer einfachen Paint - Methode die Farb- und H&ouml;henarray durchl&auml;uft und jeweils eine Linie vom "Boden" des Applets zum Arraywert an der Stelle i in der dazugeh&ouml;rigen Farbe im Farbarray zeichnet, gezeichnet werden. Das Ergebniss dieses Algorithmus k&ouml;nnt ihr neben diesem Text sehen. Womit wir eigentlich schon am Ende dieses Kapitels angekommen sind. Wie ich schon erw&auml;hnt habe, k&ouml;nnte man auch jeden einzelnen Punkt der Landschaft speichern, wodurch sich vor allem noch interessantere Farbeffekte erziehlen lassen w&uuml;rden. Die Methode, wie ich sie vorgestellt habe ist allerdings ziemlich flexibel, schnell und sieht auch nicht unbedingt schlecht aus. Solltet ihr eingene Ideen haben, schickt sie mir oder am besten beschreibt sie kurz und schickt mir euer eigenens "Tutorial" Wie immer am Schluss k&ouml;nnt ihr euch das Applet ansehen und auch den Sourcecode runterladen!</p>
  <a href="SourceCodes/Landscape/Landscape.zip">SourceCode download (*.zip -  Datei)</a><br>
  <a href="Applets/Landscape/Landscape.html">Applet ansehen</a>
  <h4>N&auml;chstes Kapitel</h4>
<a href="LeveleditorDeu.html">Ein Leveleditor in Java</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 + -