Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
1 Einleitung
2 Webbrowser
3 JavaScript einbauen
4 Programmieren mit JavaScript
5 Datum
6 Zufall
7 Browserinformationen
8 Fenster
9 Formulare
10 Frames und Iframes
11 Grafiken
12 Cookies
13 Objekte und Arrays
14 Ereignisbehandlung
15 Fehlerbehandlung
16 DOM
17 DHTML und CSS
18 AJAX
19 XML
20 Web Services
21 AJAX-Frameworks
22 Plugins
23 Multimedia
24 Java
25 Serverseitige Technologien
26 JavaScript goes .NET
27 Code schützen
28 Top Secret: Passwortschutz
29 Signierte Skripte
30 JavaScript und Sicherheit
31 Navigation
32 Warenkorb
33 JavaScript-Bibliotheken
34 Referenz
35 Quellen im Web
36 Die Zukunft von JavaScript
Index
Download: - ZIP, ca. 9,2 MB
Buch bestellen
Ihre Meinung?
<< zurück | Galileo Computing / <openbook> / JavaScript und AJAX | vor >>
JavaScript und AJAX von Christian Wenz Das umfassende Handbuch
JavaScript und AJAX 839 S., mit DVD, 39,90 Euro Galileo Computing ISBN 3-89842-859-1 |
| Kapitel 24 Java
|  | 24.1 Allgemeines
|  |  | 24.1.1 Wie funktioniert Java?
|  |  | 24.1.2 Kurzeinführung in Java
|  | 24.2 Java und das WWW
|  |  | 24.2.1 Ein Beispiel-Applet
|  |  | 24.2.2 HTML-Integration
|  | 24.3 Java ohne Applet
|  |  | 24.3.1 Exemplarische Java-Objekte
|  |  | 24.3.2 Blackjack
|  |  | 24.3.3 Karten initialisieren
|  |  | 24.3.4 Karten mischen
## 24.3 Java ohne Applet Man braucht nicht unbedingt ein Applet, um Java-Methoden von JavaScript aus aufzurufen. Gewisse Grundobjekte von Java können auch direkt aufgerufen werden. Beispielsweise hat man so zu Zeiten des Netscape Navigator 3 versucht, die Höhe und Breite des Bildschirms zu bestimmen, weil es damals screen.width und screen.height noch nicht gab, wohl aber entsprechende Java-Methoden. Diese Vorgehensweise wird jedoch nur relativ selten verwendet; meistens benötigt man nicht nur ein mitgeliefertes Java-Objekt, sondern gleich eine (programmierte) Java-Funktion, und dann muss man ein Applet verwenden. Wenn Sie eine (programmierte) Java-Funktion verwenden wollen, beispielsweise eine Nullstellenberechnung oder andere mathematische Berechnungen (was mit den JavaScript-Datentypen nicht immer akkurate Ergebnisse liefert), so können Sie ein 1 × 1 Pixel großes Applet verwenden. Das Applet selbst soll keine Aktivität zeigen und fällt aufgrund seiner Größe nicht sonderlich auf, aber Sie können die öffentlichen Funktionen aufrufen und die Ergebnisse verwenden. ### 24.3.1 Exemplarische Java-Objekte Ein mögliches Beispiel ist die Java-Variante eines luxuriöseren Arrays, dort Vektor genannt. Die Klasse heißt Vector und wird von JavaScript aus (und übrigens auch von Java) mit java.util.Vector angesprochen. Mit den folgenden Befehlen wird eine Instanz des Java-Typs Vector erzeugt. Diese Instanz besitzt als Methoden alle als public deklarierten Methoden des Java-Objekts:
    if (navigator.javaEnabled()) {
       var v = new java.util.Vector();
    }
