畢業(yè)論文基于Java的拼圖游戲設(shè)計(jì)

上傳人:仙*** 文檔編號(hào):27849537 上傳時(shí)間:2021-08-21 格式:DOC 頁(yè)數(shù):28 大小:560.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
畢業(yè)論文基于Java的拼圖游戲設(shè)計(jì)_第1頁(yè)
第1頁(yè) / 共28頁(yè)
畢業(yè)論文基于Java的拼圖游戲設(shè)計(jì)_第2頁(yè)
第2頁(yè) / 共28頁(yè)
畢業(yè)論文基于Java的拼圖游戲設(shè)計(jì)_第3頁(yè)
第3頁(yè) / 共28頁(yè)

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《畢業(yè)論文基于Java的拼圖游戲設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《畢業(yè)論文基于Java的拼圖游戲設(shè)計(jì)(28頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、目 錄 1 開發(fā)環(huán)境及相關(guān)技術(shù)的介紹 1 1.1 開發(fā)環(huán)境 1 1.2 Java語(yǔ)言特點(diǎn) 1 2 游戲?qū)崿F(xiàn)功能解析及界面 1 2.1游戲規(guī)則介紹 1 2.2游戲?qū)崿F(xiàn)功能 2 2.2.1主窗口界面 2 2.2.2主窗口菜單 3 2.2.3 游戲過程中的出現(xiàn)的相關(guān)窗體 6 3 游戲程序?qū)崿F(xiàn) 8 3.1 程序類主要功能介紹 8 3.2 程序源代碼 9 4 小結(jié) 27 基于Java的拼圖游戲設(shè)計(jì) 1 開發(fā)環(huán)境及相關(guān)技術(shù)的介紹 1.1 開發(fā)環(huán)境 操作系統(tǒng):Microsoft Windows XP 程序語(yǔ)言:Java 開發(fā)環(huán)境:JDK-6u6-windo

2、ws-i586-P 1.2 Java語(yǔ)言特點(diǎn) 1). 平臺(tái)無(wú)關(guān)性 Java引進(jìn)虛擬機(jī)原理,并運(yùn)行于虛擬機(jī),實(shí)現(xiàn)不同平臺(tái)之間的Java接口。Java的數(shù)據(jù)類型與機(jī)器無(wú)關(guān)。 2). 安全性 Java的編程類似C++,但舍棄了C++的指針對(duì)存儲(chǔ)器地址的直接操作,程序運(yùn)行時(shí),內(nèi)存由操作系統(tǒng)分配,這樣可以避免病毒通過指針入侵系統(tǒng)。它提供了安全管理器,防止程序的非法訪問。 3). 面向?qū)ο? Java吸收了C++面向?qū)ο蟮母拍睿瑢?shù)據(jù)封裝于類中,實(shí)現(xiàn)了程序的簡(jiǎn)潔性和便于維護(hù)性,使程序代碼可以只需一次編譯就可反復(fù)利用。 4). 分布式 Java建立在TCP/IP網(wǎng)絡(luò)平臺(tái)上,提供了用

3、HTTP和FTP協(xié)議傳送和接收信息的庫(kù)函數(shù),使用其相關(guān)技術(shù)可以十分方便的構(gòu)建分布式應(yīng)用系統(tǒng)。 5). 健壯性 Java致力與檢查程序在編譯和運(yùn)行時(shí)的錯(cuò)誤,并自動(dòng)回收內(nèi)存,減少了內(nèi)存出錯(cuò)的可能性。Java取消了C語(yǔ)言的結(jié)構(gòu)、指針、#define語(yǔ)句、多重繼承、goto語(yǔ)句、操作符、重載等不易被掌握的特性,提供垃圾收集器自動(dòng)回收不用的內(nèi)存空間。 2 游戲?qū)崿F(xiàn)功能解析及界面 2.1游戲規(guī)則介紹 1)本游戲是一個(gè)Java語(yǔ)言的拼圖游戲,有一個(gè)格子是空的,其他格子內(nèi)隨機(jī)放置由要拿來(lái)拼圖的圖片切割成的若干個(gè)小圖片,圖片的切割按照一定的公式計(jì)算,因?yàn)?,該通過單擊任意一個(gè)與空格子相鄰的方塊可以把該方

