日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java swing實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲

瀏覽:29日期:2022-08-15 18:53:09

用java swing寫的一個(gè)簡(jiǎn)單的五子棋游戲。

java swing實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲

下面是Main.java。

package com.crossing.main;import com.crossing.view.GameWindow;public class Main { /** * @param args */ public static void main(String[] args) { GameWindow gameWindow = new GameWindow(); }}

下面是GameWindow.java。

package com.crossing.view;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.GridLayout;import java.awt.Rectangle;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;/** * @Title: GameWindow.java * @Package com.crossing.view * @Description: TODO(用一句話描述該文件做什么) * @author crossing * @date 2021年2月28日 下午9:23:14 * @version V1.0 */@SuppressWarnings('serial')public class GameWindow extends JFrame implements MouseListener, Runnable { private int width, height;// 屏幕寬高 private int mouseX = 0, mouseY = 0, mapsX = 0, mapsY = 0;// 鼠標(biāo)坐標(biāo),鼠標(biāo)在地圖中的位置 private int game_width = 600, game_height = 600;// 游戲窗口大小 private BufferedImage bgImage = null;// 背景圖片 private int chessBoardItemWidth = 25;// 棋盤每一小格的大小 private Rectangle chessBoardRect = null;// 棋盤所在矩形 private BufferedImage offsetImg = new BufferedImage(game_width, game_height, BufferedImage.TYPE_4BYTE_ABGR); private Graphics g = offsetImg.getGraphics();// 雙緩沖解決閃爍問(wèn)題 private int[][] maps = new int[15][15];// 0無(wú)棋子,1黑子,2白子 private boolean isBlack = true;// 是否是黑方的回合 private String message = '黑方先行', whitemessage = '無(wú)限制', blackmessage = '無(wú)限制';// 界面上方信息,下方時(shí)間信息 // 右邊操作界面 private JButton btn_start, btn_exit, btn_settings; private JPanel operaterPanel;// 操作面板 private int gametime = 0;// 游戲時(shí)間限制(秒) private int blackTime = 0, whiteTime = 0;// 黑白方剩余時(shí)間 private Thread timeThread = new Thread(this);// 黑白雙方倒計(jì)時(shí)線程// private boolean isLimitTime = false; public GameWindow() { setTitle('五子棋'); setSize(game_width, game_height); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 獲取屏幕寬高 width = Toolkit.getDefaultToolkit().getScreenSize().width; height = Toolkit.getDefaultToolkit().getScreenSize().height; // 棋盤位置矩形 chessBoardRect = new Rectangle(50, 120, 370, 370); setLocation((width - game_width) / 2, (height - game_height) / 2); addMouseListener(this); // 初始化右邊的面板 initOeratePane(); repaint(); // 設(shè)置背景 try { bgImage = ImageIO.read(new File('img/backgroung.png'));// System.out.println(bgImage); } catch (IOException e) { e.printStackTrace(); } setVisible(true); } /** * 初始化黑白雙方時(shí)間 */ private void initTime() {// System.out.println('isLimitTime:' + isLimitTime); if (gametime > 0) { timeThread.start(); if (blackTime < 0) { JOptionPane.showMessageDialog(this, '黑方時(shí)間已到,白方獲勝!'); timeThread.interrupt(); } else if (whiteTime < 0) { JOptionPane.showMessageDialog(this, '白方時(shí)間已到,黑方獲勝!'); timeThread.interrupt(); } } } /** * 初始化右邊操作界面 */ private void initOeratePane() { btn_start = new JButton('開(kāi)始游戲'); btn_settings = new JButton('游戲設(shè)置'); btn_exit = new JButton('退出游戲'); btn_start.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int select = JOptionPane.showConfirmDialog(getContentPane(), '確定要重新開(kāi)始嗎?'); if (select == 0) { reStartGame(); } } }); btn_settings.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String select = ''; select = JOptionPane.showInputDialog('請(qǐng)輸入游戲時(shí)間(分鐘),輸入0不限時(shí)間:'); if (select != null && !select.equals('')) { try { gametime = Integer.parseInt(select) * 60;// System.out.println('gametime:' + gametime);// isLimitTime = true;// System.out.println('設(shè)置isLimitTime--' + isLimitTime); blackTime = gametime; whiteTime = gametime; if (gametime > 0) { blackmessage = blackTime / 3600 + ':' + blackTime / 60 % 60 + ':' + blackTime % 60; whitemessage = whiteTime / 3600 + ':' + whiteTime / 60 % 60 + ':' + whiteTime % 60;// timeThread.resume(); } else { whitemessage = '無(wú)限制'; blackmessage = '無(wú)限制'; } initTime(); repaint(); } catch (Exception e2) { e2.printStackTrace(); JOptionPane.showMessageDialog(getContentPane(), '請(qǐng)輸入正確信息!'); }// } } }); btn_exit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); operaterPanel = new JPanel(); GridLayout layout = new GridLayout(0, 1, 100, 100); operaterPanel.setLayout(layout); operaterPanel.add(btn_start); operaterPanel.add(btn_settings); operaterPanel.add(btn_exit); getContentPane().add(operaterPanel, BorderLayout.EAST); } /** * 重新開(kāi)始游戲 */ protected void reStartGame() { isBlack = true; blackTime = gametime; whiteTime = gametime;// for (int i = 0; i < maps[0].length; i++) {// for (int j = 0; j < maps.length; j++) {// maps[i][j] = 0;// }// } maps = new int[15][15]; repaint(); } @Override public void paint(Graphics g1) { super.paint(g); // 繪制背景 g.drawImage(bgImage, 20, 90, this); // 繪制上方標(biāo)題 g.setColor(Color.black); g.setFont(new Font('楷體', Font.BOLD, 30)); g.drawString('游戲信息:' + message, 100, 75); // 繪制下方 g.setColor(Color.gray); g.fillRect(50, 530, 200, 50); g.fillRect(300, 530, 200, 50); g.setColor(Color.black); g.setFont(new Font('宋體', Font.BOLD, 20)); g.drawString('黑方時(shí)間:' + blackmessage, 60, 560); g.drawString('白方時(shí)間:' + whitemessage, 310, 560);// g.setColor(Color.blue); // 繪制棋盤線條 for (int i = 0; i < 15; i++) { g.drawLine(60, 130 + i * chessBoardItemWidth, 410, 130 + i * chessBoardItemWidth); g.drawLine(60 + i * chessBoardItemWidth, 130, 60 + i * chessBoardItemWidth, 480); } // 標(biāo)注點(diǎn)位 g.fillOval(131, 200, 8, 8); g.fillOval(331, 200, 8, 8); g.fillOval(131, 400, 8, 8); g.fillOval(331, 400, 8, 8); g.fillOval(230, 299, 10, 10); // 繪制棋子 for (int j = 0; j < maps.length; j++) { for (int i = 0; i < maps[0].length; i++) { if (maps[j][i] == 1) { g.setColor(Color.black); g.fillOval(50 + i * chessBoardItemWidth, 120 + j * chessBoardItemWidth, 20, 20); } if (maps[j][i] == 2) { g.setColor(Color.white); g.fillOval(50 + i * chessBoardItemWidth, 120 + j * chessBoardItemWidth, 20, 20); } } } // 雙緩沖解決屏幕閃爍 g1.drawImage(offsetImg, 0, 0, this); } @Override public void mouseClicked(MouseEvent e) { mouseX = e.getX(); mouseY = e.getY(); // 鼠標(biāo)落子 if (chessBoardRect.contains(mouseX, mouseY)) { mapsX = (mouseX - 50) / chessBoardItemWidth; mapsY = (mouseY - 120) / chessBoardItemWidth;// System.out.println('mapsXY:' + mapsX + ',' + mapsY);// maps[mapsY][mapsX] = (isBlack == true ? 1 : 2); if (maps[mapsY][mapsX] == 0) { if (isBlack) { maps[mapsY][mapsX] = 1; isBlack = false; message = '白色落子'; } else { maps[mapsY][mapsX] = 2; isBlack = true; message = '黑色落子'; } checkGame(); } } repaint(); } /** * 判斷游戲是否結(jié)束 */ private void checkGame() { int color = maps[mapsY][mapsX]; boolean isWin = false;// System.out.println('mapsXY:' + mapsX + ',' + mapsY); isWin = checkChess(1, 0, color) || checkChess(0, 1, color) || checkChess(1, 1, color) || checkChess(1, -1, color); if (isWin) { if (color == 1) JOptionPane.showMessageDialog(this, '黑方勝利!'); else { JOptionPane.showMessageDialog(this, '白方勝利!'); } reStartGame();// new GameWindow(); } } /** * @param xChange 只能是1,0,-1 * @param yChange 只能是1,0,-1 * @param color */ private boolean checkChess(int xChange, int yChange, int color) { boolean isWin = false; int count = 1, tempX = xChange, tempY = yChange; while ((mapsX + tempX) >= 0 && (mapsX + tempX) < 15 && (mapsY + tempY) >= 0 && (mapsY + tempY) < 15 && maps[mapsY + tempY][mapsX + tempX] == color) { count++; if (tempX == 0 && tempY == 0) break; if (tempX > 0) tempX++; if (tempX < 0) tempX--; if (tempY > 0) tempY++; if (tempY < 0) tempY--; } tempX = xChange; tempY = yChange; while ((mapsX - tempX) >= 0 && (mapsX - tempX) < 15 && (mapsY - tempY) >= 0 && (mapsY - tempY) < 15 && maps[mapsY - tempY][mapsX - tempX] == color) { count++; if (tempX == 0 && tempY == 0) break; if (tempX > 0) tempX++; if (tempX < 0) tempX--; if (tempY > 0) tempY++; if (tempY < 0) tempY--; }// System.out.println('count:' + count); if (count >= 5) { return true; } return isWin; } @Override public void mousePressed(MouseEvent e) { } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) {// mouseX = e.getX();// mouseY = e.getY();// System.out.println('鼠標(biāo)進(jìn)入游戲窗口');// System.out.println('鼠標(biāo)坐標(biāo):' + mouseX + ',' + mouseY);// if (chessBoardRect.contains(mouseX, mouseY)) {// System.out.println('進(jìn)入棋盤');// if (isBlack) {// g.setColor(Color.black);// } else {// g.setColor(Color.white);// }// g.fillOval(mouseX, mouseY, 20, 20);// repaint();// } } @Override public void mouseExited(MouseEvent e) { } @Override public void run() { while (true) {// System.out.println('isblack:' + isBlack); if (isBlack) { blackTime--; } else { whiteTime--; } blackmessage = blackTime / 3600 + ':' + blackTime / 60 % 60 + ':' + blackTime % 60; whitemessage = whiteTime / 3600 + ':' + whiteTime / 60 % 60 + ':' + whiteTime % 60;// System.out.println('blackTime:' + blackTime);// System.out.println('whiteTime:' + whiteTime); repaint(); if (blackTime < 0) { JOptionPane.showMessageDialog(getContentPane(), '黑方時(shí)間已到,白方獲勝!'); timeThread.interrupt(); new GameWindow(); break; } else if (whiteTime < 0) { JOptionPane.showMessageDialog(getContentPane(), '白方時(shí)間已到,黑方獲勝!'); timeThread.interrupt(); new GameWindow(); break; } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }}

背景圖片

java swing實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
天堂va欧美ⅴa亚洲va一国产| 免费欧美日韩| 青青草91久久久久久久久| 亚洲欧美日韩视频二区| 欧洲精品一区二区三区| 国精品产品一区| 精品国产精品国产偷麻豆| 精品一区二区三区免费看| 精品视频高潮| 国产v日韩v欧美v| 91精品韩国| 久久亚洲成人| 夜夜嗨av一区二区三区网站四季av| 欧美午夜不卡| 免费成人av在线播放| 妖精视频成人观看www| 人人爽香蕉精品| 日韩高清欧美激情| 国产精品美女午夜爽爽| 麻豆精品在线| 快播电影网址老女人久久| 五月天综合网站| 黄色日韩精品| 日韩av午夜在线观看| 美日韩一区二区三区| 另类专区亚洲| 亚洲一区欧美激情| 欧美在线看片| 精品理论电影在线| 香蕉久久精品| 亚洲日本久久| 精品三级av在线导航| 999精品色在线播放| 视频一区中文字幕| 日本一区二区三区视频在线看| 欧美自拍一区| 高清久久一区| 日韩视频二区| 国产精品天堂蜜av在线播放| 手机在线电影一区| 一区免费在线| 欧美日韩伊人| 欧洲亚洲一区二区三区| 亚洲色图网站| 国产精品精品国产一区二区| 国产亚洲毛片在线| 欧美国产不卡| 91高清一区| 国产日韩欧美三区| 成人欧美一区二区三区的电影| 黄色亚洲在线| 美女视频网站久久| 在线亚洲欧美| 国产一区二区三区免费在线| 麻豆亚洲精品| 精品国产乱码久久久久久樱花 | 国产精品一区亚洲| 欧洲一级精品| 亚洲乱码视频| 欧美13videosex性极品| 日韩精彩视频在线观看| 日韩三区在线| 一区二区三区四区日韩| 97视频热人人精品免费| 视频一区中文字幕国产| 麻豆网站免费在线观看| 亚洲精品乱码| 99精品网站| 嫩草伊人久久精品少妇av杨幂| 久久国产精品久久w女人spa| 精品免费av| 欧美一区自拍| 国产精品三上| 日韩精品中文字幕第1页| 日韩成人精品一区二区三区| 婷婷成人综合| 国产一区日韩| 亚洲精品在线a| 欧美.日韩.国产.一区.二区| 麻豆精品视频在线| 亚洲欧美一级| 欧美精品激情| 在线看片福利| 欧美国产日韩电影| 黄色欧美日韩| 久久久久久久久久久9不雅视频| 国产精品探花在线观看| 亚洲一二三区视频| 久久国产电影| 成人在线视频中文字幕| 日本v片在线高清不卡在线观看| 久久久久中文| 欧美激情综合| 欧美天堂在线| 视频国产精品| 蜜桃视频第一区免费观看| 久久久蜜桃一区二区人| 鲁大师精品99久久久| 日韩精品国产欧美| 首页国产欧美久久| 夜夜精品视频| 激情偷拍久久| 亚洲va在线| 国产亚洲一区二区手机在线观看| 精品午夜久久| 欧美激情福利| 欧美成人精品午夜一区二区| 亚洲综合色婷婷在线观看| 欧美日韩国产探花| 久久国产精品成人免费观看的软件| 成人美女视频| 人在线成免费视频| 亚洲精品**中文毛片| 国产精品二区不卡| 国产一区2区| 高清精品久久| 中文字幕在线看片| 欧洲一区二区三区精品| 国产乱码午夜在线视频| 激情久久99| 国产精选在线| 韩国三级一区| 国产一二在线播放| 日韩久久精品网| 精品视频黄色| 中文字幕人成乱码在线观看| 波多视频一区| 久久精品青草| 亚洲深夜福利| 综合一区av| 国产欧美一区二区精品久久久 | 国产亚洲欧美日韩在线观看一区二区| 水野朝阳av一区二区三区| 麻豆亚洲精品| 日韩欧美激情| 国产精品宾馆| 国产不卡av一区二区| 日韩中文视频| 不卡av一区二区| 噜噜噜久久亚洲精品国产品小说| 伊人久久一区| 69堂精品视频在线播放| 国产精品白浆| 国内一区二区三区| 极品av在线| 成人免费电影网址| 不卡一区综合视频| 蜜臀av亚洲一区中文字幕| 亚洲精品麻豆| 欧美国产三级| 日韩在线不卡| 精品一区毛片| 在线免费观看亚洲| 亚洲欧美专区| 另类欧美日韩国产在线| 日韩在线观看一区| 久久国产精品99国产| 国产探花一区二区| 成人在线黄色| 亚洲专区一区| 欧美在线看片| 亚洲1234区| 亚洲综合激情在线| 国产一区2区在线观看| 9色国产精品| 国产亚洲精品美女久久| 伊人久久视频| 亚洲精品免费观看| 精品国产鲁一鲁****| 91精品成人| 欧美久久精品| av在线日韩| 亚洲精品国产日韩| 精品成av人一区二区三区| 激情婷婷久久| 午夜精品福利影院| 日产精品一区二区| aa国产精品| 精品视频在线观看网站| 亚洲精品午夜av福利久久蜜桃| 日韩高清电影免费| 私拍精品福利视频在线一区| 日日夜夜免费精品视频| 狠狠躁少妇一区二区三区| 免费国产亚洲视频| 精品久久美女| 亚洲五月综合| 视频福利一区| 国产精品久久久久77777丨 | 久久久人人人| 欧美日韩xxxx| 一区在线视频观看| 精品一区视频| 日本vs亚洲vs韩国一区三区二区| 日韩一区自拍| 国产伦精品一区二区三区在线播放| 中文字幕系列一区| 国产精品久久久久9999高清| 亚洲欧美久久| 美女av在线免费看|