Eine Java -Version von Snake Game, die ich sehr ernst mit einer grafischen Schnittstelle geschrieben habe, unterstützt den Menübetrieb, die Tastaturüberwachung, kann beschleunigen, verzögern, bewertet, bewegungsgeschwindig, Spielen Hintergrund festlegen usw.! Es sollte keine Fehler geben, weil ich sie vollständig geändert habe.
Das Folgende ist die hierarchische Beziehung zwischen den verschiedenen Paketen und Klassen des Projekts:
Die wichtigste laufende Schnittstelle des Spiels ist unten gezeigt:
Das Folgende sind einige Codes. In diesem Link finden Sie den detaillierten Quellcode: Laden Sie den Quellcode der gierigen Schlange herunter
Schlangenklasse:
Paket com.huowolf.entities; Import Java.awt.Color; importieren java.awt.graphics; Import Java.awt.Point; import Java.util.hashset; import Java.util.linkedList; Java.util.set importieren; import com.huowolf.listener.snakelistener; import com.huowolf.util.global; öffentliche Klasse Snake {// Konstante repräsentiert die Richtung öffentlich statische endgültige int up = 1; öffentliches statisches Final int Down = -1; öffentliche statische endgültige int links = 2; public static final int right = -2; // Liser Group Private Set <Snakelistener> Hörer = new Hashset <Snakelistener> (); // Speicherliste Struktur private LinkedList <Point> body = new LinkedList <Point> (); privates boolesches Leben; // ist eine private Boolesche Pause lebendig; // macht das Spiel privat in der Olddirektion, Neuheit; // Einführung neuer und alter Richtungen (vermeiden Sie ungültige Anweisungen innerhalb einer Umzugszeit) privater Punkt Oldtail; // alter Schwanz (beim Essen von Essen verwendet) Private int foodcount = 0; // die Menge an Lebensmitteln, die private Farbkörpern gegessen wurden; Privatfarbene BodyColor; private int schlafzeit; public boolean islife () {return Life; } public int getleptime () {return sleeptime; } public void setsleeptime (int sleeptime) {this.sleeptime = sleeptime; } public void SetheadColor (Farbkopfcolor) {this.headColor = Headcolor; } public void setBodyColor (Color BodyColor) {this.bodyColor = BodyColor; } public void init () {int x = global.width/2; int y = global.height/2; für (int i = 0; i <3; i ++) {body.addlast (neuer Punkt (x-, y)); } oldDirection = newDirection = Right; foodCount = 0; Leben = wahr; pause = falsch; if (sleeptime == 0) {sleeptime = 300; }} // Methode zum Löschen der Knoten der Schlangen (verwendet, um ein neues Spiel zu starten) public void clear () {body.clear (); } public void setLife (boolean Leben) {this.life = Life; } public boolean getPause () {return pause; } public void setPause (boolesche Pause) {this.pause = pause; } // Methode zur Änderung des Status der Pausekonstanten public void ChangePause () {pause =! Pause; } // Methode, um für die Schlange zu sterben public void Die () {Life = false; } // Methode zum Verschieben public void move () {if (! (OldDirection + newDirection == 0)) {OldDirection = newDirection; } // Detail oldTail = body.removelast (); int x = body.getFirst (). x; int y = body.getFirst (). y; Switch (OldDirection) {case up: y--; if (y <0) {y = global.height -1; } brechen; Fall Down: y ++; if (y> = global.height) {y = 0; } brechen; Fall links: x--; if (x <0) {x = global.width-1; } brechen; Fall Recht: x ++; if (x> = global.width) {x = 0; } brechen; } Point newhead = neuer Punkt (x, y); // Kopf body.addfirst (Newhead) hinzufügen; } // Richtung ändern öffentliche void veränderte (intrichtung) {newDirection = Direction; } // Food public void eatfood () {body.addlast (OldTail); FoodCount ++; } // Holen Sie sich die Menge an Essen, die Sie öffentliche Int GetfoodCount () {return foodCount; } // frisst die Schlange ihren eigenen Körper öffentlich boolean isatbody () {für (int i = 1; i <body.size (); i ++) {if (body.get (i) .Equals (this.gethead ()) return true; } return false; } // den Knoten erhalten, der den Kopf der Schlange repräsentiert, public Point gethead () {return body.getFirst (); } // sich public void drawme (Grafik g) {if (bodycolor == null) {g.setColor (neue Farbe (0x3333ff)); } else {g.setColor (BodyColor); } für (Punkt P: Körper) {G.FillroundRect (px*global.cell_size, py*global.cell_size, global.cell_size, global.cell_size, global.cell_size, 15,12); } Drawhead (g); } // Snakehead public void drawhead (Grafik g) {if (Headcolor == null) g.setColor (color.yble); sonst {G.SetColor (Headcolor); } g.fillroundRect (gethead (). x * global.cell_size, gethead (). y * global.cell_size, global.cell_size, global.cell_size, global.cell_size, global.cell_size, 15,12); } // Die interne Klasse private Klasse SNACKEDRIVER implementiert Runnable {public void run () {while (Life) {if (pause == false) {move (); für (Snakelistener L: Zuhörer) L.Snakemoved (Snake.Dis); } try {thread.sleep (Sleeptime); } catch (interruptedException e) {e.printstacktrace (); }}}}} // Methode zum Starten von Thread public void begin () {neuer Thread (neuer SnakedRiver ()). Start (); } // Listener public void hinzufügen addSnakelistener (snakelistener l) {if (l! = Null) {listener.add (l); }} // Beschleunigen Sie public void speedeup () {if (sleeptime> 50) {sleeptime- = 20; }} // verlangsamen öffentlicher void speeddown () {if (sleeptime <700) {sleeptime+= 20; }}}Lebensmittelklasse:
Paket com.huowolf.entities; Import Java.awt.Color; importieren java.awt.graphics; Import Java.awt.Point; import com.huowolf.util.global; öffentliche Klasse Food erweitert Punkt {private statische endgültige lange Serialversionuid = 1L; private Farbfoodcolor; public void setfoodcolor (color foodcolor) {this.foodcolor = foodcolor; } public Color getfoodColor () {return foodcolor; } public void Newfood (Punkt p) {setLocation (p); } public boolean isfoodated (Snake Snake) {return this.equals (Snake.Gethead ()); } public void drawme (Grafik g) {if (foodcolor == null) {g.setColor (color.red); } else {g.setColor (foodcolor); } g.fill3Drect (x*global.cell_size, y*global.cell_size, global.cell_size, global.cell_size, true); }}Bodenklasse
Paket com.huowolf.entities; Import Java.awt.Color; importieren java.awt.graphics; Import Java.awt.Point; import Java.util.random; import com.huowolf.util.global; public class Ground {private boolean [] [] Rocks = new Boolean [global.width] [global.height]; private int mapType = 1; public int getMaptype () {return mapType; } public void setMaptype (int mapType) {this.maptype = mapType; } // Initialisieren Sie den Boden (Löschen Sie den Stein) public void clear () {für (int x = 0; x <global.width; x ++) für (int y = 0; y <global.Height; y ++) Gesteins [x] [y] = false; } / *** Stein erzeugen* / public void generaterocks1 () {für (int x = 0; x <global.width; x ++) Rocks [x] [0] = Rocks [x] [global.height - 1] = true; für (int y = 0; y <global.height; y ++) Rocks [0] [y] = rocks [global.width - 1] [y] = true; } public void generaterocks2 () {für (int y = 0; y <6; y ++) {rocks [0] [y] = true; Rocks [global.width - 1] [y] = true; Rocks [0] [global.height - 1 - y] = true; Rocks [global.width - 1] [global.height - 1 - y] = true; } für (int y = 6; y <global.height - 6; y ++) {rocks [6] [y] = true; Rocks [Global.Width - 7] [y] = true; }} public void generaterocks3 () {für (int x = 4; x <14; x ++) Rocks [x] [5] = true; für (int j = 5; j <15; j ++) Gesteine [21] [j] = true; für (int y = 13; y <20; y ++) Gesteine [14] [y] = true; für (int x = 2; x <10; x ++) Gesteine [x] [17] = true; für (int i = 10; i <global.width-3; i ++) Rocks [i] [global.height-3] = true; } // frisst die Schlange den Stein public boolean isgroundated (Snake Snake) {for (int x = 0; x <global.width; x ++) {für (int y = 0; y <global.height; y ++) {if (rocks [x] [y] == true && (x ==). }} return false; } public point getPoint () {randal randomy = new randal (); int x = 0, y = 0; do {x = random.nextint (global.width); y = random.nextint (global.height); } while (rocks [x] [y] == true); Neuen Punkt zurückgeben (x, y); } // Methode public void Drawme (Grafik g) {G.SetColor (color.dark_gray); für (int x = 0; x <global.width; x ++) {für (int y = 0; y <global.height; y ++) {if (rocks [x] [y] == true) {g.fill3Drect (x*global.cell_size, y*global.cell_size, global.cell_size, global.cell_size, true, true, true, true, truze, global.cell_size, global.cell_size, true, true, true, true, true, true, true, true, true, true, true, true, true, true, echte); }}}}}}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.