4、游戲中設(shè)有拼圖游戲的等級(jí),根據(jù)不同的等級(jí),按照公式會(huì)切割成不同的小圖片塊數(shù)。 2)在開始游戲之前,可以選擇游戲等級(jí)后再點(diǎn)擊“開始”菜單里的“新游戲”,進(jìn)行拼圖游戲,通過將空格旁邊的小圖片移入空格子內(nèi)(不斷的移動(dòng)方塊),來(lái)實(shí)現(xiàn)拼圖,直到方塊一行一行的按圖片的原始樣子拼好即可完成該游戲。 3)游戲拼完后,會(huì)彈出一個(gè)“信息”框,顯示你玩游戲所用的步數(shù)與時(shí)間,點(diǎn)擊“確定”后,會(huì)彈出一個(gè)“輸入”框,可以在里面輸入游戲者的姓名,單擊“確定”后會(huì)彈出游戲的記錄框。 4)游戲的簡(jiǎn)單規(guī)則在游戲界面的“關(guān)于”菜單內(nèi)的“幫助”信息框內(nèi)已經(jīng)簡(jiǎn)單介紹了。游戲前可以先預(yù)覽看看。 2.2游戲?qū)崿F(xiàn)功能 2.2.1主

5、窗口界面 1) 游戲初始狀態(tài) 當(dāng)游戲剛運(yùn)行時(shí),會(huì)出現(xiàn)如下界面,本游戲中已經(jīng)存在了三張圖片,如過游戲者想拼自己感興趣的圖片的話,可以將自己的圖片放入到“background”(背景圖片)文件夾中,再進(jìn)行“選擇”->“背景圖片”中選擇你自己的圖片,然后選擇“等級(jí)”->“困難”或“普通”或“簡(jiǎn)單”,進(jìn)行等級(jí)選擇,最后選擇“開始”->“新游戲”就可以拼自己想拼的圖了。初始窗口如圖1所示: 圖1 游戲初始窗口 2)游戲進(jìn)行狀態(tài) 當(dāng)游戲者選擇好圖片與等級(jí)后,就可以進(jìn)行拼圖游戲了及進(jìn)入游戲的進(jìn)行狀態(tài)。其游戲進(jìn)行狀態(tài)如圖2所示: 圖2 游戲進(jìn)行狀態(tài) 3)游戲暫停狀態(tài) 當(dāng)游

6、戲者,在游戲過程中半途暫停游戲的話,將出現(xiàn)如圖3所示的游戲暫停狀態(tài)的界面。當(dāng)游戲者又想繼續(xù)游戲時(shí),直接單擊界面上的“繼續(xù)”字樣,就可以繼續(xù)游戲了。 圖3 游戲暫停狀態(tài) 2.2.2主窗口菜單 在游戲的主窗口菜單中包括如下幾個(gè)菜單: (1)“開始”菜單。包括了,“新游戲” 、“成績(jī)記錄” 、“圖片預(yù)覽” 、“退出游戲” 。如圖4所示。 “新游戲” :?jiǎn)螕艨梢蚤_始游戲,如圖2所示游戲進(jìn)行狀態(tài)。 “成績(jī)記錄” :?jiǎn)螕艨梢圆榭从螒蛘叩挠螒虺煽?jī)記錄。如圖5所示。初始的成績(jī)記錄。 “圖片預(yù)覽” :在游戲過程中可以單擊預(yù)覽圖片,對(duì)照著拼,如圖6所示。

7、 “退出游戲” :游戲者要結(jié)束游戲可直接單擊退出游戲。 圖4 開始菜單 圖5初始成績(jī)記錄 圖6 圖片預(yù)覽 (2)“選擇”菜單。包括了,“等級(jí)”、“背景圖片”。如圖7所示。當(dāng)運(yùn)行游戲時(shí),如果沒有把“background”這個(gè)文件夾放入主程序的目錄下,在運(yùn)行游戲選擇背景圖片時(shí),將沒有圖片可選,界面如圖8所示,這是可以按照“初始狀態(tài)”界面上的提示進(jìn)行操作。若正常的有“background”在主程序路徑下的話,運(yùn)行游戲選擇背景圖片的話,就可以選擇圖片了,界面如圖9所示。 “等級(jí)” :在游戲者開始游戲之前,要進(jìn)

