Saya belajar teknik ini tahun lalu dan belum menulisnya. Sekarang saya telah meluangkan waktu untuk menulis game Tetris.
Hanya game baru yang sederhana, jeda, lanjutkan, fungsi poin. Ini hanya mewujudkan fungsi klasik Rusia.
Saya tidak akan memperkenalkannya lagi. Jika Anda tertarik, jalankan sendiri dan posting gambar nanti.
Kode:
Paket cn.hncu; impor java.awt.color; import java.awt.font; impor java.awt.graphics; impor java.awt.event.actionevent; impor java.awt.event.actionlistener; impor java.awt.event.keykeyapter; impor java.awev; impor java.awev; impor java.awev; impor java.awev; impor java.awev; impor java.awev; impor java.awev; impor java.awev; impor java.awev; impor java.awev; java.awev; javax.swing.jmenu; impor javax.swing.jmenubar; impor javax.swing.jmenuitem; impor javax.swing.joptionpane; impor javax.swing.jpanel; import javax.swing.timer; kelas publik tetris memperluas jframe {public static.swing (public class tetris memperluas jframe {public static static.swing Tetris (); te.setVisible (true); // Jika Anda menambahkan kotak edit ke antarmuka yang akan memanfaatkan fokus, Anda perlu menggunakan kode berikut //te.requestfocus(true);//let Panel Game Dapatkan Fokus-Dapatkan keyboard's Listening} Private Tetrispanel TP; JMenuitem ItemPause; JMenuitem ItemContinue; Tetris publik () {this.setDefaultCloseOperation (exit_on_close); this.setlocation (700, 200); this.setsize (220, 275); this.setresizable (false); tp = tetrispanel baru (); this.getContentPane (). add (tp); // tambahkan menu jmenubar menubar = jmenubar baru (); this.setjmenubar (Menubar); Jmenu menugame = jmenu baru ("game"); Menubar.add (Menugame); JMenuitem itemNew = JMenuitem baru ("Game Baru"); itemNew.setActionCommand ("baru"); itemPause = jMenuitem baru ("jeda"); itemPause.setActionCommand ("jeda"); itemContinue = jMenuitem baru ("lanjutkan"); ItemContinue.setActionCommand ("Lanjutkan"); itemContinue.setEnabled (false); Menugame.add (itemNew); Menugame.add (itemPause); Menugame.add (itemContinue); Menulistener menulistener = menulistener baru (); itemNew.AddactionListener (Menulistener); ItemPause.addactionListener (Menulistener); ItemContinue.addactionListener (Menulistener); // Biarkan seluruh jframe menambahkan keyboard mendengarkan this.addKeyListener (tp.listener); } class Menulistener mengimplementasikan ActionListener {@Override public void actionPerformed (actionEvent e) {// mainkan game baru if (e.getactionCommand (). equals ("new")) {tp.newgame (); } if (e.getactionCommand (). Equals ("Pause")) {timer.stop (); itemContinue.setEnabled (true); itemPause.setEnabled (false); } if (e.getactionCommand (). Equals ("Lanjutkan")) {timer.RestArt (); itemContinue.setEnabled (false); itemPause.setEnabled (true); }}} timer timer pribadi; kelas tetrispanel memperluas jpanel {// bentuk persegi: // Dimensi pertama mewakili tipe blok (termasuk 7 jenis: s, z, l, j, i, o, t) // dimensi kedua mewakili jumlah rotasi // i/i] [i] [i] [i] [i-dimensi I] [i] [Tipe] [TurnSTATE] [I] [I] [I] [I-TYPE] [TYPET] [TUGNSTATE] [I] [I] [II] [II] [TYPE] [TURGSTATE] [TUGNSTATE] [I] MATRIVER I/SPERSI 4] [TYPE] [TURUK] [TURNSTATE] [I] [IMENSIONS I/IRE/SENSION [TYPE] [TURUK] [TURNSTATE] [I. bentuk [] [] [] = int int [] [] [] { / * * template { {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 , 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 , 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 , 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 {0,0,0,0,0,0,0,0,0,0, * 0,0,0,0,0,0,0,0,0,0} } */ // I (※Switch the bar in version 1 from line 1 to line 2) { { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0}}, // S {{0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 1, 0, 0, 0, 0 {0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0}, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } }, // J { { 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, // o {{1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 0, 0, 0, 0, 0 }, { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // L { { 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // T { { 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 yang ” private int blocktype; // blok tipe pribadi int turnstate; // rotasi status pribadi int x; // blok posisi x- column posisi-kolom nomor private int y; // blok posisi y-posisi-row-angka-angka peta int pribadi [] [] = int baru [13] [23]; // peta: 12 kolom dan 22 baris. Untuk mencegah lintas batas, array dibuka ke: 13 kolom dan 23 baris penundaan int pribadi = 1000; Public TimerKeyLister listener = new timerKeyLister (); private int skor = 0; // skor publik tetrispanel () {newgame (); nextblock (); // timer = timer baru (penundaan, pendengar); //timer.start (); } public void newGame () {blockType = (int) (math.random ()*1000)%7; turnstate = (int) (math.random ()*1000)%4; x = 4; y = 0; untuk (int i = 0; i <12; i ++) {// line for (int j = 0; j <21; j ++) {// berjalan if (i == 0 || i == 11) {// 3 adalah kisi -kisi dari peta batas antarmuka [i] [j] = 3; // Benar -benar, hanya menggunakan integer lain selain 0 dan 1, tetapi menggunakan 3; }} peta [i] [21] = 3; // 3 adalah kisi dari batas antarmuka} if (timer! = null) {timer.stop (); } tunda = 1000; timer = timer baru (penundaan, pendengar); timer.start (); } private void nextBlock () {blockType = (int) (math.random ()*1000)%7; turnstate = (int) (math.random ()*1000)%4; x = 4; y = 0; // game over if (crash (x, y, blockType, turnstate) == 0) {timer.stop (); Int option = jOptionPane.ShowConfirmDialog (ini, "Game Over !!, apakah Anda masih berani datang ..."); if (option == jOptionPane.ok_option) {newgame (); } else if (option == jOptionPane.no_option) {System.exit (0); }}} private void down () {if (crash (x, y+1, blocktype, turnstate) == 0) {// Perhatikan bahwa y+1 digunakan di sini untuk menentukan apakah posisi yang sesuai di peta adalah blok atau bingkai yang ditumpuk setelah blok dijatuhkan oleh satu kotak; // Simpan informasi blok saat ini ke peta NextBlock (); } else {y ++; } repaint (); } private void left () {if (x> = 0) {x -= crash (x -1, y, blockType, turnstate); } repaint (); } private void right () {if (x <8) {x += crash (x +1, y, blockType, turnstate); } repaint (); } private void turn () {if (crash (x, y, blockType, (turnstate+1)%4) == 1) {turnstate = (turnstate+1)%4; } repaint (); } private void add (int x, int y, int blockType, int turnstate) {for (int a = 0; a <4; a ++) {for (int b = 0; b <4; b ++) {if (bentuk [blocktype] [turnstate] [a*4+b] == 1) {mapes [x+b+1] [a*4+b] == 1) {peta [x+b+1] [y+4+b] ==; }}} trydelline (); } // Hilangkan private void trydelline () {for (int b = 0; b <21; b ++) {int c = 1; untuk (int a = 0; a <12; a ++) {c & = peta [a] [b]; // semuanya 1, hasil c adalah 1} if (c == 1) {// Ada garis yang perlu dihilangkan // pindahkan satu baris ke bawah dalam urutan untuk (int d = b; d> 0; d-) {untuk (int e = 0; peta [e] [d-1]; }} // Tambahkan skor poin += 100; tunda /=1.05; timer.setDelay (delay); }}} // Contoh parameter: 4,3,2,3 // menilai apakah ada tabrakan private int crash (int x, int y, int blocktype, int turnstate) {for (int a = 0; a <4; a ++) {for (int b = 0; b <4; b ++) {//if ((shapes = tip [tip = B <4; b ++) {//{a+a. Peta [x+b+1] [y+a] == 1) || // (bentuk [blocktype] [turnstate] [a*4+b] == 1 && peta [x+b+1] [y+a] == 3)) {//} if ((bentuk+bocktype] [turnstate] [a*4+b] if ((bentuk+blaptype] [turnstate] [a*4+b] & if (x+blapes [x+a) [a*4+b] 0; // tabrakan}}} return 1; // Tidak ada tabrakan} @Override public void cat (grafik g) {// blockType = 6; // turnstate = 3; // x = 4; // y = 6; super.paint (g); // hilangkan afterimage g.setColor (warna baru (153,51.205)); // Gambar blok saat ini untuk (int j = 0; j <16; j ++) {if (bentuk [blockType] [turnstate] [j] == 1) {g.fillrect ((j%4+x+1)*10, (j/4+y)*10, 10, 10); G.SetColor (Color.cyan); G.Drawrect ((j%4+x+1)*10, (j/4+y)*10, 10, 10); G.SetColor (warna baru (153,51,205)); }} // Gambar bingkai antarmuka dan blok tumpukan --- seluruh peta g.setColor (color.red); untuk (int i = 0; i <12; i ++) {// berjalan untuk (int j = 0; j <22; j ++) {// berjalan if (peta [i] [j] == 3) {g.drawrect (i*10, j*10, 10, 10); } lain jika (peta [i] [j] == 1) {g.fillrect (i*10, j*10, 10, 10); g.setColor (color.green); G.Drawrect (i*10, j*10, 10, 10); G.SetColor (Color.Red); }}} // Tunjukkan skor, dan tata letaknya indah, tambahkan sesuatu ke antarmuka // gambar bagian kanan area persegi g.setColor (color.red); g.setfont (font baru ("aa", font.bold, 11)); g.drawstring ("skor =" + skor, 130, 20); g.setfont (font baru ("aa", font.plain, 13)); G.SetColor (Color.Blue); G.DrawString ("Tolak game bajakan,", 125, 70); G.DrawString ("Hati-hati dengan perlindungan diri.", 125, 90); g.drawstring ("Waspadalah ditipu.", 125, 110); G.DrawString ("Game moderat baik untuk otak,", 125, 130); g.drawstring ("Tambahkan ke permainan berbahaya bagi tubuh.", 125, 150); G.DrawString ("Jadwal waktu wajar,", 125, 170); G.Drawstring ("Nikmati Hidup Sehat.", 125, 190); } class TimerKeyLister memperluas KeyAdapter mengimplementasikan ActionListener {@Override public void actionPerformed (actionEvent e) {down (); } @Override public void keypressed (keyevent e) {switch (e.getKeyCode ()) {case keyevent.vk_down: down (); merusak; case keyevent.vk_left: left (); break; case keyevent.vk_right: right (); break; case keyevent.vk_up: turn (); break; case keyevent.vk_f1: plug (); case keyevent.vk_f2: time (); }} public void plug () {skor+= 100; } public void time () {delay = 1000; timer.setDelay (delay); }}}Menjalankan antarmuka:
Untuk game yang lebih menarik, silakan merujuk ke topik khusus "Java Classic Games"
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.