歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

JAVA拼圖游戲課程設(shè)計(jì).doc

  • 資源ID:6686272       資源大?。?span id="5bd77nn" class="font-tahoma">4.43MB        全文頁(yè)數(shù):44頁(yè)
  • 資源格式: DOC        下載積分:9.9積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開(kāi)放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要9.9積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

JAVA拼圖游戲課程設(shè)計(jì).doc

學(xué)年論文(JAVA面向?qū)ο蟪绦蛟O(shè)計(jì) 2015-2016 第二學(xué)期)題目: JAVA課程設(shè)計(jì) 作者: 陳炳宏 所在學(xué)院: 信息科學(xué)與工程學(xué)院 專業(yè)年級(jí): 信息安全14-1 指導(dǎo)教師: 楊晴雯 職稱: 副教授 2016年6月 4 日基于JAVA的拼圖游戲的設(shè)計(jì)摘要 拼圖游戲是一款非常經(jīng)典的小游戲,因?yàn)樗容^簡(jiǎn)單有趣,老少皆宜。拼圖游戲的設(shè)計(jì)對(duì)每一個(gè)Java語(yǔ)言設(shè)計(jì)者進(jìn)行語(yǔ)言提高和進(jìn)階都是一個(gè)很好的鍛煉機(jī)會(huì)。拼圖游戲的設(shè)計(jì)比較復(fù)雜,它涉及面廣、牽涉方面多,如果不好好考慮和設(shè)計(jì),將難以成功開(kāi)發(fā)出這個(gè)游戲。在這個(gè)游戲的設(shè)計(jì)中,牽涉到圖形界面的顯示與更新、數(shù)據(jù)的收集與更新,并且在這個(gè)游戲的開(kāi)發(fā)中,還要應(yīng)用類的繼承機(jī)制以及一些設(shè)計(jì)模式。因此,如何設(shè)計(jì)和開(kāi)發(fā)好這個(gè)拼圖游戲,對(duì)于提高Java開(kāi)發(fā)水平和系統(tǒng)的設(shè)計(jì)能力有極大的幫助。在設(shè)計(jì)開(kāi)發(fā)過(guò)程中,需要處理好各個(gè)類之間的繼承關(guān)系,還要處理各個(gè)類相應(yīng)的封裝,并且還要協(xié)調(diào)好各個(gè)模塊之間的邏輯依賴關(guān)系和數(shù)據(jù)通信關(guān)系。關(guān)鍵詞:拼圖游戲 Java語(yǔ)言 開(kāi)發(fā)The design of JAVA software based on the puzzleAbstract:Jigsaw puzzle is a very classic game, because it is easy and fun, both old and young, are more suitable.Jigsaw design language for each Java language designers to improve and advance is an excellent exercise opportunities. Puzzle design is more complex, its scope, and involves many more, if you do not think and design, would be difficult to successfully developed this game. In the design of the game involves display of the graphical interface and updating, data is collected and updated, and in the development of this game, class inheritance mechanism, and some design patterns you want to apply. Therefore, how to design and develop this jigsaw puzzle, for raising the level of Java development, and system design capabilities are of great help. During the process of design and development, you need to handle the inheritance relationships between the classes, also have to deal with each type of appropriate packaging, and also to coordinate the various logical dependencies between modules and data communication.Keywords:Jigsaw puzzle Java language develop 目錄一、需求分析41.程序分析42.執(zhí)行方式43.程序執(zhí)行的命令包括44.測(cè)試數(shù)據(jù)5二、概要設(shè)計(jì)71.拼圖游戲流程圖72.設(shè)計(jì)思路73.主要類文件說(shuō)明8三、詳細(xì)設(shè)計(jì)91.建立MenuFrame菜單首頁(yè)類92.建立CardFrame首頁(yè)說(shuō)明類103.建立ShowImage目標(biāo)圖顯示類114.建立Grades分?jǐn)?shù)記錄類115.建立split原圖劃分類移動(dòng)點(diǎn)擊事件類126.建立ButtonClick拼圖移動(dòng)點(diǎn)擊事件類137.建立Gameover判斷游戲結(jié)束類148.建立Puzzle拼圖游戲主類14四、調(diào)試分析161.程序的運(yùn)行162.游戲測(cè)試16五、用戶手冊(cè)171.游戲三個(gè)狀態(tài)172.游戲菜單選項(xiàng)183.游戲提示框20六、測(cè)試結(jié)果22七、附錄(源碼)24課程設(shè)計(jì)題目:基于JAVA的拼圖游戲1、 需求分析1.程序分析本游戲是一個(gè)Java語(yǔ)言的拼圖游戲,在eclipse上使用JAVA語(yǔ)言編寫并且利用Java Swing設(shè)計(jì)顯示。拼圖中有一個(gè)格子是空的,其他格子內(nèi)隨機(jī)放置由目標(biāo)圖片切割成的若干個(gè)小圖片,圖片按照不同難度結(jié)合目標(biāo)圖片分辨率進(jìn)行切割。用戶通過(guò)點(diǎn)擊空位置中周圍的任何非空?qǐng)D塊來(lái)移動(dòng)非空?qǐng)D塊到空位置,一直重復(fù)直到拼回目標(biāo)圖片的樣子后游戲成功,記錄名次分?jǐn)?shù)。2.執(zhí)行方式 在開(kāi)始游戲之前,可以選擇游戲等級(jí)后再點(diǎn)擊“開(kāi)始”菜單里的“新游戲”,進(jìn)行拼圖游戲,被打亂的目標(biāo)圖片依次設(shè)置到拼圖中的各個(gè)按鈕中,利用按鈕的點(diǎn)擊事件,點(diǎn)擊可移動(dòng)的,設(shè)置按鈕背景圖片為空,臨近按鈕設(shè)置背景圖片為剛點(diǎn)擊按鈕背景圖片,重復(fù)以往,直到方塊一行一行的按圖片的原始樣子拼好即可完成該游戲。游戲拼完后,會(huì)彈出一個(gè)“信息”框,顯示你玩游戲所用的步數(shù)與時(shí)間,點(diǎn)擊“確定”后,會(huì)彈出一個(gè)“輸入”框,可以在里面輸入游戲者的姓名,單擊“確定”后會(huì)彈出游戲的記錄框。3.程序執(zhí)行的命令包括(1) 菜單開(kāi)始: 包括菜單項(xiàng)新游戲,游戲記錄,退出游戲,顯示背景圖片;(2) 菜單選擇: 包括菜單項(xiàng)等級(jí)選擇和背景圖片選擇,其中等級(jí)選擇包括難、中、易三個(gè)子菜單項(xiàng),背景圖片包含已添加到images文件夾下的圖片菜單項(xiàng);(3) 菜單關(guān)于: 包含幫助和關(guān)于兩個(gè)菜單項(xiàng);(4) 按鈕點(diǎn)擊事件: 用于接收按鈕圖片移動(dòng)請(qǐng)求并做出相應(yīng)移動(dòng);(5) 游戲記錄存儲(chǔ): 游戲結(jié)束后,在不同難度下,如果打破紀(jì)錄的記錄會(huì)被寫入Game.rc文件中;(6) panel面板顯示:用于不同頁(yè)面間的切換顯示;4.測(cè)試數(shù)據(jù) (1) 目標(biāo)圖片如圖1:圖1 目標(biāo)圖片 (2) 難度:難度易游戲如圖2:圖2 難度易游戲圖片(3) 難度普通游戲如圖3:圖3 難度普通游戲圖片(4) 難度難游戲如圖4: 圖4 難度難游戲圖片 2、 概要設(shè)計(jì)1. 拼圖游戲流程圖游戲結(jié)束窗體顯示圖片放置動(dòng)作事件的監(jiān)聽(tīng)事件響應(yīng)是否開(kāi)始游戲拼圖完整 圖5 JAVA拼圖游戲框架圖2. 設(shè)計(jì)思路為實(shí)現(xiàn)上述游戲功能,首先需要寫出MenuFrame首頁(yè),在該布局里添加基礎(chǔ)選項(xiàng)和標(biāo)簽,并添加到程序首頁(yè)布局上,然后CardFrame繼承MeauFrame并設(shè)置程序說(shuō)明和焦點(diǎn)事件以完成暫停繼續(xù),接著設(shè)計(jì)ShowImage類用于顯示原來(lái)圖像,設(shè)計(jì)Grades類來(lái)記錄游戲者游戲信息以及最終成績(jī)并借助Arg傳遞到Game.rc文件中,其中包含Data類用來(lái)輔助Grades保存數(shù)據(jù),設(shè)計(jì)split類來(lái)劃分圖塊,接著設(shè)計(jì)ButtonClick來(lái)實(shí)現(xiàn)圖片的點(diǎn)擊移動(dòng)事件,其中引用point類輔助設(shè)置移動(dòng),并引用設(shè)計(jì)GameOver實(shí)現(xiàn)游戲過(guò)程中的計(jì)時(shí)、暫停、結(jié)束等功能并返回,最后設(shè)計(jì)Puzzle主類繼承于CarFrame類用于添加上述各種點(diǎn)擊事件并調(diào)用相關(guān)功能,包括在模板顯示由split類劃分的傳到拼圖矩陣后的整個(gè)拼圖圖塊,最后完善整個(gè)功能需要。3. 主要類文件說(shuō)明本程序包含8個(gè)主要模塊: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)游戲過(guò)程中的計(jì)時(shí)、暫停、結(jié)束等功能,游戲結(jié)束時(shí)的信息。4) split.class 該類主要實(shí)現(xiàn)圖片的提取與切割的功能。5)Grades.class 該類主要實(shí)現(xiàn)成績(jī)記錄的初始化,在拼圖成功后可記錄游戲者姓名的功能,并直接提取等級(jí)、步數(shù)與時(shí)間等信息的功能。保存成績(jī)記錄信息,以便游戲者查看。6)MenuFrame.class 該類主要實(shí)現(xiàn)有主菜單與子菜單的功能。并設(shè)置相關(guān)的快捷鍵功能。7)Puzzle.class 該類是該游戲程序的主程序,從游戲界面大小到游戲過(guò)程中出現(xiàn)的所有信息框等相關(guān)功能都到了實(shí)現(xiàn),調(diào)用相關(guān)類實(shí)現(xiàn)其功能。8)ShowImage.class 該類用于新建窗口顯示目標(biāo)圖像。3、 詳細(xì)設(shè)計(jì)1.建立MenuFrame菜單首頁(yè)類菜單首頁(yè)的建立完成了以下設(shè)計(jì),設(shè)置主頁(yè)菜單結(jié)構(gòu)、設(shè)置菜單位于桌面位置和退出方式、設(shè)置快捷鍵、點(diǎn)擊事件選擇難度,默認(rèn)普通、添加開(kāi)始子菜單點(diǎn)擊事件好快捷鍵、添加難度選擇子菜單項(xiàng)并調(diào)用點(diǎn)擊事件、添加文件選擇點(diǎn)擊事件、關(guān)于菜單設(shè)置、圖片預(yù)覽點(diǎn)擊事件設(shè)置更新,很好的構(gòu)建了整個(gè)游戲的架構(gòu),下面列出該類的菜單結(jié)構(gòu)和一些重要的方法代碼:(省略非關(guān)鍵代碼,可在文末源代碼查看)public abstract class MenuFrameextends JFrame/設(shè)置主頁(yè)菜單結(jié)構(gòu) . private JMenu m = new JMenu("開(kāi)始(B)").; private JMenu mm = new JMenu("等級(jí)(L)").;public MenuFrame()/設(shè)置菜單位于桌面位置和退出方式super("拼圖游戲");addMenu();.this.getToolkit().getScreenSize().width/3 - this.getWidth()/3;private void addMenu()/設(shè)置快捷鍵m0.setMnemonic(B);initMenuBegin() .private void menuLevelClick(String nm)/點(diǎn)擊事件選擇難度,默認(rèn)普通type = 3;if (nm.equals("困難").private void initMenuBegin()/添加開(kāi)始子菜單點(diǎn)擊事件好快捷鍵JMenuItem mI = new JMenuItem("新游戲(N)").; mI0.setMnemonic(N); .mI0.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e)menuNewClick(););mI1,mI2.m0.add(mI0);.private void initMenuLevel()/添加難度選擇子菜單項(xiàng)并調(diào)用點(diǎn)擊事件JRadioButtonMenuItem mi = new JRadioButtonMenuItem("困難").; for (int i = 0; i < 3; i+) mii.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) JRadioButtonMenuItem mi = (JRadioButtonMenuItem)e.getSource(); menuLevelClick(mi.getText(););.public void initMenuBackground()/添加文件選擇點(diǎn)擊事件.File list = bkg.listFiles();int j = 0;for (int i = 0; i < list.length; i+)if (!listi.isFile() | listi.isHidden()continue;mi = new JRadioButtonMenuItem(listi.getName();mi.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e).private void initMenuAbout()/關(guān)于菜單設(shè)置JMenuItem mI = new JMenuItem("幫助(H)"),new JMenuItem("關(guān)于(A)").mI0.addActionListener(new ActionListener().public void updateMenuBegin()/圖片預(yù)覽點(diǎn)擊事件設(shè)置更新if (!update)m0.remove(2);return;JMenuItem mi = new JMenuItem("圖片預(yù)覽(S)");mi.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)menuShowClick(););.2. 建立CardFrame首頁(yè)說(shuō)明類 首頁(yè)說(shuō)明類繼承于首頁(yè)菜單類,并加以完善,并且設(shè)置了聚集事件,以完成暫停和繼續(xù)完成,最后定義聚焦事件為無(wú)限次。下面列出該類的說(shuō)明結(jié)構(gòu)和一些重要的方法代碼:(省略非關(guān)鍵代碼,可在文末源代碼查看)public abstract class CardFrame extends MenuFrame/繼承于首頁(yè)菜單類,并加以完善.public CardFrame()/設(shè)置首頁(yè)提示標(biāo)簽.JLabel label;label = new JLabel("請(qǐng)輸入你的圖片到");label.setBounds(10, 15, 190, 30);.JButton button = new JButton("繼 續(xù)");button.addActionListener(new ActionListener()/設(shè)置聚集事件,以完成暫停和繼續(xù)public void actionPerformed(ActionEvent e)FrameGetFocus(););panel1.add(button, BorderLayout.CENTER);con.add(panel0, "游戲");con.add(panel1, "暫停");card.show(con, "游戲");this.addWindowListener(new WindowAdapter()public void windowDeactivated(WindowEvent e)FrameLostFocus(););protected void nextCard()/完成無(wú)限次聚焦事件card.next(con);protected abstract void FrameLostFocus();protected abstract void FrameGetFocus();3. 建立ShowImage目標(biāo)圖顯示類 目標(biāo)圖片顯示類主要調(diào)用前面選擇的目標(biāo)圖片,并且新建標(biāo)簽顯示出來(lái)。public class ShowImage extends JFrame/調(diào)用前面選擇的目標(biāo)圖片,新建標(biāo)簽顯示出來(lái)public ShowImage(String fn)super("預(yù)覽");Container c = getContentPane();c.setLayout(new FlowLayout();String path = Arg.path + "/" + fn;ImageIcon image = new ImageIcon(path);c.add(new JLabel(image);setDefaultCloseOperation(HIDE_ON_CLOSE);setSize(image.getIconWidth()+10, image.getIconHeight()+30);setVisible(true);4. 建立Grades分?jǐn)?shù)記錄類分?jǐn)?shù)紀(jì)錄類實(shí)現(xiàn)了以下功能:首先用Data來(lái)新建數(shù)組,然后構(gòu)造方法,用于后面接收前面穿過(guò)來(lái)的難度,接著新建文檔用于存放記錄,并且初始化成績(jī)排名讀取文件現(xiàn)有的記錄,然后判斷該難度下游戲結(jié)束后,時(shí)間和步數(shù)是否最少,是否打破紀(jì)錄,接著顯示更新后的排名,最后調(diào)用顯示現(xiàn)有記錄下面列出該類的存儲(chǔ)顯示結(jié)構(gòu)和一些重要的方法代碼:(省略非關(guān)鍵代碼,可在文末源代碼查看)class Data/用Data來(lái)新建數(shù)組public String name;public int time;public int step;public class Gradesprivate Puzzle app;private Data data = .;public Grades(Puzzle m)/構(gòu)造方法,用于后面接收前面穿過(guò)來(lái)的難度app = m;private void creatData()/新建文檔用于存放記錄,并且初始化成績(jī)排名tryFile file = new File(Arg.rc);if (file.exists()return;file.createNewFile();PrintStream fout = new PrintStream(Arg.rc); .fout.close();catch (Exception e).private void readData()/讀取文件現(xiàn)有的記錄tryFile file = new File(Arg.rc);Scanner cin = new Scanner(file);data0.name = cin.next();.catch (Exception e)JOptionPane.showMessageDialog(null, Arg.rc + " cant read!");public void set(int t, int s)/用于改難度下游戲結(jié)束后,時(shí)間和步數(shù)是否最少,是否打破紀(jì)錄int type = app.getTypee();creatData();readData();if (t > datatype.time | (t = datatype.time && s >= datatype.step)return;datatype.name = JOptionPane.showInputDialog(null,"你打破了記錄!n請(qǐng)輸入你的名字。");try/顯示更新后的排名PrintStream f = new PrintStream(Arg.rc);f.printf("%s %d %dn", data0.name, data0.time, data0.step);.catch (Exception e).show();public void show()/調(diào)用顯示現(xiàn)有記錄trycreatData();readData();.JOptionPane.showMessageDialog(null, title+h+n+e);catch (Exception e).5.建立split原圖劃分類移動(dòng)點(diǎn)擊事件類 原圖花分類里,首先按照難度不同,根據(jù)不同的尺寸進(jìn)行原圖劃分判斷如果沒(méi)被劃分過(guò),則對(duì)圖案劃分并返回,接著新建圖片文件夾,并返回已建立,最后引用選中的圖片文件夾里的圖片,并且根據(jù)難度不同,對(duì)圖片進(jìn)行劃分,并且寫入到圖片數(shù)組 BufferedImage中去。public class Split/建立劃分類,按照難度不同,根據(jù)不同的尺寸進(jìn)行原圖劃分public static final int HARD = 0;public static final int NORMAL = 1;public static final int EASY = 2;public static final String pvo = "png"public static final int level = 100, 160, 200;.public static Split get()/判斷如果沒(méi)被劃分過(guò),則對(duì)圖案劃分并返回.public boolean set(String fn)/新建圖片文件夾,并返回已建立filename = fn;path = Arg.path + "/" + filename;File file = new File(path);return file.exists();public BufferedImage divid(int type)/引用選中的圖片文件夾里的圖片,并且根據(jù)難度不同,對(duì)圖片進(jìn)行劃分,并且寫入到圖片數(shù)組 BufferedImage中去。tryBufferedImage image = ImageIO.read(new File(path);int len = leveltype;int cal = image.getWidth() / len;int row = image.getHeight() / len;BufferedImage subimage = new BufferedImagerowcal;for (int i = 0; i < row; i+)for (int j = 0; j < cal; j+)subimageij = image.getSubimage(j*len, i*len, len, len);return subimage;.6.建立ButtonClick拼圖移動(dòng)點(diǎn)擊事件類 ButtonClick拼圖移動(dòng)點(diǎn)擊事件類先將按鈕點(diǎn)擊事件鏈接接口,然后判斷點(diǎn)擊的非空按鈕周圍是否為空,如果為空就先把該非空按鈕設(shè)置圖案為空,然后將空白的按鈕設(shè)置為剛才的圖案,并且判斷是否成功。public class ButtonClick implements ActionListener/按鈕點(diǎn)擊事件鏈接接口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;row = r;cal = c;gOver = g;end = false;public void actionPerformed(ActionEvent e)/判斷點(diǎn)擊的非空按鈕周圍是否為空,如果為空就先把該非空按鈕設(shè)置圖案為空if (end | !pint.neighbor(row, cal) return;int r = pint.getRow();int c = pint.getCal();buttonrc.setIcon(buttonrowcal.getIcon();buttonrowcal.setIcon(null);pint.set(row, cal);int t = matrixrc;matrixrc = matrixrowcal;matrixrowcal = t;end = gOver.judge();7.建立Gameover判斷游戲結(jié)束類public class GameOver/引入游戲結(jié)束標(biāo)志,暫停標(biāo)志,和圖片矩陣等private boolean gameOver;private boolean stop;private int matrix; .public GameOver (Puzzle frm)/構(gòu)造方法Main = frm;public void start(int m)/開(kāi)始方法,對(duì)數(shù)據(jù)初始化gameOver = false;matrix = m;step = 0;Date d = new Date();now = d.getTime();stop = false;countTime = 0;public boolean judge()/比對(duì)原來(lái)的拼圖,判斷現(xiàn)在的拼圖是否與目標(biāo)圖案一樣,一樣則返回結(jié)束標(biāo)志if (gameOver)return true;step+;int c = 1;for (int i = 0; i < matrix.length; i+)for (int j = 0; j < matrixi.length; j+)if (matrixij != (c+)return false;.return (gameOver = true);public void pause()/暫停就停止計(jì)時(shí)Date d = new Date();if (stop)now = d.getTime();else countTime += d.getTime() - now;stop = !stop;public int getStep()/返回耗費(fèi)步數(shù)return step;public long getTime()/返回耗費(fèi)時(shí)間return countTime / 1000;8.建立Puzzle拼圖游戲主類 拼圖游戲主類繼承于首頁(yè)說(shuō)明類,首先利用構(gòu)造方法,用于顯示拼圖界面,接著調(diào)用以下不同方法:調(diào)用游戲開(kāi)始方法、調(diào)用游戲結(jié)束方法,并且顯示時(shí)間和步數(shù)、調(diào)用失去焦點(diǎn)方法,然后暫停游戲、調(diào)用獲得焦點(diǎn)方法,然后繼續(xù)游戲。接著調(diào)用以下點(diǎn)擊事件:選擇圖片點(diǎn)擊事件、并且調(diào)用顯示拼圖界面、記錄顯示點(diǎn)擊事件,顯示當(dāng)前記錄、目標(biāo)圖片顯示點(diǎn)擊事件,顯示目標(biāo)圖片標(biāo)簽、退出游戲點(diǎn)擊事件、幫助點(diǎn)擊事件、版本信息點(diǎn)擊事件,并顯示。最后建立拼圖主程序?qū)ο筮\(yùn)行。 public class Puzzle extends CardFrame/繼承于首頁(yè)說(shuō)明類.public Puzzle()/構(gòu)造方法,用于顯示拼圖界面start = false;this.setSize(200 + fWidth, 200 + fHeight);this.setVisible(true);private void startGame()/調(diào)用游戲開(kāi)始方法if (start)return;start = true;updateMenuBegin();public void endGame()/調(diào)用游戲結(jié)束方法,并且顯示時(shí)間和步數(shù)updateMenuBegin();initMenuBackground();start = false;JOptionPane.showMessageDialog(null,"時(shí)間:" + gOver.getTime() + "sn" +"步數(shù):" + gOver.getStep();Grades g = new Grades(this);g.set(int)gOver.getTime(), gOver.getStep();protected void FrameLostFocus()/調(diào)用失去焦點(diǎn)方法,然后暫停游戲。if (start && index)nextCard();if (gOver != null) gOver.pause();index = false;protected void FrameGetFocus()/調(diào)用獲得焦點(diǎn)方法,然后激素游戲。nextCard();if (gOver != null) gOver.pause();index = true;public void menuNewClick()/選擇圖片點(diǎn)擊事件,并且調(diào)用顯示拼圖界面Split sp = Split.get();BufferedImage image;if (!sp.set(getFilename() | (image = sp.divid(getTypee() = null)JOptionPane.showMessageDialog(null, "圖片不存在!n請(qǐng)重新選擇"); startGame();.Matrix matrix = new Matrix(button, panel0, len, gOver);matrix.init(image);this.setSize(cal * len + fWidth, row * len + fHeight);this.setVisible(true);public void menuGradesClick()/記錄顯示點(diǎn)擊事件顯示當(dāng)前記錄Grades g = new Grades(this);g.show();public void menuShowClick()/目標(biāo)圖片顯示點(diǎn)擊事件,顯示目標(biāo)圖片標(biāo)簽new ShowImage(getFilename();public void menuExitClick()/退出游戲點(diǎn)擊事件System.exit(0);public void menuHelpClick()/幫助點(diǎn)擊事件.JOptionPane.showMessageDialog(null, help0 + help1);public void menuAboutClick()/版本信息點(diǎn)擊事件,并顯示.JOptionPane.showMessageDialog(null, version + author + email);public static void main(String argv)/建立拼圖主程序?qū)ο驪uzzle app = new Puzzle();4、 調(diào)試分析1.程序的運(yùn)行將文件Arg.java,ButtonClick.java,CardFrame.java,GameOver.java,Grades.java,Matrix.java,MenuFrame.java,point.java,Puzzle.java,ShowImage.java,Split.java及background保存到同一個(gè)文件夾中。利用javac命令對(duì)文件進(jìn)行編譯,使用命令如下:Javac Puzzle.java,之后,利用java命令執(zhí)行程序,使用命令如下:Java Puzzle,便得到拼圖程序運(yùn)行界面?;蛘咧苯釉贓clipse上運(yùn)行。2.游戲測(cè)試 (1)游戲測(cè)試中第一個(gè)難題就是上傳到游戲中目標(biāo)圖片不能進(jìn)行很好的劃分,后來(lái)在計(jì)算了圖片的大小后,設(shè)置劃分大小,解決了這一個(gè)問(wèn)題,但是只能適配這一個(gè)分辨率下的圖片,以后可以增加分類劃分。(2)本程序的模塊劃分很合理,思路很清晰,布局簡(jiǎn)介,盡可能的簡(jiǎn)化操作。各類之間的繼承和相互調(diào)用關(guān)系,使得程序各類利用率很高,幾乎沒(méi)有重復(fù)之處,可視性和可調(diào)性更多。并且界面操作簡(jiǎn)介方便。(3)本程序的主程序同功能程序的銜接十分自然,算法效率高。(4)本實(shí)習(xí)作業(yè)采用JAVA圖形界面游戲的一般設(shè)計(jì)方法,將程序劃分為八個(gè)主要類:使得設(shè)計(jì)時(shí)思路清晰,實(shí)現(xiàn)時(shí)調(diào)試順利,各類具有較好的可重用性,我也確實(shí)得到了一次良好的程序設(shè)計(jì)訓(xùn)練。5、 用戶手冊(cè)1.游戲三個(gè)狀態(tài)1)游戲初始狀態(tài) 當(dāng)游戲剛運(yùn)行時(shí),會(huì)出現(xiàn)如下界面,本游戲中已經(jīng)存在了三張圖片,如過(guò)游戲者想拼自己感興趣的圖片的話,可以將自己的圖片放入到“background”(背景圖片)文件夾中,再進(jìn)行“選擇”->“背景圖片”中選擇你自己的圖片,然后選擇“等級(jí)”->“困難”或“普通”或“簡(jiǎn)單”,進(jìn)行等級(jí)選擇,最后選擇“開(kāi)始”->“新游戲”就可以拼自己想拼的圖了。初始窗口如圖6所示: 圖6 游戲初始窗口2)游戲進(jìn)行狀態(tài) 當(dāng)游戲者選擇好圖片與等級(jí)后,就可以進(jìn)行拼圖游戲了及進(jìn)入游戲的進(jìn)行圖 圖7 游戲進(jìn)行狀態(tài)態(tài)。如圖7所示:3)游戲暫停狀態(tài) 當(dāng)游戲者,在游戲過(guò)程中半途暫停游戲的話,將出現(xiàn)如圖8所示的游戲暫停狀態(tài)的界面。當(dāng)游戲者又想繼續(xù)游戲時(shí),直接單擊界面上的“繼續(xù)”字樣,就可以繼續(xù)游戲了。 圖8 游戲暫停狀態(tài)2. 游戲菜單選項(xiàng)1)“開(kāi)始”菜單。包括了,“新游戲”、“成績(jī)記錄”、“圖片預(yù)覽”、“退出游戲”。如圖9所示。 “新游戲”:?jiǎn)螕艨梢蚤_(kāi)始游戲,如圖10所示游戲進(jìn)行狀態(tài)。 “成績(jī)記錄”:?jiǎn)螕艨梢圆榭从螒蛘叩挠螒蜃罴殉煽?jī)記錄。如圖8所示。初始的成績(jī)記錄。 “圖片預(yù)覽”:在游戲過(guò)程中可以單擊預(yù)覽圖片,對(duì)照著拼,如圖11所示。 “退出游戲”:游戲者要結(jié)束游戲可直接單擊退出游戲。 圖9 游戲開(kāi)始菜單 圖10 游戲最佳成績(jī)記錄 圖11 目標(biāo)圖片預(yù)覽2)“選擇”菜單。包括了,“等級(jí)”、“背景圖片”。如圖12所示。當(dāng)運(yùn)行 圖12 選擇菜單游戲時(shí),如果沒(méi)有把“background”這個(gè)文件夾放入主程序的目錄下,在運(yùn)行游戲選擇背景圖片時(shí),將沒(méi)有圖片可選,這是可以按照“初始狀態(tài)”界面上的提示進(jìn)行操作。若正常的有“background”在主程序路徑下的話,運(yùn)行游戲選擇背景圖片的話,就可以選擇圖片了,界面如圖13所示。 “等級(jí)”:在游戲者開(kāi)始游戲之前,要進(jìn)行游戲等級(jí)選擇,共有困難、普通、簡(jiǎn)單三種選擇。其圖片的切割塊數(shù),會(huì)根據(jù)選擇的等級(jí)不同,而有所不同。 “背景圖片”:這里保存了所要拼的所有圖片。在游戲前要進(jìn)行選擇。 圖13 選擇菜單 3)“關(guān)于”菜單。包括了“幫助”、“關(guān)于”兩個(gè)下拉菜單。 “幫助”:在游戲時(shí),可以單擊查看游戲的簡(jiǎn)單規(guī)則。 “關(guān)于”:可查看該游戲的版本、作者、與作者的Email的相關(guān)信息 3.游戲提示框1)提示信息窗口 當(dāng)游戲者運(yùn)行游戲時(shí),如果沒(méi)有把“background”這個(gè)文件夾放入主程序的目錄下,在運(yùn)行游戲選擇背景圖片時(shí),將沒(méi)有圖片可選,若此時(shí)直接“開(kāi)始”->“新游戲”,將會(huì)彈出如下提示信息框。界面如圖14所示。圖14 提示信息框2)拼圖成功界面,若選擇abc.jpg圖片拼圖時(shí),若拼圖成功,界面如圖15所示。圖15 拼圖成功3)成績(jī)記錄輸入框 當(dāng)游戲者完成拼圖游戲后,將出現(xiàn)一個(gè)成績(jī)記錄框(“輸入”框),輸入游戲者的姓名。如圖16所示。輸入后單擊確定按鈕,將彈出總的成績(jī)記錄框。 圖16 輸入名字 如圖17所示: 圖17 成績(jī)記錄框6、 測(cè)試結(jié)果(1) 易破紀(jì)錄測(cè)試結(jié)果如圖18,輸入記錄如圖19,最終成績(jī)記錄如圖20:圖片18 易難度破紀(jì)錄圖圖片19輸入易記錄圖圖片20最終成績(jī)記錄圖(2)普通破紀(jì)錄測(cè)試結(jié)果如圖21,輸入記錄如圖22,最終成績(jī)記錄如圖23:圖片21 普通破紀(jì)錄測(cè)試結(jié)果圖圖片22 普通輸入紀(jì)錄圖圖片23 最終成績(jī)記錄圖(3)困難游戲過(guò)程和顯示圖片如圖24:圖24 困難難度游戲進(jìn)行圖7、 附錄(源碼)Arg.javapublic interface Argpublic static final String path = "background"public static final String rc = "Game.rc"ButtonClick.javaimport java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JOptionPane;public class ButtonClick implements ActionListenerprivate 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;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();buttonrc.setIcon(buttonrowcal.getIcon();buttonrowcal.setIcon(null);pint.set(row, cal);int t = matrixrc;matrixrc = matrixrowcal;matrixrowcal = t;end = gOver.judge();CardFrame.javaimport java.awt.BorderLayout;import java.awt.CardLayout;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.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 MenuFrameprivate CardLayout card;private Container con;protected JPanel panel = new JPanel(), new JPanel();public CardFrame()con = this.getContentPane();card = new CardLayout();con.setLayout(card);panel0.setLayout(null);JLabel label;label = new JLabel("請(qǐng)輸入你的圖片到");label.setBounds(10, 15, 190, 30);panel0.add(label);label = new JLabel(""背景圖片"文件夾。n");label.setBounds(10, 30, 190, 45);panel0.add(label);label = new JLabel("單擊"選擇->背景圖片"");label.setBounds(10, 50, 190, 65);panel0.add(label);label = new JLabel("選擇圖片。n");label.setBounds(10, 65, 190, 80);panel0.add(label);label = new JLabel("接著, 單擊 "開(kāi)始->新游戲" 可以");label.setBounds(10, 85, 190, 100);panel0.add(label);label = new JLabel("開(kāi)始游戲。");label.setBounds(10, 100, 190, 115);panel0.add(label);panel1.setLayout(new BorderLayout();JButton button = new JButton("繼 續(xù)");button.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)FrameGetFocus(););panel1.add(button, BorderLayout.CENTER);con.add(panel0, "游戲");con.add(panel1, "暫停");card.show(con, "游戲");this.addWindowListener(new WindowAdapter()public void windowDeactivated(WindowEvent e)FrameLostFocus(););protected void nextCard()card.next(con);protected abstract void FrameLostFocus();protected abstract void FrameGetFocus();GameOver.javaimport java.util.Date;public class GameOverprivate boolean

注意事項(xiàng)

本文(JAVA拼圖游戲課程設(shè)計(jì).doc)為本站會(huì)員(xin****828)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(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),我們立即給予刪除!