亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java版數獨游戲界面實現(二)

2024-07-13 10:14:55
字體:
來源:轉載
供稿:網友

本文實例為大家分享了java版數獨游戲界面實現的具體代碼,供大家參考,具體內容如下

實現效果圖:

這里寫圖片描述

主函數用于啟動程序:

package hlc.shudu.app;import hlc.shudu.src.ShuduHelper;import hlc.shudu.ui.ShuduMainFrame;public class AppStart {  public static void main(String[] args) {    ShuduMainFrame mainFrame = new ShuduMainFrame();    mainFrame.setVisible(true);  }}

主窗體類(包含消息區,時間區,游戲區):

 

package hlc.shudu.ui;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Font;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Time;import java.text.SimpleDateFormat;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.Timer;import javax.swing.border.TitledBorder;/* * 數獨主窗體 */public class ShuduMainFrame extends JFrame {  public static int pass = 1; // 關卡  public static JLabel lbPass; // 顯示關卡的lable  public static long usedTime = 0; // 玩家用時  private ShuduCanvers panelCanvers; // 主游戲區  public static Timer userTimeAction;  /*   * 默認構造函數   */  public ShuduMainFrame() {    // 初始化方法    init();    // 添加組件    addComponent();    // 添加主游戲區    addCanvers();  }  /*   * 添加主游戲區   */  private void addCanvers() {    panelCanvers = new ShuduCanvers();    panelCanvers.setBorder(new TitledBorder("游戲區"));    // 將主游戲區添加到窗體中    this.add(panelCanvers, BorderLayout.CENTER);  }  /*   * 添加組件區   */  private void addComponent() {    JPanel panelComponent = new JPanel();    // 添加消息區    addPanelMsg(panelComponent);    // 添加時間區    addPanelTime(panelComponent);    // 將組件添加到窗體頂部    this.add(panelComponent, BorderLayout.NORTH);  }  private void addPanelTime(JPanel panelComponent) {    JPanel panelTime = new JPanel();    panelTime.setBorder(new TitledBorder("時間"));    panelTime.setLayout(new GridLayout(2, 1));    final JLabel lbSysTime = new JLabel();    final JLabel lbUserTime = new JLabel();    panelTime.add(lbSysTime, BorderLayout.NORTH);    panelTime.add(lbUserTime, BorderLayout.SOUTH);    // 設置系統時間定時器    Timer sysTimeAction = new Timer(500, new ActionListener() {      @Override      public void actionPerformed(ActionEvent e) {        long timeMillis = System.currentTimeMillis();        SimpleDateFormat df = new SimpleDateFormat(            "yyyy-MM-dd HH:mm:ss");        lbSysTime.setText("  系統時間: " + df.format(timeMillis));      }    });    sysTimeAction.start();    userTimeAction = new Timer(1000, new ActionListener() {      @Override      public void actionPerformed(ActionEvent e) {        lbUserTime.setText("  您已用時: " + (++usedTime)+ " sec.");      }    });    userTimeAction.start();    panelComponent.add(panelTime, BorderLayout.EAST);  }  /*   * 添加消息區   */  private void addPanelMsg(JPanel panelComponent) {    // panelComponent.setBorder(new TitledBorder("消息區"));    panelComponent.setLayout(new GridLayout(1, 3));    Font font14 = new Font("", 4, 14);    Font font28 = new Font("", 2, 28);    JPanel panelMsg = new JPanel();    panelMsg.setBorder(new TitledBorder("消息區"));    JLabel lbPass1 = new JLabel("關卡:第");    lbPass1.setFont(font14);    panelMsg.add(lbPass1);    // 顯示關卡數    lbPass = new JLabel("" + pass);    lbPass.setForeground(Color.RED);    lbPass.setFont(font28);    panelMsg.add(lbPass);    JLabel lbPass2 = new JLabel("關/總共10關");    lbPass2.setFont(font14);    panelMsg.add(lbPass2);    panelComponent.add(panelMsg, BorderLayout.CENTER);  }  /*   * 界面初始化   */  private void init() {    ImageIcon image = new ImageIcon("icon/icon.png");    this.setIconImage(image.getImage());    // 設置窗口初始大小    this.setSize(515, 600);    // 設置窗口初始位置    this.setLocation(500, 50);    // 設置窗口標題    this.setTitle("數獨游戲(By:侯龍超)");    // 設置窗體不允許改變大小    this.setResizable(false);    // 設置默認關閉操作    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  }}

游戲區畫布:

 

package hlc.shudu.ui;import hlc.shudu.src.ShuduHelper;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dialog.ModalExclusionType;import java.awt.event.InputEvent;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.JDialog;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.border.Border;import javax.swing.border.TitledBorder;public class ShuduCanvers extends JPanel implements MouseListener {  ShuduCell[][] cells;  // 得到數獨數組  int[][] maps = new int[9][9];  private SelectNumFrame selectNum;  /*   * 默認構造函數   */  public ShuduCanvers() {    ShuduMainFrame.usedTime = 0;    maps = ShuduHelper.getMap();    // 加載數獨區    this.setLayout(null);    cells = new ShuduCell[9][9];    for (int i = 0; i < 9; i++) {      for (int j = 0; j < 9; j++) {        // this.remove(cells[i][j]);        // 創建單元格        cells[i][j] = new ShuduCell();        // 設置位置        cells[i][j].setLocation(20 + i * 50 + (i / 3) * 5, 20 + j * 50            + (j / 3) * 5);        if (passRole(ShuduMainFrame.pass)) {          cells[i][j].setText("" + maps[i][j]);          // 設置背景顏色          cells[i][j].setBackground(getColor(maps[i][j]));          cells[i][j].setEnabled(false);          cells[i][j].setForeground(Color.gray);        } else {          cells[i][j].addMouseListener(this);        }        this.add(cells[i][j]);      }    }    checkFinish();    // reLoadCanvers();  }  /*   * 檢查是否完成   */  private void checkFinish() {    for (int i = 0; i < 9; i++) {      for (int j = 0; j < 9; j++) {          if (!check(i, j)) {            return;          }        }      }    // 停止用戶用時計時器    ShuduMainFrame.userTimeAction.stop();    // 清除所有cell監聽    clearAllListener();    // 闖關數加一    ShuduMainFrame.pass += 1;    if (ShuduMainFrame.pass > 10) {      int o = JOptionPane          .showConfirmDialog(this, "您已經通關了,是否重頭開始?", "", 0);      if (o == 1) {        System.exit(0);      } else {        ShuduMainFrame.pass = 1;      }    } else {      JOptionPane.showMessageDialog(this, "恭喜你通過本關!用時:"          + ShuduMainFrame.usedTime + "秒/n即將進入下一關!");    }    // 更新關卡提示    ShuduMainFrame.lbPass.setText("" + ShuduMainFrame.pass);    // 開始新的關卡    reLoadCanvers();    // 打開用戶用時計時器    ShuduMainFrame.userTimeAction.start();  }  /*   * 檢查指定坐標處的單元格   */  private boolean check(int i, int j) {    if (cells[i][j].getText().isEmpty()) {      return false;    }    for (int k = 0; k < 9; k++) {      if (cells[i][j].getText().trim().equals(cells[i][k].getText().trim()) && j!=k) {        return false;      }      if (cells[i][j].getText().trim().equals(cells[k][j].getText().trim()) && i != k) {        return false;      }      int ii = (i / 3) * 3 + k / 3;      int jj = (j / 3) * 3 + k % 3;      if (cells[i][j].getText().trim().equals(cells[ii][jj].getText().trim()) &&!(i == ii && j == jj)) {        return false;      }    }    return true;  }  /*   * 重新加載數獨區   */  public void reLoadCanvers() {    ShuduMainFrame.usedTime = 0;    maps = ShuduHelper.getMap();    for (int i = 0; i < 9; i++) {      for (int j = 0; j < 9; j++) {        this.remove(cells[i][j]);        // 創建單元格        cells[i][j] = new ShuduCell();        // 設置位置        cells[i][j].setLocation(20 + i * 50 + (i / 3) * 5, 20 + j * 50            + (j / 3) * 5);        if (passRole(ShuduMainFrame.pass)) {          cells[i][j].setText("" + maps[i][j]);          // 設置背景顏色          cells[i][j].setBackground(getColor(maps[i][j]));          cells[i][j].setEnabled(false);          cells[i][j].setForeground(Color.gray);        } else {          cells[i][j].addMouseListener(this);        }        this.add(cells[i][j]);      }    }    this.repaint();    checkFinish();  }  /*   * 根據關卡隨機產生該位置是否顯示數字   */  private boolean passRole(int pass) {    // TODO Auto-generated method stub    return Math.random() * 11 > pass;  }  /*   * 根據數字獲得顏色   */  private Color getColor(int i) {    Color color = Color.pink;    switch (i) {    case 1:      color = new Color(255, 255, 204);      break;    case 2:      color = new Color(204, 255, 255);      break;    case 3:      color = new Color(255, 204, 204);      break;    case 4:      color = new Color(255, 204, 153);      break;    case 5:      color = new Color(204, 255, 153);      break;    case 6:      color = new Color(204, 204, 204);      break;    case 7:      color = new Color(255, 204, 204);      break;    case 8:      color = new Color(255, 255, 255);      break;    case 9:      color = new Color(153, 255, 153);      break;    default:      break;    }    return color;  }  @Override  public void mouseClicked(MouseEvent e) {    // TODO Auto-generated method stub  }  @Override  public void mousePressed(MouseEvent e) {    int modes = e.getModifiers();    if ((modes & InputEvent.BUTTON3_MASK) != 0) {// 點擊鼠標右鍵      // 清空點擊單元格上的內容      ((ShuduCell) e.getSource()).setText("");    } else if ((modes & InputEvent.BUTTON1_MASK) != 0) {// 點擊鼠標左鍵      // 如果選擇數字窗口存在則銷毀      if (selectNum != null) {        selectNum.dispose();      }      // 新建一個選擇窗口      selectNum = new SelectNumFrame();      // 設置成模態窗口      selectNum.setModal(true);      // 設置選擇窗口在顯示器上的位置      selectNum.setLocation(e.getLocationOnScreen().x,          e.getLocationOnScreen().y);      // 將點擊的單元格傳遞給數字選擇窗口      selectNum.setCell((ShuduCell) e.getSource());      // 顯示數字選擇窗口      selectNum.setVisible(true);    }    checkFinish();  }  /*   * 清除所有cell的點擊監聽   */  private void clearAllListener() {    for (int i = 0; i < 9; i++) {      for (int j = 0; j < 9; j++) {        cells[i][j].removeMouseListener(this);      }    }  }  @Override  public void mouseReleased(MouseEvent e) {    // TODO Auto-generated method stub  }  @Override  public void mouseEntered(MouseEvent e) {    // TODO Auto-generated method stub  }  @Override  public void mouseExited(MouseEvent e) {    // TODO Auto-generated method stub  }}

數獨單元格:

package hlc.shudu.ui;import java.awt.Color;import java.awt.Font;import javax.swing.JButton;public class ShuduCell extends JButton { public ShuduCell(){  this.setSize(50,50);  Font font = new Font("",2,24);  this.setFont(font);  this.setBackground(new Color(255,153,102));  this.setForeground(Color.BLUE); }}

數字選擇框:

package hlc.shudu.ui;import java.awt.Color;import java.awt.Window;import java.awt.event.InputEvent;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFrame;public class SelectNumFrame extends JDialog implements MouseListener { private ShuduCell cell; public void setCell(ShuduCell cell) {  this.cell = cell; } public SelectNumFrame(){  //隱藏界面上面的工具欄  this.setUndecorated(true);  this.setSize(150, 150);  this.setBackground(new Color(255,204,153, 123));  this.setLayout(null);  addNum(); } //添加數字1~9 private void addNum() {  for (int i = 0; i < 3; i++) {   for (int j = 0; j < 3; j++) {    JButton btn = new JButton();    btn.setSize(50, 50);    btn.setLocation(i*50,j*50);    btn.setText(""+(j*3+i+1));    btn.addMouseListener(this);    this.add(btn);   }  } } @Override public void mouseClicked(MouseEvent e) {  // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent e) {  int modes = e.getModifiers();  if ((modes & InputEvent.BUTTON1_MASK) != 0) {   JButton btn = (JButton) e.getSource();   cell.setText(btn.getText());  }  this.dispose(); } @Override public void mouseReleased(MouseEvent e) {  // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) {  // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) {  // TODO Auto-generated method stub }}

完整程序包可在GitHub上下載:https://github.com/houlongchao/shudu.git

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久久爱| 91免费综合在线| 精品久久中文字幕| 国产欧美一区二区三区视频| 日本亚洲欧洲色| 色妞色视频一区二区三区四区| 国产一区二区久久精品| 亚洲精品色婷婷福利天堂| 91九色国产社区在线观看| 一夜七次郎国产精品亚洲| 国产免费一区二区三区香蕉精| 欧美一区二区三区艳史| 精品日韩中文字幕| 美女黄色丝袜一区| 成人做爰www免费看视频网站| 精品成人av一区| 亚洲精品99久久久久| 国产精品影片在线观看| 久久精品一本久久99精品| 日韩中文字幕视频在线| 亚洲精品99久久久久中文字幕| 色综久久综合桃花网| 国产成人精品av在线| 中文字幕一区电影| 亲爱的老师9免费观看全集电视剧| 成人精品一区二区三区电影黑人| 一区二区成人精品| 欧美在线性视频| 亚洲视频在线免费看| 亚州精品天堂中文字幕| 成人国内精品久久久久一区| 欧美激情一级精品国产| 亚洲女同性videos| 国产一区二区三区中文| 欧美日本精品在线| 欧美精品videosex极品1| 欧美黄色三级网站| 欧美成人午夜免费视在线看片| 日韩欧美极品在线观看| 日韩高清中文字幕| 国产精品福利久久久| 成人黄色av网站| 久久影视电视剧免费网站| 日韩精品视频免费在线观看| 在线成人一区二区| 国产精品中文字幕久久久| 欧美一区二区三区……| 久久中文字幕一区| 亚洲综合大片69999| 欧美激情亚洲精品| 欧美日韩性视频在线| 91精品国产乱码久久久久久久久| 欧美日韩在线看| 久久久999成人| 最好看的2019年中文视频| 成人做爽爽免费视频| 国产日韩欧美电影在线观看| 亚洲欧洲在线视频| 久久中文久久字幕| 久久人91精品久久久久久不卡| 亚洲国产日韩欧美在线99| 精品国产区一区二区三区在线观看| 国产日产亚洲精品| 午夜精品久久久久久久久久久久久| 中文字幕视频在线免费欧美日韩综合在线看| 日韩av大片在线| 亚洲精品久久久久久久久久久久| 亚洲女人天堂av| 亚洲人成电影在线| 久久精品色欧美aⅴ一区二区| 2019精品视频| 欧美成人久久久| 精品国产一区av| 亚洲网站在线播放| 国产视频精品va久久久久久| 日韩黄色高清视频| 日韩在线观看精品| 丝袜亚洲另类欧美重口| 久久久久久av| 91在线免费视频| 亚洲自拍偷拍区| 欧美黄色性视频| 青青青国产精品一区二区| 久色乳综合思思在线视频| 欧美激情二区三区| 亚洲欧美日韩一区二区三区在线| 欧美精品久久久久久久久| 亚洲国产精品一区二区久| 青草热久免费精品视频| 国产精品美乳一区二区免费| 日韩在线免费视频| 久久精品一区中文字幕| 亚洲人成啪啪网站| 国产欧美韩国高清| 日本国产高清不卡| 国产精品亚洲自拍| 欧美激情视频一区二区| 久久久久久久久久久网站| 77777亚洲午夜久久多人| 日韩激情在线视频| 国产精品免费视频久久久| 中文字幕av一区| 91视频88av| 日韩在线播放视频| 国产在线观看不卡| 亚洲欧美日本另类| www.亚洲免费视频| 精品久久久香蕉免费精品视频| 国产视频精品久久久| 亚洲女成人图区| 亚洲欧洲日产国码av系列天堂| 国产999精品视频| 国产精品入口免费视频一| 日韩免费观看高清| 亚洲欧美日韩国产中文专区| 国产日韩精品视频| 国产精品中文字幕久久久| 日韩成人免费视频| 国产999视频| 日韩欧美高清视频| 国产精品久久久久久久久免费| 91av国产在线| xvideos成人免费中文版| 九九热最新视频//这里只有精品| 懂色av影视一区二区三区| 色偷偷88888欧美精品久久久| 欧美性jizz18性欧美| 4388成人网| 日韩欧美一区视频| 欧美激情综合亚洲一二区| 国产精品精品一区二区三区午夜版| 久久精品国产一区二区三区| 欧美性精品220| 亚洲天堂免费在线| 97超级碰碰人国产在线观看| 日韩福利在线播放| 中文字幕日韩欧美在线| 久久婷婷国产麻豆91天堂| 91精品国产高清自在线看超| 亚洲欧洲午夜一线一品| 日韩国产欧美区| 欧美激情在线狂野欧美精品| 国产精品久久电影观看| 久久久999国产| 国模叶桐国产精品一区| 精品欧美aⅴ在线网站| 欧美性猛交99久久久久99按摩| 亚洲国产免费av| 欧美激情亚洲精品| 欧美性xxxx在线播放| 国产不卡av在线免费观看| 国产精品久久久久久搜索| 成人黄色生活片| 国产精品香蕉av| 久久久久成人网| 国产精品7m视频| 91精品国产91久久| 国产99久久精品一区二区 夜夜躁日日躁| 久久精品青青大伊人av| 日韩电影中文字幕av| 国外成人在线播放| 国产精品久久久久久久久久ktv| 国产精品jizz在线观看麻豆| 91理论片午午论夜理片久久|