8、行游戲等級(jí)選擇,共有困難、普通、簡(jiǎn)單三種選擇。其圖片的切割塊數(shù),會(huì)根據(jù)選擇的等級(jí)不同,而有所不同。簡(jiǎn)單的是一共8個(gè)小圖片。 “背景圖片” :這里保存了所要拼的所有圖片。在游戲前要進(jìn)行選擇。 圖7 圖8 圖9 (3)“關(guān)于”菜單。包括了“幫助”、“關(guān)于”兩個(gè)下拉菜單。如圖10所示。 圖10“關(guān)于”菜單 “幫助”:在游戲時(shí),可以單擊查看游戲的簡(jiǎn)單規(guī)則,界面如圖11所示。 “關(guān)于”:可查看該游戲的版本、作者、與作者的Email的相關(guān)信息,界面如圖12所示。

9、 圖11 “幫助”信息框 圖12 下拉單“關(guān)于”的消息框 2.2.3 游戲過程中的出現(xiàn)的相關(guān)窗體 (1)提示信息窗口 當(dāng)游戲者運(yùn)行游戲時(shí),如果沒有把“background”這個(gè)文件夾放入主程序的目錄下,在運(yùn)行游戲選擇背景圖片時(shí),將沒有圖片可選,若此時(shí)直接“開始”->“新游戲”,將會(huì)彈出如下提示信息框。如圖13所示。 圖13 提示信息框 (2) 拼圖成功界面 若選擇abc.jpg圖片拼圖時(shí),若拼圖成功,界面如圖14所示。 圖14 拼圖成功 (3)成績(jī)記錄輸入框

10、 當(dāng)游戲者完成拼圖游戲后,將出現(xiàn)一個(gè)成績(jī)記錄框(“輸入”框),輸入游戲者的姓名。如圖15所示。輸入后單擊確定按鈕,將彈出總的成績(jī)記錄框。如圖16所示。 圖15(a) 輸入前 圖15 (b) 輸入后 圖16 成績(jī)記錄框 3 游戲程序?qū)崿F(xiàn) 3.1 程序類主要功能介紹 該游戲程序中包括11個(gè)類。包括: ButtonClick.class、CardFrame.class、GameOver.class、Data.class 、Grades.class、Matrix.class、MenuFrame.clas

11、s、 point.class、Puzzle.class、ShowImage.class、Split.class。其中主要的類實(shí)現(xiàn)的功能如下: 1) ButtonClick.class 該類主要是實(shí)現(xiàn)鼠標(biāo)事件,讓玩家在用鼠標(biāo)點(diǎn)擊能夠移動(dòng)拼圖的小圖片,移動(dòng)到周圍空格的地方 2) CardFrame.class 該類主要實(shí)現(xiàn),初始界面的相關(guān)提示信息。 3)GameOver.class 該類主要實(shí)現(xiàn)游戲過程中的計(jì)時(shí)、暫停、結(jié)束等功能,游戲結(jié)束時(shí)的信息。 4) Data.class 該類主要實(shí)現(xiàn)保存游戲者的游戲成績(jī)記錄的相關(guān)數(shù)據(jù)。 5)Grades.class 該類

12、主要實(shí)現(xiàn)成績(jī)記錄的初始化,在拼圖成功后可記錄游戲者姓名的功能,并直接提取等級(jí)、步數(shù)與時(shí)間等信息的功能。保存成績(jī)記錄信息,以便游戲者查看。 6)MenuFrame.class 該類主要實(shí)現(xiàn)有主菜單與子菜單的功能。并設(shè)置相關(guān)的快捷鍵功能。 7)Puzzle.class 該類是該游戲程序的主程序,從游戲界面大小到游戲過程中出現(xiàn)的所有信息框等相關(guān)功能都都到了實(shí)現(xiàn),調(diào)用相關(guān)類實(shí)現(xiàn)其功能。 8)ShowImage.class 該類主要實(shí)現(xiàn)圖片的提取與切割的功能。 3.2 程序源代碼 1)Arg.java public interface Arg { public

13、static final String path = "background"; public static final String rc = "Game.rc"; } 2) ButtonClick.java import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JOptionPane; public class ButtonClick implements ActionListener

