魔板游戲Java課程設計_第1頁
魔板游戲Java課程設計_第2頁
魔板游戲Java課程設計_第3頁
魔板游戲Java課程設計_第4頁
魔板游戲Java課程設計_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、魔板游戲Java 課程設計 設計(論文)題目: 魔板游戲 所 在 院: 信息工程學院 專 業(yè) 班 級: 學 生 姓 名 學 號: 指 導 教 師: 年 月 日Java 程序設計課程設計報告(2012)課程設計(論文)任務書課程設計(論文)任務書設計題目:設計題目:魔板游戲?qū)I(yè)班級:專業(yè)班級: 學號:學號: 姓名:姓名: 主要內(nèi)容主要內(nèi)容設計一個 java 語言的魔板游戲,主要包含:魔板游戲主窗口模塊、游戲魔板模塊、魔板中“方塊”定位模塊。此游戲運用的是非常直觀易操作的圖形用戶界面,通過對界面上的菜單、子菜單、以及單選按鈕進行操作即可使本游戲順利進行。編輯平臺選用Eclipse 。其中用到了圖形

2、用戶界面、異常處理、類的構成以及繼承等 java知識點?;疽螅夯疽螅耗軌蚴顾O計的游戲正常的運行,要保證無差錯現(xiàn)象。而且使用戶更加方便去操作,要有一定的功能來體現(xiàn) java 語言的精簡性、穩(wěn)固性、兼容性強等特性。完成期限:完成期限: 2013 年 1 月 6 日 指導教師簽名:指導教師簽名: 評審小組負責人簽名:評審小組負責人簽名: Java 程序設計課程設計報告(2012)目目 錄錄1 概 述.11.1 課程設計目的 .11.2 課程設計內(nèi)容 .12 系統(tǒng)需求分析.12.1 系統(tǒng)目標 .12.2 主體功能 .22.3 開發(fā)環(huán)境 .23 系統(tǒng)概要設計.23.1 系統(tǒng)的功能模塊劃分 .2

3、3.2 系統(tǒng)流程圖 .54 系統(tǒng)詳細設計 .65 測試.75.1 測試方案 .75.2 測試結果 .76 小結.8附錄 .9附錄 1 模塊清單.9附錄 1.1 PUZZLEFRAME 模塊 .9附錄 1.2 PUZZLEPAD 模塊 .12附錄 1.3 SQUAREPOINT 模塊 .20附錄 2 ECLIPSE 運行源程序清單.22參考文獻 .32Java 程序設計課程設計報告(2012)1模板游戲的設計模板游戲的設計1 概 述 1.1 課程設計目的利用所學高級語言的語法特性,結合數(shù)據(jù)結構算法、java 語言使用規(guī)則、java 的基本應用等知識完成綜合題目的設計和代碼實現(xiàn),并培養(yǎng)鍛煉分析程序

4、、撰寫報告等能力。1.2 課程設計內(nèi)容(1)設計一款經(jīng)典的智力游戲,魔板游戲。魔板由 3*3 或 4*4個格子組成。對于 3*3 魔板,在前 8 個格子里隨即放置 8 個編號 1-8 的方塊,最后一個格子是未放置方塊的空格子;對于 4*4 的魔板,在前 15 格子里隨即放置 15 編號 1-15 的方塊,最后一個格子是未放置方塊的空格子。(2)用鼠標單擊任何與空格子水平或垂直相鄰的方塊可以把該方塊移入空格子,而當前方塊移動之前所在的格子成為空格子。通過不斷地移動方塊可以將方塊一行一行地按數(shù)字順序排好,例如,對于 3*3 格子組成的魔板,要求方塊最后帶有順序排列,最后一格為空格。(3)魔板游戲也

