基于Java的拼圖游戲設計.doc_第1頁
基于Java的拼圖游戲設計.doc_第2頁
基于Java的拼圖游戲設計.doc_第3頁
基于Java的拼圖游戲設計.doc_第4頁
基于Java的拼圖游戲設計.doc_第5頁
已閱讀5頁,還剩28頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

Java課程設計拼圖游戲 班級:信101學號:2010414126 姓名:孫 杰 指導老師:李紅強基于Java的拼圖游戲設計游戲實現功能解析及界面游戲規則介紹1)本游戲是一個Java語言的拼圖游戲,有一個格子是空的,其他格子內隨機放置由要拿來拼圖的圖片切割成的若干個小圖片,圖片的切割按照一定的公式計算,因為,該通過單擊任意一個與空格子相鄰的方塊可以把該方游戲中設有拼圖游戲的等級,根據不同的等級,按照公式會切割成不同的小圖片塊數。2)在開始游戲之前,可以選擇游戲等級后再點擊“開始”菜單里的“新游戲”,進行拼圖游戲,通過將空格旁邊的小圖片移入空格子內(不斷的移動方塊),來實現拼圖,直到方塊一行一行的按圖片的原始樣子拼好即可完成該游戲。3)游戲拼完后,會彈出一個“信息”框,顯示你玩游戲所用的步數與時間,點擊“確定”后,會彈出一個“輸入”框,可以在里面輸入游戲者的姓名,單擊“確定”后會彈出游戲的記錄框。4)游戲的簡單規則在游戲界面的“關于”菜單內的“幫助”信息框內已經簡單介紹了。游戲前可以先預覽看看。游戲實現功能主窗口界面 1) 游戲初始狀態 當游戲剛運行時,會出現如下界面,本游戲中已經存在了三張圖片,如過游戲者想拼自己感興趣的圖片的話,可以將自己的圖片放入到“background”(背景圖片)文件夾中,再進行“選擇”-“背景圖片”中選擇你自己的圖片,然后選擇“等級”-“困難”或“普通”或“簡單”,進行等級選擇,最后選擇“開始”-“新游戲”就可以拼自己想拼的圖了。初始窗口如圖1所示:圖1 游戲初始窗口2)游戲進行狀態 當游戲者選擇好圖片與等級后,就可以進行拼圖游戲了及進入游戲的進行狀態。3)游戲暫停狀態 當游戲者,在游戲過程中半途暫停游戲的話,將出現如圖3所示的游戲暫停狀態的界面。當游戲者又想繼續游戲時,直接單擊界面上的“繼續”字樣,就可以繼續游戲了。 圖2 游戲暫停狀態主窗口菜單在游戲的主窗口菜單中包括如下幾個菜單:(1)“開始”菜單。包括了,“新游戲” 、“成績記錄” 、“圖片預覽” 、“退出游戲” 。如圖4所示。 “新游戲” :單擊可以開始游戲,如圖2所示游戲進行狀態。 “成績記錄” :單擊可以查看游戲者的游戲成績記錄。如圖5所示。初始的成績記錄。 “圖片預覽” :在游戲過程中可以單擊預覽圖片,對照著拼,如圖6所示。 “退出游戲” :游戲者要結束游戲可直接單擊退出游戲。 (2)“選擇”菜單。包括了,“等級”、“背景圖片”。如圖7所示。當運行游戲時,如果沒有把“background”這個文件夾放入主程序的目錄下,在運行游戲選擇背景圖片時,將沒有圖片可選,這是可以按照“初始狀態”界面上的提示進行操作。若正常的有“background”在主程序路徑下的話,運行游戲選擇背景圖片的話,就可以選擇圖片了,界面如圖3所示。 “等級” :在游戲者開始游戲之前,要進行游戲等級選擇,共有困難、普通、簡單三種選擇。其圖片的切割塊數,會根據選擇的等級不同,而有所不同。 “背景圖片” :這里保存了所要拼的所有圖片。在游戲前要進行選擇。 圖3 (3)“關于”菜單。包括了“幫助”、“關于”兩個下拉菜單。“幫助”:在游戲時,可以單擊查看游戲的簡單規則。“關于”:可查看該游戲的版本、作者、與作者的Email的相關信息游戲過程中的出現的相關窗體 (1)提示信息窗口 當游戲者運行游戲時,如果沒有把“background”這個文件夾放入主程序的目錄下,在運行游戲選擇背景圖片時,將沒有圖片可選,若此時直接“開始”-“新游戲”,將會彈出如下提示信息框。界面如圖4所示。圖4 提示信息框 (2) 拼圖成功界面 若選擇abc.jpg圖片拼圖時,若拼圖成功,界面如圖5所示。圖5 拼圖成功 (3)成績記錄輸入框 當游戲者完成拼圖游戲后,將出現一個成績記錄框(“輸入”框),輸入游戲者的姓名。如圖6所示。輸入后單擊確定按鈕,將彈出總的成績記錄框。如圖7所示。圖6(a) 輸入前 圖6 (b) 輸入后 圖7 成績記錄框游戲程序實現程序類主要功能介紹 該游戲程序中包括11個類。包括: ButtonClick.class、CardFrame.class、GameOver.class、Data.class 、Grades.class、Matrix.class、MenuFrame.class、 point.class、Puzzle.class、ShowImage.class、Split.class。其中主要的類實現的功能如下:1) ButtonClick.class該類主要是實現鼠標事件,讓玩家在用鼠標點擊能夠移動拼圖的小圖片,移動到周圍空格的地方2) CardFrame.class該類主要實現,初始界面的相關提示信息。3)GameOver.class 該類主要實現游戲過程中的計時、暫停、結束等功能,游戲結束時的信息。4) Data.class 該類主要實現保存游戲者的游戲成績記錄的相關數據。5)Grades.class 該類主要實現成績記錄的初始化,在拼圖成功后可記錄游戲者姓名的功能,并直接提取等級、步數與時間等信息的功能。保存成績記錄信息,以便游戲者查看。6)MenuFrame.class 該類主要實現有主菜單與子菜單的功能。并設置相關的快捷鍵功能。7)Puzzle.class 該類是該游戲程序的主程序,從游戲界面大小到游戲過程中出現的所有信息框等相關功能都都到了實現,調用相關類實現其功能。8)ShowImage.class 該類主要實現圖片的提取與切割的功能。程序的運行將文件Arg.java,ButtonClick.java,CardFrame.java,GameOver.java,Grades.java,Matrix.java,MenuFrame.java,point.java,Puzzle.java,ShowImage.java,Split.java及background保存到同一個文件夾中。利用javac命令對文件進行編譯,使用命令如下:Javac Puzzle.java之后,利用java命令執行程序,使用命令如下:Java Puzzle便得到拼圖程序運行界面。4 小結 本文是基于JAVA的拼圖游戲的程序實現,界面中有一個格子是空的,其他格子內隨機放置由要拿來拼圖的圖片切割成的若干個小圖片,圖片的切割按照一定的公式計算,因為,該通過單擊任意一個與空格子相鄰的方塊可以把該方游戲中設有拼圖游戲的等級,根據不同的等級,按照公式會切割成不同的小圖片塊數。在開始游戲之前,可以選擇游戲等級后再進行拼圖游戲,通過將空格旁邊的小圖片移入空格子內(不斷的移動方塊),來實現拼圖,直到方塊一行一行的按圖片的原始樣子拼好即可完成該游戲。游戲拼完后,會彈出一個信息框,顯示你玩游戲所用的步數與時間,點擊“確定”后,會彈出一個“輸入”框,可以在里面輸入游戲者的姓名,單擊“確定”后會彈出游戲的記錄框。可看到自己的排行。 該游戲最終能夠順利的運行,功能基本都以實現。由于時間與能力有限,該游戲還有很大的優化與擴展空間,還有待改進。附錄:源代碼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(請輸入你的圖片到);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(接著, 單擊 開始-新游戲 可以);label.setBounds(10, 85, 190, 100);panel0.add(label);label = new JLabel(開始游戲。);label.setBounds(10, 100, 190, 115);panel0.add(label);panel1.setLayout(new BorderLayout();JButton button = new JButton(繼 續);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 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)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 datatype.time | (t = datatype.time & s = datatype.step)return; = JOptionPane.showInputDialog(null,你打破了記錄!n請輸入你的名字。);datatype.time = t;datatype.step = s;tryPrintStream f = new PrintStream(Arg.rc);f.printf(%s %d %dn, , data0.time, data0.step);f.printf(%s %d %dn, , data1.time, data1.step);f.printf(%s %d %dn, , data2.time, data2.step);f.close();catch (Exception e)JOptionPane.showMessageDialog(null, Arg.rc + has broken!);show();public void show()trycreatData();readData();String title = .format(%8s%15s%8s%8sn, 等級, 姓名, 時間, 步數);String h = .format(%8s%15s%8d%8dn, 困難, , data0.time, data0.step);String n = .format(%8s%15s%8d%8dn, 普通, , data1.time, data1.step);String e = .format(%8s%15s%8d%8dn, 簡單, , data2.time, data2.step);JOptionPane.showMessageDialog(null, title+h+n+e);catch (Exception e)JOptionPane.showMessageDialog(null, Arg.rc + has broken!);Matrix.javaimport java.awt.image.BufferedImage;import javax.swing.JPanel;import javax.swing.JButton;import javax.swing.ImageIcon;public class Matrixprivate JButton 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 = b0.length;matrix = new introwcal;matrixrow-1cal-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+)buttonij = new JButton();buttonij.setBounds(j*len, i*len, len, len);buttonij.addActionListener(new ButtonClick(button, pint, matrix, i, j, gOver);panel.add(buttonij);public void init(BufferedImage image)if (button = null | image = null)return;ImageIcon icon;int r, c, rad, d, m;boolean visit = new booleanrow*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 (!visitd)m+;matrixi/cali%cal = d;visit-d = true;icon = new ImageIcon(imaged/cald%cal);buttoni/cali%cal.setIcon(icon);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 javax.swing.JMenuItem;import javax.swing.JRadioButtonMenuItem;import javax.swing.ButtonGroup;import javax.swing.KeyStroke;public abstract class MenuFrameextends JFramepublic final static int heightTitle = 30;public final static int widthTitle = 6;public final static int heightMenu = 27;private JMenu m = new JMenu(開始(B),new JMenu(選擇(O),new JMenu(關于(A) ;private JMenu mm = new JMenu(等級(L),new JMenu(背景圖片(B);private boolean update;private int type;private String filename;protected ButtonGroup bgrp = new ButtonGroup();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().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(m0);mBar.add(m1);mBar.add(m2);m0.setMnemonic(B);m1.setMnemonic(O);m2.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 menuLevelClick(String nm)type = 3;if (nm.equals(困難)type = 0;else if (nm.equals(普通)type = 1;else if (nm.equals(簡單)type = 2;private void menuBackgroundClick(String nm)filename = nm;public abstract void menuHelpClick();public abstract void menuAboutClick();public int getType()return type;public String getFilename()return filename;private void initMenuBegin()JMenuItem mI = new JMenuItem(新游戲(N),new JMenuItem(成績記錄(G),new JMenuItem(退出游戲(E);mI0.setMnemonic(N);mI1.setMnemonic(G);mI2.setMnemonic(E);mI0.setAccelerator(KeyStroke.getKeyStroke(ctrl N);mI2.setAccelerator(KeyStroke.getKeyStroke(ctrl W);mI0.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)menuNewClick(););mI1.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)menuGradesClick(););mI2.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)menuExitClick(););m0.add(mI0);m0.add(mI1);m0.add(mI2);m0.insertSeparator(2);private void initMenuOption()mm0.setMnemonic(L);mm1.setMnemonic(B);m1.add(mm0);m1.add(mm1);initMenuLevel();initMenuBackground();private void initMenuLevel()JRadioButtonMenuItem mi = new JRadioButtonMenuItem(困難),new JRadioButtonMenuItem(普通),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(););bgrp.add(mii);mm0.add(mii);mi1.setSelected(true);menuLevelClick(mi1.getText();public void initMenuBackground()mm1.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 (!listi.isFile() | listi.isHidden()continue;mi = new JRadioButtonMenuItem(listi.getName();mi.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)JRadioButtonMenuItem mi = (JRadioButtonMenuItem)e.getSource();menuBackgroundClick(mi.getText(););fgrp.add(mi);mm1.add(mi);mi.setSelected(j = 0);if (j = 0)menuBackgroundClick(mi.getText();j+;private void initMenuAbout()JMenuItem mI = new JMenuItem(幫助(H),new JMenuItem(關于(A);mI0.setMnemonic(H);mI1.setMnemonic(A);mI0.setAccelerator(KeyStroke.getKeyStroke(F1);mI0.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)menuHelpClick(););mI1.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)menuAboutClick(););m2.add(mI0);m2.add(mI1);public void updateMenuBegin()update = !update;if (!update)m0.remove(2);return;JMenuItem mi = new JMenuItem(圖片預覽(S);mi.setMnemonic(S);mi.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)menuShowClick(););m0.insert(mi, 2);point.javapublic class pointint row;int cal;public point(int r, int c)row = r;cal = c;public void set(int r, int 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;Puzzle.javaimport java.awt.image.BufferedImage;import javax.swing.JButton;import javax.swing.ImageIcon;import javax.swing.JOptionPane;import javax.swing.JRadioButtonMenuItem;public class Puzzle extends CardFrameprivate boolean start;private int fWidth = this.getWidth();private int fHeight = this.getHeight();private GameOver 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)return;start = true;updateMenuBegin();public void endGame()updateMenuBegin();initMenuB

溫馨提示

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

評論

0/150

提交評論