日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数独java界面基础_java版数独游戏界面实现(二)

發布時間:2024/7/23 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数独java界面基础_java版数独游戏界面实现(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文實例為大家分享了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

}

}

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

總結

以上是生活随笔為你收集整理的数独java界面基础_java版数独游戏界面实现(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。