5、可以使用圖像來代替數(shù)字。例如,對于 4*4的魔板,將一幅圖像分成 4*4 幅小圖像,除去最后一幅小圖像(圖像的右下角),將其余各幅小圖像打亂順序后放在魔板方塊上,最終目標是通過移動方塊恢復原始圖像(不包括圖像的右下角)。2 系統(tǒng)需求分析2.1 系統(tǒng)目標設計 GUI 界面的魔板游戲程序。Java 程序設計課程設計報告(2012)22.2 主體功能這個程序定義了一些組件,工具欄按鈕,文本區(qū)和菜單。魔板游戲程序設計通過PuzzleFrame.java、PuzzlePad.java、SquarePoint.java 3 個類來實現(xiàn)魔板游戲的整體功能。2.3 開發(fā)環(huán)境操作系統(tǒng):Microsoft Win

6、dows 7開發(fā)工具:jdk 、Eclipse3 系統(tǒng)概要設計3.1 系統(tǒng)的功能模塊劃分在設計魔板游戲時,需要編寫 3 個 java 源文件:PuzzleFrame.java、PuzzlePad.java、SquarePoint.java。魔板游戲除了需要編寫的上述 3 個 Java 源文件所給出的類外,還需要 Java 系統(tǒng)提供的一些重要的類,如 JMenuItem、JButton 和JRadioButton 等類。3.1.13.1.1 PuzzleFrame.java 類模塊PuzzleFrame 類負責創(chuàng)建魔板游戲的主窗口,該類含有 main 方法,程序從該類開始。PuzzleFrame

7、 類的成員變量中有 4 種重要類型的對象:PuzzlePad、JmenuItem、JRadioButton 和JButton。PuzzleFrame 類的主要成員的作用將在后面的詳細設計中闡述,PuzzleFrame 類主要成員變量(屬性)和主要方法如表 3-1、3-2 所示。成員變量描述變量類型名稱魔板開始游戲的按鈕選擇玩法PuzzlePadJbuttonJradioButtonPuzzlePad開始數(shù)字玩法,圖Java 程序設計課程設計報告(2012)3像玩法表表 3-13-1 PuzzleFrame.javava 主要成員變量(屬性)主要成員變量(屬性)名稱功能備注PuzzleFrame

8、actionPerformedmain創(chuàng)建程序主窗口處理 ActionEvent 事件程序開始運行的方法構造方法接口方法表表 3-23-2 PuzzleFrame.java 主要方法主要方法3.1.23.1.2 PuzzlePad.java 類模塊PuzzlePad 類創(chuàng)建的對象是 PuzzleFrame 類最重要的成員之一,代表“魔板” 。該類的成員變量中有 5 種重要類型的對象:Point、Block 和 Image。PuzzlePad 類主要成員變量(屬性)和主要方法如表 3-3、3-4 所示。描述變量類型名稱魔板中的行數(shù)和列數(shù)魔板中方塊的寬和高魔板中二維點數(shù)組魔板中二維方塊數(shù)組模板可能

9、用到的圖像intintSquarePointJButtonImagerows,columswidth,heightpointblockimage表表 3-33-3 PuzzlePad.java a 主要成員變量(屬性)主要成員變量(屬性)Java 程序設計課程設計報告(2012)4名稱功能備注PuzzlePad隨機排列數(shù)字隨機排列圖像paintComponentactionPerformed創(chuàng)建魔板對象隨機排列魔板中方塊上的數(shù)字隨機排列魔板中方塊上的圖像繪制圖像處理 ActionEvent 事件構造方法接口方法表表 3-43-4 PuzzlePad.java 主要方法主要方法3.1.33.1.

10、3 SquarePoint.java 類模塊SquarePoint 類負責創(chuàng)建確定位置的對象,使用 Point 對象可以確定 Block 對象在 PuzzlePad 對象中的位置,即確定“方塊”在“魔板”中的位置。SquarePoint.java 類主要成員變量(屬性)和主要方法如表 3-5、3-6 所示。描述變量類型名稱判斷點上是否有方塊點上的方塊對象booleanJButton有方塊block表表 3-53-5 SquarePoint.java 主要成員變量(屬性)主要成員變量(屬性)名稱功能備注SquarePointget 有方塊set 有方塊setBlockgetBlock創(chuàng)建“點”對

