基于java的萬年歷設(shè)計(jì)與實(shí)現(xiàn)及基于java的魔板游戲的設(shè)計(jì)與開發(fā)_第1頁
基于java的萬年歷設(shè)計(jì)與實(shí)現(xiàn)及基于java的魔板游戲的設(shè)計(jì)與開發(fā)_第2頁
基于java的萬年歷設(shè)計(jì)與實(shí)現(xiàn)及基于java的魔板游戲的設(shè)計(jì)與開發(fā)_第3頁
基于java的萬年歷設(shè)計(jì)與實(shí)現(xiàn)及基于java的魔板游戲的設(shè)計(jì)與開發(fā)_第4頁
基于java的萬年歷設(shè)計(jì)與實(shí)現(xiàn)及基于java的魔板游戲的設(shè)計(jì)與開發(fā)_第5頁
已閱讀5頁,還剩80頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

20**級程序設(shè)計(jì)綜合實(shí)驗(yàn)報(bào)告-10-Java課程設(shè)計(jì)報(bào)告課程設(shè)計(jì)題目:萬年歷指導(dǎo)老師:**********學(xué)生姓名:*********專業(yè):**********學(xué)號:*******Java課程設(shè)計(jì)-萬年歷1、課程設(shè)計(jì)目的:這學(xué)期我們學(xué)習(xí)了Java語言,Java語言是面向?qū)ο蟮拈_發(fā)方法是當(dāng)今世界最流行的開發(fā)方法,是當(dāng)今流行的網(wǎng)絡(luò)編程語言。它具有面向?qū)ο?、跨平臺、分布應(yīng)用等特點(diǎn)。它不僅具有更貼近自然的語義,而且有利于軟件的維護(hù)和繼承。很多程序開發(fā)人員得第一選擇。為了進(jìn)一步鞏固課堂上所學(xué)到的知識,深刻把握J(rèn)ava語言的重要概念及其面向?qū)ο蟮奶匦裕憻拰W(xué)生熟練的應(yīng)用面向?qū)ο蟮乃枷牒驮O(shè)計(jì)方法解決實(shí)際問題的能力,開設(shè)了Java程序設(shè)計(jì)課程設(shè)計(jì)。讓學(xué)生自己動(dòng)手動(dòng)腦,將書本上得知識運(yùn)用到實(shí)踐當(dāng)中去,使知識能更好得融會(huì)貫通。為了達(dá)到這個(gè)目的,我們需要自己動(dòng)手做一個(gè)Java的課程設(shè)計(jì),在這個(gè)課程設(shè)計(jì)里我們需要根據(jù)我們手中現(xiàn)有得軟件與知識基礎(chǔ),獨(dú)立得將它完成,只有這樣,我們才能把理論變成實(shí)踐,將知識真正得做到學(xué)以致用。這次課程設(shè)計(jì)我主要研究了利用已學(xué)的Java知識編輯一個(gè)電子萬年歷。通過此次課程設(shè)計(jì),來鞏固所學(xué)Java語言基本知識,增進(jìn)Java語言編輯基本功,掌握J(rèn)DK、JCreator等開發(fā)工具的運(yùn)用,拓寬常用類庫的應(yīng)用。并通過自己動(dòng)手,自主得學(xué)習(xí),對Java這門課程有更深得了解與認(rèn)識。2、需求分析:2.1、本程序要求:1、使用圖形用戶界面;2、本程序能夠?qū)崿F(xiàn)日期與星期查詢,同時(shí)顯示此時(shí)的時(shí)間。2.2、功能設(shè)計(jì): 本程序要構(gòu)建萬年歷程序,其功能如下: (1)通過窗口形式運(yùn)行,實(shí)現(xiàn)界面功能; (2)以月歷的形式來顯示日期與星期; (3)為用戶提供年份與月份的下拉形式菜選擇年份與月份; (4)同時(shí)顯示查看時(shí)的時(shí)刻。3、課程設(shè)計(jì)的基本算法publicclasswnlextendsJFrameimplementsActionListener,ItemListener{Datedate=newDate();privateGregorianCalendargregorianCalendar=newGregorianCalendar();//定義中英文字符數(shù)組存儲(chǔ)星期信息,用于轉(zhuǎn)換顯示privateString[]stringWeekEn=newString[]{"SUN","MON","TUE","WED","THU","FRI","SAT"};privateString[]stringWeekCn=newString[]{"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};//定義存儲(chǔ)月份的信息數(shù)組,用于轉(zhuǎn)換顯示方式privateString[]stringMonthEn=newString[]{"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec"};privateString[]stringMonthCn={"1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"};privateString[]sysNowTime=newString[6];//sysNowTime用于存儲(chǔ)系統(tǒng)時(shí)間的變量privateString[]sysRunTime=newString[6];privateJLabel[]labelWeek=newJLabel[7];privateJLabel[]labelDay=newJLabel[42];privateJLabellabelTime=newJLabel();privateJPanelpanel1=newJPanel();privateJPanelpanel2=newJPanel();privateJPanelpanel3=newJPanel();privateJComboBoxcombo1=newJComboBox();privateJComboBoxcombo2=newJComboBox();privateJButtonbuttonToday=newJButton();privateBorderborder=BorderFactory.createRaisedBevelBorder();privateBorderborder1=BorderFactory.createLineBorder(Color.cyan,3);publicwnl(Stringtitle){super(title);for(inty=1900;y<2200;y++){combo1.addItem(""+newInteger(y).toString()+"年");}for(intm=0;m<12;m++){combo2.addItem(""+stringMonthCn[m]);}buttonToday.setText("現(xiàn)在時(shí)刻");setLayout(newFlowLayout());add(panel1);add(panel2);add(panel3);panel1.setLayout(newGridLayout(2,3,10,2));panel1.add(combo1);combo1.addItemListener(this);panel1.add(combo2);combo2.addItemListener(this);panel1.add(buttonToday);//buttonToday.addActionListener(this);labelTime.setFont(newFont("宋體",Font.PLAIN,16));labelTime.setForeground(Color.red);panel1.add(labelTime);Timertime=newTimer(1000,newTimerListener());time.addActionListener(newTimerListener());//time.setRepeats(true);time.start();//labelTime.addAncestorListener(newTimerListener());panel2.setLayout(newGridLayout(7,7,10,10));panel2.setBackground(Color.white);for(inti=0;i<7;i++){labelWeek[i]=newJLabel();labelWeek[i].setHorizontalAlignment(0);if(i==0||i==6){labelWeek[i].setBackground(Color.blue);labelWeek[i].setForeground(Color.RED);labelWeek[i].setFont(newFont("黑體",Font.BOLD,14));}else{labelWeek[i].setForeground(Color.BLACK);labelWeek[i].setFont(newFont("新宋體",Font.PLAIN,14));}labelWeek[i].setText(stringWeekCn[i]);panel2.add(labelWeek[i]);}for(inti=0;i<42;i++){labelDay[i]=newJLabel();labelDay[i].setHorizontalAlignment(0);labelDay[i].setText("");panel2.add(labelDay[i]);}addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);}});setSize(300,300);setBounds(250,200,400,360);setVisible(true);setResizable(false);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);getSysDate();setNowDate();}publicvoidactionPerformed(ActionEventae){if(ae.getSource()==buttonToday){setNowDate();}}publicvoiditemStateChanged(ItemEventaa){setChangeDate();}publicintturnWeek(Stringweek){inti;for(i=0;i<7;i++)if(week.equalsIgnoreCase(stringWeekEn[i]))break;returni;}publicintturnMonth(Stringmonth){/***intturnMonth(Stringmonth)*@month系統(tǒng)日期中的月,諸如Jan\Feb*@returnint*返回一個(gè)整數(shù)值,用于尋找stringMonthCn[]數(shù)組中對應(yīng)的中文月份*/inti;for(i=0;i<12;i++)if(month.equalsIgnoreCase(stringMonthEn[i]))break;returni;}/***setNowDate()*設(shè)置當(dāng)前系統(tǒng)日期*/publicvoidsetNowDate(){setSysDate(getNowYear(),getNowMonth());getSysRunDate();setDateNull();combo1.setSelectedIndex(getShowYear()-1900);combo2.setSelectedIndex(getShowMonth());setDays(getMonthDays(getNowYear(),getNowMonth()),getInitWeek(sysRunTime[0]),getNowDay());labelTime.setText(sysNowTime[3]);labelTime.setHorizontalAlignment(0);}/**IntegergetShowYear()*獲取組合框中應(yīng)該顯示的年份*/publicvoidsetSysDate(intyear,intmonth){gregorianCalendar.set(year,month,1);}publicvoidsetDateNull(){for(inti=0;i<42;i++){labelDay[i].setText("");}}publicvoidsetChangeDate(){setSysDate(getComboYear(),getComboMonth());getSysRunDate();setDateNull();setDays(getMonthDays(getComboYear()+1,getComboMonth()+1),getInitWeek(sysRunTime[0]),-1);/***返回所選年月的天數(shù),因?yàn)閿?shù)組中的數(shù)值從0開始,所以各月必須加1.*而2月,經(jīng)過是否為閏年判斷,選擇返回28或29天.*其余月份為大月,返回31天.**/}publicintgetMonthDays(intyear,intmonth){switch(month){case4:case6:case9:case11:return30;//小月返回30天case2:if(gregorianCalendar.isLeapYear(year)){//isLeapYear(year)確定當(dāng)前紀(jì)元中的指定年份是否為閏年。return29;}else{return28;}//閏年的二月返回29天,平年返回28天default:return31;//大月返回31天}}/***intgetComboYear()*獲取組合框中的年份*/publicvoidgetSysDate(){date=gregorianCalendar.getTime();sysNowTime=(date.toString()).split("");}publicvoidgetSysRunDate(){date=gregorianCalendar.getTime();sysRunTime=(date.toString()).split("");}publicintgetComboYear(){returncombo1.getSelectedIndex()+1900;}/***intgetComboMonth()*獲取月組合框中的整數(shù)值,*/publicintgetComboMonth(){returncombo2.getSelectedIndex();}publicintgetInitWeek(StringinitWeek){/***getWeekNow(StringinitWeek)*@paranowWeek系統(tǒng)日期中的星期*返回當(dāng)月中的1號是從星期幾開始*/intnowWeek=0;for(inti=0;i<7;i++){if(initWeek.equalsIgnoreCase(stringWeekEn[i])){nowWeek=i;break;}}returnnowWeek;}publicintgetNowYear(){returnInteger.parseInt(sysNowTime[5]);}publicintgetNowMonth(){intnowMonth=0;for(inti=0;i<12;i++){if(sysNowTime[1].equalsIgnoreCase(stringMonthEn[i]));nowMonth=i;break;}returnnowMonth;}publicintgetNowDay(){returnInteger.parseInt(sysNowTime[2]);}publicIntegergetShowYear(){returnInteger.parseInt(sysNowTime[5]);}publicIntegergetShowMonth(){/***IntegergetShowMonth()*獲取在組給框中顯示的中文格式月份:如七月\八月等*/returnturnMonth(sysNowTime[1]);}publicvoidsetDays(intmonthDays,intinitWeek,intday){/***voidsetDays(intmonthDays,intinitWeek,intday)*@paramonthDays本月天數(shù)*@parainitWeek初始星期*@paraday今天日*設(shè)置月歷*/setDateNull();for(inti=initWeek;i<initWeek+monthDays+1;i++){if((i-initWeek+1)==day){labelDay[i].setBorder(border1);labelDay[i].setForeground(Color.BLUE);labelDay[i].setFont(newFont("黑體",Font.BOLD,20));}elseif((i%7==0)||(i%7==6))labelDay[i].setForeground(Color.RED);else{labelDay[i].setForeground(Color.BLACK);}labelDay[i].setText(String.valueOf(i-initWeek+1));}for(inti=initWeek+monthDays;i<42;i++)labelDay[i].setText("");}classTimerListenerimplementsActionListener{//AdapterDemovar=newAdapterDemo("萬年歷");publicvoidactionPerformed(ActionEvente){GregorianCalendarg=newGregorianCalendar();Stringclock=newString((g.getTime().toString().split(""))[3]);labelTime.setText(clock);}}4、運(yùn)行結(jié)果:在安裝有JRE平臺的環(huán)境下,雙擊生成的萬年歷.jar運(yùn)行:說明:簡潔而明晰的運(yùn)行結(jié)果,足以證明實(shí)驗(yàn)的正確性5、體會(huì)心得:經(jīng)過短暫的一周的Java程序設(shè)計(jì),使我又學(xué)到了很多的知識,尤其是運(yùn)用Java知識去解決實(shí)際問題的能力又得到了很大的提高。盡管所設(shè)計(jì)的程序比較簡單,但是程序中的每個(gè)功能的實(shí)現(xiàn)都經(jīng)過了自己的一定認(rèn)真的思考。由于把所學(xué)的知識做到很靈活的運(yùn)用在實(shí)際中,對于現(xiàn)在的我還有一定的難度,故而,在設(shè)計(jì)的每個(gè)的環(huán)節(jié)中,都會(huì)多多少少的遇到一些問題,這就促使我去查閱各種資料,或者請教老師和同學(xué),極大的提高我的專業(yè)素養(yǎng),同時(shí)對在有些書上的理論知識在實(shí)際的運(yùn)用,以及應(yīng)該注意的問題有了比較深刻的認(rèn)識。當(dāng)然,仍然有些理論問題不是很好的去運(yùn)用,或者是了解的不深刻。這就使的在實(shí)踐中的所設(shè)計(jì)的程序有些功能不是自己所想的那樣的完美。不過,既然發(fā)現(xiàn)了問題的所在,我就不會(huì)放棄的,直至問題得到解決。這些也同時(shí)反映出了平時(shí)運(yùn)用知識去實(shí)踐這方面做的太少。太缺乏經(jīng)驗(yàn)。對所設(shè)計(jì)中將所面臨的問題認(rèn)識不夠。是Java課程設(shè)計(jì)讓我認(rèn)識到了這些問題的存在。同時(shí)給我提供了去面對這些問題的平臺。也使我充分的認(rèn)識到在以后也應(yīng)該怎樣去實(shí)踐,怎樣去學(xué)習(xí)一門計(jì)算機(jī)語言,以及如何去運(yùn)用這門語言去解決實(shí)際問題等等??傊?,在經(jīng)過這次Java的課程設(shè)計(jì),使我認(rèn)識到了自己很多的缺點(diǎn),同時(shí),也是我學(xué)到新知識和新方法的一個(gè)機(jī)會(huì)。這給我在以后繼續(xù)學(xué)習(xí)好這門語言指明了方向。6、參考文獻(xiàn):[1]《Java2從入門到精通》,印旻編、許偉編著,清華大學(xué)出版社[2]《Java編程思想》,周文龍等著,青年出版社[3]《Java學(xué)習(xí)指南》,寒露、王梅等著,教育出版社[4]《Java2實(shí)用教程》(第三版),耿祥義張躍平編著,清華大學(xué)出版社[5]《Java語言與面向?qū)ο蟪绦蛟O(shè)計(jì)》,印旻編著,清華大學(xué)出版社程序設(shè)計(jì)綜合課程設(shè)計(jì)報(bào)告報(bào)告題目:基于Java的魔板游戲的設(shè)計(jì)與開發(fā)學(xué)院:信息與電子工程學(xué)院

專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)