Dieser Vektor hat im Gegensatz zu einfachen JavaScript-Arrays Funktionen zum einfachen Entfernen und Hinzufügen von Elementen. Zwar gibt es bereits seit JavaScript 1.1 ein paar neue Möglichkeiten für JavaScript-Arrays, mit denen man diese neue Funktionalität ebenfalls erreichen kann, aber das ist nicht das Thema dieses Kapitels. Ein weiteres interessantes Java-Objekt ist Hashtable. Das ist auch ein Array, aber die Indizes sind nicht numerisch, sondern können auch Zeichenketten sein. Man kann beispielsweise sehr einfach eine Abbildung von Monatsnamen auf Monatszahlen erreichen. JavaScript unterstützt dies zwar auch, jedoch nicht in allen Versionen. (Das übliche Problem: Alte Browser sollten weiterhin unterstützt werden.) Im folgenden Beispiel könnten sowohl Vector als auch Hashtable verwendet werden. Wir beschränken uns hier aber auf Vector. Stellen Sie sich vor, Sie befinden sich in Las Vegas an einem Blackjack-Tisch. Sie haben ein einzelnes Kartenspiel vor sich2 und müssen es mischen und an die Spieler verteilen. Außerdem soll bei jedem Spieler angegeben werden, wie viele Punkte er mit seinen Karten erreicht hat. Eine vollständige Implementierung des Spiels ist Ihnen überlassen. J ### 24.3.2 Blackjack Zur Vorbereitung in aller Kürze die wichtigsten Blackjack-Regeln:
| Das Kartenspiel enthält in den vier Farben (Herz, Karo, Pik, Kreuz) die Nummernkarten 2 bis 10 sowie die Bildkarten Bube, Dame, König und das Ass. Insgesamt erhält man so ein Spiel (Deck) aus 52 Karten.
| Das Ziel des Spiels ist es, so nahe wie möglich an 21 Punkte heranzukommen, vor allem näher als die Bank, ohne jedoch die 21 Punkte zu überschreiten (das hat den sofortigen Verlust zur Folge).
| Eine Nummernkarte zählt so viele Punkte, wie auf der Karte stehen. Eine Bildkarte zählt zehn Punkte. Ein As zählt 11 Punkte, außer wenn der Spieler mit seinen Karten über 21 Punkte kommen würde (»überbieten«), dann zählt es einen Punkt. Hat ein Spieler also ein As und eine 7, so hat er 18 Punkte. Zwei Asse zählen als 12 Punkte, denn würden beide Asse mit 11 Punkten zählen, hätte der Spieler 22 Punkte und damit überboten. Analog zählen drei Asse als 13 Punkte.
| Hat der Spieler ein As und eine Karte, die zehn Punkte wert ist (eine Bildkarte oder die Zehn), so hat er einen »Blackjack«.
| Am Anfang des Spiels bekommt jeder Spieler zwei Karten zugeteilt.
| Weitere Regeln, etwa, was die Bank zu tun hat und wie man mehr Karten bekommen kann, sind nicht Thema dieses Buchs.
Die Strategie für die Blackjack-Applikation ist die folgende:
| In einer Schleife wird ein Array mit allen möglichen Karten gefüllt.
| Die Karten werden gemischt, indem immer ein Element aus dem Array zufällig ausgewählt, einem Spieler zugeteilt und aus dem Array entfernt wird.
| Bei jedem Spieler wird die Punktzahl seiner beiden Karten bestimmt. Diese Punktzahl wurde zuvor für einen schnellen Zugriff in einer Hashtable abgespeichert.
### 24.3.3 Karten initialisieren Jede Karte wird als Zeichenkette gespeichert. Hierbei werden die Farbe und die Kartenbezeichnung durch ein Trennzeichen, beispielsweise einen Leerzeichen, voneinander getrennt. Die äußere Schleife geht von 1 bis 13 (die Karten von 2 bis 10, König, Bube, Dame, Ass). Die innere Schleife geht von eins bis vier und umfasst die vier Farben. Die einzelnen Werte werden in einem Java-Vector gespeichert (natürlich nur zu Übungszwecken, denn, wie bereits gesagt wurde, geht das mit minimalem Mehraufwand auch mit reinen JavaScript-Mitteln). Die zugehörige, als public deklarierte Methode zum Einfügen eines Elements in ein Vector-Objekt heißt addElement(). Um noch ein wenig mehr Java zu verwenden, wird das zu übergebende String-Objekt auch als Java-Objekt generiert, obwohl man auch einfach die (JavaScript-)Zeichenkette hätte übergeben können.
    function deck() {
       // Hilfsvariablen
       var kartenname = new Array();
       kartenname[0]="Zwei"; kartenname[1]="Drei";
       kartenname[2]="Vier"; kartenname[3]="Fünf";
       kartenname[4]="Sechs"; kartenname[5]="Sieben";
       kartenname[6]="Acht"; kartenname[7]="Neun";
       kartenname[8]="Zehn"; kartenname[9]="Bube";
       kartenname[10]="Dame"; kartenname[11]="König";
       kartenname[12]="Ass";
       var farben = new Array();
       farben[0] = "Herz"; farben[1] = "Karo";
       farben[2] = "Pik"; farben[3] = "Kreuz";
       //Array initialisieren; als Java-Vector!
       var cards = new java.util.Vector();
       for (var i=0; i<13; i++) {
          for (var j=0; j<4; j++) {
             temp = farben[j] + " " + kartenname[i];
             karte = new java.lang.String(temp);
             cards.addElement(karte);
          }
       }
       return cards;
    }
