java拼圖游戲設計報告_第1頁
java拼圖游戲設計報告_第2頁
java拼圖游戲設計報告_第3頁
java拼圖游戲設計報告_第4頁
java拼圖游戲設計報告_第5頁
已閱讀5頁,還剩8頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Web程序開發課程大作業拼圖游戲 3011212046張杰2014.11一、題目說明拼圖游戲不僅可以幫助人們打發時間,還可以用于鍛煉兒童腦力,幫助少兒開發大腦思維,拼圖游戲結合了許多元素,可以圖片切割,游戲拼圖,游戲成功時和打破記錄時的判斷,同時還有游戲時間和步數的記錄,并以文檔形式進行保存。在拼圖時首先把圖片添加到background目錄下,程序會自動獲取該目錄下的所有文件,并加載到游戲中,進行切割后,顯示在拼圖按鈕上。本游戲使用Java語言設計,開發平臺為JDK。開發工具Eclipse。JDK是Sun Microsystems針對Java開發員的產品。自從Java推出以來,JDK已經成為使

2、用最廣泛的Java SDK。JDK 是整個Java的核心,包括了Java運行環境,Java工具和Java基礎的類庫。JDK是學好Java的第一步。從SUN的JDK5.0開始,提供了泛型等非常實用的功能,其版本也不斷更新,運行效率得到了非常大的提高。2、 題意分析因為要制作拼圖游戲,所以首先要實現圖片的導入。這是通過getImage()函數來實現的,該函數有兩個參數,第一個參數指明圖片的路徑,第二個參數指明圖片的名稱。然后,因為要實現圖片擺放的隨意性,所以要通過initgame()函數來實現。Initgame()函數是自寫函數,在函數體內,通過調用Math.random()函數產生隨機數,用來達

3、到圖片位置擺放的隨意性和隨機性。最后,因為要實現人機交互.,所以首先要通過一系列函數來實現對鼠標事件的監聽和響應,這是通過函數addMouseListener(this) 和addMouseMotionListener(this)來完成的。這樣程序會區分用戶對鼠標不同的操作,正確執行相應的功能。游戲操作流程:開始游戲操作游戲游戲完成關閉游戲3、 設計目的本游戲的設計目的在于休閑娛樂,玩家可以在學習、編程等工作后用來休息放松,讓集中的心態得到釋放,對于小孩可以通過精美的卡通的圖片來吸引孩子的興趣,加強動腦動手能力。本游戲適玩人群老少皆宜。4、 設計特點本游戲主要充分運用圖形用戶界面將一張圖片切割

4、成大小相同的九塊小圖,運用其中的八塊,將小圖的順序和位置打亂,通過將圖片移動到剩余的一格空白處而改變圖片的位置,最終拼成原始圖片。五、功能說明游戲功能圖:拼圖游戲退出游戲選擇圖片查看圖片開始游戲本拼圖游戲,運用了Java2中的圖形處理技術和消息響應技術。通過圖形技術,實現圖片的導入和分割。通過消息響應機制,使程序可以響應用戶的鼠標操作,進行拼圖游戲的操作。這個游戲主要分為四個模塊,分別是游戲開始、查看圖片、選擇圖片和退出游戲。這四個摸塊的功能各不一樣,玩家如果在游戲過程中感覺拼圖小塊之間的接合不明顯,玩家可以點擊“查看”按鈕來瀏覽拼圖完成的效果圖,從而使得游戲不會無從下手;玩家如果覺得當前拼圖

5、的畫面不滿意可以點擊“選擇”圖片按鈕來更換圖片,或者想更改拼圖的畫面,玩家可以進入游戲文件夾進行更換圖片文件,但是需要注意的是圖片需要有格式,同時還需要將所要更改的圖片切割成大小相同的九個小塊,具體就不詳細說了,游戲文件夾中會給大家附一個.txt文件,供大家更換圖片使用,從而提高玩家樂趣。六、主要功能程序段import java.awt.Rectangle;/引入類import java.awt.event.*;import javax.swing.*;class PaneButton extends JButton / 繼承按鈕類實現加圖片的方格PaneButton(Icon icon) /