班級:計(jì)算機(jī)班

學(xué)號:、、學(xué)生姓名:(組長)、指導(dǎo)教師:

程序設(shè)計(jì)綜合課程設(shè)計(jì)任務(wù)書1.1主要任務(wù)與目標(biāo)(1)掌握J(rèn)ava語言,能夠?qū)W會(huì)使用Javascript,Jcreator開發(fā)具體的網(wǎng)站以及UML做分析需求。(2)熟悉數(shù)據(jù)庫SQLServer2008的使用,熟悉數(shù)據(jù)庫編程語言(主要是SQL)。(3)使用所學(xué)知識開發(fā)一個(gè)基于Java的魔板圖像游戲。1.2主要內(nèi)容與基本要求(1)模版由3*3或4*4個(gè)格子組成。對于3*3魔板,在前8個(gè)格子里隨即放置8個(gè)編號1~8的方塊,最后一個(gè)格子是未放置的空格子;對于4*4的魔板,在前15個(gè)格子里隨機(jī)放置15個(gè)編號為1~15的方塊,最后一個(gè)格子是未放置方塊的空格子。(2)用鼠標(biāo)單擊任何與空格子水平或垂直相鄰的方塊可以把該方塊移入空格子,而當(dāng)前方塊移動(dòng)之前所在的格子成為空格子。通過不斷的移動(dòng)方塊可以將方塊一行一行的按數(shù)字序號排好。(3)魔板游戲也可以使用圖像來代替數(shù)字。例如,對于3*3的魔板,將一幅圖像分成3*3福小圖像,除去最后一幅小圖像(圖像的右下角),將其余各小圖像打亂順序后放在魔板的方塊上,最終目標(biāo)是通過移動(dòng)方塊恢復(fù)原始圖像(不包括圖像的右下角)。(4)當(dāng)用戶按要求排列好方塊后,程序彈出對話框,提示用戶成功的消息。(5)魔板游戲分成兩個(gè)級別,用戶可以通過界面上提供的菜單消息選擇“初級”或“高級”兩個(gè)級別。對于“初級”級別,魔板由3*3格子組成;對于“高級”級別,魔板由4*4個(gè)格子組成。(6)“魔板游戲”提供一幅默認(rèn)圖像,用戶可以使用該圖像來玩魔板游戲。用戶也可以使界面提供的菜單選擇一幅新圖像,然后使用這個(gè)新圖像來玩魔板游戲。(7)對相應(yīng)的級別增加“英雄榜”功能。當(dāng)用戶成功排列魔板中的方塊后,如果成績能排進(jìn)前三名,就彈出一個(gè)對話框,將用戶的成績保存到“英雄榜”中。(8)增加一個(gè)查看“英雄榜”的功能,使用戶在玩游戲時(shí),可以查看當(dāng)前游的最高成績。(9)在HandleMove中增加播放音樂的功能模塊,當(dāng)用戶移動(dòng)方塊后,程序播放簡短的一聲音樂。用Java可以編寫播放。Au、.aiff、.wav、.midi、.rfm格式的音頻。假設(shè)音頻文件hello.au位于應(yīng)用程序當(dāng)前目錄中,有關(guān)播放音樂的知識總結(jié)如下:創(chuàng)建File對象(File類屬于java.io包):FilemusicFile=newFile(“hello.au”);獲取URI對象(URI類屬于包):URIuri=musicFile.toURI();創(chuàng)建音頻對象(AudioClip和Applet類屬于java.applet包):AudioClipclip=Applet.newAudioClip(url);播放,循環(huán)與停止:Clip.play()Clip.loop()Clip.stop()1.3開發(fā)工具JCreatorPro、JDK、Eclipse、UML、SQLServer2008等。1.4計(jì)劃進(jìn)度(1)4月11日--4月17日:分組確定組員,搜集資料、查閱文獻(xiàn),確定選題。(2)4月18日--4月24日:游戲的需求分析,游戲設(shè)計(jì),游戲功能模塊完善(3)4月25日--4月30日:基于魔板拼圖游戲玩家信息存儲(chǔ)的數(shù)據(jù)庫分析與設(shè)計(jì)(4)5月08日--5月21日:主要模塊程序流程圖、編程實(shí)現(xiàn)游戲功能(5)5月22日—5月27日:魔板游戲平臺調(diào)試、測試、修改與完善(6)5月28日—6月02日:魔板拼圖游戲課程設(shè)計(jì)報(bào)告撰寫(7)6月03日—6月03日:魔板拼圖游戲課程設(shè)計(jì)報(bào)告答辯1.5主要參考文獻(xiàn)[01]耿祥義,張躍平.java課程設(shè)計(jì)(第二版).清華大學(xué)出版社.2008年11月6章第[02]蘭紅,王建雄,黃云.基于JavaSwing的《中國象棋》游戲的設(shè)計(jì)與實(shí)現(xiàn).[J]《電腦開發(fā)與應(yīng)用》2006年第19卷第11期.60-61[03]江耿豪.編程型游戲編程框架的設(shè)計(jì)方法[J].《軟件導(dǎo)刊》2010年第7期.[04]吳聞.游戲程序設(shè)計(jì)中若干問題的探討.[J].《電腦知識與技術(shù):學(xué)術(shù)交流》20**年第5卷第6期[05]周鳳英