14、 { private JButton [][] button; private point pint; private int row; private int cal; private int [][] matrix; private GameOver gOver; private boolean end; public ButtonClick(JButton [][] b, point p, int [][] m, int r, int c, GameOver g) { button = b; pint = p; matrix = m;

15、 row = r; cal = c; gOver = g; end = false; } public void actionPerformed(ActionEvent e) { if (end || !pint.neighbor(row, cal)) return; int r = pint.getRow(); int c = pint.getCal(); button[r][c].setIcon(button[row][cal].getIcon()); button[row][cal].setIcon(null);

16、 pint.set(row, cal); int t = matrix[r][c]; matrix[r][c] = matrix[row][cal]; matrix[row][cal] = t; end = gOver.judge(); } } 3) CardFrame.java import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.

17、event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowAdapter; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; public abstract class CardFrame extends MenuFrame { private CardLayout card; private Container con; protected J

18、Panel [] panel = { new JPanel(), new JPanel() }; public CardFrame() { con = this.getContentPane(); card = new CardLayout(); con.setLayout(card); panel[0].setLayout(null); JLabel label; label = new JLabel("請(qǐng)輸入你的圖片到"); label.setBounds(10, 15, 190, 30); panel[0].add(lab

19、el); label = new JLabel("\"背景圖片\"文件夾。\n"); label.setBounds(10, 30, 190, 45); panel[0].add(label); label = new JLabel("單擊\"選擇->背景圖片\""); label.setBounds(10, 50, 190, 65); panel[0].add(label); label = new JLabel("選擇圖片。\n"); label.setBounds(10, 65, 190, 80); panel[0].add(labe

20、l); label = new JLabel("接著, 單擊 \"開始->新游戲\" 可以"); label.setBounds(10, 85, 190, 100); panel[0].add(label); label = new JLabel("開始游戲。"); label.setBounds(10, 100, 190, 115); panel[0].add(label); panel[1].setLayout(new BorderLayout()); JButton button = new JButton("繼 續(xù)"); butt

21、on.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { FrameGetFocus(); } } ); panel[1].add(button, BorderLayout.CENTER); con.add(panel[0], "游戲"); con.add(panel[1], "暫停"); card.show(con, "游戲"); this.addWindowListener(ne

22、w WindowAdapter() { public void windowDeactivated(WindowEvent e) { FrameLostFocus(); } } ); } protected void nextCard() { card.next(con); } protected abstract void FrameLostFocus(); protected abstract void FrameGetFocus(); } 4) GameOver.java import j

