歡迎來到裝配圖網! | 幫助中心 裝配圖網zhuangpeitu.com!
裝配圖網
ImageVerifierCode 換一換
首頁 裝配圖網 > 資源分類 > DOC文檔下載  

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

  • 資源ID:27849537       資源大小:560.50KB        全文頁數:28頁
  • 資源格式: DOC        下載積分:15積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要15積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預覽文檔經過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

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

目 錄1 開發(fā)環(huán)境及相關技術的介紹11.1 開發(fā)環(huán)境11.2 Java語言特點12 游戲實現功能解析及界面12.1游戲規(guī)則介紹12.2游戲實現功能22.2.1主窗口界面22.2.2主窗口菜單32.2.3 游戲過程中的出現的相關窗體63 游戲程序實現83.1 程序類主要功能介紹83.2 程序源代碼94 小結27基于Java的拼圖游戲設計1 開發(fā)環(huán)境及相關技術的介紹1.1 開發(fā)環(huán)境操作系統(tǒng):Microsoft Windows XP程序語言:Java 開發(fā)環(huán)境:JDK-6u6-windows-i586-P1.2 Java語言特點1). 平臺無關性Java引進虛擬機原理,并運行于虛擬機,實現不同平臺之間的Java接口。Java的數據類型與機器無關。2). 安全性Java的編程類似C+,但舍棄了C+的指針對存儲器地址的直接操作,程序運行時,內存由操作系統(tǒng)分配,這樣可以避免病毒通過指針入侵系統(tǒng)。它提供了安全管理器,防止程序的非法訪問。3). 面向對象 Java吸收了C+面向對象的概念,將數據封裝于類中,實現了程序的簡潔性和便于維護性,使程序代碼可以只需一次編譯就可反復利用。4). 分布式Java建立在TCP/IP網絡平臺上,提供了用HTTP和FTP協(xié)議傳送和接收信息的庫函數,使用其相關技術可以十分方便的構建分布式應用系統(tǒng)。5). 健壯性Java致力與檢查程序在編譯和運行時的錯誤,并自動回收內存,減少了內存出錯的可能性。Java取消了C語言的結構、指針、#define語句、多重繼承、goto語句、操作符、重載等不易被掌握的特性,提供垃圾收集器自動回收不用的內存空間。2 游戲實現功能解析及界面2.1游戲規(guī)則介紹1)本游戲是一個Java語言的拼圖游戲,有一個格子是空的,其他格子內隨機放置由要拿來拼圖的圖片切割成的若干個小圖片,圖片的切割按照一定的公式計算,因為,該通過單擊任意一個與空格子相鄰的方塊可以把該方游戲中設有拼圖游戲的等級,根據不同的等級,按照公式會切割成不同的小圖片塊數。2)在開始游戲之前,可以選擇游戲等級后再點擊“開始”菜單里的“新游戲”,進行拼圖游戲,通過將空格旁邊的小圖片移入空格子內(不斷的移動方塊),來實現拼圖,直到方塊一行一行的按圖片的原始樣子拼好即可完成該游戲。3)游戲拼完后,會彈出一個“信息”框,顯示你玩游戲所用的步數與時間,點擊“確定”后,會彈出一個“輸入”框,可以在里面輸入游戲者的姓名,單擊“確定”后會彈出游戲的記錄框。4)游戲的簡單規(guī)則在游戲界面的“關于”菜單內的“幫助”信息框內已經簡單介紹了。游戲前可以先預覽看看。2.2游戲實現功能2.2.1主窗口界面 1) 游戲初始狀態(tài) 當游戲剛運行時,會出現如下界面,本游戲中已經存在了三張圖片,如過游戲者想拼自己感興趣的圖片的話,可以將自己的圖片放入到“background”(背景圖片)文件夾中,再進行“選擇”->“背景圖片”中選擇你自己的圖片,然后選擇“等級”->“困難”或“普通”或“簡單”,進行等級選擇,最后選擇“開始”->“新游戲”就可以拼自己想拼的圖了。初始窗口如圖1所示:圖1 游戲初始窗口2)游戲進行狀態(tài)當游戲者選擇好圖片與等級后,就可以進行拼圖游戲了及進入游戲的進行狀態(tài)。其游戲進行狀態(tài)如圖2所示:圖2 游戲進行狀態(tài)3)游戲暫停狀態(tài) 當游戲者,在游戲過程中半途暫停游戲的話,將出現如圖3所示的游戲暫停狀態(tài)的界面。當游戲者又想繼續(xù)游戲時,直接單擊界面上的“繼續(xù)”字樣,就可以繼續(xù)游戲了。 圖3 游戲暫停狀態(tài)2.2.2主窗口菜單在游戲的主窗口菜單中包括如下幾個菜單:(1)“開始”菜單。包括了,“新游戲” 、“成績記錄” 、“圖片預覽” 、“退出游戲” 。如圖4所示。 “新游戲” :單擊可以開始游戲,如圖2所示游戲進行狀態(tài)。 “成績記錄” :單擊可以查看游戲者的游戲成績記錄。如圖5所示。初始的成績記錄。 “圖片預覽” :在游戲過程中可以單擊預覽圖片,對照著拼,如圖6所示。 “退出游戲” :游戲者要結束游戲可直接單擊退出游戲。 圖4 開始菜單 圖5初始成績記錄圖6 圖片預覽 (2)“選擇”菜單。包括了,“等級”、“背景圖片”。如圖7所示。當運行游戲時,如果沒有把“background”這個文件夾放入主程序的目錄下,在運行游戲選擇背景圖片時,將沒有圖片可選,界面如圖8所示,這是可以按照“初始狀態(tài)”界面上的提示進行操作。若正常的有“background”在主程序路徑下的話,運行游戲選擇背景圖片的話,就可以選擇圖片了,界面如圖9所示。 “等級” :在游戲者開始游戲之前,要進行游戲等級選擇,共有困難、普通、簡單三種選擇。其圖片的切割塊數,會根據選擇的等級不同,而有所不同。簡單的是一共8個小圖片。 “背景圖片” :這里保存了所要拼的所有圖片。在游戲前要進行選擇。 圖7 圖8圖9(3)“關于”菜單。包括了“幫助”、“關于”兩個下拉菜單。如圖10所示。圖10“關于”菜單“幫助”:在游戲時,可以單擊查看游戲的簡單規(guī)則,界面如圖11所示?!瓣P于”:可查看該游戲的版本、作者、與作者的Email的相關信息,界面如圖12所示。圖11 “幫助”信息框圖12 下拉單“關于”的消息框 2.2.3 游戲過程中的出現的相關窗體 (1)提示信息窗口 當游戲者運行游戲時,如果沒有把“background”這個文件夾放入主程序的目錄下,在運行游戲選擇背景圖片時,將沒有圖片可選,若此時直接“開始”->“新游戲”,將會彈出如下提示信息框。如圖13所示。圖13 提示信息框 (2) 拼圖成功界面 若選擇abc.jpg圖片拼圖時,若拼圖成功,界面如圖14所示。 圖14 拼圖成功 (3)成績記錄輸入框 當游戲者完成拼圖游戲后,將出現一個成績記錄框(“輸入”框),輸入游戲者的姓名。如圖15所示。輸入后單擊確定按鈕,將彈出總的成績記錄框。如圖16所示。圖15(a) 輸入前 圖15 (b) 輸入后 圖16 成績記錄框3 游戲程序實現3.1 程序類主要功能介紹 該游戲程序中包括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 該類主要實現圖片的提取與切割的功能。3.2 程序源代碼1)Arg.javapublic interface Argpublic 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 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();3) 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("繼 續(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();4) 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 < matrixi.length; j+)if (matrixij != (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();elsecountTime += d.getTime() - now;stop = !stop;public int getStep()return step;public long getTime()return countTime / 1000;5) Grades.javaimport java.io.File;import java.io.PrintStream;import java.util.Scanner;import javax.swing.JOptionPane;class Datapublic String name;public int time;public int step;public class Gradesprivate Puzzle app;private Data data = new Data(),new Data(),new Data();public Grades(Puzzle m)app = m;private void creatData()tryFile file = new File(Arg.rc);if (file.exists()return;file.createNewFile();PrintStream fout = new PrintStream(Arg.rc);fout.printf("%s %d %dn", "風鈴",888888, 666666);fout.printf("%s %d %dn", "天使",777777, 444444);fout.printf("%s %d %dn", "撒旦",555555, 566666);fout.close();catch (Exception e)JOptionPane.showMessageDialog(null, Arg.rc + " has broken!");return;private void readData()tryFile file = new File(Arg.rc);Scanner cin = new Scanner(file);data0.name = cin.next();data0.time = cin.nextInt();data0.step = cin.nextInt();data1.name = cin.next();data1.time = cin.nextInt();data1.step = cin.nextInt();data2.name = cin.next();data2.time = cin.nextInt();data2.step = cin.nextInt();catch (Exception e)JOptionPane.showMessageDialog(null, Arg.rc + " cant read!");public void set(int t, int s)int type = app.getType();creatData();readData();if (t > datatype.time | (t = datatype.time && s >= datatype.step)return;datatype.name = JOptionPane.showInputDialog(null,"你打破了記錄!n請輸入你的名字。");datatype.time = t;datatype.step = s;tryPrintStream f = new PrintStream(Arg.rc);f.printf("%s %d %dn", data0.name, data0.time, data0.step);f.printf("%s %d %dn", data1.name, data1.time, data1.step);f.printf("%s %d %dn", data2.name, 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.name, data0.time, data0.step);String n = "".format("%8s%15s%8d%8dn", "普通", data1.name, data1.time, data1.step);String e = "".format("%8s%15s%8d%8dn", "簡單", data2.name, data2.time, data2.step);JOptionPane.showMessageDialog(null, title+h+n+e);catch (Exception e)JOptionPane.showMessageDialog(null, Arg.rc + " has broken!");6) 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);7) MenuFrame.javaimport 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);8) 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;9) 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();initMenuBackground();start = false;JOptionPane.showMessageDialog(null,"時間:" + gOver.getTime() + "sn" +"步數:" + gOver.getStep();Grades g = new Grades(this);g.set(int)gOver.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;public void menuNewClick()Split sp = Split.get();BufferedImage image;if (!sp.set(getFilename() | (image = sp.divid(getType() = null)JOptionPane.showMessageDialog(null, "圖片不存在!n請重新選擇"); return;startGame();this.setSize(fWidth, fHeight);this.setVisible(true);int len = Split.levelgetType();int row = image.length;int cal = image0.length;gOver = new GameOver(this);JButton button = new JButtonrowcal;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()Grades g = new Grades(this);g.show();public void menuShowClick()new ShowImage(getFilename();public void menuExitClick()System.exit(0);public void menuHelpClick()String help0 = "通過移動每一個小圖片,最終拼為原本的完整圖片.nn"String help1 = "您可以單擊空白區(qū)周圍的小圖片,可以使它移動到空白區(qū)。"JOptionPane.showMessageDialog(null, help0 + help1);public void m

注意事項

本文(畢業(yè)論文基于Java的拼圖游戲設計)為本站會員(仙***)主動上傳,裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對上載內容本身不做任何修改或編輯。 若此文所含內容侵犯了您的版權或隱私,請立即通知裝配圖網(點擊聯系客服),我們立即給予刪除!

溫馨提示:如果因為網速或其他原因下載失敗請重新下載,重復下載不扣分。




關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網版權所有   聯系電話:18123376007

備案號:ICP2024067431-1 川公網安備51140202000466號


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