11、象判斷點上是否有方塊設置點上是否有方塊在點上放置方塊獲取點上的方塊構造方法表表 3-63-6 SquarePoint.java 主要方法主要方法Java 程序設計課程設計報告(2012)53.2 系統(tǒng)流程圖根據(jù)對模板游戲的功能分析,設計得到魔板游戲總流程,如圖 2-2所示:Java 程序設計課程設計報告(2012)6開始魔板游戲開始界面Switch改變游戲玩法選擇數(shù)字玩法數(shù)字玩法圖片玩法確定玩法退出結束YESNO圖圖 2-22-2 系統(tǒng)流程圖系統(tǒng)流程圖Java 程序設計課程設計報告(2012)74 系統(tǒng)詳細設計4.1 運行效果1、將三個 java 文件合并為一個文件 PuzzleFrame.c

12、lass,在eclipse 編譯環(huán)境下將此源代碼輸入。運行結果如下:圖 4-1 數(shù)字玩法主界面本程序?qū)崿F(xiàn)的游戲分為初級和高級模式,可以在單機選擇級別之后進行選擇級別模式。初級的話共分為 9 格魔板,一個為空,8個魔板上下左右自由移動,直至排列完成;高級的話分為 16 格魔板,一個為空,15 個魔板上下左右自由移動,直至排列完成。該游戲可分為數(shù)字玩法和圖像玩法,在單擊圖像玩法或者數(shù)字玩法之后可以進行相應的玩法選擇,選擇之后單擊開始。如果玩家想重新開Java 程序設計課程設計報告(2012)8始,只需要再次單擊開始按鈕即可。5 測試5.1 測試方案游戲難度級別設置為數(shù)字玩法,進行測試。在 Ecli

13、pse(實驗)下測試 PuzzleFrame 結果如下:5.2 測試結果圖 5-1 測試結果Java 程序設計課程設計報告(2012)96 小結通過本次實訓,不但使我對 java 語言更加熟悉和認識,而且還讓我對這門語言產(chǎn)生了更大的興趣。這是一次實踐性的學習,從中讓我認識到了自己平時不能意識到的弱點和缺陷,尤其是在 java設計的結構和算法上面。這不但是一次課程設計而且還是一次帶著學習的實驗。希望自己能夠今后能夠?qū)嶒灨信d趣,而且讓自己的知識更加完善,更加全備,以應對一年后無論是工作還是實習中的需要。Java 程序設計課程設計報告(2012)10附附 錄錄附錄附錄 1 1 模塊清單模塊清單附錄

14、 1.1PuzzleFrame 模塊import java.awt.*;import java.awt.event.*;import javax.swing.*;public class PuzzleFrame extends JFrame implements ActionListener PuzzlePad puzzlePad; JButton 開始; JMenuBar bar; JMenu fileMenu; JMenuItem 初級,高級; JRadioButton 數(shù)字玩法,圖像玩法; ButtonGroup group=null; Container con=null; publi

15、c PuzzleFrame() bar=new JMenuBar(); fileMenu=new JMenu(魔板游戲); 初級=new JMenuItem(初級); 高級=new JMenuItem(高級); fileMenu.add(初級); fileMenu.add(高級);Java 程序設計課程設計報告(2012)11 bar.add(fileMenu); setJMenuBar(bar); 初級.addActionListener(this); 高級.addActionListener(this); 開始=new JButton(開始玩); 開始.addActionListener(

16、this); group=new ButtonGroup(); 數(shù)字玩法=new JRadioButton(數(shù)字玩法,true); 圖像玩法=new JRadioButton(圖像玩法,false); group.add(數(shù)字玩法); group.add(圖像玩法); puzzlePad=new PuzzlePad(3,3,50,50); con=getContentPane(); con.add(puzzlePad,BorderLayout.CENTER); JPanel pNorth=new JPanel(); pNorth.add(數(shù)字玩法); pNorth.add(圖像玩法); pNo

