版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Web程序開發(fā)課程大作業(yè)拼圖游戲 3011212046張杰2014.11一、題目說明拼圖游戲不僅可以幫助人們打發(fā)時(shí)間,還可以用于鍛煉兒童腦力,幫助少兒開發(fā)大腦思維,拼圖游戲結(jié)合了許多元素,可以圖片切割,游戲拼圖,游戲成功時(shí)和打破記錄時(shí)的判斷,同時(shí)還有游戲時(shí)間和步數(shù)的記錄,并以文檔形式進(jìn)行保存。在拼圖時(shí)首先把圖片添加到background目錄下,程序會(huì)自動(dòng)獲取該目錄下的所有文件,并加載到游戲中,進(jìn)行切割后,顯示在拼圖按鈕上。本游戲使用Java語言設(shè)計(jì),開發(fā)平臺(tái)為JDK。開發(fā)工具Eclipse。JDK是Sun Microsystems針對(duì)Java開發(fā)員的產(chǎn)品。自從Java推出以來,JDK已經(jīng)成為使
2、用最廣泛的Java SDK。JDK 是整個(gè)Java的核心,包括了Java運(yùn)行環(huán)境,Java工具和Java基礎(chǔ)的類庫。JDK是學(xué)好Java的第一步。從SUN的JDK5.0開始,提供了泛型等非常實(shí)用的功能,其版本也不斷更新,運(yùn)行效率得到了非常大的提高。2、 題意分析因?yàn)橐谱髌磮D游戲,所以首先要實(shí)現(xiàn)圖片的導(dǎo)入。這是通過getImage()函數(shù)來實(shí)現(xiàn)的,該函數(shù)有兩個(gè)參數(shù),第一個(gè)參數(shù)指明圖片的路徑,第二個(gè)參數(shù)指明圖片的名稱。然后,因?yàn)橐獙?shí)現(xiàn)圖片擺放的隨意性,所以要通過initgame()函數(shù)來實(shí)現(xiàn)。Initgame()函數(shù)是自寫函數(shù),在函數(shù)體內(nèi),通過調(diào)用Math.random()函數(shù)產(chǎn)生隨機(jī)數(shù),用來達(dá)
3、到圖片位置擺放的隨意性和隨機(jī)性。最后,因?yàn)橐獙?shí)現(xiàn)人機(jī)交互.,所以首先要通過一系列函數(shù)來實(shí)現(xiàn)對(duì)鼠標(biāo)事件的監(jiān)聽和響應(yīng),這是通過函數(shù)addMouseListener(this) 和addMouseMotionListener(this)來完成的。這樣程序會(huì)區(qū)分用戶對(duì)鼠標(biāo)不同的操作,正確執(zhí)行相應(yīng)的功能。游戲操作流程:開始游戲操作游戲游戲完成關(guān)閉游戲3、 設(shè)計(jì)目的本游戲的設(shè)計(jì)目的在于休閑娛樂,玩家可以在學(xué)習(xí)、編程等工作后用來休息放松,讓集中的心態(tài)得到釋放,對(duì)于小孩可以通過精美的卡通的圖片來吸引孩子的興趣,加強(qiáng)動(dòng)腦動(dòng)手能力。本游戲適玩人群老少皆宜。4、 設(shè)計(jì)特點(diǎn)本游戲主要充分運(yùn)用圖形用戶界面將一張圖片切割
4、成大小相同的九塊小圖,運(yùn)用其中的八塊,將小圖的順序和位置打亂,通過將圖片移動(dòng)到剩余的一格空白處而改變圖片的位置,最終拼成原始圖片。五、功能說明游戲功能圖:拼圖游戲退出游戲選擇圖片查看圖片開始游戲本拼圖游戲,運(yùn)用了Java2中的圖形處理技術(shù)和消息響應(yīng)技術(shù)。通過圖形技術(shù),實(shí)現(xiàn)圖片的導(dǎo)入和分割。通過消息響應(yīng)機(jī)制,使程序可以響應(yīng)用戶的鼠標(biāo)操作,進(jìn)行拼圖游戲的操作。這個(gè)游戲主要分為四個(gè)模塊,分別是游戲開始、查看圖片、選擇圖片和退出游戲。這四個(gè)摸塊的功能各不一樣,玩家如果在游戲過程中感覺拼圖小塊之間的接合不明顯,玩家可以點(diǎn)擊“查看”按鈕來瀏覽拼圖完成的效果圖,從而使得游戲不會(huì)無從下手;玩家如果覺得當(dāng)前拼圖
5、的畫面不滿意可以點(diǎn)擊“選擇”圖片按鈕來更換圖片,或者想更改拼圖的畫面,玩家可以進(jìn)入游戲文件夾進(jìn)行更換圖片文件,但是需要注意的是圖片需要有格式,同時(shí)還需要將所要更改的圖片切割成大小相同的九個(gè)小塊,具體就不詳細(xì)說了,游戲文件夾中會(huì)給大家附一個(gè).txt文件,供大家更換圖片使用,從而提高玩家樂趣。六、主要功能程序段import java.awt.Rectangle;/引入類import java.awt.event.*;import javax.swing.*;class PaneButton extends JButton / 繼承按鈕類實(shí)現(xiàn)加圖片的方格PaneButton(Icon icon) /
6、構(gòu)造方法進(jìn)行初始化,設(shè)置圖標(biāo)super(icon);this.setSize(100, 100);/設(shè)置每個(gè)方格的大小public void move(String direction, int sleep) /方格的移動(dòng)if (direction = "UP") /方格向上移動(dòng)this.setLocation(this.getBounds().x, this.getBounds().y - 100); else if (direction = "DOWN") /方格向下移動(dòng)this.setLocation(this.getBounds().x, thi
7、s.getBounds().y + 100); else if (direction = "LEFT") /方格向左移動(dòng)this.setLocation(this.getBounds().x - 100, this.getBounds().y); else /方格向右移動(dòng)this.setLocation(this.getBounds().x + 100, this.getBounds().y);public class PanelOfImage extends JPanel implements MouseListener /圖片面板加載方格對(duì)象boolean hasAdd
8、ActionListener = false;/設(shè)置方格動(dòng)作監(jiān)聽器的標(biāo)識(shí)PaneButton pane;/聲明方格Rectangle nullPanel;/聲明空方格,沒有添圖片public static int currentPID = 1;/當(dāng)前選擇的圖片編號(hào)public PanelOfImage() /構(gòu)造方法進(jìn)行初始化this.setLayout(null);/設(shè)置面板的布局為空this.setSize(400, 400);/設(shè)置面板的大小nullPanel = new Rectangle(200, 200, 100, 100);/設(shè)置空方格的位置pane = new PaneButt
9、on9;/創(chuàng)建九個(gè)方格Icon icon;/聲明圖標(biāo)for (int i = 0; i < 3; i+) /循環(huán)為每個(gè)方格加載圖片for (int j = 0; j < 3; j+) /循環(huán)列icon = new ImageIcon("pictrue/pic_" + currentPID + "_"+ (i * 3 + j + 1) + ".jpg");/創(chuàng)建圖標(biāo)panei * 3 + j = new PaneButton(icon);/創(chuàng)建方格在方格中加載圖片panei * 3 + j.setLocation(j * 1
10、00, i * 100);/設(shè)置方格的位置this.add(panei * 3 + j);/面板添加方格this.remove(pane8);/ 移除多余的方格public boolean isFinish() /判斷是否拼湊成功for (int i = 0; i < 8; i+) int x = panei.getBounds().x;int y = panei.getBounds().y;if (y / 100 * 3 + x / 100 != i)return false;return true;public void reLoadPictrue() /重新加載圖片在重新選擇圖片時(shí)
11、Icon icon;for (int i = 0; i < 3; i+) /循環(huán)為每個(gè)方格加載圖片for (int j = 0; j < 3; j+) icon = new ImageIcon("pictrue/pic_" + currentPID + "_"+ (i * 3 + j + 1) + ".jpg");panei * 3 + j.setIcon(icon);public void breakRank() /方格打亂重新排序while (pane0.getBounds().x <= 100 &&am
12、p; pane0.getBounds().y <= 100) /當(dāng)?shù)谝粋€(gè)方格距左上角近時(shí)int x = nullPanel.getBounds().x;int y = nullPanel.getBounds().y;int direction = (int) (Math.random() * 4);/隨機(jī)產(chǎn)生一個(gè)數(shù)字對(duì)應(yīng)空方格的上下左右移動(dòng)if (direction = 0) /空方格左移動(dòng),與左側(cè)方格互換位置,左側(cè)方格右移動(dòng)x -= 100;/空主格左移if (test(x, y) for (int j = 0; j < 8; j+) /循環(huán)尋打左側(cè)的按鈕if (panej.ge
13、tBounds().x = x)&& (panej.getBounds().y = y) /依次尋找左側(cè)的按鈕panej.move("RIGHT", 100);/方格向右移動(dòng)一格nullPanel.setLocation(x, y);/重新設(shè)置空方格的位置break;/跳出循環(huán) else if (direction = 1) /空方格右移動(dòng)x += 100;if (test(x, y) for (int j = 0; j < 8; j+) if (panej.getBounds().x = x)&& (panej.getBounds()
14、.y = y) panej.move("LEFT", 100);/方格向左移動(dòng)一格nullPanel.setLocation(x, y);break; else if (direction = 2) /空方格上移動(dòng)y -= 100;if (test(x, y) for (int j = 0; j < 8; j+) if (panej.getBounds().x = x)&& (panej.getBounds().y = y) panej.move("DOWN", 100);/方格向下移動(dòng)一格nullPanel.setLocation
15、(x, y);break; else /空方格下移動(dòng)y += 100;if (test(x, y) for (int j = 0; j < 8; j+) if (panej.getBounds().x = x)&& (panej.getBounds().y = y) panej.move("UP", 100);/方格向上移動(dòng)一格nullPanel.setLocation(x, y);break;if (!hasAddActionListener)/判斷是否添加動(dòng)作事件for (int i = 0; i < 8; i+)/循環(huán)為每個(gè)方格添加動(dòng)作事件
16、panei.addMouseListener(this);hasAddActionListener = true;private boolean test(int x, int y) /檢測(cè)方格是否在指定的范圍內(nèi)移動(dòng)if (x >= 0 && x <= 200) | (y >= 0 && y <= 200)return true;elsereturn false;public void mouseClicked(MouseEvent arg0) /鼠標(biāo)點(diǎn)擊時(shí)調(diào)用public void mouseEntered(MouseEvent arg
17、0) /鼠標(biāo)進(jìn)入組件區(qū)域時(shí)調(diào)用public void mouseExited(MouseEvent arg0) /控制鼠標(biāo)不能移動(dòng)出面板的范圍public void mouseReleased(MouseEvent arg0) /鼠標(biāo)按鍵在組件上釋放時(shí)調(diào)用public void mousePressed(MouseEvent event) /鼠標(biāo)按下時(shí)調(diào)用PaneButton button = (PaneButton) event.getSource();/獲得鼠標(biāo)按的方格按鈕int x1 = button.getBounds().x;/獲得該方格按鈕的橫坐標(biāo)int y1 = button.g
18、etBounds().y;/獲得該方格按鈕的縱坐標(biāo)int nullDir_X = nullPanel.getBounds().x;/得到空方格的橫坐標(biāo)int nullDir_Y = nullPanel.getBounds().y;/得到空方格的縱坐標(biāo)if (x1 = nullDir_X && y1 - nullDir_Y = 100)/進(jìn)行比較果滿足條件則交換button.move("UP", 100);/方格向上移動(dòng)else if (x1 = nullDir_X && y1 - nullDir_Y = -100)button.move(&q
19、uot;DOWN", 100);/方格向下移動(dòng)else if (x1 - nullDir_X = 100 & y1 = nullDir_Y)button.move("LEFT", 100);/方格向左移動(dòng)else if (x1 - nullDir_X = -100 && y1 = nullDir_Y)button.move("RIGHT", 100);/方格向右移動(dòng)elsereturn;nullPanel.setLocation(x1, y1);/重新設(shè)置空方格的位置this.repaint();/重新加載if (thi
20、s.isFinish() /進(jìn)行是否完成的判斷JOptionPane.showMessageDialog(this, "恭喜你,完成拼圖");for (int i = 0; i < 8; i+)/循環(huán)撤消鼠標(biāo)事件panei.removeMouseListener(this);hasAddActionListener = false;import java.awt.*;/引入類import java.awt.event.*;import javax.swing.*;public class TextImagePieceTogether extends JFrame im
21、plements ActionListener /操作實(shí)現(xiàn)拼圖的游戲的類PanelOfImage imagePanel;/聲明圖片面板JPanel panelOfSouth, panelOfLook;/聲明南側(cè)面板和查看面板Button startButton;/聲明開始按鈕Button lookButton;/聲明查看按鈕Button chooseButton;/選擇按鈕Container container;/ 容器,得到內(nèi)容面板public TextImagePieceTogether() /構(gòu)造方法進(jìn)行初始化container = this.getContentPane();/獲得內(nèi)容
22、面板startButton = new Button("開始");/創(chuàng)建開始按鈕startButton.addActionListener(this);/添加監(jiān)聽事件lookButton = new Button("查看");lookButton.addActionListener(this);chooseButton = new Button("選擇");chooseButton.addActionListener(this);panelOfLook = new JPanel();/創(chuàng)建查看面板panelOfLook.setLayo
23、ut(null);/設(shè)置布局Icon icon = new ImageIcon("pictrue/pic_" + PanelOfImage.currentPID+ ".jpg");/創(chuàng)建圖標(biāo)JLabel label = new JLabel(icon);/創(chuàng)建圖標(biāo)標(biāo)簽label.setBounds(0, 0, 300, 300);/設(shè)置標(biāo)簽的位置panelOfLook.add(label);/添加標(biāo)簽panelOfSouth = new JPanel();/創(chuàng)建南側(cè)面板panelOfSouth.setBackground(Color.red);/設(shè)置背景
24、顏色panelOfSouth.add(startButton);/添加開始按鈕panelOfSouth.add(lookButton);/添加查看按鈕panelOfSouth.add(chooseButton);/添加選擇按鈕imagePanel = new PanelOfImage();/創(chuàng)建圖片面板container.add(imagePanel, BorderLayout.CENTER);container.add(panelOfSouth, BorderLayout.SOUTH);this.setTitle("拼圖游戲");/設(shè)置標(biāo)題this.setLocation
25、(300, 200);/設(shè)置位置this.setSize(308, 365);/設(shè)置大小this.setResizable(false);/設(shè)置是否可以通過某個(gè)用戶操作調(diào)整this.setVisible(true);/設(shè)置可視this.setDefaultCloseOperation(3);/設(shè)置默認(rèn)關(guān)閉操作public void actionPerformed(ActionEvent event) /按鈕觸發(fā)的事件Button button = (Button) event.getSource();/獲得事件按鈕源if (button = startButton) /如果是開始按鈕image
26、Panel.breakRank();/調(diào)用圖片方格打亂方法 else if (button = lookButton) /如果是查看事件if (button.getLabel() = "查看") /如果按鈕標(biāo)簽為"查看"container.remove(imagePanel);/容器移除圖片面板container.add(panelOfLook);/容器添加查看標(biāo)簽panelOfLook.updateUI();/不用調(diào)整大小就可以出現(xiàn)新增刪的組件container.repaint();/重繪button.setLabel("返回");
27、/設(shè)置按鈕標(biāo)簽 else container.remove(panelOfLook);/容器移除查看面板container.add(imagePanel);/容器添加圖片面板container.repaint();/重繪button.setLabel("查看"); else if (button = chooseButton) /如果是選擇按鈕Choice choice = new Choice();/創(chuàng)建選擇器choice.add("-小貓-");/添加列表項(xiàng)choice.add("-QQ-");int i = JOptionPan
28、e.showConfirmDialog(this, choice, "選擇圖片",JOptionPane.OK_CANCEL_OPTION);/彈出對(duì)話框if (i = JOptionPane.YES_OPTION) /選擇對(duì)話框的確定按鈕PanelOfImage.currentPID = choice.getSelectedIndex() + 1;/獲得列表項(xiàng)的編號(hào)imagePanel.reLoadPictrue();/圖片重載Icon icon = new ImageIcon("pictrue/pic_"+ PanelOfImage.currentPID + ".jpg")
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度水溝排水系統(tǒng)智能化改造合同3篇
- 二零二五年度健身房會(huì)員卡及設(shè)備轉(zhuǎn)讓協(xié)議4篇
- 2025年中國蛤蚧定喘丸行業(yè)市場(chǎng)全景監(jiān)測(cè)及投資戰(zhàn)略咨詢報(bào)告
- 2025年度農(nóng)藥產(chǎn)品安全評(píng)價(jià)與風(fēng)險(xiǎn)評(píng)估合同8篇
- 二零二五年度城市景觀打井勞務(wù)合作協(xié)議書3篇
- 2025年度大型農(nóng)業(yè)機(jī)械購置合同示例4篇
- 二零二五年度2025桉樹培育與病蟲害防治工程承包合同3篇
- 2024年安全管理人員安全教育培訓(xùn)試題含答案(鞏固)
- 二零二四停薪留職員工權(quán)益保障與職業(yè)規(guī)劃合同范本3篇
- 二零二五年度綠色生態(tài)農(nóng)場(chǎng)租賃合作協(xié)議范本4篇
- 射頻在疼痛治療中的應(yīng)用
- 和平精英電競(jìng)賽事
- 四年級(jí)數(shù)學(xué)豎式計(jì)算100道文檔
- “新零售”模式下生鮮電商的營銷策略研究-以盒馬鮮生為例
- 項(xiàng)痹病辨證施護(hù)
- 職業(yè)安全健康工作總結(jié)(2篇)
- 懷化市數(shù)字經(jīng)濟(jì)產(chǎn)業(yè)發(fā)展概況及未來投資可行性研究報(bào)告
- 07FD02 防空地下室電氣設(shè)備安裝
- 教師高中化學(xué)大單元教學(xué)培訓(xùn)心得體會(huì)
- 彈簧分離問題經(jīng)典題目
- 部編版高中歷史中外歷史綱要(下)世界史導(dǎo)言課課件
評(píng)論
0/150
提交評(píng)論