JavaScript Snake-Implementierungscode

JavaScript Snake-Implementierungscode

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 Umsetzung

1.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 Funktionen

1. 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:
  • JS implementiert das Schlangenspiel
  • JavaScript, um die Idee des Schlangenspiels umzusetzen
  • JavaScript-Implementierung des klassischen Schlangenspiels
  • Verwenden Sie js, um ein einfaches Schlangenspiel zu schreiben
  • JavaScript zur Implementierung der Webversion des Schlangenspiels
  • Implementierung des Snake-Spiels in JavaScript
  • Natives JS zur Realisierung eines einfachen Schlangenspiels
  • Snake-Spiel mit nativem JS schreiben
  • js um das Schlangenspiel mit Kommentaren zu implementieren
  • Exquisiter Snake-Implementierungsprozess in JavaScript

<<:  Centos7 implementiert Beispielcode zum Wiederherstellen von Daten basierend auf MySQL-Protokollen

>>:  Detailliertes grafisches Tutorial zum Aktivieren des sicheren Remotezugriffs mit Docker

Artikel empfehlen

Centos7 installiert mysql5.6.29 Shell-Skript

In diesem Artikel wird das Shell-Skript von mysql...

Verwendung des Linux-Befehls passwd

1. Befehlseinführung Mit dem Befehl passwd werden...

Lösen Sie das Problem ungültiger UTF8-Einstellungen in MySQL 5.6

Nach der Dekomprimierung der grünen Version von m...

Klassen in TypeScript

Inhaltsverzeichnis 1. Übersicht 2. Definieren Sie...

Index-Skip-Scan in MySQL 8.0

Vorwort MySQL 8.0.13 unterstützt nun den Index-Sk...

Probleme bei der Installation von Python3 und Pip in Ubuntu in Docker

Text 1) Laden Sie das Ubuntu-Image herunter Docke...

5 MySQL-GUI-Tools, die Ihnen bei der Datenbankverwaltung empfohlen werden

Es gibt viele Datenbankverwaltungstools für MySQL...

Tutorial zur Installation von MySQL 5.7.18 auf Mac OS 10.12

Ich habe das ganze Internet durchsucht und bin au...

Verwenden Sie die vertikale Ausrichtung, um Eingabe und Bild auszurichten

Wenn Sie Eingabe und Bild in dieselbe Zeile setzen...

Lösung für das Problem der ungültigen Zeilenhöheneinstellung in CSS

Über die ungültige Zeilenhöheneinstellung in CSS ...

Über die 4 Zusatzfunktionen von Vuex

Inhaltsverzeichnis 1. Zusatzfunktionen 2. Beispie...