17、rth.add(開始); con.add(pNorth,BorderLayout.NORTH); con.validate(); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); setVisible(true); setBounds(100,50,440,360); validate();Java 程序設計課程設計報告(2012)12 public void actionPerformed(ActionEvent e) if(e.getSource

18、()=開始) if(數(shù)字玩法.isSelected() puzzlePad.隨機排列數(shù)字(); else if(圖像玩法.isSelected() puzzlePad.隨機排列圖像(); else if(e.getSource()=初級) con.remove(puzzlePad); puzzlePad=new PuzzlePad(3,3,50,50); con.add(puzzlePad,BorderLayout.CENTER); con.validate(); this.validate(); else if(e.getSource()=高級) con.remove(puzzlePad);

19、 puzzlePad=new PuzzlePad(4,4,50,50); con.add(puzzlePad,BorderLayout.CENTER); con.validate(); this.validate();Java 程序設計課程設計報告(2012)13 public static void main(String args) new PuzzleFrame(); 附錄 1.2 PuzzlePad 模塊import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;i

20、mport java.util.Vector;import java.awt.image.*;public class PuzzlePad extends JPanel implements ActionListener int rows ,colums; int width,height; SquarePoint point; JButton block; Vector vector; int leftX=50,leftY=50; Image image=null; Toolkit tool=null; MediaTracker mt; int 圖像的寬,圖像的高; Image blockI

21、mage; boolean 畫圖像=true; Java 程序設計課程設計報告(2012)14 public PuzzlePad(int r,int c,int w,int h) setLayout(null); vector=new Vector(); rows=r; colums=c; width=w; height=h; tool=getToolkit(); try image=tool.createImage(氣球.jpg); mt.addImage(image,1); mt.waitForAll(); catch(Exception e) block=new JButtonrowsc

22、olums; point=new SquarePointrowscolums; for(int i=0;irows;i+) for(int j=0;jcolums;j+) if(i=rows-1)&(j=colums-1) else Java 程序設計課程設計報告(2012)15 blockij=new JButton(); blockij.setSize(width,height); blockij.addActionListener(this); vector.add(blockij); for(int i=0;irows;i+) for(int j=0;jcolums;j+) p

23、ointij=new SquarePoint(50+j*width,50+i*height); if(i=rows-1)&(j=colums-1) else pointij.setBlock(blockij,this); public void actionPerformed(ActionEvent e) JButton button=(JButton)e.getSource(); int x=button.getBounds().x; int y=button.getBounds().y; int m=0,n=0;Java 程序設計課程設計報告(2012)16 for(int i=0

24、;irows;i+) for(int j=0;jcolums;j+) if(pointij.getX()=x&pointij.getY()=y) m=i; n=j; int 上=Math.max(0,m-1); int 下=Math.min(rows-1,m+1); int 左=Math.max(0,n-1); int 右=Math.min(colums-1,n+1); if(point上n.get 有方塊()=false) point上n.setBlock(button,this); pointmn.set 有方塊(false); else if(point下n.get 有方塊()=

25、false) point下n.setBlock(button,this); pointmn.set 有方塊(false); else if(pointm左.get 有方塊()=false) Java 程序設計課程設計報告(2012)17 pointm左.setBlock(button,this); pointmn.set 有方塊(false); else if(pointm右.get 有方塊()=false) pointm右.setBlock(button,this); pointmn.set 有方塊(false); public void 隨機排列數(shù)字() vector.removeAllE

26、lements(); for(int i=0;irows;i+) for(int j=0;j0) Java 程序設計課程設計報告(2012)18 int n=(int)(Math.random()*vector.size(); JButton b=(JButton)vector.elementAt(n); b.setText(+i); b.setIcon(null); b.setBorder(BorderFactory.createLineBorder(Color.blue,1); vector.remove(n); i+; 畫圖像=false; repaint(); public void

27、隨機排列圖像() try 圖像的寬=image.getWidth(this); 圖像的高=image.getHeight(this); int w=圖像的寬/colums; int h=圖像的高/rows; blockImage=new Imagerows*colums; int k=0; PixelGrabber pg=null; ImageProducer ip=null; for(int i=0;irows;i+) for(int j=0;jcolums;j+) int pixels= new intw*h; Java 程序設計課程設計報告(2012)19 pg=new PixelGra

28、bber(image,j*w,i*h,w,h,pixels,0,w); pg.grabPixels(); ip=new MemoryImageSource(w,h,pixels,0,w); blockImagek=tool.createImage(ip); k+; vector.removeAllElements(); for(int i=0;irows;i+) for(int j=0;j0) int n=(int)(Math.random()*vector.size(); JButton b=(JButton)vector.elementAt(n); b.setIcon(new ImageI

29、con(blockImagenum); b.setBorder(null); b.setText();Java 程序設計課程設計報告(2012)20 vector.remove(n); num+; 畫圖像=true; repaint(); catch(Exception ee) public void paintComponent(Graphics g) super.paintComponent(g); g.setColor(Color.black); g.fillRect(leftX,leftY,colums*width,rows*height); if(畫圖像=true) g.drawIm

30、age(image,colums*width+80,height,colums*width,rows*height,this); for(int i=0;irows;i+) g.setColor(Color.white); g.drawLine(colums*width+80,height+i*height, colums*width+80+colums*width,height+i*height); for(int j=0;jcolums;j+)Java 程序設計課程設計報告(2012)21 g.drawLine(colums*width+80+j*width,height, colums*

31、width+80+j*width,height+rows*height); g.setColor(Color.black); g.fillRect(colums*width+80+(colums-1)*width, height+(rows-1)*height, width, height); 附錄 1.3 SquarePoint 類模塊import java.awt.*;import javax.swing.JButton;public class SquarePoint int x,y; boolean 有方塊; JButton block=null; Container con=null

32、; public SquarePoint(int x,int y) this.x=x; this.y=y; public boolean get 有方塊() Java 程序設計課程設計報告(2012)22 return 有方塊; public void set 有方塊(boolean boo) 有方塊=boo; public int getX() return x; public int getY() return y; public void setBlock(JButton block,Container con) this.con=con; this.block=block; con.a

33、dd(block); block.setLocation(x,y); 有方塊=true; con.validate(); public JButton getBlock() return block; Java 程序設計課程設計報告(2012)23附錄附錄 2 2 EclipseEclipse 運行源程序清單運行源程序清單import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.Vector;import java.awt.image.*;import javax.swing.JButton;

34、public class PuzzleFrame extends JFrame implements ActionListener PuzzlePad puzzlePad; JButton 開始; JMenuBar bar; JMenu fileMenu; JMenuItem 初級,高級; JRadioButton 數(shù)字玩法,圖像玩法; ButtonGroup group=null; Container con=null; public PuzzleFrame() bar=new JMenuBar(); fileMenu=new JMenu(魔板游戲); 初級=new JMenuItem(初級

35、); 高級=new JMenuItem(高級); fileMenu.add(初級); fileMenu.add(高級); bar.add(fileMenu); setJMenuBar(bar); 初級.addActionListener(this); 高級.addActionListener(this); 開始=new JButton(開始玩); 開始.addActionListener(this); group=new ButtonGroup(); 數(shù)字玩法=new JRadioButton(數(shù)字玩法,true); 圖像玩法=new JRadioButton(圖像玩法,false); gro

36、up.add(數(shù)字玩法); group.add(圖像玩法);Java 程序設計課程設計報告(2012)24 puzzlePad=new PuzzlePad(3,3,50,50); con=getContentPane(); con.add(puzzlePad,BorderLayout.CENTER); JPanel pNorth=new JPanel(); pNorth.add(數(shù)字玩法); pNorth.add(圖像玩法); pNorth.add(開始); con.add(pNorth,BorderLayout.NORTH); con.validate(); addWindowListene

37、r(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); setVisible(true); setBounds(100,50,440,360); validate(); public void actionPerformed(ActionEvent e) if(e.getSource()=開始) if(數(shù)字玩法.isSelected() puzzlePad.隨機排列數(shù)字(); else if(圖像玩法.isSelected() puzzlePad.隨機排列圖像(); else if(e.

38、getSource()=初級) con.remove(puzzlePad); puzzlePad=new PuzzlePad(3,3,50,50); con.add(puzzlePad,BorderLayout.CENTER); con.validate(); this.validate(); Java 程序設計課程設計報告(2012)25 else if(e.getSource()=高級) con.remove(puzzlePad); puzzlePad=new PuzzlePad(4,4,50,50); con.add(puzzlePad,BorderLayout.CENTER); con

39、.validate(); this.validate(); public static void main(String args) new PuzzleFrame(); class PuzzlePad extends JPanel implements ActionListener int rows ,colums; int width,height; SquarePoint point; JButton block; Vector vector; int leftX=50,leftY=50; Image image=null; Toolkit tool=null; MediaTracker

40、 mt; int 圖像的寬,圖像的高; Image blockImage; boolean 畫圖像=true; public PuzzlePad(int r,int c,int w,int h) setLayout(null); vector=new Vector(); rows=r; colums=c; width=w;Java 程序設計課程設計報告(2012)26 height=h; tool=getToolkit(); try image=tool.createImage(氣球.jpg); mt.addImage(image,1); mt.waitForAll(); catch(Exce

41、ption e) block=new JButtonrowscolums; point=new SquarePointrowscolums; for(int i=0;irows;i+) for(int j=0;jcolums;j+) if(i=rows-1)&(j=colums-1) else blockij=new JButton(); blockij.setSize(width,height); blockij.addActionListener(this); vector.add(blockij); for(int i=0;irows;i+) for(int j=0;jcolum

42、s;j+) pointij=new SquarePoint(50+j*width,50+i*height); if(i=rows-1)&(j=colums-1) else pointij.setBlock(blockij,this); Java 程序設計課程設計報告(2012)27 public void actionPerformed(ActionEvent e) JButton button=(JButton)e.getSource(); int x=button.getBounds().x; int y=button.getBounds().y; int m=0,n=0; for

43、(int i=0;irows;i+) for(int j=0;jcolums;j+) if(pointij.getX()=x&pointij.getY()=y) m=i; n=j; int 上=Math.max(0,m-1); int 下=Math.min(rows-1,m+1); int 左=Math.max(0,n-1); int 右=Math.min(colums-1,n+1); if(point上n.get有方塊()=false) point上n.setBlock(button,this); pointmn.set有方塊(false); else if(point下n.get有

44、方塊()=false) point下n.setBlock(button,this); pointmn.set有方塊(false); else if(pointm左.get有方塊()=false) Java 程序設計課程設計報告(2012)28 pointm左.setBlock(button,this); pointmn.set有方塊(false); else if(pointm右.get有方塊()=false) pointm右.setBlock(button,this); pointmn.set有方塊(false); public void 隨機排列數(shù)字() vector.removeAllE

45、lements(); for(int i=0;irows;i+) for(int j=0;j0) int n=(int)(Math.random()*vector.size(); JButton b=(JButton)vector.elementAt(n); b.setText(+i); b.setIcon(null); b.setBorder(BorderFactory.createLineBorder(Color.blue,1); vector.remove(n); i+; 畫圖像=false; repaint(); public void 隨機排列圖像()Java 程序設計課程設計報告(

46、2012)29 try 圖像的寬=image.getWidth(this); 圖像的高=image.getHeight(this); int w=圖像的寬/colums; int h=圖像的高/rows; blockImage=new Imagerows*colums; int k=0; PixelGrabber pg=null; ImageProducer ip=null; for(int i=0;irows;i+) for(int j=0;jcolums;j+) int pixels= new intw*h; pg=new PixelGrabber(image,j*w,i*h,w,h,pixels,0,w); pg.grabPixels(); ip=new MemoryImageSource(w,h,pixels,0,w); blockIma

溫馨提示

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

評論

0/150

提交評論