最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java版數(shù)獨(dú)游戲界面實(shí)現(xiàn)(二)

 更新時(shí)間:2017年12月18日 15:01:07   作者:I-Awakening  
這篇文章主要為大家詳細(xì)介紹了java版數(shù)獨(dú)游戲界面實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了java版數(shù)獨(dú)游戲界面實(shí)現(xiàn)的具體代碼,供大家參考,具體內(nèi)容如下

實(shí)現(xiàn)效果圖:

這里寫圖片描述

主函數(shù)用于啟動(dòng)程序:

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);

  }
}

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

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;

/*
 * 數(shù)獨(dú)主窗體
 */
public class ShuduMainFrame extends JFrame {

  public static int pass = 1; // 關(guān)卡
  public static JLabel lbPass; // 顯示關(guān)卡的lable
  public static long usedTime = 0; // 玩家用時(shí)
  private ShuduCanvers panelCanvers; // 主游戲區(qū)
  public static Timer userTimeAction;

  /*
   * 默認(rèn)構(gòu)造函數(shù)
   */
  public ShuduMainFrame() {
    // 初始化方法
    init();
    // 添加組件
    addComponent();
    // 添加主游戲區(qū)
    addCanvers();

  }

  /*
   * 添加主游戲區(qū)
   */
  private void addCanvers() {
    panelCanvers = new ShuduCanvers();
    panelCanvers.setBorder(new TitledBorder("游戲區(qū)"));

    // 將主游戲區(qū)添加到窗體中
    this.add(panelCanvers, BorderLayout.CENTER);

  }

  /*
   * 添加組件區(qū)
   */
  private void addComponent() {
    JPanel panelComponent = new JPanel();
    // 添加消息區(qū)
    addPanelMsg(panelComponent);
    // 添加時(shí)間區(qū)
    addPanelTime(panelComponent);

    // 將組件添加到窗體頂部
    this.add(panelComponent, BorderLayout.NORTH);

  }

  private void addPanelTime(JPanel panelComponent) {
    JPanel panelTime = new JPanel();
    panelTime.setBorder(new TitledBorder("時(shí)間"));
    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);

    // 設(shè)置系統(tǒng)時(shí)間定時(shí)器
    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("  系統(tǒng)時(shí)間: " + df.format(timeMillis));
      }
    });
    sysTimeAction.start();
    userTimeAction = new Timer(1000, new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent e) {
        lbUserTime.setText("  您已用時(shí): " + (++usedTime)+ " sec.");
      }
    });
    userTimeAction.start();

    panelComponent.add(panelTime, BorderLayout.EAST);

  }

  /*
   * 添加消息區(qū)
   */
  private void addPanelMsg(JPanel panelComponent) {
    // panelComponent.setBorder(new TitledBorder("消息區(qū)"));
    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("消息區(qū)"));

    JLabel lbPass1 = new JLabel("關(guān)卡:第");
    lbPass1.setFont(font14);
    panelMsg.add(lbPass1);

    // 顯示關(guān)卡數(shù)
    lbPass = new JLabel("" + pass);
    lbPass.setForeground(Color.RED);
    lbPass.setFont(font28);
    panelMsg.add(lbPass);

    JLabel lbPass2 = new JLabel("關(guān)/總共10關(guān)");
    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());
    // 設(shè)置窗口初始大小
    this.setSize(515, 600);
    // 設(shè)置窗口初始位置
    this.setLocation(500, 50);
    // 設(shè)置窗口標(biāo)題
    this.setTitle("數(shù)獨(dú)游戲(By:侯龍超)");
    // 設(shè)置窗體不允許改變大小
    this.setResizable(false);
    // 設(shè)置默認(rèn)關(guān)閉操作
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

游戲區(qū)畫布:

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;
  // 得到數(shù)獨(dú)數(shù)組
  int[][] maps = new int[9][9];
  private SelectNumFrame selectNum;

  /*
   * 默認(rèn)構(gòu)造函數(shù)
   */
  public ShuduCanvers() {
    ShuduMainFrame.usedTime = 0;
    maps = ShuduHelper.getMap();
    // 加載數(shù)獨(dú)區(qū)
    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]);
        // 創(chuàng)建單元格
        cells[i][j] = new ShuduCell();
        // 設(shè)置位置
        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]);
          // 設(shè)置背景顏色
          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;
          }
        }
      }

    // 停止用戶用時(shí)計(jì)時(shí)器
    ShuduMainFrame.userTimeAction.stop();
    // 清除所有cell監(jiān)聽
    clearAllListener();
    // 闖關(guān)數(shù)加一
    ShuduMainFrame.pass += 1;
    if (ShuduMainFrame.pass > 10) {
      int o = JOptionPane
          .showConfirmDialog(this, "您已經(jīng)通關(guān)了,是否重頭開始?", "", 0);
      if (o == 1) {
        System.exit(0);
      } else {
        ShuduMainFrame.pass = 1;
      }
    } else {
      JOptionPane.showMessageDialog(this, "恭喜你通過本關(guān)!用時(shí):"
          + ShuduMainFrame.usedTime + "秒\n即將進(jìn)入下一關(guān)!");
    }
    // 更新關(guān)卡提示
    ShuduMainFrame.lbPass.setText("" + ShuduMainFrame.pass);
    // 開始新的關(guān)卡
    reLoadCanvers();
    // 打開用戶用時(shí)計(jì)時(shí)器
    ShuduMainFrame.userTimeAction.start();

  }

  /*
   * 檢查指定坐標(biāo)處的單元格
   */

  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;
  }

  /*
   * 重新加載數(shù)獨(dú)區(qū)
   */
  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]);
        // 創(chuàng)建單元格
        cells[i][j] = new ShuduCell();
        // 設(shè)置位置
        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]);
          // 設(shè)置背景顏色
          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();

  }

  /*
   * 根據(jù)關(guān)卡隨機(jī)產(chǎn)生該位置是否顯示數(shù)字
   */
  private boolean passRole(int pass) {
    // TODO Auto-generated method stub
    return Math.random() * 11 > pass;
  }

  /*
   * 根據(jù)數(shù)字獲得顏色
   */
  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) {// 點(diǎn)擊鼠標(biāo)右鍵
      // 清空點(diǎn)擊單元格上的內(nèi)容
      ((ShuduCell) e.getSource()).setText("");
    } else if ((modes & InputEvent.BUTTON1_MASK) != 0) {// 點(diǎn)擊鼠標(biāo)左鍵
      // 如果選擇數(shù)字窗口存在則銷毀
      if (selectNum != null) {
        selectNum.dispose();
      }
      // 新建一個(gè)選擇窗口
      selectNum = new SelectNumFrame();
      // 設(shè)置成模態(tài)窗口
      selectNum.setModal(true);
      // 設(shè)置選擇窗口在顯示器上的位置
      selectNum.setLocation(e.getLocationOnScreen().x,
          e.getLocationOnScreen().y);
      // 將點(diǎn)擊的單元格傳遞給數(shù)字選擇窗口
      selectNum.setCell((ShuduCell) e.getSource());
      // 顯示數(shù)字選擇窗口
      selectNum.setVisible(true);
    }
    checkFinish();
  }

  /*
   * 清除所有cell的點(diǎn)擊監(jiān)聽
   */
  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

  }

}

