Gunakan koleksi, ayunan, utas, dan poin pengetahuan lainnya dalam bahasa Java untuk menulis permainan Tank War.
(1) Gambarlah prinsip musuh dan tank AS:
Ada variabel tipe boolean yang bagus di dalam kelas tangki. Dulu menilai kamp tank. Saat membuat objek tangki, nilai barang dilewatkan dalam metode konstruksi kelas tangki. Saat menggambar tank, menilai nilai baik dan membedakan warna musuh dan kita;
(2) Prinsip Gerakan Tank:
Peristiwa respons dari tombol keyboard monitor Press ditulis di kelas tangki, tombol ke atas, bawah, kiri dan kanan dicatat, dan variabel dalam delapan arah gerakan tangki disintesis. Kemudian, perubahan yang sesuai dengan nilai -nilai tangki koordinat x dan y di setiap arah dapat dilakukan untuk mencapai pergerakan tangki kami. Tank musuh secara otomatis bergerak, secara acak mengedarkan arah gerakan tangki musuh melalui angka acak, dan secara acak menghasilkan berapa kali setiap gerakan. Kombinasi dua nilai acak memungkinkan pergerakan tank musuh.
(3) Prinsip peluncuran peluncuran tangki:
Melalui pemantauan keyboard, setelah mendeteksi perintah peluru, tambahkan kelas peluru ke koleksi kelas peluru kelas utama. Pindahkan arah laras senjata, posisi tangki, dan kamp tangki ke peluru. Dalam metode menggambar cat utama, koleksi peluru akan bersepeda. Jika ada peluru di set, tarik keluar. Ini memungkinkan peluncuran peluru.
(4) Prinsip tabrakan tangki, peluru dan dinding:
Di kelas dinding tipe peluru tipe tangki, Getrect Method untuk mendapatkan jangkauannya sendiri, dan kemudian melakukan deteksi tabrakan yang sesuai setiap kali tangki dan peluru ditarik (ada metode untuk tabrakan dengan dinding dan tangki di luar tangki di dalam tangki, dan dalam peluru, ada metode untuk tabrakan dengan dinding dan tangki.). Jika kisaran diri sendiri dan objek yang tidak boleh bertabrakan, itu berarti bahwa kedua objek itu bertabrakan.
(5) Prinsip sirkulasi darah tangki:
Jika pembekuan darah bertabrakan dengan tangki kami, gumpalan darah akan mati, dan gumpalan darah akan sepenuhnya pulih.
(6) Prinsip Kebangkitan Tank:
Setelah mendeteksi urutan kebangkitan tangki kami dengan pemantauan keyboard, jika tangki kami dalam kondisi mati, status inventaris tangki kami akan diubah menjadi hidup dan volume darah tangki kami akan dipulihkan ke kesehatan penuh.
Ide Pemrograman:
Gagasan pemrograman Tank War membuka utas di kelas utama, dan tidak bersepeda pada 50 milidetik untuk menggambar metode (menggambar semuanya di seluruh antarmuka). Hal -hal yang ditarik termasuk tangki musuh (perbedaan warna), peluru, dinding, gumpalan darah, dan ledakan. Jadi secara total, beberapa kategori ditulis: tank tank, peluru rudal, dinding dinding, gumpalan darah, dan kelas utama tankclient. Di setiap kelas, ada metode menggambar yang ditulis untuk mewujudkan fungsi menggambar dari atribut kelas ini. Ada acara mendengarkan keyboard di kelas utama yang disebut acara mendengarkan keyboard dari kelas tank ini. Melalui pemantauan keyboard, ditentukan bahwa gerakan tangki yang sesuai dibuat, sementara tangki musuh bergerak secara acak. Dan setiap kali penyegarannya disegarkan, berbagai metode tabrakan dipanggil untuk menentukan situasi beberapa objek yang tidak boleh bertabrakan. Penciptaan masing -masing objek, seperti peluru, adalah menambahkan kelas peluru baru ke koleksi kelas peluru setelah dipicu. Saat menggambar, tentukan nomor di set untuk menggambar. Jika tangki di luar batas atau membunuh tangki, itu akan dihapus di set. Kategori lain juga serupa, jadi saya tidak akan membahas detailnya.
Setiap langkah dalam kode memiliki penjelasan yang sesuai.
Tankclient.java
Impor java.awt.color; impor java.awt.font; impor java.awt.graphics; import java.awt.image; impor java.awt.event.keyadapter; import java.awt.event.keyevent; impor java.awt.event.windowapter; java.util.arraylist; import java.util.list; import javax.swing.jframe; kelas publik tankclient memperluas jframe { / ** * @param args * / gambar offscrennimage = null; // Penyimpanan Gambar Memori Buffer Ganda/*Ukuran Game*/Public Static Int Game_width = 800; // Antarmuka Lebar Public Static Int Game_Heigth = 600; // tangki antarmuka tinggi mytank = tangki baru (500.400, true, color.red, tank.direction.stop, ini); // Daftar Kelas Tank kami <Rilsile> Missiles = NEW ARRAYLIST <Rilsile> (); // Koleksi Daftar Bullet <Eblode> Exploit = NEW ARRAYLIST <ElplODE> (); // Daftar Set Explosion <Tank> Tanks = Daftar Arraylist Baru <Tank> (); // Tangki set dinding dinding1 = dinding baru (150.200.20.300, ini); // dinding 1 dinding dinding2 = dinding baru (250.500.300,20, ini); // dinding 2 dinding dinding3 = dinding baru (650.200.20.300, ini); // dinding 2 dinding dinding4 = dinding baru (250.300.300,20, ini); // dinding 2 dinding wb = dinding baru (750.550,40,40, ini); // wall2 darah b = darah baru (); // kelas darah statis public void main (string [] args) {// TODO Metode yang dihasilkan otomatis Stub tankclient tc = new tankclient (); tc.lauchframe (); } private void lauchframe () {// TODO Metode yang dihasilkan otomatis Stub untuk (int i = 0; i <10; i ++) {tanks.add (tangki baru (50+40*(i+1), 50, false, color.blue, tank.direction.d, this)); } this.setLocation (100, 100); // window point koordinat awal this.setsize (Game_width, Game_heigth); // jendela ukuran awal this.settitle ("tankwar"); // Nama jendela/*Mendengarkan Jendela*/this.addwindowlistener (windowAdapter baru () {@Override/*Jalankan setelah titik keluar garpu*/public void windowclosing (windowevent e) {// TODO Metode Stub yang dibuat secara otomatis System.exit (0); // Keluar}}); this.addeylistener (keymoniton ()); // atur keyboard untuk mendengarkan this.setVisible (true); // atur jendela untuk menampilkan ini. // Atur jendela untuk tidak mengubah ukuran this.getContentPane (). Setbackground (color.green); // Atur warna latar depan jendela ke benang baru hijau (new paintthread ()). Start (); // Mulai kelas Paintthread run} @Override public void cat (grafik g) {// TODO Metode yang dihasilkan secara otomatis Stub // Grafik adalah Kelas Sikat Super.paint (g); mytank.draw (g); wall1.draw (g); wall2.draw (g); wall3.draw (g); wall4.draw (g); WB.Draw (G); B.Draw (g); mytank.eatblood (b); mytank.hitwall (wall1); mytank.hitwall (wall2); mytank.hitwall (wall3); mytank.hitwall (wall4); /*Koleksi Bullet Siklus*/ untuk (int i = 0; i <missiles.size (); i ++) {missile m = missiles.get (i); // Dapatkan peluru saat ini m.hittanks (tank); // peluru Anda sendiri membunuh tank musuh m.hitwall (wall1); // Bullet dan Wall M.Hitwall (Wall2); M.Hitwall (Wall3); M.Hitwall (Wall4); M.Hittank (Mytank); // Bullet musuh menyentuh tanknya sendiri M.Draw (G); // Gambarlah} untuk (int i = 0; i <explore.size (); i ++) {exploit.get (i) .draw (g); // Gambar ledakan} untuk (int i = 0; i <tanks.size (); i ++) {tank t = tanks.get (i); t.draw (g); // Gambar tank musuh T.Hittanks (tank); t.hitwall (wall1); // Tank dan Dinding T.Hitwall (Wall2); t.hitwall (wall3); t.hitwall (wall4); } //g.setfont(new font ("宋体", font.bold, 20)); G.DrawString ("Hitungan Rudal:"+Missiles.Size (), 10, 50); // tunjukkan G.DrawString ("Jumlah Explode:"+Explode.size (), 10, 80); // tunjukkan G.DrawString ("Hitung Tank:"+Tanks.Size (), 10, 110); G.DrawString ("Mytank Life:"+mytank.getLife (), 10, 130); G.DrawString ("Pemulihan Darah:", 750, 540); G.DrawString ("Directory Key Movement Direction; E: Lepaskan Darah Gerakan Cepat", 10, 590); G.DrawString ("Z: Luncurkan Dongfeng-31; A: Luncurkan Dongfeng-41;", 10, 570); g.drawstring ("f2: kebangkitan; f3: kebangkitan musuh (hingga 20)", 10, 550); G.DrawString ("r: Posisi pemulihan; Q: penuh darah", 10, 530); } @Override /*Pencatatan-> Pembaruan-> Cat* / Public Void Update (Graphics G) {// TODO METODE AUTO-DEFOOLATED Stub Super.update (g); if (offscrennimage == null) offscrennimage = this.createImage (Game_width, Game_heigth); Grafik goffscrenn = offscrennimage.getGraphics (); // atur warna sikat memori ke warna gambar foreground warna c = goffscrenn.getColor (); // simpan warna latar depan terlebih dahulu, goffscrenn.setcolor (color.green); // Atur warna kuas memori ke goffscrenn.fillrect (0, 0, Game_width, Game_Heigth); // Gambarlah gambar sebagai ukuran ukuran permainan goffscrenn.setColor (c); // Kembalikan warna G.DrawImage (offscrennimage, 0, 0, null); // Gambarlah gambar yang disimpan pada cat antarmuka (Goffscrenn); // Panggil kuas memori untuk melukis} kelas private PaintThread mengimplementasikan runnable {@Override public void run () {// TODO Metode yang dihasilkan secara otomatis Stub while (true) {recaint (); // Jalankan pesanan Pencatatan-> Pembaruan-> Cat coba {thread.sleep (50); // Segarkan layar setiap 50 milidetik} catch (Exception e) {e.printstacktrace (); }}}} /*Respons keyboard* / Kelas privat KeyMoniton memperluas keyAdapter { /*tekan respons keyboard* / @Override public void keypressed (keyevent e) {// TODO Metode yang dihasilkan secara otomatis Stub super.keypressed (e); mytank.keypressed (e); } /*Bangkit respons keyboard* / @Override public void keyreleased (KeyEvent e) {// TODO Metode yang dihasilkan secara otomatis Stub super.keyreleased (e); mytank.keyreleased (e); }}}Tank.java
Impor java.awt.color; impor java.awt.graphics; impor java.awt.image; impor java.awt.rectangle; java.awt.event.keyevent; impor java.util.list; impor tangki; public oVa.util.random; impor javax.swing. mengoordinasikan intrx pribadi, tua; // tank sebelumnya koordinat statis public static final whith = 30; // Tangki Lebar Publik Statis Int Higth = 30; // tank tinggi statis final static xspeed = 5; // Panjang Gerakan Arah Kecepatan Publik Statis Intasi Akhir = 5; // Gerakan Longaroge Kecepatan Warna Pribadi; // Tank Warna Privat Boolean Bl = False, Bu = False, Br = False, Bd = False; // Nilai Kontrol Empat Arah ENUM Direction {L, LU, U, RU, R, RD, D, LD, STOP}; // Pergerakan delapan arah terdiri dari empat nilai arah Direction Private Dir = Direction.stop; // Output Direction Private Direction Ptdir = Direction.d; // Arah asli Cannon Private Boolean Good; // menilai perkemahan Tank Private Boolean Live = true; // menilai apakah tangki itu hidup privat statis acak r = acak baru (); // Tetapkan variabel nilai acak statt statis privat = r.nextint (12) +3; // Tank Musuh Gerakan Acak Langkah 3-14 Private Int Life = 100; // volume kesehatan Bloodbar Private BB = Bloodbar baru (); // cleck // ImageIcon icon = new ImageIcon ("res // mytank.jpg"); // Imageicon icon2 = new ImageIcon ("res // musuh TC tankclient pribadi; // izin kelas utama tangki publik (int x, int y, boolean baik, warna warna) {super (); this.x = x; this.y = y; this.color = warna; this.good = bagus; } Tangki publik (int x, int y, boolean baik, warna warna, arah dir, tankclient tc) {this (x, y, good, warna); this.dir = dir; this.tc = tc; } /*Dapatkan Tank Health* / public int getLife () {return life; } /*Set Tank Health* / public void setLife (int life) {this.life = Life; } /*Dapatkan Tank Camp* / public boolean isGood () {return good; } /*Set Tank Camp* / public void setGood (Boolean good) {this.good = good; } /*Dapatkan status kelangsungan hidup tangki* / public boolean isLive () {return live; } /*Tetapkan status kelangsungan hidup tangki* / public void setLive (boolean live) {this.live = live; } /*Draw Tank* / public void draw (grafik g) {if (! Live) {if (! Good) {tc.tanks.remove (this); // hapus di set saat tangki musuh meninggal // tc.tanks.add (tangki baru (r.nextint (700), r.nextint (500), false, color.blue, direction.d, this.tc)); } kembali; } /*Simpan warna sikat sebelumnya terlebih dahulu, dan kembalikan warna kuas setelah menggambar* / warna c = g.getColor (); // Dapatkan warna kuas saat ini G.setColor (warna); // Atur warna kuas ke Tangki Red/*Draw*/g.filloval (x, y, whith, tinggi); /*Dua metode untuk menggambar musuh dan tank AS, menggunakan gambar atau warna yang ditambahkan sebelumnya untuk membedakan*/// if (good) // g.drawimage (gambar, x, y, whith, tinggi, nol); // else // g.drawimage (gambar2, x, y, whith, high, null); if (good) bb.draw (g); // Tangki kami menggambar batang darah G.SetColor (Color.Black); /*Gambarlah laras senjata melalui arah laras senjata*/switch (ptdir) {case l: g.drawline (x+tank.whith/2, y+tank.higth/2, x, y+tank.higth/2); merusak; case lu: g.drawline (x+tank.whith/2, y+tank.higth/2, x, y); merusak; case ru: g.drawline (x+tank.whith/2, y+tank.higth/2, x+tank.whith/2, y); merusak; case r: g.drawline (x+tank.whith/2, y+tank.higth/2, x+tank.whith, y+tank.higth/2); merusak; Case RD: G.Drawline (x+tank.whith/2, y+tank.higth/2, x+tank.whith, y+tank.higth); merusak; case d: g.drawline (x+tank.whith/2, y+tank.higth/2, x, y+tank.higth); merusak; } g.setColor (c); // Kembalikan Pindah Warna Sikat (); // Pindahkan}/*Pemantauan Keyboard; kunci*/ public void keypressed (keyevent e) {int key = e.getKeyCode (); // Simpan tombol yang didengarkan oleh keyboard sebagai bilangan bulat/*Tangki seluler keyboard*/switch (key) {/*Pindahkan key*/case keyevent.vk_up: bu = true; merusak; case keyevent.vk_down: bd = true; merusak; case keyevent.vk_right: br = true; merusak; case keyevent.vk_left: bl = true; merusak; } lockIrection (); } /*Pemantauan keyboard; angkat key*/ public void keyreleased (keyevent e) {int key = e.getKeyCode (); // Simpan tombol yang didengarkan oleh keyboard sebagai bilangan bulat/*Tangki pemindahan keyboard*/switch (key) {case keyevent.vk_up: bu = false; merusak; case keyevent.vk_down: bd = false; merusak; case keyevent.vk_right: br = false; merusak; case keyevent.vk_left: bl = false; merusak; case keyevent.vk_z: // peluru tunggal if (live) fire (); merusak; case keyevent.vk_f2: // kebangkitan kami jika (! this.live) {this.live = true; this.setlife (100); } merusak; case keyevent.vk_f3: // musuh kebangkitan fuhuo (); merusak; case keyevent.vk_a: // Invincible Missile Superfire (); merusak; case keyevent.vk_q: // Recover if (this.live) this.life = 100; merusak; case keyevent.vk_e: // melepaskan gumpalan darah tc.b.fh (); merusak; /*Kembalikan Kunci Posisi*/ Case keyevent.vk_r: x = 50; y = 50; merusak; } lockIrection (); // arah komposisi}/*arah gerakan komposisi*/void lockirection () {if (bl &&! Bu &&! Br &&! Bd) dir = direction.l; lain if (bl && bu &&! br &&! bd) dir = Direction.lu; lain if (! bl && bu &&! bd) dir = direction.u; lain if (! bl && bu && br &&! bd) dir = direction.ru; lain if (! bl &&! bu && br &&! bd) dir = direction.r; lain if (! bl &&! bu && br && bd) dir = direction.rd; lain if (! bl &&! bu &&! br && bd) dir = Direction.d; lain if (! bl &&! bu &&! br && bd) dir = Direction.ld; lain if (! bl &&! bu &&! bd) dir = direction.stop; } void move () {// pindahkan/*Catat posisi langkah sebelumnya*/oldx = x; Oldy = y; switch (dir) {case l: x- = xspeed; merusak; case lu: x- = xspeed; y- = yspeed; merusak; case u: y- = yspeed; merusak; case ru: x+= xspeed; y- = yspeed; merusak; case r: x+= xspeed; merusak; case rd: x+= xspeed; y+= yspeed; merusak; case d: y+= yspeed; merusak; Case LD: x- = xspeed; y+= yspeed; merusak; Case LD: x- = xspeed; y+= yspeed; merusak; Case Stop: Break; } /*Hakim Tank Gerakan Keluar dari Batas (Batas Game)* / if (x <5) x = 5; if (y <25) y = 25; if (x+whith> tc.game_width-5) x = tc.game_width-whith-5; if (y+higth> tc.game_heigth-5) y = tc.game_heigth-higth-5; if (dir! = Direction.stop) // Jika tangki tidak stasioner, ubah arah barel ptdir = dir; /*Tank musuh secara otomatis bergerak*/ if (! Good) {Direction [] dirs = direction.values (); // atur variabel arah ke array if (langkah == 0) {step = r.nextint (12) +3; // langkah gerakan acak int acaknumber = r.nextint (dirs.length); // Arah Gerakan Acak Dir = Dirs [RandomNumber]; } melangkah--; if (r.nextint (40)> 30) this.fire (); // Apakah cangkang dipecat secara acak}}/*Pembangkang Tangki Musuh*/public void fuhuo () {if (tc.tanks.size () <20) sementara (true) {int x = r.nextint (700); int y = r.nextint (500); Tangki t = tangki baru (x, y, false, color.blue, arah.d, tc); /*Jika tangki bertepatan dengan dinding, posisi ulang-acak sampai tidak tumpang tindih, tangki baru ditambahkan ke set*/ if (t.getRect (). || t.getRect (). Intersects (tc.wall4.getRect ())) {lanjutan; } else {tc.tanks.add (t); merusak; }}}/*Peluncuran peluru*/public void fire () {int x = this.x + whith/2 - misile.whith/2; // Kontrol arah peluru ke tengah tangki int y = this.y + higth/2 - misile.higth/2; tc.missiles.add (rudal baru (ptdir, warna, x, y, good, tc)); // Buat kelas peluru baru untuk bergabung dengan koleksi peluru} /*tabrakan; Dapatkan kisaran tangki*/ persegi panjang publik getRect () {return baru persegi panjang (x, y, whith, higth); } /*Posisi langkah sebelumnya dari tanda terima* / private void stay () {x = oldx; y = oldy; } /*Jika Anda menabrak dinding, hubungi metode stay dan kembali ke posisi langkah sebelumnya* / public boolean hitwall (wall w) {if (this.live && this.getRect (). Intersects (w.getRect ())) {this.stay (); Kembali Benar; } return false; } /*Acara tabrakan tangki* / public boolean hittanks (Daftar <Tank> tank) {for (int i = 0; i <tanks.size (); i ++) {tank t = tanks.get (i); if (this! = t) {// Anda tidak dapat bertabrakan dengan diri sendiri/*jika Anda bertabrakan, kembali ke posisi sebelumnya*/if (this.live && t.islive () && this.getRect (). intersects (t.getRect ())) {this.stay (); t.stay (); Kembali Benar; }} return false; } /*Fungsi emisi dengan arah api* / public misile fire (direct dir) {if (! Live) return null; int x = this.x+whith/2-messile.whith/2; int y = this.y+higth/2-missile.higth/2; Rudal m = rudal baru (dir, warna, x, y, bagus, this.tc); tc.missiles.add (m); kembali m; } /*Superfire Missile* / private void superfire () {Direction [] dirs = Direction.values (); untuk (int i = 0; i <8; i ++) {fire (dirs [i]); // bersepeda delapan arah}}/*Menambahkan kelas gumpalan darah*/kelas private Bloodbar {/*menggambar batang darah*/public void draw (grafik g) {color c = g.getColor (); G.SetColor (Color.Red); G.Drawrect (x, y-10, whith, 10); int w = whith*Life/100; g.fillrect (x, y-10, w, 10); g.setColor (c); }} /*Metode pemakan darah* / public boolean eatblood (darah b) {if (this.live && b.islive () && this.isgood () && this.getRect (). intersects (b.getrect ())) {this.setlife (100); b.setlive (false); Kembali Benar; } if (this.getRect (). intersects (tc.wb.getRect ()))) this.life = 100; mengembalikan false; }}Rudal.java
impor java.awt.color; impor java.awt.graphics; impor java.awt.rectangle; impor java.util.list; rudal kelas publik { /*data peluru* / tank.direction dir; // Warna arah peluru C; // Warna Bullet Int X, Y; // Posisi Bullet Public Static Final Int XSpeed = 15; // Panjang Gerakan Kecepatan Public Static Final Yspeed = 15; // Panjang Gerakan Kecepatan Public Static Final Int Whith = 10; // Lebar Bullet Public Static Final Int Higth = 10; // Bullet High Private Boolean Live = true; // menilai kelangsungan hidup peluru privat boolean baik; // menilai peluru dan kamp private tankclient tc; // izin kelas utama rudal publik (tank.direction dir, warna c, int x, int y) {super (); this.dir = dir; this.x = x; this.y = y; this.c = c; } rudal publik (Tank.direction dir, warna C, int x, int y, boolean good, tankclient tc) {this (dir, c, x, y); this.good = bagus; this.tc = tc; } /*Dapatkan kelangsungan hidup peluru* / public boolean isLive () {return live; } /*Tetapkan kelangsungan hidup peluru* / public void setLive (boolean live) {this.live = live; } public void draw (grafik g) { /*Jika peluru mati, hapus peluru dalam koleksi peluru* / if (! live) {tc.missiles.remove (ini); // hapus pengembalian dalam koleksi; } /*Simpan warna sikat sebelumnya terlebih dahulu, dan kembalikan warna kuas setelah menggambar* / warna d = g.getColor (); // Dapatkan warna kuas saat ini G.SetColor (C); // Atur warna kuas ke merah/*cetak peluru*/g.filloval (x, y, whith, tinggi); G.SetColor (D); // Kembalikan gerakan warna sikat (); // pindahkan} public void move () {/*menilai arah gerakan dan posisi tangki*/switch (dir) {case l: x- = xspeed; merusak; case lu: x- = xspeed; y- = yspeed; merusak; case u: y- = yspeed; merusak; case ru: x+= xspeed; y- = yspeed; merusak; case r: x+= xspeed; merusak; case rd: x+= xspeed; y+= yspeed; merusak; case d: y+= yspeed; merusak; Case LD: x- = xspeed; y+= yspeed; merusak; Case Stop: Break; } /*Menilai situasi keluar peluru; Jika keluar, peluru akan mati, hapus dalam koleksi peluru*/ if (x <0 || y <0 || x> tankclient.game_width || y> tankclient.game_heigth) live = false; } /*Tabrakan; Dapatkan kisaran peluru*/ persegi panjang publik getRect () {return baru persegi panjang (x, y, whith, higth); } /*Proses tabrakan antara peluru dan tank* /public boolean hittank (tank t) { /*Jika peluru dan tangki berada dalam kisaran yang sama, peluru dan tangki akan mati pada saat yang sama; dan peluru hanya dapat membunuh tangki lawan*/if (this.live && this.getrect (). intersects (t.getrect ()) && t.islive () && this.good! = T.isgood ()) {if (t.isgood ()) {// Tangki bagus/*Tangki kami akan mengurangi poin kesehatan kami. t.setlife (t.getLife ()-20); if (t.getLife () <= 0) t.setLive (false); } else {// Bad tank t.setlive (false); // death} this.live = false; // bullet Death tc.explode.add (explode baru (x, y, tc)); // ledakan baru menambahkan set return true; } return false; } /*Runtuh set tangki untuk menilai tabrakan peluru* / public boolean hittanks (daftar <tigt> tank) {for (int i = 0; i <tanks.size (); i ++) {if (hittank (tanks.get (i))) kembali true; } return false; } /*Proses tabrakan antara peluru dan dinding* / hitwall boolean publik (dinding w) { /*Jika kisaran peluru dan dinding tumpang tindih dengan kematian peluru* / if (this.live && this.getrect (). Intersects (w.getrect ())) {this.live = false; // Bullet Death Return True; } return false; }} Wall.java
impor java.awt.graphics; impor java.awt.rectangle; dinding kelas publik { /*data dinding* / int x, y, w, h; // POSISI DAN Lebar dan Tinggi TC Tankclient Pribadi; // izin kelas utama dinding publik (int x, int y, int w, int h, tankclient tc) {super (); this.x = x; this.y = y; this.w = w; this.h = h; this.tc = tc; } /*Dapatkan ruang lingkup dinding* / persegi panjang publik getRect () {return baru persegi panjang (x, y, w, h); } /*Draw wall* / public void draw (grafik g) {g.fillrect (x, y, w, h); }}Explode.java
impor java.awt.color; import java.awt.graphics; kelas publik meledak { /*atribut ledakan tangki* / int x, y; // Posisi Ledakan Private Boolean Live = true; // Apakah ada langkah ledakan int = 0; // Kontrol Waktu Ledakan int [] diameter = int baru [] {4, 7, 12, 18, 26, 32, 49, 56, 65, 77, 80, 50, 40, 30, 14, 6}; // rentang ledakan tc tc private tc; // izin kelas utama Public Explode (int x, int y, tankclient tc) {super (); this.x = x; this.y = y; this.tc = tc; } /*Draw Explosion* / public void draw (grafik g) {if (! Live) kembali; // Jika status kematian ledakan tidak berakhir/*Jika waktu ledakan berakhir, ledakan tidak ada dan menghapusnya dalam set*/if (langkah == diameter.length) {live = false; // Langkah Kematian Ledakan = 0; // Waktu langkah adalah 0 tc.explode.remove (ini); // hapus pengembalian di set; } /*Gambar ledakan* / warna c = g.getColor (); G.SetColor (Color.ORANGE); g.filloval (x, y, diameter [langkah], diameter [langkah]); g.setColor (c); Langkah ++; }}Blood.java
Impor java.awt.color; impor java.awt.graphics; impor java.awt.rectangle; impor java.util.random; darah kelas publik {/* data bekuan darah*/ int x, y, w, h; // darah lokasi bekuan darah dan ukuran tckclient tc tc; // Izin Kelas Utama Private Boolean Live = true; // Blood Clot Survival Private Static Random R = New Random (); // Tetapkan variabel nilai acak/* Dapatkan status kelangsungan hidup bekuan darah*/ public boolean islive () {return live; } /* Tetapkan status kelangsungan hidup bekuan darah* / public void setLive (boolean live) {this.live = live; } /*Nilai awal posisi bekuan darah secara acak adalah nilai* / darah publik () {x = r.nextint (600) +100; y = r.nextint (400) +100; w = h = 15; } /*Gambar bekuan darah* / public void draw (grafik g) {if (! Live) kembali; Warna c = g.getColor (); g.setColor (color.magenta); g.fillrect (x, y, w, h); g.setColor (c); } /*Melepaskan bekuan darah* / public void fh () {if (! Live) {x = r.nextint (600) +100; y = r.nextint (400) +100; Live = true; }} /*Dapatkan rentang bekuan darah* / persegi panjang publik getRect () {return baru persegi panjang (x, y, w, h); }}Di atas adalah semua konten artikel ini. Saya harap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.