23、ava.util.Date; public class GameOver { private boolean gameOver; private boolean stop; private int [][] matrix; private Puzzle Main; private int step; private long now; private long countTime; public GameOver (Puzzle frm) { Main = frm; } public void start(int [][] m) {

24、 gameOver = false; matrix = m; step = 0; Date d = new Date(); now = d.getTime(); stop = false; countTime = 0; } public boolean judge() { if (gameOver) return true; step++; int c = 1; for (int i = 0; i < matrix.length; i++) for (int j = 0; j < matrix[i].

25、length; j++) if (matrix[i][j] != (c++)) return false; Date d = new Date(); countTime += d.getTime() - now; Main.endGame(); return (gameOver = true); } public void pause() { Date d = new Date(); if (stop) now = d.getTime(); else countTime += d.getTime()

26、 - now; stop = !stop; } public int getStep() { return step; } public long getTime() { return countTime / 1000; } } 5) Grades.java import java.io.File; import java.io.PrintStream; import java.util.Scanner; import javax.swing.JOptionPane; class Data { public String nam

27、e; public int time; public int step; } public class Grades { private Puzzle app; private Data [] data = { new Data(), new Data(), new Data() }; public Grades(Puzzle m) { app = m; } private void creatData() { try { File file = new File(Arg.rc); if (fil

28、e.exists()) return; file.createNewFile(); PrintStream fout = new PrintStream(Arg.rc); fout.printf("%s %d %d\n", "風(fēng)鈴",888888, 666666); fout.printf("%s %d %d\n", "天使",777777, 444444); fout.printf("%s %d %d\n", "撒旦",555555, 566666); fout.close(); } catch (Exception e)

29、 { JOptionPane.showMessageDialog(null, Arg.rc + " has broken!"); return; } } private void readData() { try { File file = new File(Arg.rc); Scanner cin = new Scanner(file); data[0].name = cin.next(); data[0].time = cin.nextInt(); data[0].step = cin.nextIn

30、t(); data[1].name = cin.next(); data[1].time = cin.nextInt(); data[1].step = cin.nextInt(); data[2].name = cin.next(); data[2].time = cin.nextInt(); data[2].step = cin.nextInt(); } catch (Exception e) { JOptionPane.showMessageDialog(null, Arg.rc + " cant read!");

31、 } } public void set(int t, int s) { int type = app.getType(); creatData(); readData(); if (t > data[type].time || (t == data[type].time && s >= data[type].step)) return; data[type].name = JOptionPane.showInputDialog(null,"你打破了記錄!\n請(qǐng)輸入你的名字。"); data[type].time = t;

32、 data[type].step = s; try { PrintStream f = new PrintStream(Arg.rc); f.printf("%s %d %d\n", data[0].name, data[0].time, data[0].step); f.printf("%s %d %d\n", data[1].name, data[1].time, data[1].step); f.printf("%s %d %d\n", data[2].name, data[2].time, data[2].step); f.close

33、(); } catch (Exception e) { JOptionPane.showMessageDialog(null, Arg.rc + " has broken!"); } show(); } public void show() { try { creatData(); readData(); String title = "".format("%8s%15s%8s%8s\n", "等級(jí)", "姓名", "時(shí)間", "步數(shù)"); String h = "".format("%8s%15

34、s%8d%8d\n", "困難", data[0].name, data[0].time, data[0].step); String n = "".format("%8s%15s%8d%8d\n", "普通", data[1].name, data[1].time, data[1].step); String e = "".format("%8s%15s%8d%8d\n", "簡(jiǎn)單", data[2].name, data[2].time, data[2].step); JOptionPane.showMessageDialog(null, title+h+n+e);

35、 } catch (Exception e) { JOptionPane.showMessageDialog(null, Arg.rc + " has broken!"); } } } 6) Matrix.java import java.awt.image.BufferedImage; import javax.swing.JPanel; import javax.swing.JButton; import javax.swing.ImageIcon; public class Matrix { private JButton [][]

36、 button; private JPanel panel; private int row; private int cal; private int [][] matrix; private GameOver gOver; public Matrix(JButton [][] b, JPanel p, int len, GameOver g) { this.button = b; this.panel = p; this.gOver = g; row = b.length; cal = b[0].length; matrix

37、= new int[row][cal]; matrix[row-1][cal-1] = row * cal; gOver.start(matrix); panel.removeAll(); point pint = new point(row-1, cal-1); for (int i = 0; i < row; i++) for (int j = 0; j < cal; j++) { button[i][j] = new JButton(); button[i][j].setBounds(j*len, i*len, len,

38、len); button[i][j].addActionListener(new ButtonClick(button, pint, matrix, i, j, gOver)); panel.add(button[i][j]); } } public void init(BufferedImage [][] image) { if (button == null || image == null) return; ImageIcon icon; int r, c, rad, d, m; boolean [] visit =

39、 new boolean[row*cal-1]; for (int i = 0; i < row*cal - 1; i++) { r = i / cal; c = i % cal; rad = (int)(Math.random()*(row*cal-1-i)); for (d = m = 0; d < row*cal - 1 && m <= rad; d++) if (!visit[d]) m++; matrix[i/cal][i%cal] = d; visit[--d] = true; icon =

40、new ImageIcon(image[d/cal][d%cal]); button[i/cal][i%cal].setIcon(icon); } } } 7) MenuFrame.java import java.io.File; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import jav

