国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 婺源县| 龙川县| 孝感市| 卫辉市| 遂昌县| 平定县| 淮南市| 积石山| 芮城县| 朝阳县| 石狮市| 邯郸市| 娄烦县| 太湖县| 余江县| 汶上县| 宁波市| 固原市| 黎川县| 修文县| 新干县| 牟定县| 黑河市| 凌云县| 山西省| 灵璧县| 濮阳县| 克东县| 湖州市| 格尔木市| 高平市| 犍为县| 保定市| 井陉县| 门源| 定州市| 海兴县| 泰来县| 手游| 腾冲县| 泰和县|