6、構造方法進行初始化,設置圖標super(icon);this.setSize(100, 100);/設置每個方格的大小public void move(String direction, int sleep) /方格的移動if (direction = "UP") /方格向上移動this.setLocation(this.getBounds().x, this.getBounds().y - 100); else if (direction = "DOWN") /方格向下移動this.setLocation(this.getBounds().x, thi

7、s.getBounds().y + 100); else if (direction = "LEFT") /方格向左移動this.setLocation(this.getBounds().x - 100, this.getBounds().y); else /方格向右移動this.setLocation(this.getBounds().x + 100, this.getBounds().y);public class PanelOfImage extends JPanel implements MouseListener /圖片面板加載方格對象boolean hasAdd

8、ActionListener = false;/設置方格動作監聽器的標識PaneButton pane;/聲明方格Rectangle nullPanel;/聲明空方格,沒有添圖片public static int currentPID = 1;/當前選擇的圖片編號public PanelOfImage() /構造方法進行初始化this.setLayout(null);/設置面板的布局為空this.setSize(400, 400);/設置面板的大小nullPanel = new Rectangle(200, 200, 100, 100);/設置空方格的位置pane = new PaneButt

9、on9;/創建九個方格Icon icon;/聲明圖標for (int i = 0; i < 3; i+) /循環為每個方格加載圖片for (int j = 0; j < 3; j+) /循環列icon = new ImageIcon("pictrue/pic_" + currentPID + "_"+ (i * 3 + j + 1) + ".jpg");/創建圖標panei * 3 + j = new PaneButton(icon);/創建方格在方格中加載圖片panei * 3 + j.setLocation(j * 1

10、00, i * 100);/設置方格的位置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() /重新加載圖片在重新選擇圖片時

11、Icon icon;for (int i = 0; i < 3; i+) /循環為每個方格加載圖片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) /當第一個方格距左上角近時int x = nullPanel.getBounds().x;int y = nullPanel.getBounds().y;int direction = (int) (Math.random() * 4);/隨機產生一個數字對應空方格的上下左右移動if (direction = 0) /空方格左移動,與左側方格互換位置,左側方格右移動x -= 100;/空主格左移if (test(x, y) for (int j = 0; j < 8; j+) /循環尋打左側的按鈕if (panej.ge

13、tBounds().x = x)&& (panej.getBounds().y = y) /依次尋找左側的按鈕panej.move("RIGHT", 100);/方格向右移動一格nullPanel.setLocation(x, y);/重新設置空方格的位置break;/跳出循環 else if (direction = 1) /空方格右移動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);/方格向左移動一格nullPanel.setLocation(x, y);break; else if (direction = 2) /空方格上移動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);/方格向下移動一格nullPanel.setLocation

15、(x, y);break; else /空方格下移動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);/方格向上移動一格nullPanel.setLocation(x, y);break;if (!hasAddActionListener)/判斷是否添加動作事件for (int i = 0; i < 8; i+)/循環為每個方格添加動作事件

16、panei.addMouseListener(this);hasAddActionListener = true;private boolean test(int x, int y) /檢測方格是否在指定的范圍內移動if (x >= 0 && x <= 200) | (y >= 0 && y <= 200)return true;elsereturn false;public void mouseClicked(MouseEvent arg0) /鼠標點擊時調用public void mouseEntered(MouseEvent arg

17、0) /鼠標進入組件區域時調用public void mouseExited(MouseEvent arg0) /控制鼠標不能移動出面板的范圍public void mouseReleased(MouseEvent arg0) /鼠標按鍵在組件上釋放時調用public void mousePressed(MouseEvent event) /鼠標按下時調用PaneButton button = (PaneButton) event.getSource();/獲得鼠標按的方格按鈕int x1 = button.getBounds().x;/獲得該方格按鈕的橫坐標int y1 = button.g