數(shù)獨(dú)單元格:

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);
 }
}

數(shù)字選擇框:

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();
 }
 //添加數(shù)字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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳細(xì)講解Java的泛型

    詳細(xì)講解Java的泛型

    這篇文章主要介紹了Java的泛型,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • java基礎(chǔ)之Collection與Collections和Array與Arrays的區(qū)別

    java基礎(chǔ)之Collection與Collections和Array與Arrays的區(qū)別

    這篇文章主要介紹了java基礎(chǔ)之Collection與Collections和Array與Arrays的區(qū)別的相關(guān)資料,本文主要說明兩者的區(qū)別以防大家混淆概念,需要的朋友可以參考下
    2017-08-08
  • java基礎(chǔ)之 “==”與“equals”區(qū)別詳解

    java基礎(chǔ)之 “==”與“equals”區(qū)別詳解

    這篇文章主要介紹了java基礎(chǔ)之 “==”與“equals”區(qū)別詳解,需要的朋友可以參考下
    2020-02-02
  • Spring基于注解的緩存聲明深入探究

    Spring基于注解的緩存聲明深入探究

    spring boot對緩存支持非常靈活,我們可以使用默認(rèn)的EhCache,也可以整合第三方的框架,只需配置即可,下面這篇文章主要給大家介紹了關(guān)于SpringBoot學(xué)習(xí)之基于注解緩存的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Java中幾種常用數(shù)據(jù)庫連接池的使用

    Java中幾種常用數(shù)據(jù)庫連接池的使用

    數(shù)據(jù)庫連接池在編寫應(yīng)用服務(wù)是經(jīng)常需要用到的模塊,太過頻繁的連接數(shù)據(jù)庫對服務(wù)性能來講是一個(gè)瓶頸,使用緩沖池技術(shù)可以來消除這個(gè)瓶頸,本文就來介紹Java常見的幾種,感興趣的可以了解一下
    2021-05-05
  • Maven Optional依賴屬性的含義及妙用

    Maven Optional依賴屬性的含義及妙用

    這篇文章主要為大家介紹了Maven Optional依賴屬性的含義及妙用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • SpringBoot 接口開發(fā)教程(httpclient客戶端)

    SpringBoot 接口開發(fā)教程(httpclient客戶端)

    這篇文章主要介紹了SpringBoot 接口開發(fā)教程(httpclient客戶端),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java去除if...else的七種方法總結(jié)

    java去除if...else的七種方法總結(jié)

    相信小伙伴一定看過多篇怎么去掉?if...else?的文章,也知道大家都很有心得,知道多種方法來去掉?if...else?,本文為大家整理了7個(gè)常用的方法,希望對大家有所幫助
    2023-11-11
  • 深入理解java重載和重寫

    深入理解java重載和重寫

    這篇文章主要介紹了Java方法重載和重寫原理區(qū)別解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07
  • Java 實(shí)戰(zhàn)練手項(xiàng)目之校園超市管理系統(tǒng)的實(shí)現(xiàn)流程

    Java 實(shí)戰(zhàn)練手項(xiàng)目之校園超市管理系統(tǒng)的實(shí)現(xiàn)流程

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+Mysql+Maven+Bootstrap實(shí)現(xiàn)一個(gè)校園超市管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-11-11

最新評論

苍南县| 紫金县| 浙江省| 襄樊市| 蛟河市| 盖州市| 南溪县| 加查县| 洪雅县| 甘泉县| 龙口市| 阳城县| 海阳市| 瓦房店市| 琼中| 大连市| 孟州市| 凯里市| 定州市| 阳高县| 九龙县| 彭山县| 安宁市| 昆山市| 虞城县| 名山县| 尼勒克县| 河北省| 贡觉县| 公主岭市| 当阳市| 宁德市| 固镇县| 康平县| 南阳市| 甘洛县| 涞源县| 余姚市| 宣化县| 诏安县| 长宁县|