Artikel ini menjelaskan kode permainan catur Gozi yang diimplementasikan di Java. Ini dibagikan kepada Anda untuk referensi Anda. Kode spesifiknya adalah sebagai berikut
1. Tujuan Praktis
1. Master Desain Antarmuka Javagui
2. Master pemantauan peristiwa tikus (MouseListener, MousemotionListener)
2. Konten Praktis
Desain program Gochi sederhana yang dapat mewujudkan proses game catur gochi. Seperti yang ditunjukkan pada gambar di bawah ini
1. Papan catur Gozi
paket cn.edu.ouc.Fivechess; impor java.awt.color; impor java.awt.cursor; impor java.awt.dimension; impor java.awt.graphics; impor java.awt.graphics2d; impor java.awt.image; impor java.awt.radialgradientpaint; impor java.awt.renderinghints; impor java.awt.toolkit; impor java.awt.event.mouseevent; impor java.awt.event.mouselistener; impor java.awt.event.mousemotionlistener; impor java.awt.geom.ellipse2d; impor javax.swing.*; /*** goziqi-chess-chess-board kelas*/Kelas publik CHESSBOARD memperluas JPanel mengimplementasikan MouseListener {public static final int margin = 30; // margin public static final int grid_span = 35; // poin poin public final public = 15; // barisan publon public static publi publal = 15; Poin [(baris+1)*(cols+1)]; // Awal setiap elemen array adalah null boolean isBlack = true; // default dimulai dengan catur hitam pertama gimover boolean = false; // adalah gim yang diakhiri dengan catur; // jumlah potongan catur saat ini. Bayangan gambar; Color Colortemp; PBB Publik () {// Setbackground (color.blue); // Atur warna latar belakang ke oranye img = toolkit.getDefaultToolKit (). getImage ("board.jpg"); shadows = toolkit.getDefaultToolKit (). getImage ("shadows.jpg"); AddMouseListener (ini); addMouseMotionListener(new MouseMotionListener(){ public void mouseDragged(MouseEvent e){ } public void mouseMoved(MouseEvent e){ int x1=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN; //Convert the coordinate position of the mouse click to the grid index int y1 = (e.gety ()-margin+grid_span/2)/grid_span; // permainan telah berakhir dan tidak dapat dimasukkan // tidak ada tempat di luar papan catur. setCursor (kursor baru (cursor.default_cursor)); } // gambar publiccomponent public void (grafik g) {super.paintComponent (g); // Draw catur papan int imgwidth = img.getwidth (ini); int imgheight = img.getHeight (ini); // Dapatkan lebar dan tinggi gambar int fwidth = getWidth (); int fheight = getHeight (); // Dapatkan lebar dan tinggi jendela int x = (fwidth-imgwidth)/2; int y = (fheight-imgheight)/2; G.DrawImage (IMG, X, Y, NULL); untuk (int i = 0; i <= baris; i ++) {// menggambar garis horizontal g.drawline (margin, margin+i*grid_span, margin+cols*grid_span, margin+i*grid_span); } untuk (int i = 0; i <= cols; i ++) {// Gambar garis vertikal g.drawline (margin+i*grid_span, margin, margin+i*grid_span); } // menggambar catur untuk (int i = 0; i <chiSscount; i ++) {// grid persimpangan x, y koordinat int xpos = chesslist [i] .getx ()*grid_span+margin; int ypos = ChessList [i] .gety ()*grid_span+margin; g.setColor (ChessList [i] .getColor ()); // atur warna // g.filloval (xpos-point.diameter/2, ypos-point.diameter/2, //point.diameter, point.diameter); //g.drawimage(shadows, xpos-point.diameter/2, ypos-point.diameter/2, point.diameter, point.diameter, null); Colortemp = ChessList [i] .getColor (); if (colortemp == Color.black) {RadialGradientPaint Paint = RadialGradientPaint Baru (xpos-point.Diameter/2+25, ypos-point.diameter/2+10, 20, float baru [] {0f, 1f}, warna baru [] {color.white, color.black}); ((Graphics2d) g) .setPaint (cat); ((Graphics2d) g) .SetrenderingHint (renderinghints.key_antialiasing, renderinghints.value_antialias_on); ((Graphics2d) g) .setrenderingHint (renderinghints.key_alpha_interpolation, renderinghints.value_alpha_interpolation_default); } lain jika (colortemp == color.white) {RadialGradientPaint cat = new RadialGradientPaint (xpos-point.Diameter/2+25, ypos-point.diameter/2+10, 70, float baru [] {0f, 1f}, new color [] {color.white, color.black {0f, 1f}, new color [] {color.white, color. ((Graphics2d) g) .setPaint (cat); ((Graphics2d) g) .SetrenderingHint (renderinghints.key_antialiasing, renderinghints.value_antialias_on); ((Graphics2d) g) .setrenderingHint (renderinghints.key_alpha_interpolation, renderinghints.value_alpha_interpolation_default); } Ellipse2d e = ellipse2d.float baru (xpos-point.diameter/2, ypos-point.diameter/2, 34, 35); ((Grafik2d) g) .fill (e); // kotak persegi panjang merah yang menandai bagian catur terakhir jika (i == CHESSCount-1) {// Jika itu adalah bagian catur terakhir G.setColor (color.red); G.Drawrect (xpos-point.diameter/2, ypos-point.diameter/2, 34, 35); }}} public void mousepressed (mouseEvent e) {// mouse dipanggil ketika ditekan pada komponen // game tidak bisa lagi bermain jika (gameover) kembali; String colorname = isBlack? "Hitam": "catur putih"; // Konversi posisi koordinat dari mouse klik ke dalam indeks grid xindex = (e.getx ()-margin+grid_span/2)/grid_span; yindex = (e.gety ()-margin+grid_span/2)/grid_span; // Jika Anda berada di luar papan catur, Anda tidak dapat meletakkannya jika (XIndex <0 || XIndex> baris || yindex <0 || yindex> cols) kembali; // Jika ada bagian catur di posisi x dan y, Anda tidak dapat meletakkannya jika (findchess (xindex, yindex)) kembali; // Jika Anda bisa melakukannya setelah selesai, Anda tidak dapat meletakkannya setelah selesai. Point (xindex, yindex, isBlack? Color.black: color.white); ChessList [ChessCount ++] = ch; repaint (); // beri tahu sistem untuk menggambar ulang // jika Anda menang, berikan pesan cepat dan tidak dapat terus bermain catur jika (iswin ()) {string msg = string.format ("ucapan selamat, %s won!", colorname); JOPTIONPANE.SHOWMESSADEIALOG (ini, MSG); Gameover = true; } isBlack =! IsBlack; } // Method to overwrite mouseListener public void mouseClicked(MouseEvent e){ // Called when the mouse button clicks on the component} public void mouseEntered(MouseEvent e){ //Called when the mouse enters the component} public void mouseExited(MouseEvent e){ //Called when the mouse leaves the component} public void Mousereleased (MouseEvent E) {// Dipanggil kapan tombol mouse dirilis pada komponen} // dipanggil dalam array catur untuk melihat apakah ada potongan catur dengan indeks x dan y yang ada boolean private findchess (int x, int y) {untuk (titik c: chesslist) {if (c! = null & c.getx () = c. = ceria == & c.= (c.) {if! } return false; } private boolean iswin () {int continuecount = 1; // Jumlah potongan catur kontinu // terlihat secara horizontal ke barat untuk (int x = xindex-1; x> = 0; x-) {color c = isBlack? color.black: color.white; if (getchess (x, yindex, c)! = null) {continueCount ++; } lain break; } // Lihat secara horizontal ke timur untuk (int x = xindex+1; x <= cols; x ++) {color c = isBlack? Color.black: color.white; if (getchess (x, yindex, c)! = null) {continueCount ++; } lain break; } if (continueCount> = 5) {return true; } else continuecount = 1; // Lanjutkan pencarian lain secara vertikal // Cari ke atas untuk (int y = yindex-1; y> = 0; y-) {color c = isBlack? Color.black: color.white; if (getchess (xindex, y, c)! = null) {continueCount ++; } lain break; } // lihat ke bawah untuk (int y = yindex+1; y <= baris; y ++) {color c = isBlack? Color.black: color.white; if (getchess (xindex, y, c)! = null) ContinueCount ++; Lainnya istirahat; } if (continueCount> = 5) return true; lain ContinueCount = 1; // Lanjutkan Cari Situasi Lain: miring // Northeast Search for (int x = xindex+1, y = yindex-1; y> = 0 && x <= cols; x ++, y-) {color c = isBlack? Color.black: color.white; if (getchess (x, y, c)! = null) {ContinueCount ++; } lain break; } // Southwest Search for (int x = xindex-1, y = yindex+1; x> = 0 && y <= baris; x-, y ++) {color c = isBlack? Color.black: color.hite; if (getchess (x, y, c)! = null) {ContinueCount ++; } lain break; } if (continueCount> = 5) return true; lain ContinueCount = 1; // Lanjutkan Cari dalam Situasi Lain: Oblique // Northwest Search for (int x = xindex-1, y = yindex-1; x> = 0 && y> = 0; x-, y-) {color c = isBlack? Color.black: color.hite; if (getChess (x, y, c)! = null) ContinueCount ++; Lainnya istirahat; } // Tempat Tenggara untuk (int x = xIndex+1, y = yindex+1; x <= cols && y <= baris; x ++, y ++) {color c = isBlack? Color.black: color.hite; if (getChess (x, y, c)! = null) ContinueCount ++; Lainnya istirahat; } if (continueCount> = 5) return true; lain ContinueCount = 1; mengembalikan false; } private point getChess (int xindex, int yindex, warna warna) {for (titik p: chesslist) {if (p! = null && p.getx () == XIndex && p.gety () == yindex && p.getColor () == Color) return p; } return null; } public void restartgame () {// cap catur untuk (int i = 0; i <chesslist.length; i ++) {chesslist [i] = null; } // Kembalikan nilai variabel terkait game isBlack = true; Gameover = false; // adalah game akhir cyscount = 0; // jumlah papan catur dan potongan -potongan saat ini (); } // Balas ke catur public void goBack () {if (cyscount == 0) return; ChessList [ChessCount-1] = null; Chesscount--; if (chesscount> 0) {xIndex = ChessList [ChessCount-1] .getX (); yindex = ChessList [cyscount-1] .gety (); } isBlack =! IsBlack; ulang (); } // dimensi persegi panjang dimensi publik getPreferredSize () {return new dimension (margin*2 +grid_span*cols, margin*2 +grid_span*baris); }} 2. Potongan catur
paket cn.edu.ouc.Fivechess; impor java.awt.color; /*** Kelas catur*/titik kelas publik {private int x; // x index di papan catur int y; // y indeks di papan catur warna warna pribadi; // warna public static final int diameter = 30; // Diameter public point (int x, int y, warna warna) {this.x = x; this.y = y; this.color = warna; } public int getX () {// Dapatkan indeks x di papan catur return x; } public int gety () {return y; } public color getColor () {// Dapatkan warna warna pengembalian potongan catur; }} 3. Kelas Bingkai Utama Gozi
paket cn.edu.ouc.Fivechess; impor java.awt.event.*; impor java.awt.*; impor javax.swing.*; /* Kerangka kerja utama Goji, program*/ kelas publik startchessJframe memperluas jframe {private chessboard chessboard; Toolbar Jpanel Pribadi; Private Jbutton Startbutton, Backbutton, ExitButton; Private JMenubar Menubar; Private Jmenu Sysmenu; Private JMenuitem StartMenuitem, ExitMenuitem, BackMenuitem; // restart, keluar, dan penyesalan item menu public startchessjframe () {settitle ("stand-alone goji"); // atur judul catur = new chessboard (); Container contentPane = getContentPane (); contentpane.add (papan catur); CHESSBOARD.SETOPAIQUE (TRUE); // Buat dan tambahkan menu menubar = jmenubar baru (); // inisialisasi bilah menu sysmenu = jmenu baru ("sistem"); // inisialisasi menu // inisialisasi item menu startMenuitem = jMenuitem baru ("restart"); ExitMenuitem = JMenuitem baru ("EXIT"); backMenuitem = jMenuitem baru ("bertobat"); // Tambahkan tiga item menu ke menu sysmenu.add (startMenuitem); sysmenu.add (ExitMenuitem); sysmenu.add (backmenuitem); // inisialisasi kelas internal myitemlistener lis = myitemlistener baru (); // Daftarkan tiga menu ke pendengar acara this.startMenuitem.addactionListener (LIS); backmenuitem.addactionListener (LIS); ExitMenuitem.addactionListener (LIS); menubar.add (sysmenu); // tambahkan menu sistem ke bilah menu setjmenubar (menubar); // atur menubar ke menubar toolbar = new jpanel (); // instantiate panel alat // tiga tombol inisialisasi startbutton = new jbutton ("start resart"); EXITBUTTON = JBUTTON BARU ("EXIT"); backbutton = jbutton baru ("bertobat"); // tata letak tombol panel pahat dengan flowlayout toolbar.setLayout (flowlayout baru (flowlayout.left)); // Tambahkan tiga tombol ke alat panel toolbar.add (startButton); toolbar.add (exitbutton); toolbar.add (backbutton); // Daftarkan tiga tombol untuk mendengarkan acara startbutton.addactionListener (LIS); Exitbutton.addactionListener (LIS); backbutton.addactionListener (LIS); backbutton.addactionListener (LIS); // Letakkan panel alat ke antarmuka "selatan" yaitu, tambahkan (toolbar, borderlayout.south); Tambah (CHESSBOARD); // Tambahkan objek Panel ke form // Atur antarmuka tutup setDefaultCloseOperation (jframe.exit_on_close); // setsize (800.800); pack();//Adaptive size} private class MyItemListener implements ActionListener{ public void actionPerformed(ActionEvent e){ Object obj=e.getSource();//Get the event source if(obj==StartChessJFrame.this.startMenuItem||obj==startButton){ //Start//JFiveFrame.this inner class references the outer class System.out.println ("Start"); CHESSBOARD.RESTARTGAME (); } lain jika (obj == exitMenuitem || obj == exitbutton) system.exit (0); lain if (obj == backMenuitem || obj == backbutton) {system.out.println ("CHESS CHEST ..."); CHESSBOARD.GOBACK (); }}} public static void main (string [] args) {startchessJframe f = startchessjframe baru (); // Buat bingkai utama f.setVisible (true); // Tampilkan bingkai utama}} 3. Ringkasan
1. Desain dan implementasi menu?
2. Cara menggambar potongan catur setelah mouse mengklik di papan catur? Bagaimana cara menggambar kotak merah untuk bagian catur yang baru saja Anda atur?
3. Apa struktur data untuk skor catur?
Di atas adalah semua tentang artikel ini, saya harap akan sangat membantu bagi semua orang untuk belajar pemrograman Java.