Une version Java du jeu Snake que j'ai écrit très sérieusement, avec une interface graphique, prend en charge le fonctionnement du menu, la surveillance du clavier, peut accélérer, décélérer, compter les scores, régler la vitesse de déplacement, définir la couleur d'arrière-plan du jeu, etc.! Il ne devrait pas y avoir de bugs, car je les ai complètement modifiés.
Ce qui suit est la relation hiérarchique entre les différents packages et classes du projet:
L'interface de course principale du jeu est indiquée ci-dessous:
Voici quelques codes. Voir ce lien pour le code source détaillé: Téléchargez le code source de Greedy Snake
Classe de serpents:
Package com.huowolf.entités; import java.awt.color; import java.awt.graphics; Importer java.awt.point; import java.util.hashset; import java.util.linkedlist; import java.util.set; Importer com.huowolf.Listener.snakeListener; import com.huowolf.util.global; classe publique Snake {// constante représentant la direction publique statique final int up = 1; public statique final int down = -1; public statique final int Left = 2; public statique final int droit = -2; // liser groupe private set <NakeListener> écouteurs = new hashset <SnakeListener> (); // Structure de la liste de stockage Private LinkedList <point> body = new LinkedList <point> (); vie booléenne privée; // est une pause booléenne privée vivante; // Le jeu privé int ol olddirection, newDirection; // Introduction de directions nouvelles et anciennes (éviter les directions invalides dans un temps de mouvement) Point privé Oldtail; // vieille queue (utilisée en mangeant de la nourriture) private int FoodCount = 0; // la quantité de nourriture mangée de couleur privée en casque; Bodycolor de couleur privée; private int sleeptime; public booléen islife () {return life; } public int getSleEptime () {return sleeptime; } public void setsleeptime (int sleeptime) {this.sleeptime = sleeptime; } public void SetheadColor (couleur headcolor) {this.headColor = headcolor; } public void setBodyColor (Color BodyColor) {this.bodyColor = bodyColor; } public void init () {int x = global.width / 2; int y = global.height / 2; pour (int i = 0; i <3; i ++) {body.addlast (nouveau point (x -, y)); } olddirection = newDirection = droite; FoodCount = 0; vie = vrai; pause = false; if (sleeptime == 0) {sleeptime = 300; }} // Méthode pour effacer les nœuds du serpent (utilisés pour démarrer un nouveau jeu) public void clear () {body.clear (); } public void setLife (Boolean Life) {this.life = life; } public boolean getPause () {return pause; } public void setPause (booléen pause) {this.pause = pause; } // Méthode pour modifier l'état des constantes de pause public void ChangePause () {pause =! Pause; } // Méthode à mourir pour Snake public void die () {life = false; } // Méthode pour déplacer public void move () {if (! (Olddirection + newDirection == 0)) {olddirection = newDirection; } // détail 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; } casser; Cas vers le bas: y ++; if (y> = global.height) {y = 0; } casser; Case gauche: x--; if (x <0) {x = global.width-1; } casser; Cas à droite: x ++; if (x> = global.width) {x = 0; } casser; } Point newhead = new Point (x, y); // ajouter la tête Body.AddFirst (newhead); } // Change Direction publique void changé de laction (direction int) {newDirection = Direction; } // manger de la nourriture publique void eatFood () {body.addlast (oldtail); FoodCount ++; } // Obtenez la quantité de nourriture que vous mangez public int getFoodCount () {return foodCount; } // Le serpent mange-t-il son propre corps public booléen iseatbody () {for (int i = 1; i <body.size (); i ++) {if (body.get (i) .equals (this.gethead ())) return true; } return false; } // Obtenez le nœud représentant le point public de la tête du serpent gethead () {return body.getFirst (); } // s'affiche public void drawMe (graphiques g) {if (bodyColor == null) {g.setColor (new Color (0x333ff)); } else {g.setColor (bodyColor); } pour (point p: body) {g.fillroundRect (px * global.cell_size, py * global.cell_size, global.cell_size, global.cell_size, global.cell_size, 15,12); } Drawhehead (G); } // Draw Snakehead Public Void Trawhead (Graphics G) {if (headcolor == null) g.setColor (color.yellow); else {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); } // La classe privée de classe interne SnakedRiver implémente Runnable {public void run () {while (life) {if (pause == false) {move (); pour (SnakeListener L: auditeurs) L.SnaKeMoved (Snake.Ce); } essayez {thread.sleep (temps de sommeil); } catch (InterruptedException e) {e.printStackTrace (); }}}}} // Méthode pour démarrer le thread public void begin () {new Thread (new SnakedRiver ()). Start (); } // Ajouter un écouteur public void addSnakeListener (snakeListener l) {if (l! = Null) {auditers.add (l); }} // accélérer le public void speedup () {if (sleeptime> 50) {sleeptime- = 20; }} // ralentit public void speeddown () {if (Sleeptime <700) {Sleeptime + = 20; }}}Classe de nourriture:
Package com.huowolf.entités; import java.awt.color; import java.awt.graphics; Importer java.awt.point; import com.huowolf.util.global; La classe publique alimentaire étend le point {privé statique final long serialversionUID = 1l; FoodColor de couleur privée; public void SetFoodColor (Color FoodColor) {this.foodColor = foodColor; } Couleur publique getFoodColor () {return foodColor; } public void newFood (point p) {setLocation (p); } public boolean isFoodeated (Snake Snake) {return this.equals (snake.gethead ()); } public void drawMe (graphics g) {if (foodColor == null) {g.setColor (colore.red); } else {g.setColor (foodColor); } g.fill3Drect (x * global.cell_size, y * global.cell_size, global.cell_size, global.cell_size, true); }}Classe de terrain
Package com.huowolf.entités; import java.awt.color; import java.awt.graphics; Importer java.awt.point; import java.util.random; import com.huowolf.util.global; classe publique Ground {private booléen [] [] rocks = new boolean [global.width] [global.height]; private int MapType = 1; public int getMapType () {return MapType; } public void setMapType (int mapType) {this.mapType = mapType; } // Initialiser le sol (effacer la pierre) public void clear () {for (int x = 0; x <global.width; x ++) pour (int y = 0; y <global.height; y ++) rocks [x] [y] = false; } / ** * Générer de la pierre * / public void generaRocks1 () {for (int x = 0; x <global.width; x ++) rocks [x] [0] = rocks [x] [global.height - 1] = true; pour (int y = 0; y <global.height; y ++) rocks [0] [y] = rocks [global.width - 1] [y] = true; } public void generaterocks2 () {for (int y = 0; y <6; y ++) {rocks [0] [y] = true; roches [global.width - 1] [y] = true; roches [0] [global.height - 1 - y] = true; roches [global.width - 1] [global.height - 1 - y] = true; } pour (int y = 6; y <global.height - 6; y ++) {rocks [6] [y] = true; roches [global.width - 7] [y] = true; }} public void generaRocks3 () {for (int x = 4; x <14; x ++) rocks [x] [5] = true; pour (int j = 5; j <15; j ++) rocks [21] [j] = true; pour (int y = 13; y <20; y ++) roches [14] [y] = true; pour (int x = 2; x <10; x ++) rocks [x] [17] = true; pour (int i = 10; i <global.width-3; i ++) rocks [i] [global.height-3] = true; } // Le serpent mange la pierre booléenne publique est-ce que le serpent de serpent) {pour (int x = 0; x <global.width; x ++) {for (int y = 0; y <global.height; y ++) {if (rocks [x] [y] == true & (x == Snake.gethead (). vrai; }} return false; } public point getPoint () {random random = new random (); int x = 0, y = 0; do {x = random.nextint (global.width); y = random.nextint (global.height); } while (rocks [x] [y] == true); retourner le nouveau point (x, y); } // Méthode d'affichage public void DrawMe (Graphics G) {g.setColor (Color.Dark_Gray); for (int x = 0; x <global.width; x ++) {for (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); }}}}}}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.