Dynamische Webseiten:
Programmierung eines Browsergames mit HTML und Javascript


ISBN-Nr.: 9783839107386, Verlag: BoD, Autor: M. Schuchmann



Javascript-Code für Beispiel Plasma-fliegt-immer.html mit Erklärungen



Der Code:
<html>
<head>
<title>Galaxiswar.de</title>
<script language="javascript1.2" type="text/javascript">
 

// Es werden die Start-Positionen für das Schiff (10,10) = obere linke Ecke, das Ufo (800,800) und das Plasma (800,400) festgelegt.
// Die Punkte werden in der Variablen punkte gespeichert (Anfangswert = 0). Die Werte der Variablen werden aber erst nach einem 
// Tastendruck unten mit
document.getElementById... übergeben. Die eigentliche Startposition wird unten in html über die
// <div>-Blöcke festgelegt.

var xpos=10;
var ypos=10;
var xposu=800;
var yposu=800;
var xposp=800;
var yposp=400;

var punkte=0;

// Wenn eine Taste gedrückt wird, dann wird der Wert der Taste in der Variable nr gespeichert. Die Taste a hat die Nummer 97.
// Beim Drücken von a wird die x-Position um den Wert 5 verringert (am Anfang hätte dann xpos den Wert 10 - 5 = 5 und das Schiff würde
// die Position (5, 10) haben). Entsprechend wird bei der Taste d (Nummer 100) die x-Position um den Wert 5 erhöht, womit sich
// das Schiff nach rechts bewegt. Die Taste w hat die Nummer 119 und die Taste s die Nummer 115 (beim Drücken dieser Tasten wird die
// y-Position entsprechend verändert). Wenn man den Kommentar (//) in der Zeile "//alert(nr);" entfernt, wird die Nummer der gedrückten
// Taste immer ausgegeben.

// Bei jedem Tastendruck wird die Punktzahl um 1 erhöht.

if(document.captureEvents)document.
captureEvents(Event.KEYPRESS);
document.onkeypress = alarm;
function alarm(e)
{
var nr = document.all? window.event.keyCode : e.which;

if(document.captureEvents) routeEvent(e);
//alert(nr);

punkte+=1;
if (nr==97) xpos-=5;
if (nr==100) xpos+=5;
if (nr==119) ypos-=5;
if (nr==115) ypos+=5;

// d ist das Quadrat des Abstandes des Schiffes zur Position (400,400), dem Wurmloch.
// du ist das Quadrat des Abstandes des Schiffes zum Ufo.
// dp ist das Quadrat des Abstandes des Schiffes zum Plasma.

d=(xpos-400)*(xpos-400)+(ypos-400)*(ypos-400);
du=(xpos-xposu)*(xpos-xposu)+
(ypos-yposu)*(ypos-yposu);
dp=(xpos-xposp)*(xpos-xposp)+
(ypos-yposp)*(ypos-yposp);


// Beim Fliegen in das Wurmloch (d.h. wenn d <= 6400) wird die Position des Schiffes auf (800,100) gesetzt und somit verschoben.
dw=6400;
if (d<=dw) {
punkte+=200;
xpos=800;
ypos=100;}

// Bei der Kollision mit dem Ufo (d.h. wenn du <= 4000) wird die Position des Schiffes auf (10,10) und die des Ufos auf (700,300) gesetzt
// und die Punktzahl um 1000 verringert (falls diese dann negativ wäre, wird sie auf 0 gesetzt). Es wird auch eine Meldung ausgegeben (über alert).
dmax=4000;
if (du<=dmax) punkte-=1000;
if (punkte<0) punkte = 0;
if (du<=dmax) {
xpos=10;
ypos=10;
xposu=700;
yposu=300;
alert("Kollision mit Ufo! -1000 Punkte!");}

// Bei der Kollision mit dem Plasma (d.h. wenn dp <= 3600) wird die Position des Schiffes auf (10,10) und die des Plasmas auf (700,300) gesetzt
// und die Punktzahl um 800 verringert (falls diese dann negativ wäre, wird sie auf 0 gesetzt). Es wird auch eine Meldung ausgegeben (über alert).
dmax=3600;
if (dp<=dmax) punkte-=800;
if (punkte<0) punkte = 0;
if (dp<=dmax) {
xpos=10;
ypos=10;
xposp=700;
yposp=300;
alert("Kollision mit Plasma! -800 Punkte!");}

// Bewegung Ufo: Es wird eine (Pseudo-)Zufallszahl erzeugt, die zunächst zwischen 0 und 1 liegt. Diese wird mit 15 multipliziert, womit
// diese zwischen 0 und 15 liegt. Der Wert wird in a gespeichert. Entsprechend wird eine Zufallszahl zwischen 0 und 20 erzeugt und
// in b gespeichert. Die x-Position des Ufos wird dann um den Wert a erhöht (= zufällige Bewegung nach rechts). Zur y-Position wird der
// Wert b-5 (dies wäre dann eine Zahl zwischen -5 und 15) addiert. Eine Erhöhung des Wertes der y-Position ist eine Bewegung nach unten.
// Im "Mittel" bewegt sich das Schiff dann "zufällig" nach unten, da im "Mittel" mehr erhöht als verringert wird. Gleichzeitig bewegt sich das Ufo
// nach rechts (bei jedem Tastendruck zwischen 0 und 15 Einheiten).

a=Math.random();
a=15*a;
a=Math.round(a);
b=Math.random();
b=20*b;
b = Math.round(b);
xposu+=a;
yposu+=b-5;


// Wenn die Taste x gedrückt wird (falls nr = 120), so wird der Laser aktiviert. In diesem Fall wird das Bild laser.jpg eingeblendet (an der Position
// (xpos + 120, ypos + 10)). Wenn die Taste nicht gedrückt wurde, wird die Position des Lasers auf (-400, -400) gesetzt, die nicht zu sehen ist.
// Bei einem Treffer wird die Punktzahl um 2000 erhöht. Damit getroffen wurde, muss folgendes gelten: Der Betrag der Differenz der
// y-Positionen (dly) von Schiff und Ufo darf höchstens 30 betragen und das Ufo muss sich vor dem Schiff befinden (d.h. dlx >= 10).
// Bei einem Treffer wird die y-Position des Ufos auf xposu+100 gesetzt. Außerdem wird an der Stelle, an der sich zuvor das Ufo befand,
// das Bild ufot.jpg eingeblendet, welches ein rotes Ufo zeigt.

if (nr==120) document.getElementById("laser").style.left=
xpos+120;
if (nr==120) document.getElementById("laser").style.top=
ypos+10;
if (nr != 120) document.getElementById("laser").style.left=-400;
if (nr != 120) document.getElementById("laser").style.top=-400;
dlx=xposu-xpos;dly=Math.abs(ypos-yposu);
if (nr == 120 && dlx>=10 && dly <=30) {
alert("Treffer! +2000 Punkte!");
document.getElementById("ufot").style.left=xposu;
document.getElementById("ufot").style.top=yposu;
punkte=punkte+2000;
yposu=xposu+100;}
else {document.getElementById("ufot").style.left=-400;
document.getElementById("ufot").style.top=-400;}

// Es darf nichts über den "Rand" fliegen:
if (xpos>1000) xpos=1000;
if (ypos>900) ypos=900;
if (xpos<10) xpos=10;
if (ypos<10) ypos=10;
if (xposu>1000) xposu=10;
if (yposu>900) yposu=10;
if (xposp>1000) xposp=10;
if (yposp<10) yposp=900;

// Hier werden nun die Positionen gesetzt bzw. verändert. Ohne diese Anweisungen würden nur die Werte der Positionen verändert werden,
// die Veränderung wäre aber nicht zu sehen.

document.getElementById("schiff").style.left=xpos;
document.getElementById("schiff").style.top=ypos;
document.getElementById("ufo").style.left=xposu;
document.getElementById("ufo").style.top=yposu;
document.getElementById("plasma").style.left=xposp;
document.getElementById("plasma").style.top=yposp;
document.getElementById("info").value=punkte;
document.getElementById("info2").value=punkte;
}