41、ax.swing.JMenuItem; import javax.swing.JRadioButtonMenuItem; import javax.swing.ButtonGroup; import javax.swing.KeyStroke; public abstract class MenuFrame extends JFrame { public final static int heightTitle = 30; public final static int widthTitle = 6; public final static int heightMenu

42、= 27; private JMenu [] m = { new JMenu("開始(B)"), new JMenu("選擇(O)"), new JMenu("關(guān)于(A)") }; private JMenu [] mm = { new JMenu("等級(jí)(L)"), new JMenu("背景圖片(B)") }; private boolean update; private int type; private String filename; protected ButtonGroup bgrp = new ButtonGro

43、up(); protected ButtonGroup fgrp = new ButtonGroup(); public MenuFrame() { super("拼圖游戲"); addMenu(); this.setResizable(false); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setSize(widthTitle, heightTitle+heightMenu); this.setLocation( this.getToolkit().getScreenSize

44、().width/3 - this.getWidth()/3, this.getToolkit().getScreenSize().height/3 - this.getHeight()/3 ); } private void addMenu() { JMenuBar mBar = new JMenuBar(); this.setJMenuBar(mBar); mBar.add(m[0]); mBar.add(m[1]); mBar.add(m[2]); m[0].setMnemonic(B); m[1].setMnemoni

45、c(O); m[2].setMnemonic(A); initMenuBegin(); initMenuOption(); initMenuAbout(); update = false; } public abstract void menuNewClick(); public abstract void menuGradesClick(); public abstract void menuShowClick(); public abstract void menuExitClick(); private void menuLevelC

46、lick(String nm) { type = 3; if (nm.equals("困難")) type = 0; else if (nm.equals("普通")) type = 1; else if (nm.equals("簡(jiǎn)單")) type = 2; } private void menuBackgroundClick(String nm) { filename = nm; } public abstract void menuHelpClick(); public abstract void menu

47、AboutClick(); public int getType() { return type; } public String getFilename() { return filename; } private void initMenuBegin() { JMenuItem [] mI = { new JMenuItem("新游戲(N)"), new JMenuItem("成績(jī)記錄(G)"), new JMenuItem("退出游戲(E)") }; mI[0].setMnemonic(N);

48、 mI[1].setMnemonic(G); mI[2].setMnemonic(E); mI[0].setAccelerator(KeyStroke.getKeyStroke("ctrl N")); mI[2].setAccelerator(KeyStroke.getKeyStroke("ctrl W")); mI[0].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { menuNewClick();

49、 } } ); mI[1].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { menuGradesClick(); } } ); mI[2].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { menuExitClick(

50、); } } ); m[0].add(mI[0]); m[0].add(mI[1]); m[0].add(mI[2]); m[0].insertSeparator(2); } private void initMenuOption() { mm[0].setMnemonic(L); mm[1].setMnemonic(B); m[1].add(mm[0]); m[1].add(mm[1]); initMenuLevel(); initMenuBackground(); } private

51、 void initMenuLevel() { JRadioButtonMenuItem [] mi = { new JRadioButtonMenuItem("困難"), new JRadioButtonMenuItem("普通"), new JRadioButtonMenuItem("簡(jiǎn)單") }; for (int i = 0; i < 3; i++) { mi[i].addActionListener(new ActionListener() { public void actionPerformed(

52、ActionEvent e) { JRadioButtonMenuItem mi = (JRadioButtonMenuItem)e.getSource(); menuLevelClick(mi.getText()); } } ); bgrp.add(mi[i]); mm[0].add(mi[i]); } mi[1].setSelected(true); menuLevelClick(mi[1].getText()); } public void initMenuBackground

53、() { mm[1].removeAll(); File bkg = new File(Arg.path); if (!bkg.exists()) return; File [] list = bkg.listFiles(); JRadioButtonMenuItem mi; int j = 0; for (int i = 0; i < list.length; i++) { if (!list[i].isFile() || list[i].isHidden()) continue; mi = new JRa

54、dioButtonMenuItem(list[i].getName()); mi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JRadioButtonMenuItem mi = (JRadioButtonMenuItem)e.getSource(); menuBackgroundClick(mi.getText()); } } ); fgrp.add(mi);

