In diesem Artikelbeispiel wird der spezifische JavaScript-Code zur Implementierung der gierigen Schlange als Referenz bereitgestellt. Der spezifische Inhalt ist wie folgt Zuerst müssen wir die Funktionen bestimmen, die die Schlange haben soll 1. Verwenden Sie die Auf-, Ab-, Links- und Rechtstasten auf der Tastatur, um die Bewegungsrichtung der Schlange zu steuern 2. Grenzbestimmung, d.h. das Spiel endet, wenn der Schlangenkopf die Grenze überschreitet 3. Kollisionserkennung, d. h. der Schlangenkopf und der Futterblock berühren sich 4. Essen Sie etwas und Ihre Punkte erhöhen sich um 1 Konkrete Umsetzung1.html-Code<div Klasse="Container"> <!--Spielplatz mit beweglichen Schlangen--> <div id="Spielplatz"> <!--Kleine Schlange--> <div id="Schlange"></div> <!--Essen--> <div id="Essen"></div> </div> <!--Rekordergebnis--> <div id="Menü"> <div>Punktzahl<span id="score"></span></div> </div> </div> 2. CSS-Code<Stil> * { Polsterung: 0; Rand: 0; } .container { Breite: 800px; Höhe: 600px; Rand: 0 automatisch; } #Spielplatz { Breite: 650px; Höhe: 100%; Hintergrundfarbe: Kadettenblau; schweben: links; Position: relativ; } #Speisekarte { Breite: 150px; Höhe: 100%; Hintergrundfarbe: Dunkelcyan; schweben: links; } #Schlange { Breite: 20px; Höhe: 20px; Hintergrundfarbe: #d3e0d7; Position: absolut; links: 0; oben: 0; } #Essen { Breite: 20px; Höhe: 20px; Hintergrundfarbe: #027766; Position: absolut; } .Körper { Breite: 20px; Höhe: 20px; Hintergrundfarbe: #178b9a; Position: absolut; ; oben: 0; links: 0; } #Punktzahl { Schriftgröße: 30px; Schriftstärke: fett; Farbe: Schwarz; } #Menü div { Schriftgröße: 20px; Schriftstärke: fett; Rand links: 20px; } #hqx { Breite: 100px; Höhe: 50px; Rand: 0 automatisch; } #inp { Rand: 0; Breite: 100px; Höhe: 50px; Hintergrundfarbe: Koralle; } </Stil> 3. Beginnen Sie mit der Implementierung spezifischer Funktionen1. Holen Sie sich zuerst den Knoten und legen Sie die globale Variable fest //Knoten abrufen var snake = document.getElementById("snake"); var Essen = document.getElementById("Essen"); var Spielplatz = document.getElementById("Spielplatz"); var Punktzahl = document.getElementById('Punktzahl'); // var inp = document.getElementById('inp') /*Globale Variablen festlegen*/ var Zeitgeber; var arr = []; //Array zum Speichern der Position der Schlange var num = 0; //Länge des Arrays var snakeBody; //Jedes Mal, wenn Sie ein Lebensmittel essen, vergrößern Sie den Körper 2. Richten Sie Schlüsselereignisse ein und bestimmen Sie Grenzkollisionen. Das Spiel endet, wenn eine Kollision auftritt. Ich habe bei diesem Codestück ein Problem festgestellt. Wenn ich if(){return} verwendete, um aus dem Ereignis auszusteigen, wurde der gesamte Code beendet und der folgende Code wurde nicht ausgeführt. Dann habe ich es in switch(){case: break;} geändert und es hat funktioniert. //Tastenereignis festlegen document.onkeydown = function (e) { var evt = window.evnet || e; Schalter (evt.Schlüsselcode) { Fall 37: //links clearInterval(timer); timer = window.setInterval(runLeft, 10); //Timer um nach links zu gehen function runLeft() { wenn (snake.offsetLeft > 0) { snake.style.left = snake.offsetLeft - 1 + 'px'; //Eigenbewegung erreichen snake.style.top = snake.offsetTop + 'px'; //Keine Änderung der Höhe arr.push([snake.offsetLeft, snake.offsetTop]); //Jedes Mal, wenn Sie sich um 1px bewegen, speichern Sie die Position im Array num++; //Addieren Sie 1 zur entsprechenden Arraylänge } anders { clearInterval(timer); //Timer löschen alert('du stirbst') //Fehlermeldung anzeigen document.onkeydown = null //Ende-Schaltfläche } } break; //Aktuellen Tastendruck beenden case 38: //clearInterval(timer); Timer = Fenster.SetInterval(runTop, 10); Funktion runTop() { wenn (snake.offsetTop > 0) { Schlange.style.top = Schlange.offsetTop - 1 + 'px'; Schlange.Stil.links = Schlange.OffsetLinks + 'px'; arr.push([Schlange.OffsetLinks, Schlange.OffsetOben]); Zahl++; } anders { Intervall löschen(Timer); Alarm ('du stirbst') document.onkeydown = null } } brechen; Fall 39: //richtig clearInterval(timer); Timer = Fenster.SetInterval(runRight, 10); Funktion runRight() { wenn (snake.offsetLeft < 630) { Schlange.Stil.links = Schlange.OffsetLinks + 1 + 'px'; Schlange.style.top = Schlange.offsetTop + 'px'; arr.push([Schlange.OffsetLinks, Schlange.OffsetOben]); Zahl++; } anders { Intervall löschen(Timer); Alarm ('du stirbst') document.onkeydown = null } } brechen; Fall 40: //ClearInterval(Timer); Timer = Fenster.SetInterval(runBottom, 10); Funktion runBottom() { wenn (snake.offsetTop < 580) { Schlange.style.top = Schlange.offsetTop + 1 + 'px'; Schlange.Stil.links = Schlange.OffsetLinks + 'px'; arr.push([Schlange.OffsetLinks, Schlange.OffsetOben]); Zahl++; } anders { Intervall löschen(Timer); Alarm ('du stirbst') document.onkeydown = null } } brechen; } 3. Kapseln Sie eine Funktion ein, um zufällig Lebensmittelpositionen zu generieren. Das erste Mal war ich unvorsichtig und vergaß, die Einheit hinzuzufügen. Ich schaute mir die Webseite an und es funktionierte nicht. Dann merkte ich, dass ich vergessen hatte, die Einheit hinzuzufügen. Funktion pos() { essen.stil.links = parseInt(Math.random() * 630) + 'px'; essen.style.top = parseInt(Math.random() * 580) + 'px'; } 4. Kapseln Sie eine Kollisionsbeurteilungsfunktion ein, sodass bei einer Kollision das Futter verschwindet und ein Stück des Schlangenkörpers hinzugefügt wird. Hier gab es ein Timer-Problem. Als ich es zum ersten Mal schrieb, war mein Timer-Löschflag dasselbe wie das vorherige Timer-Flag, was dazu führte, dass die Schlange auf und ab und nach links und rechts zitterte. Nach kontinuierlichen Änderungen habe ich endlich den Fehler gefunden. var timer1 = setInterval(eat, 10); //Setze einen Kollisionstimer function eat() { snakeCrashFood(snake, food); //Eingabeparameter Funktion snakeCrashFood(obj1, obj2) { var obj1Left = obj1.offsetLeft; var obj1Width = obj1.offsetWidth + obj1.offsetLeft; var obj1Top = obj1.offsetTop; var obj1Height = obj1.offsetHeight + obj1.offsetTop; var obj2Left = obj2.offsetLeft; var obj2Width = obj2.offsetWidth + obj2.offsetLeft; var obj2Top = obj2.offsetTop; var obj2Height = obj2.offsetHeight + obj2.offsetTop; wenn (!((obj1Breite < obj2Links) || (obj2Breite < obj1Links) || (obj1Höhe < obj2Oben) || ( obj2Höhe < obj1Oben))) { snakeBody = document.createElement("div"); //Erstelle ein neues div snakeBody.setAttribute("class", "body"); //Füge dem neuen Div einen Klassennamen hinzu playground.appendChild(snakeBody); //Füge einen neuen Body hinzu pos(); //Lass das Essen zufällig wieder erscheinen setInterval(follow, 10); //Ändere die Position des neuen Bodys dynamisch } } } 5. Legen Sie den zu verfolgenden Körper der Schlange fest, holen Sie sich das Array des Körpers der Schlange und die Position des neuen Körpers relativ zum 20. Array des vorherigen Körpers. Hier ist mir ein Array-Out-of-Bounds-Problem begegnet. Zu Beginn ist der anfängliche Num-Wert 0 und die Stelle = 20, sodass der Index vor der ersten Erhöhung von arr [Num-Stelle] [0] bei einer negativen Zahl beginnt. Unter Anleitung des Lehrers wird ein Urteil hinzugefügt, um dieses Problem zu lösen. Funktion folgen() { /*Holen Sie sich das Array der hinzugefügten Körper*/ var bodyNum = document.getElementsByClassName("body"); Punktzahl.innerHTML = bodyNum.Länge; var Stelle = 0; /*Jedes Mal, wenn sich das Array um 1 Pixel bewegt, ist die Position des neuen Körpers die Position des 20. Arrays relativ zum vorherigen Körper und so weiter*/ // konsole.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1") // konsole.log("arr : ==" + arr) // console.log("num : ==" + num) //2 für (var i = 0; i < bodyNum.length; i++) { // konsole.log("bodyNum.length : ==" + bodyNum.length) Platz += 20; // console.log("Ort : ==" + Ort)//20 // console.log("Anzahl - Stelle : ==" + (Anzahl - Stelle)) //-18 // bodyNum[i].style.left = arr[num - Stelle][0] + 'px'; // bodyNum[i].style.top = arr[num - Stelle][1] + 'px'; if (Anzahl - Stellen > 0) { bodyNum[i].style.left = arr[num - Stelle][0] + 'px'; bodyNum[i].style.top = arr[num - Stelle][1] + 'px'; } } // konsole.log("num555 : ==" + num) // console.log("=================================================") } Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
>>: Detailliertes grafisches Tutorial zum Aktivieren des sicheren Remotezugriffs mit Docker
In diesem Artikel wird das Shell-Skript von mysql...
In diesem Artikel werden die einzelnen Schritte d...
1. Befehlseinführung Mit dem Befehl passwd werden...
Nach der Dekomprimierung der grünen Version von m...
Inhaltsverzeichnis 1. Übersicht 2. Definieren Sie...
Vorwort MySQL 8.0.13 unterstützt nun den Index-Sk...
Zusammenfassung: Viele Unternehmen, sogar die meis...
Text 1) Laden Sie das Ubuntu-Image herunter Docke...
Hintergrund Letzte Woche hat das Unternehmen eine...
Es gibt viele Datenbankverwaltungstools für MySQL...
Ich habe das ganze Internet durchsucht und bin au...
Wenn Sie Eingabe und Bild in dieselbe Zeile setzen...
Testumgebung: C:\>systeminfo | findstr /c:&quo...
Über die ungültige Zeilenhöheneinstellung in CSS ...
Inhaltsverzeichnis 1. Zusatzfunktionen 2. Beispie...