Versi Java dari game ular yang saya tulis dengan sangat serius, dengan antarmuka grafis, mendukung operasi menu, pemantauan keyboard, dapat mempercepat, melambat, menghitung skor, mengatur kecepatan gerakan, mengatur warna latar belakang game, dll! Seharusnya tidak ada bug, karena saya telah sepenuhnya memodifikasinya.
Berikut ini adalah hubungan hierarkis antara berbagai paket dan kelas proyek:
Antarmuka utama permainan ditampilkan di bawah ini:
Berikut ini adalah beberapa kode. Lihat tautan ini untuk kode sumber terperinci: Unduh kode sumber ular serakah
Kelas Ular:
paket com.huowolf.entities; impor java.awt.color; impor java.awt.graphics; impor java.awt.point; impor java.util.hashset; impor java.util.linkedlist; impor java.util.set; impor com.huowolf.listener.snakelistener; impor com.huowolf.util.global; Snake kelas publik {// konstan mewakili arah final statis publik int up = 1; Int final statis publik = -1; Int final statis publik kiri = 2; final int static final public = -2; // set private grup liser <snakeListener> listeners = hashset baru <snakeListener> (); // Struktur Daftar Penyimpanan Private LinkedList <Point> body = new LinkedList <Point> (); kehidupan boolean pribadi; // Apakah boolean pribadi jeda hidup; // Apakah game private int olddirection, newdirection; // Pengenalan arah baru dan lama (hindari arah yang tidak valid dalam waktu bergerak) poin pribadi oldtail; // ekor tua (digunakan saat makan makanan) Private int foodcount = 0; // Jumlah makanan yang dimakan kepala warna pribadi; warna tubuh pribadi; sleeptime int pribadi; public boolean isLife () {return life; } public int getsleeptime () {return sleeptime; } public void setSleepTime (int sleepTime) {this.sleeptime = sleeptime; } public void setheadcolor (headcolor warna) {this.headcolor = headcolor; } public void setBodyColor (Color BodyColor) {this.BodyColor = BodyColor; } public void init () {int x = global.width/2; int y = global.height/2; untuk (int i = 0; i <3; i ++) {body.addlast (titik baru (x-, y)); } oldDirection = newDirection = kanan; foodcount = 0; Hidup = Benar; jeda = false; if (sleepTime == 0) {sleepTime = 300; }} // metode untuk menghapus node ular (digunakan untuk memulai game baru) public void clear () {body.clear (); } public void setlife (boolean life) {this.life = Life; } public boolean getPause () {return jeda; } public void setPause (boolean jeda) {this.pause = jeda; } // Metode untuk mengubah keadaan jeda konstanta public void changePause () {jeda =! Jeda; } // metode untuk mati untuk public void die ular () {Life = false; } // Metode untuk memindahkan public void move () {if (! (OldDirection + newDirection == 0)) {oldDirection = newDirection; } // detail oldtail = body.removelast (); int x = body.getFirst (). x; int y = body.getFirst (). y; sakelar (oldDirection) {case up: y--; if (y <0) {y = global.height -1; } merusak; Kasus Down: Y ++; if (y> = global.height) {y = 0; } merusak; Case Left: x--; if (x <0) {x = global.width-1; } merusak; Kasus kanan: x ++; if (x> = global.width) {x = 0; } merusak; } Point newhead = titik baru (x, y); // tambahkan kepala body.addfirst (newhead); } // Ubah arah public void perubahan arah (int direction) {newDirection = arah; } // makan makanan public void eatfood () {body.addlast (oldtail); foodcount ++; } // Dapatkan jumlah makanan yang Anda makan int getFoodCount () {return foodcount; } // Apakah ular memakan tubuhnya sendiri boolean iseatbody () {for (int i = 1; i <body.size (); i ++) {if (body.get (i) .Equals (this.gethead ())) kembali true; } return false; } // Dapatkan simpul yang mewakili poin publik kepala ular gethead () {return body.getFirst (); } // tunjukkan sendiri public void drawMe (grafik g) {if (bodycolor == null) {g.setColor (warna baru (0x3333ff)); } else {g.setColor (bodycolor); } untuk (titik 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); } // Draw snakehead public void drawhead (grafik 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); } // kelas internal kelas snakedRiver mengimplementasikan runnable {public void run () {while (life) {if (pause == false) {move (); untuk (snakelistener l: pendengar) l.snakemoved (snake.ini); } coba {thread.sleep (sleepTime); } catch (InterruptedException e) {E.PrintStackTrace (); }}}}} // Metode untuk memulai utas public void begin () {utas baru (new snakedRiver ()). Start (); } // Tambahkan listener public void addSnakeListener (snakeListener l) {if (l! = Null) {listeners.add (l); }} // mempercepat void speedup () {if (sleeptime> 50) {sleepTime- = 20; }} // Perlambat speeddown public void () {if (sleeptime <700) {sleeptime+= 20; }}}Kelas Makanan:
paket com.huowolf.entities; impor java.awt.color; impor java.awt.graphics; impor java.awt.point; impor com.huowolf.util.global; POBA PUBLIK PERUBAHAN POINT {private static final long serialversionuid = 1l; foodcolor warna pribadi; public void setFoodColor (Color FoodColor) {this.foodColor = foodcolor; } public color getFoodColor () {return foodcolor; } public void newfood (titik p) {setLocation (p); } public boolean isfoodeated (ular ular) {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); }}Kelas tanah
paket com.huowolf.entities; impor java.awt.color; impor java.awt.graphics; impor java.awt.point; impor java.util.random; impor com.huowolf.util.global; ground kelas publik {private boolean [] [] rocks = boolean baru [global.width] [global.height]; private int maptype = 1; public int getMaptype () {return maptype; } public void setMaptype (int maptype) {this.maptype = maptype; } // Inisialisasi tanah (jelas batu) public void clear () {for (int x = 0; x <global.width; x ++) untuk (int y = 0; y <global.height; y ++) batu [x] [y] = false; } / *** menghasilkan batu* / public void generaterocks1 () {for (int x = 0; x <global.width; x ++) rocks [x] [0] = batu [x] [global.height - 1] = true; untuk (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; batu [global.width - 1] [y] = true; batu [0] [global.height - 1 - y] = true; Rocks [Global.width - 1] [Global.Height - 1 - y] = true; } untuk (int y = 6; y <global.height - 6; y ++) {rocks [6] [y] = true; Rocks [global.width - 7] [y] = true; }} public void generaterocks3 () {for (int x = 4; x <14; x ++) batu [x] [5] = true; untuk (int j = 5; j <15; j ++) batu [21] [j] = true; untuk (int y = 13; y <20; y ++) batu [14] [y] = true; untuk (int x = 2; x <10; x ++) batu [x] [17] = true; untuk (int i = 10; i <global.width-3; i ++) rocks [i] [global.height-3] = true; } // Apakah ular memakan batu publik boolean isgroated (ular ular) {for (int x = 0; x <global.width; x ++) {for (int y = 0; y <global.height; y ++) {if (rocks [x] [y] == true && (x == snake.gethead (). }} return false; } public point getPoint () {acak acak = acak baru (); int x = 0, y = 0; do {x = random.nextInt (global.width); y = random.nextInt (global.height); } while (rocks [x] [y] == true); mengembalikan titik baru (x, y); } // Metode tampilan public void drawMe (grafik g) {g.setColor (color.dark_gray); untuk (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 ,kell_size, y*global.cell_size, global.cell_size, cell_size, cell_size, y*global.cell_size, global.cell_size, Global, Global, Global, Global, Global, Global, Global, Global, Global, Global, Global, Global, Global, Global, Global .cell, Global, Global, Global, Global. Cell_Size, }}}}}}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.