Java -версия Snake Game, которую я написал очень серьезно, с графическим интерфейсом, поддерживает операцию меню, мониторинг клавиатуры, может ускорить, замедлить, считать оценки, скорость движения, установить цвет игры и т. Д.! Там не должно быть ошибок, потому что я полностью их изменил.
Ниже приведены иерархические отношения между различными пакетами и классами проекта:
Основной интерфейс игры игры показан ниже:
Ниже приведены некоторые коды. Смотрите эту ссылку для подробного исходного кода: Загрузите исходный код жадной змеи
Класс змеи:
пакет com.huowolf.entities; импортировать java.awt.color; импортировать java.awt.graphics; импортировать java.awt.point; импортировать java.util.hashset; импортировать java.util.linkedlist; импортировать java.util.set; Импорт com.huowolf.listener.snakelistener; Импорт com.huowolf.util.global; открытый класс Snake {// Постоянный представляющий направление общедоступное статическое окончательное окончание = 1; Public Static Final int Down = -1; Общественный статический окончательный окончательный int left = 2; Public Static Final int right = -2; // LISER GROUP Private SET <Snakelistener> слушатели = новый хэшсет <nakelistener> (); // Структура списка хранения частное LinkedList <popt> body = new LinkedList <opt> (); частная логическая жизнь; // частная логическая пауза живой; // делает игру Private int OldERection, NewDirection; // Введение новых и старых направлений (избегайте недействительных направлений в время переезда) частное очко; // старый хвост (используется при употреблении пищи) Частный int FoodCount = 0; // количество еды, съеденной частной цветной головы; Частный цвет Bodycolor; частный int sleeptime; Public Boolean Islife () {возвращать жизнь; } public int getSleepTime () {return SleepTime; } public void setSlime (int sleeptime) {this.sleeptime = sleeptime; } public void setheadcolor (color 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; for (int i = 0; i <3; i ++) {body.addlast (новая точка (x-, y)); } oldDirection = newDirection = right; FoodCount = 0; Life = true; пауза = false; if (sleeptime == 0) {sleeptime = 300; }} // Метод для очистки узлов змеи (используется для запуска новой игры) public void clear () {body.clear (); } public void setLife (boolean life) {this.life = life; } public boolean getPause () {return pause; } public void SetPause (Boolean Pause) {this.pause = pause; } // Метод для изменения состояния константы паузы public void changepause () {pause =! Pause; } // Метод умереть для змеи public void die () {life = false; } // Метод для перемещения public void move () {if (! (OldDirection + newDirection == 0)) {OldDirection = newDirection; } // деталь oldail = body.removelast (); int x = body.getFirst (). x; int y = body.getFirst (). y; Switch (OldDirection) {case up: y--; if (y <0) {y = global.height -1; } перерыв; Case Down: y ++; if (y> = global.height) {y = 0; } перерыв; Случай остался: x--; if (x <0) {x = global.width-1; } перерыв; Случай правильно: x ++; if (x> = global.width) {x = 0; } перерыв; } Point newhead = new Point (x, y); // Добавить Head Body.addfirst (newhead); } // изменение направления public void изменение направления (int direction) {newDirection = направление; } // съесть еду public void eatFood () {body.addlast (Oldtail); FoodCount ++; } // Получить количество еды, которую вы едите public int getFoodCount () {return FoodCount; } // Спит ли змея свое собственное тело общедоступное логическое iseatbody () {for (int i = 1; i <body.size (); i ++) {if (body.get (i) .equals (this.gethead ())) вернуть true; } вернуть false; } // Получите узел, представляющий главу Snake's Head Point Gethead () {return body.getFirst (); } // показать себя public void draitme (графика g) {if (bodycolor == null) {g.setcolor (new Color (0x3333ff)); } else {g.setcolor (bodycolor); } for (point p: body) {g.fillroundrect (px*global.cell_size, py*global.cell_size, global.cell_size, global.cell_size, global.cell_size, 15,12); } drawhead (g); } // Нарисовать змею -головы Public void Drawhead (Graphics G) {if (headcolor == null) g.setcolor (color.elellow); 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); } // Внутренний класс закрытый класс SnakedRiver реализует runnable {public void run () {while (life) {if (pause == false) {move (); для (Snakelistener L: слушатели) L.SnakeMoved (Snake.this); } try {thread.sleep (sleeptime); } catch (прерванное искусство e) {e.printstacktrace (); }}}}} // Метод для запуска потока public void begin () {new Thread (new SnakedRiver ()). Start (); } // Добавить слушатель public void addsnakelistener (snakelistener l) {if (l! = Null) {слушатели.add (l); }} // Ускорение public void speedup () {if (sleeptime> 50) {sleeptime- = 20; }} // замедлить public void speeddown () {if (sleeptime <700) {sleeptime+= 20; }}}Класс еды:
пакет com.huowolf.entities; импортировать java.awt.color; импортировать java.awt.graphics; импортировать java.awt.point; Импорт com.huowolf.util.global; Public Class Food Extens Point {Private Static Long Long Serialversionuid = 1L; Частный цветной пищевой пид; public void setFoodColor (Color FoodColor) {this.foodcolor = FoodColor; } public color getFoodColor () {return FoodColor; } public void newFood (точка P) {setLocation (p); } public boolean isfoodeated (Snake Snake) {return this.equals (snake.gethead ()); } public void draitme (графика 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); }}Наземный класс
пакет com.huowolf.entities; импортировать java.awt.color; импортировать java.awt.graphics; импортировать java.awt.point; импортировать java.util.random; Импорт com.huowolf.util.global; открытый класс 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; } // Инициализировать землю (очистить камень) public void clear () {for (int x = 0; x <global.width; x ++) для (int y = 0; y <global.height; y ++) породы [x] [y] = false; } / *** генерировать камень* / public void generatrocks1 () {for (int x = 0; x <global.width; x ++) Rocks [x] [0] = Rocks [x] [Global.height - 1] = true; for (int y = 0; y <global.height; y ++) породы [0] [y] = породы [global.width - 1] [y] = true; } public void Generaterocks2 () {for (int y = 0; y <6; y ++) {Rocks [0] [y] = true; Скалы [Global.width - 1] [y] = true; Скалы [0] [Global.height - 1 - y] = true; Rocks [Global.width - 1] [Global.height - 1 - y] = true; } for (int y = 6; y <global.height - 6; y ++) {Rocks [6] [y] = true; Скалы [Global.width - 7] [y] = true; }} public void Generaterocks3 () {for (int x = 4; x <14; x ++) Rocks [x] [5] = true; for (int j = 5; j <15; j ++) скалы [21] [j] = true; для (int y = 13; y <20; y ++) породы [14] [y] = true; для (int x = 2; x <10; x ++) породы [x] [17] = true; для (int i = 10; i <global.width-3; i ++) породы [i] [global.height-3] = true; } // Спит ли змея. Публичный логический логический isgroundeated (змея змея) {for (int x = 0; x <global.width; x ++) {for (int y = 0; y <global.height; y ++) {if (Rocks [x] [y] == true && (x = snake.gethead (). X && y == snake. истинный; }} вернуть false; } public point getPoint () {randmand random = new random (); int x = 0, y = 0; do {x = random.nextint (global.width); y = random.nextint (global.height); } while (Rocks [x] [y] == true); вернуть новую точку (x, y); } // отображать метод public void drawme (графика 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, y*global.size, global.cell_size, global.cell_size, истинность); }}}}}}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.