2015年6月4日 星期四

數字推敲

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Random;
class n_puzzle implements ActionListener
{
JButton jbnButton[]=new JButton[25];
JFrame jtfMainFrame = new JFrame("愛翹課");
JPanel jplPanel = new JPanel();
public static void main(String[] args)
{
new n_puzzle();
JOptionPane.showMessageDialog(null,"歡迎來玩數字推盤,將推盤解成以下答案表示成功哦^^n '147'n '258'n '36 '");}
public n_puzzle(){
jtfMainFrame.setSize(450, 450);
String array[]={" ","1","2","3","4","5","6","7","8"};
String tmp;
Random ran = new Random();
//使用GridLayout在Panel裡面切出3x3的格子,使按鈕排整齊
jplPanel.setLayout(new GridLayout(3,3));
//以下將方塊上的數字打亂(使用洗牌演算法產生不重複亂數)
//詳細演算法可參考以下文章:
//http://blog.xuite.net/kk7941717/blog/315695464
for(int i=0;i<9;i++){
jbnButton[i]=new JButton();
int myrandom=ran.nextInt(9-i);
tmp = array[8-i];
array[8-i]=array[myrandom];
array[myrandom] = tmp;
jbnButton[i].setText(""+array[8-i]);
jbnButton[i].setActionCommand(""+array[8-i]);
jbnButton[i].addActionListener(this);
jplPanel.add(jbnButton[i]);
}
jtfMainFrame.getContentPane().add(jplPanel, BorderLayout.CENTER);
//把Panel加進去Fram
jtfMainFrame.setVisible(true); //讓Fram顯示出來
}
 
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
String late,slate="";
int ilate=0;

//檢驗按下去為哪一顆按鈕
for(int i=0;i<9;i++){
if(jbnButton[i]==e.getSource())
{
ilate=i;
//JOptionPane.showMessageDialog(null,jbnButton[i].getText()+" "+i);
}}
//當知道按下去按鈕是哪一顆之後,便須判斷其周圍的按鈕
//確認空白按鈕(上下左右)周圍,則按下去的按鈕數字與空白按鈕互換
//以下為判斷的程式碼
if(ilate>=3&&ilate<=8){
if(" ".equals(jbnButton[ilate-3].getText()))
{
late=jbnButton[ilate].getText();
jbnButton[ilate].setText(jbnButton[ilate-3].getText());
jbnButton[ilate-3].setText(late);
}}
if(ilate<=5&&ilate>=0){
if(" ".equals(jbnButton[ilate+3].getText()))
{
late=jbnButton[ilate].getText();
jbnButton[ilate].setText(jbnButton[ilate+3].getText());
jbnButton[ilate+3].setText(late);
}}

if(ilate<8&&ilate>=0){
if(" ".equals(jbnButton[ilate+1].getText()))
{if((ilate%3)!=2){
late=jbnButton[ilate].getText();
jbnButton[ilate].setText(jbnButton[ilate+1].getText());
jbnButton[ilate+1].setText(late);
}}}

if(ilate>=1&&ilate<=8){
if(" ".equals(jbnButton[ilate-1].getText()))
{if((ilate%3)!=0){
late=jbnButton[ilate].getText();
jbnButton[ilate].setText(jbnButton[ilate-1].getText());
jbnButton[ilate-1].setText(late);
}}}
//以下為破關檢驗的程式碼
//當按鈕排列成如下圖所示,則跳出MsgBox顯示破關成功!!
for(int m=0;m<9;m++)
{
slate+=jbnButton[m].getText(); if("14725836 ".equals(slate)){JOptionPane.showMessageDialog(null,"恭喜你成功");}}System.out.println("'"+slate+"'");}}

沒有留言:

張貼留言