文惺

.《Java游戲開發(fā)StepbyStep系列之三—Java游戲開發(fā)起步》。《電腦愛好者》2003年14期[06]PetchelT.晏利斌.孫淑敏.邵榮《JAvA2游戲編程》2005[07]榮欽科技《JAVA2游戲設(shè)計(jì)》2004[08]羅運(yùn)模.王珊《SQLServer數(shù)據(jù)庫系統(tǒng)基礎(chǔ)》2000[09]尚俊杰.李芳樂.李浩文《"輕游戲":教育游戲的希望和未來》[期刊論文]

-電化教育研究2005(01)[10]丁振凡.Java語言使用教程[M].北京:北京郵電大學(xué)出版社,2004[11]陸光義.Java游戲編程導(dǎo)學(xué).北京:清華大學(xué)出版社,2004[12]朱付喜.Java語言與面向?qū)ο蟪绦蛟O(shè)計(jì).武漢:武漢大學(xué)出版社,2002[13]AdamDrozdek.數(shù)據(jù)結(jié)構(gòu)與算法(Java語言版).北京:機(jī)械工業(yè)出版社,2003.7[14]薩師煊,王珊.數(shù)據(jù)庫系統(tǒng)概論[M].北京:清華大學(xué)出版社,20021.6小組分工(組長):資料匯總,撰寫任務(wù)書,課程設(shè)計(jì)報(bào)告,部分代碼編寫注釋,添加部分功能,總體設(shè)計(jì),課程設(shè)計(jì)報(bào)告的總結(jié)。詳細(xì)設(shè)計(jì):負(fù)責(zé)Block類,HandleImage類,HandleMove類,VerifySuccess類的編寫。:查找資料,需求分析,部分代碼編寫注釋,添加部分功能詳細(xì)設(shè)計(jì):負(fù)責(zé)PuzzleGame類,Point類的編寫。程序運(yùn)行。音樂功能的添加,登陸界面功能的增加。:查找資料,需求分析,部分代碼編寫注釋,添加部分功能,詳細(xì)設(shè)計(jì):負(fù)責(zé)PuzzlePad類的編寫。代碼檢查。英雄榜功能的增加,查看英雄榜功能的增加。學(xué)生(簽字)2011年4月11日指導(dǎo)教師2011