55、 mm[1].add(mi); mi.setSelected(j == 0); if (j == 0) menuBackgroundClick(mi.getText()); j++; } } private void initMenuAbout() { JMenuItem [] mI = { new JMenuItem("幫助(H)"), new JMenuItem("關(guān)于(A)") }; mI[0].setMnemonic(H); mI[1].setMnemonic(A); mI[0].s

56、etAccelerator(KeyStroke.getKeyStroke("F1")); mI[0].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { menuHelpClick(); } } ); mI[1].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e)

57、 { menuAboutClick(); } } ); m[2].add(mI[0]); m[2].add(mI[1]); } public void updateMenuBegin() { update = !update; if (!update) { m[0].remove(2); return; } JMenuItem mi = new JMenuItem("圖片預(yù)覽(S)"); mi.setMnemonic(S); mi.addActionListener(new

58、 ActionListener() { public void actionPerformed(ActionEvent e) { menuShowClick(); } } ); m[0].insert(mi, 2); } } 8) point.java public class point { int row; int cal; public point(int r, int c) { row = r; cal = c; } public void set(int r, int

59、 c) { row = r; cal = c; } public int getRow() { return row; } public int getCal() { return cal; } public boolean neighbor(int r, int c) { int n = Math.abs(row - r) + Math.abs(cal - c); return n == 1; } } 9) Puzzle.java import java.awt.image.BufferedImage;

60、import javax.swing.JButton; import javax.swing.ImageIcon; import javax.swing.JOptionPane; import javax.swing.JRadioButtonMenuItem; public class Puzzle extends CardFrame { private boolean start; private int fWidth = this.getWidth(); private int fHeight = this.getHeight(); private GameOve

61、r gOver; private boolean index = true; public Puzzle() { start = false; ImageIcon icon = new ImageIcon("icon/OK.png"); this.setSize(200 + fWidth, 200 + fHeight); this.setIconImage(icon.getImage()); this.setVisible(true); } private void startGame() { if (start) retur

62、n; start = true; updateMenuBegin(); } public void endGame() { updateMenuBegin(); initMenuBackground(); start = false; JOptionPane.showMessageDialog(null, "時(shí)間:" + gOver.getTime() + "s\n" + "步數(shù):" + gOver.getStep() ); Grades g = new Grades(this); g.set((int)gOve

63、r.getTime(), gOver.getStep()); } protected void FrameLostFocus() { if (start && index) { nextCard(); if (gOver != null) gOver.pause(); index = false; } } protected void FrameGetFocus() { nextCard(); if (gOver != null) gOver.pause(); index = true; } publi

64、c void menuNewClick() { Split sp = Split.get(); BufferedImage [][] image; if (!sp.set(getFilename()) || (image = sp.divid(getType())) == null) { JOptionPane.showMessageDialog(null, "圖片不存在!\n請(qǐng)重新選擇~"); return; } startGame(); this.setSize(fWidth, fHeight); this.setV

65、isible(true); int len = Split.level[getType()]; int row = image.length; int cal = image[0].length; gOver = new GameOver(this); JButton [][] button = new JButton[row][cal]; Matrix matrix = new Matrix(button, panel[0], len, gOver); matrix.init(image); this.setSize(cal * len + f

66、Width, row * len + fHeight); this.setVisible(true); } public void menuGradesClick() { Grades g = new Grades(this); g.show(); } public void menuShowClick() { new ShowImage(getFilename()); } public void menuExitClick() { System.exit(0); } public void menuHelpClick() { String help0 = "通過移動(dòng)每一個(gè)小圖片,最終拼為原本的完整圖片.\n\n"; String help1 = "您可以單擊空白區(qū)周圍的小圖片,可以使它移動(dòng)到空白區(qū)。"; JOptionPane.showMessageDialog(null, help0 + help1); } public void m

展開閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!