// Die Funktion plasmashift bewegt das Plasma und ruft sich alle 100ms neu auf. Sie befindet sich außerhalb des if-Blocks,
// der bei einem Tastendruck durchlaufen wird. Damit bewegt sich hier das Plasma unabhängig vom Ufo. Das Plasma bewegt sich
// im "Mittel" nach oben (denn zur y-Position yposp des Plasmas wird alle 100ms eine Zahl zwischen -10 und 4 addiert) und nach
// rechts (denn zur x-Position xposp des Plasmas wird alle 100ms eine Zahl zwischen 0 und 16 addiert).

function plasmashift(){
xposp=xposp+16*Math.random();
yposp=yposp+14*Math.random()-10;
// nicht über Rand fliegen
if (xposp>1000) xposp=10;
if (yposp>900) yposp=10;
document.getElementById("plasma").style.left=xposp;
document.getElementById("plasma").style.top=yposp;
setTimeout ("plasmashift()", 100);}

</script>
</head>
<body bgcolor='#2222ff' background='hintergrund.jpg' onload="plasmashift()">
<font color='#ff0000' size ='4'><br><br>Steuere mit a,w,s,d.<br> Laser abfeuern: x-Taste</font>

<div id='schiff' style='position:absolute;
z-index:1;left:10;top:10;visibility:visible;'>
<img border='0' src='schiff.jpg'> </div>

<div id='bild1' style='position:absolute;
z-index:1;left:400;top:400;visibility:visible;'>
<img border='0' src='bild1.jpg'> </div>

<div id='ufo' style='position:absolute;
z-index:1;left:800;top:800;visibility:visible;'>
<img border='0' src='ufo.jpg'> </div>

<div id='ufot' style='position:absolute;
z-index:1;left:-400;top:-400;visibility:visible;'>
<img border='0' src='ufot.jpg'> </div>

<div id='plasma' style='position:absolute;
z-index:1;left:800;top:400;visibility:visible;'>
<img border='0' src='plasma.jpg'> </div>

<div id='laser' style='position:absolute;
z-index:1;left:-500;top:-500;visibility:visible;'>
<img border='0' src='laser.jpg'> </div>

<br>
<font color='#ff0000' size ='4'>
Punkte:<input type='text' name='info' id='info' size='10' value='0' disabled>
</font><br>

</body>
</html>




Forum:

Hier kommst du zum Forum.
 

Bei Fragen: e-Mail schicken.