目錄程序設(shè)計(jì)綜合課程設(shè)計(jì)任務(wù)書………..………………….… -1-1.1主要任務(wù)與目標(biāo) -1-1.2主要內(nèi)容與基本要求 -1-1.3開發(fā)工具 -2-1.4計(jì)劃進(jìn)度 -2-1.5主要參考文獻(xiàn) -3-1.6小組分工 -3-摘要 -7-ABSTRACT -8-第一章 引言 -9-1.1 背景 -9-1.2 課程設(shè)計(jì)內(nèi)容 -9-1.2.1 需求分析 -9-1.2.2 課程設(shè)計(jì)內(nèi)容 -10-1.2.3 設(shè)計(jì)工具與運(yùn)行環(huán)境 -12-第二章 魔板游戲詳細(xì)設(shè)計(jì) -13-2.1系統(tǒng)的需求分析 -13-2.1.1用戶登錄界面圖 -13-2.1.2設(shè)計(jì)流程圖 -14-2.1.3系統(tǒng)開發(fā)及運(yùn)行環(huán)境 -15-2.1.4系統(tǒng)主要功能要求 -16-2.2系統(tǒng)的詳細(xì)設(shè)計(jì) -16-2.2.1PuzzleGame類 -16-2.2.2PuzzlePad類 -19-2.2.3Black類 -21-2.2.4Point類 -22-2.2.5HandleImage類 -24-2.2.6HangleMove類 -25-2.2.6VerifySuccess類 -27-第三章 魔板游戲系統(tǒng)的具體實(shí)現(xiàn) -29-3.1游戲主類的設(shè)計(jì) -29-3.2魔板對象的實(shí)現(xiàn) -30-3.3游戲使用時(shí)間的設(shè)計(jì) -32-3.4游戲成功與否的判斷設(shè)計(jì) -33-3.4程序設(shè)計(jì)及調(diào)試運(yùn)行 -34-第四章 添加新功能 -35-4.1增加英雄榜功能 -35-4.2增加查看英雄榜功能 -36-4.3增加背景音樂功能 -37-4.4增加登錄界面功能 -37-第五章 結(jié)束語 -38-致謝 -39-參考文獻(xiàn): -40-附錄:源代碼 -41-PuzzleGame -41-PuzzlePad.java -43-Block.java -46-Point.java -46-HandleImage.java -47-HandleMove.java -47-VerifySuccess.java -49-Record.java -50-ShowRecord.java -51-Login.java -53-PlayMusic.java -54-