### 24.3.4 Karten mischen Das Mischen gestaltet sich, wie bereits beschrieben, mit einem Vektor relativ einfach. Es wird ein beliebiges Element des Vector-Objekts bestimmt und aus dem Vektor herausgenommen. Parallel dazu wird ein neuer Vektor erzeugt, der die Elemente des »alten« Vektors enthält, nur in einer neuen, zufälligen Reihenfolge. Um dies zu bewerkstelligen, werden die folgenden Java-Methoden des Vector-Objekts benötigt:
| size(): Liefert die Anzahl der Elemente im Vektor zurück.
| elementAt(i): Liefert das Element an der Position i im Vektor zurück. (Die Zählung beginnt – wie bei Arrays auch – bei 0.)
| removeElementAt(i): Löscht das Element an der Position i aus dem Vektor.
    function mischen(alt) {
       var neu = new java.util.Vector();
       for (var i=alt.size(); i>0; i--) {
          var zufall = Math.floor(Math.random()*i);
          neu.addElement(alt.elementAt(zufall));
          alt.removeElementAt(zufall);
       }
       return neu;
    }
Die Kartenverteilung und die Punktberechnung werden an dieser Stelle nicht dargestellt. An dieser Stelle folgt lediglich eine Beispielseite, die ein Kartenblatt mischt und auf dem Bildschirm ausgibt. Hierzu wird die toString()-Methode eines Vector-Objekts verwendet, die die Elemente des Vektors als Zeichenkette ausgibt. Hier klicken, um das Bild zu Vergrößern Abbildung 24.3 Das gemischte Kartenblatt
    <html>
    <head>
    <title>Karten mischen</title>
    <script "text/javascript"><!--
    function deck() {
       // Hilfsvariablen
       var kartenname = new Array();
       kartenname[0]="Zwei"; kartenname[1]="Drei";
       kartenname[2]="Vier"; kartenname[3]="Fünf";
       kartenname[4]="Sechs"; kartenname[5]="Sieben";
       kartenname[6]="Acht"; kartenname[7]="Neun";
       kartenname[8]="Zehn"; kartenname[9]="Bube";
       kartenname[10]="Dame"; kartenname[11]="König";
       kartenname[12]="Ass";
       var farben = new Array();
       farben[0] = "Herz"; farben[1] = "Karo";
       farben[2] = "Pik"; farben[3] = "Kreuz";
       //Array initialisieren; als Java-Vector!
       var cards = new java.util.Vector();
       for (var i=0; i<13; i++) {
          for (var j=0; j<4; j++) {
             temp = farben[j]+" "+kartenname[i];
             karte = new java.lang.String(temp);
             cards.addElement(karte);
          }
       }
       return cards;
    }
    function mischen(alt) {
       var neu = new java.util.Vector();
       for (var i=alt.size(); i>0; i--) {
          var zufall = Math.floor(Math.random()*i);
          neu.addElement(alt.elementAt(zufall));
          alt.removeElementAt(zufall);
       }
       return neu;
    }
    function verteilen() {
       var c1 = deck();
       var c2 = mischen(c1);
       document.write(c2.toString());
    }

    //--></script>
    </head>
    <body>
    <h3>Karten mischen</h3>
    <script "text/javascript"><!--
       if (navigator.javaEnabled()) {
          verteilen();
       }

    //--></script>
    </body>
    </html>
Auch wenn man darüber diskutieren kann, ob Java im Web noch eine Relevanz hat: Mit JavaScript ist es sehr einfach, auf Java zuzugreifen, sei es in Form eines Applets oder auch in Form eines Direktzugriffs auf Java-Klassen. 1 Bei Galileo Press ist ein vorzügliches Buch zu diesem Thema erschienen: »Java ist auch eine Insel« von Christian Ullenboom! Das findet man heute kaum noch, da es dem Spieler einen Vorteil gegenüber der Bank bringt.
<< zurück | <top> | vor >>
Zum Katalog
JavaScript und AJAX bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung
Buchtipps
| JavaScript und AJAX - Das Video-Training
| Webseiten programmieren und gestalten
| XHTML, HTML und CSS
| CSS-Praxis
| AJAX
| PHP 5 und MySQL 5
| TYPO3 4.0
Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

Copyright © Galileo Press 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

[Galileo Computing]
Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de