欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

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

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

專注于為中小企業(yè)提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)克拉瑪依免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(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);


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

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

}

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

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

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

當前文章:五子棋游戲圖形化實現(xiàn)-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://chinadenli.net/article48/eocep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)關(guān)鍵詞優(yōu)化面包屑導(dǎo)航企業(yè)網(wǎng)站制作網(wǎng)站維護云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)