真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

五子棋游戲圖形化實現(xiàn)-創(chuàng)新互聯(lián)

這是程序呈現(xiàn)的效果圖
在這里插入圖片描述
利用AWT的位圖處理,其機制是單緩存,所以會造成程序閃爍
但可以利用Swing的雙緩存位圖處理,其機制是雙緩存,不會造成程序閃爍
下面是代碼塊
逐條進行了分析 和解釋

專注于為中小企業(yè)提供成都網(wǎng)站制作、成都網(wǎng)站設計服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)克拉瑪依免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class Gobang {//定義五子棋的棋盤
    JFrame jf = new JFrame("五子棋游戲");

    //聲明四個變量
    BufferedImage table;
    BufferedImage white;
    BufferedImage black;
    BufferedImage selected;

    //聲明棋盤的高和寬
    final int TABLE_WIDTH=535;
    final int TABLE_HEIGHT=536;

    //聲明棋盤橫向和縱向分別可以下多少子
    final int BORD_SIZE = 15;

    //聲明每顆棋子占用的比率
    final int RATE = TABLE_WIDTH/BORD_SIZE;

    //聲明偏移量
    final int X_OFFSET = 5;
    final int Y_OFFSET = 6;

    //聲明一個二維數(shù)組,代表其下棋的坐標
    //且如果為白棋則用1代表
    //如果為黑棋則用2代表
    //如果沒有落棋子則用0代表
    int[][] board = new int[BORD_SIZE][BORD_SIZE];

    //聲明紅色選擇框的坐標
    private int selected_X = -1;
    private int selected_Y = -1;

    //自定義類,定義畫布
    class ChessBoard extends JPanel{public void paint(Graphics g){//繪制棋盤
            g.drawImage(table,0,0,null);

            //繪制棋子
            for (int i = 0; i< BORD_SIZE; i++) {for (int j = 0; j< BORD_SIZE; j++) {//繪制白旗
                    if (board[i][j] == 1){g.drawImage(white,i*RATE+X_OFFSET,j*RATE+Y_OFFSET,null);
                    }

                    //繪制黑棋
                    if(board[i][j] ==2){g.drawImage(black,i*RATE+X_OFFSET,j*RATE+Y_OFFSET,null);
                    }

                }

            }

            //繪制選擇框,并且添加偏移量,并且當坐標大于0的時候開始繪制
            if (selected_X>0&&selected_Y>0){g.drawImage(selected,selected_X*RATE+X_OFFSET,selected_Y*RATE+Y_OFFSET,null);
            }
        }
    }

    //創(chuàng)建一個畫布對象
    ChessBoard chessBoard = new ChessBoard();

    //聲明一個變量,記錄當前下棋的顏色
    int board_type = 1;

    //聲明底部用到的按鈕
    Panel p = new Panel();
    Button whiteBn = new Button("白棋");
    Button blackBn = new Button("黑棋");
    Button deleteBn = new Button("刪除");

    //封裝一個刷新按鈕的方法
    public void refreshButtonColor(Color whiteBtn,Color blackBtn,Color deleteBtn){whiteBn.setBackground(whiteBtn);
        blackBn.setBackground(blackBtn);
        deleteBn.setBackground(deleteBtn);

    }

    public void init()throws Exception{//組裝試圖 編寫邏輯
        whiteBn.addActionListener(e ->{//修改當前棋子的顏色
            board_type = 1;

            //修改被選中框的顏色
            refreshButtonColor(Color.GREEN,Color.GRAY,Color.GRAY);
        });

        blackBn.addActionListener(e ->{//修改當前棋子的顏色
            board_type = 2;

            //修改被選中框的顏色
            refreshButtonColor(Color.GRAY,Color.GREEN,Color.GRAY);
        });

        deleteBn.addActionListener(e ->{//修改當前棋子的顏色
            board_type = 0;

            //修改被選中框的顏色
            refreshButtonColor(Color.GREEN,Color.GRAY,Color.GREEN);
        });

        p.add(whiteBn);
        p.add(blackBn);
        p.add(deleteBn);

        jf.add(p,BorderLayout.SOUTH);

        //初始化
        table = ImageIO.read(new File("src/images/board.jpg"));
        white = ImageIO.read(new File("src/images/white.gif"));
        black = ImageIO.read(new File("src/images/black.gif"));
        selected = ImageIO.read(new File("src/images/selected.gif"));

        //處理鼠標移動
        chessBoard.addMouseMotionListener(new MouseMotionAdapter() {@Override
            public void mouseMoved(MouseEvent e) {//當鼠標移動時候被調(diào)用
                selected_X=(e.getX()-X_OFFSET)/RATE;
                selected_Y=(e.getY()-Y_OFFSET)/RATE;

                chessBoard.repaint();
            }
        });

        //處理鼠標點擊
        chessBoard.addMouseListener(new MouseAdapter() {@Override
            public void mouseClicked(MouseEvent e) {//當鼠標點擊時候會被調(diào)用
                int xPos = (e.getX()-X_OFFSET)/RATE;
                int yPos = (e.getY()-Y_OFFSET)/RATE;

                board[xPos][yPos] = board_type;
                chessBoard.repaint();
            }

            @Override
            public void mouseExited(MouseEvent e) {selected_X = -1;
                selected_Y = -1;

                chessBoard.repaint();
            }
        });

        //組裝棋盤
        chessBoard.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));
        jf.add(chessBoard);


        //設置大小最佳
        jf.pack();
        jf.setVisible(true);
    }

    public static void main(String[] args) throws Exception{new Gobang().init();
    }

}

只是實現(xiàn)了GUI圖形化界面
還并未對游戲進行邏輯判斷
后續(xù)可用稀疏數(shù)組數(shù)據(jù)架構對游戲進行重構,優(yōu)化此游戲的判斷效率

如果自己想嘗試的話 需要項目圖片 可以私信我
后續(xù)會完善 異常拋出機制 勝利判斷邏輯 以及基于數(shù)據(jù)結構對游戲進行優(yōu)化
雖然程序不復雜,但是涉及的范圍很廣,還是很考驗對基礎知識的掌握
后續(xù)會更新,有興趣的可以自己試一下

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)站欄目:五子棋游戲圖形化實現(xiàn)-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://weahome.cn/article/eocep.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部