摘要一種較“捉放曹”玩耍方式多,游戲可易可難,且功能多的智力魔板,它由具有邊框及活動(dòng)檔板的魔盤和若干塊兩面都印有圖案或者數(shù)字的魔板組成。各魔板兩面的圖案分別數(shù)字表示其序號。游戲時(shí)可隨意調(diào)節(jié)魔盤的使用面積和自由布題,然后滑動(dòng)魔板,使故事情節(jié)展現(xiàn)在眼前,即使智力較低的幼兒,也可看圖說話、講故事和做拼圖、排畫等智力積木游戲。使其啟迪思維、開發(fā)智力。我們用java語言編寫的游戲可以完成對數(shù)字、圖案的一個(gè)游戲,設(shè)計(jì)調(diào)用一些類以及類方法來完成我們的設(shè)計(jì)目的。關(guān)鍵字:智力魔板、游戲、java、開發(fā)智力

ABSTRACTArelatively"catchputcao"play,thegamecanbeeasywaycanbedifficult,andtheintelligencefunctionismuch,itMoBanhavebordersandactivitiesbythebaffleplateandseveralblocksdemonswithbothsidesoftheMoBanpatternordigital.ThetwosidesMoBanpatternofdigitalsaiditsserialnumberrespectively.Gamescanbeadjustedastheuseofmagicplateareaandfreecloth,andthenslidingMoBanproblem,makethestoryunfoldedinfrontoftheireyes,evenifintelligencelowerkindergarten,alsocanspeak,toldstoriesandpicturesdopuzzles,rowpaintingandotherintelligenceboardgames.Makeitsenlightenmentthinking,anddevelopingintelligence.WeuseJavalanguagegameswrittenfordigital,designcanbecompletedinagame,designofsomekindandcallwaytoaccomplishourdesigngoal.Keyword:intelligenceMoBan,games,Java,anddevelopingintelligence

引言背景魔板游戲作為一種智力小游戲,受到廣大中小學(xué)生以及一些上班族的喜愛,可以在忙碌的一天之后放松下自己緊繃的精神,同時(shí)可也以得到智力的提升。魔板游戲的游戲規(guī)則十分簡單,卻擁有十分廣闊選擇空間,使得游戲背景圖案可以變化多端,比其它游戲復(fù)雜深?yuàn)W。這就是魔板游戲的魅力所在。玩魔板游戲?qū)θ四X的智力開發(fā)很有幫助,可增強(qiáng)一個(gè)人的計(jì)算能力、創(chuàng)造能力、思維能力、判斷能力,也能提高人的注意力和控制力。玩魔板游戲?qū)和倌甑闹橇Πl(fā)展起到積極作用,使他們能更好的分析事物。Java語言是當(dāng)今最為流行的程序設(shè)計(jì)語言之一作為一門非常優(yōu)秀和極為健壯的編程語言,它同時(shí)具有的面向?qū)ο螅c平臺無關(guān),分布式應(yīng)用,安全,穩(wěn)定和多線程等優(yōu)良的特征,使用Java語言,不僅可以開發(fā)出功能強(qiáng)大的大型應(yīng)用程序,而且Java語言本身突出的跨平臺的特性也使得它特別適合于Internet上的應(yīng)用開發(fā),可以這樣說,Java的出現(xiàn)使得所開發(fā)的應(yīng)用程序“一次編寫,處處可用”的實(shí)現(xiàn)成為了可能。近來隨著計(jì)算機(jī)的快速發(fā)展,各種各樣的電腦游戲?qū)映霾桓F,使得我們能有更多的娛樂項(xiàng)目,而魔板游戲能起到鍛煉人的思維和修身養(yǎng)性的作用,而且魔板游戲水平頗高,我們可以自己選擇不同難度的游戲,大有與人腦分庭抗禮之勢。課程設(shè)計(jì)內(nèi)容需求分析魔板游戲就是大家以前常玩的拼板游戲!就是將一幅完整的圖片分成小塊,打亂順序,再拼好,并且只能將圖塊和臨界的空格交換位置。用最短的時(shí)間和最省的步驟將圖形拼好,此玩法雖然簡單,但特別考驗(yàn)智力,魔板游戲與魔方游戲相似屬于益智游戲。此項(xiàng)目我們需要通過面向?qū)ο蟮腏ava程序設(shè)計(jì)來實(shí)現(xiàn),游戲設(shè)計(jì)中需要用到GUI圖形界面的設(shè)計(jì),產(chǎn)生隨機(jī)數(shù)生成打亂的圖片,各種事件(動(dòng)作事件、鼠標(biāo)事件和窗口事件等)的響應(yīng)和處理等面向?qū)ο蟮闹R來實(shí)現(xiàn)游戲的各項(xiàng)功能。課程設(shè)計(jì)內(nèi)容在設(shè)計(jì)魔板游戲時(shí),需要編寫7個(gè)Java源文件:PuzzleGame.java、PuzzlePad.java、Point.java、Block.java、HandleImage.java、VerifySuccess.java和HandleMove.java。模板游戲除了需要編寫上述的7個(gè)源程序所給出的類外,還需要Java系統(tǒng)提供的一些重要的類,如JMenuItem、JButton等類。魔板游戲所用到得一些重要的類以及之間的組合關(guān)系如下圖1所示。PuzzleGamePuzzleGameJMunePuzzlePadJRadioButtonJButtobPointBlockHandleMoveImageHandlelMageVerifySuccess圖1類之間的組合關(guān)系以下是我們編寫的6個(gè)java源程序的總體設(shè)計(jì)。(1)PuzzleGame.java(主類)PuzzleGame類負(fù)責(zé)創(chuàng)建魔板游戲的主窗口,該類含有main方法,程序從該類開始執(zhí)行。PuzzleGame類成員變量中有4中重要類型的對象:PuzzlePad、JMune、JRadioButton和JButton。PuzzleGame類的主要成員的作用將在后面的詳細(xì)設(shè)計(jì)中闡述,PuzzleGame類創(chuàng)建的窗口以及其中的主要成員對象如圖2所示。圖2PuzzleGame窗口及主要的成員對象(2)PuzzlePad.javaPuzzlePad類創(chuàng)建的對象是PuzzlePad類最重要的成員之一,代表“魔板”。該類的成員變量中有5種重要類型的對象:Point、Block、HandleMove、HandleImage和Image。PuzzlePad類的主要成員的作用將在后面的詳細(xì)設(shè)計(jì)中說明闡述。(3)Block.javaBlock類是JTextField的一個(gè)子類,創(chuàng)建的對象是PuzzlePad類的重要成員之一,用來表示“魔板”中的方塊。(4)Point.javaPoint類負(fù)責(zé)創(chuàng)建確定位置的對象,使用Point對象可以確定Block對象在PuzzlePad對象之中的位置,即確定“方塊”在“魔板”中的位置。(5)HandleImage.javaHandleImage類所創(chuàng)建的對象負(fù)責(zé)將一幅圖像分成諾干個(gè)小圖像。(6)HandleMove.javaHandleMove類所創(chuàng)建的對象負(fù)責(zé)處理鼠標(biāo)事件。(7)VerifySuccessVerifySuccess類所創(chuàng)建的對象負(fù)責(zé)驗(yàn)證用戶是否按要求成功排列模板中的方塊。設(shè)計(jì)工具與運(yùn)行環(huán)境(1)設(shè)計(jì)工具Eclipse、JCreatorPro。(2)運(yùn)行環(huán)境JDK1.6.0、Eclipse、window7。