18、etBounds().y;/獲得該方格按鈕的縱坐標int nullDir_X = nullPanel.getBounds().x;/得到空方格的橫坐標int nullDir_Y = nullPanel.getBounds().y;/得到空方格的縱坐標if (x1 = nullDir_X && y1 - nullDir_Y = 100)/進行比較果滿足條件則交換button.move("UP", 100);/方格向上移動else if (x1 = nullDir_X && y1 - nullDir_Y = -100)button.move(&q

19、uot;DOWN", 100);/方格向下移動else if (x1 - nullDir_X = 100 & y1 = nullDir_Y)button.move("LEFT", 100);/方格向左移動else if (x1 - nullDir_X = -100 && y1 = nullDir_Y)button.move("RIGHT", 100);/方格向右移動elsereturn;nullPanel.setLocation(x1, y1);/重新設置空方格的位置this.repaint();/重新加載if (thi

20、s.isFinish() /進行是否完成的判斷JOptionPane.showMessageDialog(this, "恭喜你,完成拼圖");for (int i = 0; i < 8; i+)/循環撤消鼠標事件panei.removeMouseListener(this);hasAddActionListener = false;import java.awt.*;/引入類import java.awt.event.*;import javax.swing.*;public class TextImagePieceTogether extends JFrame im

21、plements ActionListener /操作實現拼圖的游戲的類PanelOfImage imagePanel;/聲明圖片面板JPanel panelOfSouth, panelOfLook;/聲明南側面板和查看面板Button startButton;/聲明開始按鈕Button lookButton;/聲明查看按鈕Button chooseButton;/選擇按鈕Container container;/ 容器,得到內容面板public TextImagePieceTogether() /構造方法進行初始化container = this.getContentPane();/獲得內容

22、面板startButton = new Button("開始");/創建開始按鈕startButton.addActionListener(this);/添加監聽事件lookButton = new Button("查看");lookButton.addActionListener(this);chooseButton = new Button("選擇");chooseButton.addActionListener(this);panelOfLook = new JPanel();/創建查看面板panelOfLook.setLayo

23、ut(null);/設置布局Icon icon = new ImageIcon("pictrue/pic_" + PanelOfImage.currentPID+ ".jpg");/創建圖標JLabel label = new JLabel(icon);/創建圖標標簽label.setBounds(0, 0, 300, 300);/設置標簽的位置panelOfLook.add(label);/添加標簽panelOfSouth = new JPanel();/創建南側面板panelOfSouth.setBackground(Color.red);/設置背景

24、顏色panelOfSouth.add(startButton);/添加開始按鈕panelOfSouth.add(lookButton);/添加查看按鈕panelOfSouth.add(chooseButton);/添加選擇按鈕imagePanel = new PanelOfImage();/創建圖片面板container.add(imagePanel, BorderLayout.CENTER);container.add(panelOfSouth, BorderLayout.SOUTH);this.setTitle("拼圖游戲");/設置標題this.setLocation

25、(300, 200);/設置位置this.setSize(308, 365);/設置大小this.setResizable(false);/設置是否可以通過某個用戶操作調整this.setVisible(true);/設置可視this.setDefaultCloseOperation(3);/設置默認關閉操作public void actionPerformed(ActionEvent event) /按鈕觸發的事件Button button = (Button) event.getSource();/獲得事件按鈕源if (button = startButton) /如果是開始按鈕image

26、Panel.breakRank();/調用圖片方格打亂方法 else if (button = lookButton) /如果是查看事件if (button.getLabel() = "查看") /如果按鈕標簽為"查看"container.remove(imagePanel);/容器移除圖片面板container.add(panelOfLook);/容器添加查看標簽panelOfLook.updateUI();/不用調整大小就可以出現新增刪的組件container.repaint();/重繪button.setLabel("返回");

27、/設置按鈕標簽 else container.remove(panelOfLook);/容器移除查看面板container.add(imagePanel);/容器添加圖片面板container.repaint();/重繪button.setLabel("查看"); else if (button = chooseButton) /如果是選擇按鈕Choice choice = new Choice();/創建選擇器choice.add("-小貓-");/添加列表項choice.add("-QQ-");int i = JOptionPan

28、e.showConfirmDialog(this, choice, "選擇圖片",JOptionPane.OK_CANCEL_OPTION);/彈出對話框if (i = JOptionPane.YES_OPTION) /選擇對話框的確定按鈕PanelOfImage.currentPID = choice.getSelectedIndex() + 1;/獲得列表項的編號imagePanel.reLoadPictrue();/圖片重載Icon icon = new ImageIcon("pictrue/pic_"+ PanelOfImage.currentPID + ".jpg")

溫馨提示

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

評論

0/150

提交評論