魔板游戲詳細(xì)設(shè)計(jì)這一章時(shí)介紹開發(fā)環(huán)境和用到的開發(fā)工具,系統(tǒng)主要的功能設(shè)計(jì),系統(tǒng)的數(shù)據(jù)流程圖,UML圖。2.1系統(tǒng)的需求分析2.1.1用戶登錄界面圖圖3登錄功能結(jié)構(gòu)圖2.1.2設(shè)計(jì)流程圖開始開始魔板游戲開始界面Switch開始游戲計(jì)時(shí)器計(jì)時(shí)開始移動(dòng)方塊改變游戲難度完成游戲選初級初級高級重新放置方塊改變游戲玩法選擇數(shù)字玩法數(shù)字玩法圖像玩法選擇一幅新圖像選擇默認(rèn)圖像確定玩法退出結(jié)束是否是否圖4-1總體流程圖主界面主界面開始選擇級別選擇圖像數(shù)字玩法圖像玩法初級高級使用一幅新圖像使用默認(rèn)圖像圖4-2總體功能圖2.1.3系統(tǒng)開發(fā)及運(yùn)行環(huán)境硬件平臺:CPU:P41.8GHz內(nèi)存:256MB以上軟件平臺:操作系統(tǒng):WindowsXP開發(fā)工具包:JDKVersion1.6.2JSP服務(wù)器:Tomcat6.0瀏覽器:推薦使用IE6.0分辨率:最佳效果1024*768像素2.1.4系統(tǒng)主要功能要求我們所完成的魔板游戲可以實(shí)現(xiàn)基本的魔板游戲的功能。此項(xiàng)目魔板游戲可由用戶選擇3*3和4*4兩個(gè)不同難度,N*N的魔板游戲原理與此相同,游戲可以通過下拉列表實(shí)現(xiàn)選擇不同的游戲圖像,增加游戲的趣味性。點(diǎn)擊“開始游戲”按鈕后可以實(shí)現(xiàn)游戲步驟的計(jì)數(shù),拼圖右邊有一個(gè)完整的圖像可以供用戶參照,用鼠標(biāo)單擊任何與格子相鄰的方塊可以把該方塊移入空格子。通過不斷地移動(dòng)方塊,可以將方塊一行一行按數(shù)字或圖片依次拼圖。若成功完成拼圖(即左邊的拼圖與右邊的參照圖像一樣),則有提示:“恭喜您,成功完成”的字樣出現(xiàn)。2.2系統(tǒng)的詳細(xì)設(shè)計(jì)2.2.1PuzzleGame類1、效果圖PuzzlePad創(chuàng)建的窗口效果如圖5所示。PuzzleGame創(chuàng)建的窗口(數(shù)字玩法)PuzzleGame創(chuàng)建的窗口(圖像玩法)圖5PuzzleGame創(chuàng)建的窗口2、UML圖MazeWindow類是javax.swing包中JFrame的一個(gè)子類,并實(shí)現(xiàn)了ActionListener接口,該類的主要成員變量和方法的UML圖如圖6所示。puzzlePad:PuzzlePaddigitPlay,imagePlay:JRadioButtonpuzzlePad:PuzzlePaddigitPlay,imagePlay:JRadioButtonbar:JMenuBarstartButton:JButtongradMenu,choiceImage:JMenutool:ToolkitoneGrade,twoGrade:JMenuItemimage:ImagenewImage,defaultImage:JMenuItemPuzzleGame():無類型actionPerformed(ActionEvent):voidmain(String[]):voidJFramePuzzleGame圖6PuzzleGame類的UML圖以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說明。1)成員變量puzzlePad是PuzzlePad類聲明的對象,用來刻畫魔板,是PuzzleGame類中最重要的成員之一bar是JMenuBar創(chuàng)建的菜單條,用來添加菜單。bar被放置在窗口的頂部gradeMenu和choiceImage是JMenu創(chuàng)建的菜單,其名字分別為“選擇級別”和“選擇圖像”。gradeMenu,choiceImage被添加到菜單條(bar)中。oneGrade、twoGrade、newImage和defaultImage是JMenuItem創(chuàng)建的菜單項(xiàng),名字依次為“初級”,“高級”,“選擇一幅新圖像”和“使用默認(rèn)圖像”,oneGrade和twoGrade菜單項(xiàng)被添加到菜單gradeMenu中,newImage和defaultImage都將當(dāng)前窗口注冊為自己的ActionEvent事件監(jiān)視器。digitPlay和imagePlay是JRadioButton創(chuàng)建的屬于同一選擇組中的單選框,名字依次為“數(shù)字玩法”,“圖像玩法”。同一時(shí)刻digitPlay和imagePlay中只能有一個(gè)處于選中狀態(tài)。startButton是JButton創(chuàng)建的按鈕對象,名字為“開始”。startButton將當(dāng)前窗口注冊為自己的ActionEvent事件監(jiān)視器。image是Image聲明的對象。tool是Toolkit對象,負(fù)責(zé)創(chuàng)建image對象2)方法PuzzleGame()是構(gòu)造方法,負(fù)責(zé)完成窗口的初始化操作。actionPerformed(ActionEvent)方法是puzzleGame類實(shí)現(xiàn)ActionListener接口中的方法。PuzzleGame類創(chuàng)建的窗口是菜單中的菜單項(xiàng)、單選框以及按鈕上的ActionEvent事件監(jiān)視器。如果用戶選中oneGrade或twoGrade菜單項(xiàng)時(shí)actionPerformed(ActionEvent)方法所執(zhí)行的操作分別是讓puzzlePad對象將自己的級別設(shè)置為一級或二級。如果用戶選中newImage或defaultImage菜單項(xiàng)時(shí),actionPerformed(ActionEvent)方法所執(zhí)行的操作就是分別改變image對象。當(dāng)用戶單擊start按鈕后,如果單選框digitPlay處于被選中狀態(tài),那么actionPerformed(ActionEvent)方法所執(zhí)行的操作就是讓PuzzlePad對象使用數(shù)字魔板,如果單選框imagePlay被選中時(shí),那么actionPerformed(ActionEvent)方法所執(zhí)行的操作就是讓puzzlePad對象使用圖像魔板。main方法是程序運(yùn)行的入口方法。2.2.2PuzzlePad類效果圖PuzzlePad創(chuàng)建的魔板對象效果如圖7所示。(a)數(shù)字魔板(b)圖像魔板圖7PuzzlePad創(chuàng)建的魔板對象UML圖PuzzlePad類時(shí)javax.swing包中JPanel容器的子類,所創(chuàng)建的對象:puzzlePad是PuzzleGame類中最重要的成員之一,作為一個(gè)容器添加到PuzzleGame窗口的中心。標(biāo)明PuzzlePad類的主要成員變量、方法以及和PuzzleGame類之間組合關(guān)系的UML圖如圖8所示。PuzzlePadPuzzlePadpoint:Point[][]handleImage:HandleImageblock:Block[][];verifySuccess:VerifySuccessdistance:grade,m,n:intimage:ImagehandleMove:HandelMoveIsDigitPlay:Booleantool:ToolkitPuzzlePad():無類型needInit():voidgetHandleMove():HandleMovesetIsDigitPlay():voidsetImage(Image):voidsetIsImagePlay():voidsetGrade(int):voidpanicComponent(Graphics):voidgetGrade():intJPanelPuzzleGamepuzzlePad:PuzzlePad圖8PuzzlePad類的UML圖以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說明。1)成員變量point是Point類型的而為數(shù)組,單元為Point類創(chuàng)建的對象,用來確定魔板中的方塊的位置block是Block類型的二維數(shù)組,單元為Block類創(chuàng)建的對象,用來表示魔板中的方塊。distance,grade,m和n是int型數(shù)據(jù)。Point對象根據(jù)distance的值來進(jìn)行初始化,以便確定Point對象之間的距離。m和n的值是二維數(shù)值組block和point的行數(shù)和列數(shù),m和n的默認(rèn)值都是3。Grade的值代表魔板的級別,默認(rèn)值是1.handleMove是HandleMove類創(chuàng)建的對象,負(fù)責(zé)處理Block對象上的鼠標(biāo)事件。handleImage是HandleImage類創(chuàng)建的對象,負(fù)責(zé)將一幅圖像分成若干幅小圖像。verifySuccess是VerifySuccess類創(chuàng)建的對象,負(fù)責(zé)驗(yàn)證用戶是否按要求成功排列了魔板中的方塊。image是Image聲明的圖像對象。tool是Toolkit對象,負(fù)責(zé)創(chuàng)建Image聲明的圖像對象:image。、2)方法PuzzlePad()是構(gòu)造方法,負(fù)責(zé)創(chuàng)建PuzzlePad對象。Puzzlepad對象調(diào)用getHandleMove()方法返回其中的HandleMove對象,即返回handleMove。PuzzlePad對象調(diào)用setImage(Image)方法設(shè)置image對象。PuzzlePad對象調(diào)用setGrade(int)方法設(shè)置魔板的級別。PuzzlePad對象調(diào)用getGrade()方法返回grade。PuzzlePad對象調(diào)用needInit()方法負(fù)責(zé)完成Block和Point對象的創(chuàng)建,以及完成對其他的對象的初始化。、PuzzlePad對象調(diào)用setIsDigitPlay()方法將魔板設(shè)置為數(shù)字玩法。PuzzlePad對象調(diào)用setIsImagePlay()方法將魔板設(shè)置為圖像玩法。PuzzlePad對象調(diào)用paintComponent(Graphics)方法將魔板使用的圖像,即image對象,繪制在魔板的右側(cè)。2.2.3Black類1、效果圖Block創(chuàng)建的對象效果如圖9所示。(a)對象1(b)對象2圖9Block創(chuàng)建的兩個(gè)對象2、UML圖Block類是javax.swing包中JTextField類的一個(gè)子類,創(chuàng)建的對象是二維數(shù)組block的單元中的對象。Block型數(shù)組block是PuzzlePad類的重要成員之一。標(biāo)明Block類的主要成員變量和方法以及和PuzzlePad類之間組合關(guān)系的UML圖如圖10所示。JTextFieldJTextFieldPoint:PointObject:ObjectBlock():無類型setObject(Object):voidsetAtPoint(Point):voidgetObject():ObjectgetAtPoint():PointpaintConent(Graphics):voidBlockPuzzlePadblock:Block[][]圖10Block類的UML圖以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說明。成員變量point是Point型對象,用來確定Block對象在PuzzlePad所創(chuàng)建的魔板容器中的位置。object是Object類型的對象,用來確定Block對象上所顯示的數(shù)字或圖像。2)方法Block對象調(diào)用setAtPoint(Point)方法設(shè)置自己所在的“點(diǎn)”,即設(shè)置point對象的引用。Block對象調(diào)用setAtPoint()返回自己所在的“點(diǎn)”即返回point對象的引用。Block對象調(diào)用setObject(Object)方法設(shè)置自己的成員object,當(dāng)設(shè)置object是Integer對象時(shí),當(dāng)前的Block對象顯示Integer對象中的數(shù)字;當(dāng)設(shè)置object是Image對象時(shí),當(dāng)前Block對象將調(diào)用repaint()方法重新繪制Image對象。Block對象調(diào)用paintComponent(Graphics)方法繪制出Image對象。2.2.4Point類1、效果圖Point創(chuàng)建的對象負(fù)責(zé)確定Block對象在PuzzlePad魔板容器中所在的位置。Point創(chuàng)建的對象沒有可顯示的效果圖。2、UML圖Point創(chuàng)建的對象含有兩個(gè)重要int型數(shù)據(jù),分別用來表示puzzlePad魔板容器坐標(biāo)系中的x軸坐標(biāo)和y軸坐標(biāo)值,坐標(biāo)系的原點(diǎn)是puzzlePad魔板容器的左上角,向右是x軸的正向,向下是y軸的正向。Point類創(chuàng)建的對象是二維數(shù)組point的單元中的對象。Point型二維數(shù)組point是puzzlePad魔板容器的重要成員之一,其單元中的point對象用來確定block對象在puzzlePad魔板容器中的位置。標(biāo)明point類的主要成員變量和方法以及和puzzlePad類之間組合關(guān)系的UML圖如圖11所示。x,y:intx,y:inthaveBlock:booleanblock:BlockPoint(int,int):無類型getY():intisHaveBlock():booleanequals(TowerPoint):BooleansetHaveBlock(boolean):voidsetBlock(Block):voidgetX():intgetBlock():BlockPointPuzzlePadpoint:Point[][]圖11Point類的UML圖以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說明。1)成員變量x和y是Point對象中的兩個(gè)int類型數(shù)據(jù),分別用來表示容器坐標(biāo)系中的x軸坐標(biāo)和y軸坐標(biāo)值。haveBlock是boolean型數(shù)據(jù),如果有Block對象在該P(yáng)oint對象上時(shí),該數(shù)據(jù)為true;否則為false。block是Block類聲明的對象,用來存放一個(gè)Block對象的引用,標(biāo)明該Block對象在當(dāng)前point對象上。2)方法Point(int,int)是構(gòu)造方法,用來創(chuàng)建Point對象。Point對象調(diào)用isHaveBlock()方法返回一個(gè)boolean型數(shù)據(jù),如果當(dāng)前Point對象上有Block對象,isHaveBlock()方法返回true;否則返回false。Point對象調(diào)用setHaveBlock(boolean)方法可以根據(jù)參數(shù)的值設(shè)置當(dāng)前point對象上是否有block對象。Point對象調(diào)用getX()和getY()方法可以返回其中的x軸坐標(biāo)和y軸坐標(biāo)。Point對象調(diào)用equals(TowerPoint)方法可以判斷當(dāng)前point對象是否和參數(shù)指定的point對象相同。Point對象調(diào)用setBlock(Block)方法,將參數(shù)指定的Block對象放置在當(dāng)前point對象上。Point對象調(diào)用getBlock()方法可以返回當(dāng)前point對象上的Block對象。2.2.5HandleImage類效果圖HandleImage創(chuàng)建的對象負(fù)責(zé)將一幅圖像分解為諾干個(gè)小的圖像,沒有可顯示的效果圖。UML圖HandleImage類是javax.swing包中JComponent類的一個(gè)子類,創(chuàng)建的對象handleImage負(fù)責(zé)將一幅圖像分解成諾干幅小圖像,是PuzzlePad類的重要成員之一。HandleImage類的主要成員變量和方法以及和PuzzlePad類之間的組合關(guān)系的UML圖像如圖12所示。JComponentJComponentHandleImageimageWidth,imageHight:inttool:ToolkitHandleImage():無類型getIages(Image,int,int):Image[]PuzzlePadhandleImage:handleImage圖12HandleImage類的UML圖以下是UML圖中有關(guān)數(shù)據(jù)和方法的說明。成員變量imageWidth和imageHeight是int型數(shù)據(jù),用來存儲(chǔ)圖像的寬和高。tool是Toolkit對象,用來獲得Image對象。方法HandleImage()是構(gòu)造方法,負(fù)責(zé)完成HandleImage對象的初始化。getImages(Image,int,int)方法將參數(shù)指定的圖像分成諾干個(gè)更小的圖像,并將這些圖像存放到一個(gè)Image數(shù)組中,然后返回該數(shù)組。代碼(HandleImage.java)2.2.6

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論