魔板游戲課程設(shè)計(jì)報(bào)告_第1頁(yè)
魔板游戲課程設(shè)計(jì)報(bào)告_第2頁(yè)
魔板游戲課程設(shè)計(jì)報(bào)告_第3頁(yè)
魔板游戲課程設(shè)計(jì)報(bào)告_第4頁(yè)
魔板游戲課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

永磁同步電機(jī)雙環(huán)調(diào)速系統(tǒng)的仿真研究Java與面向?qū)ο蠹夹g(shù)課程設(shè)計(jì)報(bào)告(2012)PAGE4PAGE1Java與面向?qū)ο蠹夹g(shù)課程設(shè)計(jì)報(bào)告(2011--2012年度第2學(xué)期)魔板游戲?qū)I(yè)電子信息工程學(xué)生姓名吳才奇班級(jí)電信四班學(xué)號(hào)1103030429指導(dǎo)教師周越完成日期2012魔板游戲PAGE3目錄目錄TOC\o"1-5"\h\z\u目錄 21概述 11.1課程設(shè)計(jì)目的 1課程設(shè)計(jì)任務(wù)書(shū) 12需求分析 22.1設(shè)計(jì)目標(biāo) 22.2主體功能 12.3開(kāi)發(fā)環(huán)境 13概要設(shè)計(jì) 23.1系統(tǒng)的功能模塊劃分 23.1.1PuzzleGame.java類(lèi)模塊 23.1.4Point.java類(lèi)模塊 33.2系統(tǒng)流程圖 44詳細(xì)設(shè)計(jì) 65測(cè)試 75.1測(cè)試方案 75.2測(cè)試結(jié)果 76小結(jié) 8參考文獻(xiàn) 10附錄 11附錄1源程序清單 11附錄1.1PuzzleGame模塊源程序 11附錄1.2PuzzlePad模塊源程序 13附錄1.3Block類(lèi)模塊源程序 16附錄1.4Point類(lèi)模塊源程序 17附錄1.5HandleImage類(lèi)模塊源程序 17附錄1.6HandleMove類(lèi)模塊源程序 18附錄1.7VertfySuccess類(lèi)模塊源程序 20附錄1.8Sound類(lèi)模塊源程序 21附錄1.8Sound類(lèi)模塊源程序 21PAGE5魔板游戲1概述1.1課程設(shè)計(jì)目的利用所學(xué)高級(jí)語(yǔ)言的語(yǔ)法特性,結(jié)合數(shù)據(jù)結(jié)構(gòu)算法、網(wǎng)絡(luò)知識(shí)、文件處理和數(shù)據(jù)庫(kù)等知識(shí)完成綜合題目的設(shè)計(jì)和代碼實(shí)現(xiàn),并培養(yǎng)鍛煉分析程序、撰寫(xiě)報(bào)告等能力。1.2課程設(shè)計(jì)任務(wù)書(shū)學(xué)院信息學(xué)院專(zhuān)業(yè)電子信息工程學(xué)生姓名吳才奇班級(jí)學(xué)號(hào)1103030429課程設(shè)計(jì)題目基于Java的魔板游戲軟件設(shè)計(jì)實(shí)踐教學(xué)要求與任務(wù):采用java技術(shù)設(shè)計(jì)魔板游戲軟件,設(shè)計(jì)要求如下:魔板由3*3或4*4個(gè)格子組成。對(duì)于3*3魔板,在前8個(gè)格子里隨機(jī)放置8個(gè)編號(hào)1~8的方塊,最后一個(gè)格子是未放置方塊的空格子;對(duì)于4*4的魔板,在前15個(gè)格子里隨機(jī)放置15個(gè)編號(hào)1~15的方塊,最后一個(gè)格子是未放置方塊的空格子。用鼠標(biāo)單擊任何與格子水平或垂直相鄰的方塊就可以把該方塊移入空格子,而當(dāng)前方塊移動(dòng)之前所在的格子成為空格子。通過(guò)不斷地移動(dòng)方塊可以將方塊一行一行地按數(shù)順序排好。魔板游戲也可以使用圖像來(lái)代替數(shù)字。例如,對(duì)于3*3的魔板,將一幅圖像分成3*3個(gè)小圖像,除去最后一幅小圖像(圖像的右下角),將其余的各幅小圖像打亂順序后放在魔板的方塊上,最終目標(biāo)是通過(guò)移動(dòng)方塊回復(fù)原始圖像(不包括圖像的右下角)。當(dāng)用戶(hù)按要求排列好方塊后,程序彈出對(duì)話(huà)框,提示用戶(hù)成功的消息。模板游戲分為兩個(gè)級(jí)別,用戶(hù)可以通過(guò)界面上提供的菜單來(lái)選擇“初級(jí)”或“高級(jí)”兩個(gè)級(jí)別。對(duì)于“初級(jí)”級(jí)別,魔板由3*3個(gè)格子組成;對(duì)于“高級(jí)”級(jí)別,魔板由4*4個(gè)格子組成?!澳0逵螒颉碧峁┮环J(rèn)圖像,用戶(hù)可以使用該圖像來(lái)玩魔板游戲。用戶(hù)也可以使界面提供的菜單選擇一幅新圖像,然后使用這個(gè)新的圖像來(lái)玩魔板游戲。工作計(jì)劃與進(jìn)度安排:第18周:布置課程設(shè)計(jì)任務(wù),查閱資料,分組設(shè)計(jì),程序調(diào)試。第19周:程序調(diào)試,編寫(xiě)課程設(shè)計(jì)報(bào)告,驗(yàn)收,答辯。指導(dǎo)教師:2012年月日專(zhuān)業(yè)負(fù)責(zé)人:2012年月日學(xué)院教學(xué)副院長(zhǎng):2012年月日2需求分析2.1設(shè)計(jì)目標(biāo)熟悉Java語(yǔ)言和NetBeansIDE6.8等開(kāi)發(fā)工具。2.2主體功能這個(gè)程序定義了一些組件,工具欄按鈕,文本區(qū)和菜單。魔板游戲程序設(shè)計(jì)通過(guò)PuzzleGame.java、PuzzlePad.java、Point.java、Block.java、HandleImage.java、VerifySuccsee.java和HandleMove.java7個(gè)類(lèi)來(lái)實(shí)現(xiàn)魔板游戲的整體功能。2.3開(kāi)發(fā)環(huán)境操作系統(tǒng):MicrosoftWindows98/2000/XP硬件要求:處理器:2.6GHzIntelPentiumIV或具有同等性能的處理器內(nèi)存:2GB硬盤(pán)空間:1GB可用硬盤(pán)空間開(kāi)發(fā)工具:NetBeansIDE6.83概要設(shè)計(jì)3.1系統(tǒng)的功能模塊劃分在設(shè)計(jì)魔板游戲時(shí),需要編寫(xiě)7個(gè)java源文件:PuzzleGame.java、PuzzlePad.java、Point.java、Block.java、HandleImage.java、VerifySuccsee.java和HandleMove.java。魔板游戲除了需要編寫(xiě)的上述7個(gè)Java源文件所給出的類(lèi)外,還需要Java系統(tǒng)提供的一些重要的類(lèi),如JMenuItem、JButton和JRadioButton等類(lèi)。魔板游戲所用到的一些重要的類(lèi)以及之間的組合關(guān)系如圖1.1所示。PuzzleGamePuzzleGameJMenuPuzzlePadJRadioButtonJButtonPointBlockHandleMoveImageHandleImageVerifySuccess圖1-1類(lèi)之間的組合關(guān)系3.1.1PuzzleGame.java類(lèi)模塊PuzzleGame類(lèi)負(fù)責(zé)創(chuàng)建魔板游戲的主窗口,該類(lèi)含有main方法,程序從該類(lèi)開(kāi)始。PuzzleGame類(lèi)的成員變量中有4種重要類(lèi)型的對(duì)象:PuzzlePad、JMenu、JRadioButton和JButton。PuzzleGame類(lèi)的主要成員的作用將在后面的詳細(xì)設(shè)計(jì)中闡述,PuzzleGame類(lèi)創(chuàng)建的窗口以及其中的主要成員對(duì)象如圖6.3所示。3.1.2PuzzlePad.java類(lèi)PuzzlePad類(lèi)創(chuàng)建的對(duì)象是PuzzleGame類(lèi)最重要的成員之一,代表“魔板”。該類(lèi)的成員變量中有5種重要類(lèi)型的對(duì)象:Point、Block、HandleMove、HandleImage和Image。PuzzlePad類(lèi)的主要成員的作用將在后面的詳細(xì)設(shè)計(jì)中闡述。3.1.3Block.java類(lèi)模塊Block類(lèi)是JTextField的一個(gè)子類(lèi),創(chuàng)建的對(duì)象是PuzzlePad類(lèi)的重要成員之一,用來(lái)表示“魔板”中的“方塊”。3.1.4Point.java類(lèi)模塊Point類(lèi)負(fù)責(zé)創(chuàng)建確定位置的對(duì)象,使用Point對(duì)象可以確定Block對(duì)象在PuzzlePad對(duì)象中的位置,即確定“方塊”在“魔板”中的位置。3.1.5HandleImage.java類(lèi)HandImage類(lèi)所創(chuàng)建的對(duì)象負(fù)責(zé)處理鼠標(biāo)事件。3.1.6HandleMove.java類(lèi)模塊HandMove類(lèi)所創(chuàng)建的對(duì)象負(fù)責(zé)處理鼠標(biāo)事件。3.1.7VerifySuccess.java類(lèi)VerifySuccess類(lèi)所創(chuàng)建的對(duì)象負(fù)責(zé)驗(yàn)證用戶(hù)是否按要求成功排列魔板中的方塊。3.2系統(tǒng)流程圖主界面主界面開(kāi)始選擇級(jí)別選擇圖像數(shù)字玩法圖像玩法初級(jí)高級(jí)使用一幅新圖像使用默認(rèn)圖像圖2-1總體功能圖根據(jù)對(duì)模板游戲的功能分析,設(shè)計(jì)得到魔板游戲總流程,如圖2-2所示:開(kāi)始開(kāi)始魔板游戲開(kāi)始界面Switch開(kāi)始游戲計(jì)時(shí)器計(jì)時(shí)開(kāi)始移動(dòng)方塊改變游戲難度完成游戲選初級(jí)初級(jí)高級(jí)重新放置方塊改變游戲玩法選擇數(shù)字玩法數(shù)字玩法圖像玩法選擇一幅新圖像選擇默認(rèn)圖像確定玩法退出結(jié)束是否是否圖2-2總體流程圖4詳細(xì)設(shè)計(jì)本程序?qū)崿F(xiàn)的游戲分為初級(jí)和高級(jí)模式,可以在單機(jī)選擇級(jí)別之后進(jìn)行選擇級(jí)別模式。初級(jí)的話(huà)共分為9格魔板一個(gè)為空,8個(gè)魔板上下左右自由移動(dòng),直至排列完成。該游戲初始默認(rèn)為數(shù)字玩法,不過(guò)在單擊圖像玩法之后可以進(jìn)行圖像的選擇也可選擇默認(rèn)圖像(dog.jpg)單擊開(kāi)始,如果圖像不能立刻顯示,那么再單擊一次就會(huì)出現(xiàn)圖像魔板了。如圖3.1所示:圖3-1初級(jí)的圖像玩法圖如果想要選擇了一幅新的圖像,只要單擊選擇圖像中的選擇一幅新圖像就可出現(xiàn)如下界面,如圖3.3:圖3-2圖像選擇界面在選擇了新圖像之后單擊開(kāi)始按鈕,就會(huì)有一張新的圖片替換了剛剛所使用的默認(rèn)圖像了。此時(shí)如果再選擇高級(jí)的模式圖像就會(huì)被分成16快隨即小魔板,如圖3.4所示:圖3-3高級(jí)的圖像玩法圖由上圖的底部可以看出還有一個(gè)計(jì)時(shí)器功能,當(dāng)你開(kāi)始移動(dòng)魔板是它就開(kāi)始計(jì)時(shí)直至完成魔板的正確排列。5測(cè)試5.1測(cè)試方案我以最簡(jiǎn)單的方案初級(jí)的數(shù)字玩法進(jìn)行了測(cè)試如圖4.1:圖4-1測(cè)試方案圖5.2測(cè)試結(jié)果點(diǎn)擊開(kāi)始后,經(jīng)過(guò)了109秒的努力,我終于把魔板游戲給測(cè)試完成了。我親自驗(yàn)證了這神奇的一刻,如圖4.2:圖4-2測(cè)試結(jié)果圖這就是魔板游戲完成后的界面,系統(tǒng)會(huì)提示你成功了!以表示祝賀,并且底部還會(huì)有你完成本次游戲所用的時(shí)間。6小結(jié)這學(xué)期我們專(zhuān)業(yè)課開(kāi)設(shè)了Java語(yǔ)言,初步了解java語(yǔ)言的特點(diǎn)及相關(guān)知識(shí),雖然之學(xué)了很短一段時(shí)間,但還是在其中學(xué)到很多東西的。這學(xué)期老師通知要做java課程設(shè)計(jì)之后,我就到圖書(shū)館查閱資料,借相關(guān)的書(shū)籍,在網(wǎng)上查找了一些資料開(kāi)始了我的課程設(shè)計(jì)之旅。在制作過(guò)程中,遇到了自己從所未有的困難,由于java學(xué)的不是那么透徹,因此在分析程序代碼必然會(huì)遇到很大的困擾。其中遇到了一個(gè)問(wèn)題,就是使用圖像玩法的時(shí)候選擇圖片選不到,一開(kāi)始不知道是什么問(wèn)題但是通過(guò)翻閱書(shū)籍,上網(wǎng)查閱資料,同學(xué)之間的相互討論,原來(lái)是格式不對(duì),它只能選擇一些小規(guī)模的圖片如dog.jpg等格式而電腦的圖片都是JPEG格式,了解這點(diǎn)之后這些問(wèn)題也就迎刃而解了。但重要的這不是最困難的地方,難得地方在運(yùn)行程序上面,當(dāng)把代碼輸入完之后,無(wú)法運(yùn)行,經(jīng)受著“百般折磨”后,各種思考,才把這部分解決了,確實(shí)很不容易,還得歸功于同學(xué)的團(tuán)結(jié)。這次的課程設(shè)計(jì)為我提供了一次鍛煉的機(jī)會(huì),經(jīng)過(guò)開(kāi)發(fā)這個(gè)系統(tǒng),這不僅僅是一次課程設(shè)計(jì),不僅僅是學(xué)會(huì)了一門(mén)開(kāi)發(fā)語(yǔ)言,更重要的是在學(xué)習(xí)的過(guò)程中,所有的問(wèn)題要自已去面對(duì),有問(wèn)題也只有靠自已去解決,在學(xué)習(xí)和解決這些困難的過(guò)程中提高了我學(xué)習(xí)的能力、解決問(wèn)題的能力和實(shí)際工作的能力,學(xué)到了許多書(shū)本以外的知識(shí)經(jīng)歷過(guò)這次以后,我對(duì)前面學(xué)過(guò)的許多課程有了更為深刻的理解,也是我對(duì)這三年所學(xué)的東西的一個(gè)綜合體現(xiàn)。然而這次設(shè)計(jì)讓我感受頗深,讓我真正體會(huì)到了在整個(gè)過(guò)程給我?guī)?lái)的無(wú)奈與快樂(lè)??磥?lái)學(xué)好java這門(mén)語(yǔ)言真的要花上很大的努力,而且它的用處太大了?;叵脒@兩周所經(jīng)歷的,自己所收獲到的遠(yuǎn)遠(yuǎn)超越自己受到的痛苦,我體會(huì)了“不經(jīng)歷風(fēng)雨怎么見(jiàn)彩虹”的真正內(nèi)涵,這次課程設(shè)計(jì)讓我學(xué)到了更多東西,我會(huì)更加努力的去學(xué)習(xí)java語(yǔ)言以及其他語(yǔ)言,更加充實(shí)自己的大腦,使自己更加豐富,將來(lái)成為一個(gè)有用的人,為社會(huì)作貢獻(xiàn)的人。參考文獻(xiàn)[1]耿祥義,張躍平.

Java2實(shí)用教程(第三版)[M].北京:清華大學(xué)出版社,2006

[2]耿祥義.

Java課程設(shè)計(jì)(第三版)[M].北京:清華大學(xué)出版社,2004[3]張躍平.Java2實(shí)用教程實(shí)驗(yàn)指導(dǎo)與習(xí)題解答(第三版)[M].北京:清華大學(xué)出版社,2004……附錄附錄1源程序清單附錄1.1PuzzleGame模塊源程序importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.io.*;importjavax.swing.filechooser.*;publicclassPuzzleGameextendsJFrameimplementsActionListener{PuzzlePadpuzzlePad;JMenuBarbar;JMenugradeMenu,choiceImage;JMenuyinyue;JMenuItemoneGrade,twoGrade,newImage,defaultImage;JMenuItembofang;JRadioButtondigitPlay,imagePlay;ButtonGroupgroup=null;JButtonstartButton;Imageimage;Toolkittool;publicPuzzleGame(){tool=getToolkit();bar=newJMenuBar();gradeMenu=newJMenu("選擇級(jí)別");yinyue=newJMenu("音樂(lè)");choiceImage=newJMenu("選擇圖像");oneGrade=newJMenuItem("初級(jí)");twoGrade=newJMenuItem("高級(jí)");newImage=newJMenuItem("選擇一幅新圖像");defaultImage=newJMenuItem("使用默認(rèn)圖像");bofang=newJMenuItem("播放");yinyue.add(bofang);gradeMenu.add(oneGrade);gradeMenu.add(twoGrade);choiceImage.add(newImage);choiceImage.add(defaultImage);bar.add(gradeMenu);bar.add(yinyue);bar.add(choiceImage);setJMenuBar(bar);bofang.addActionListener(this);oneGrade.addActionListener(this);twoGrade.addActionListener(this);newImage.addActionListener(this);defaultImage.addActionListener(this);startButton=newJButton("開(kāi)始");startButton.addActionListener(this);group=newButtonGroup();digitPlay=newJRadioButton("數(shù)字玩法",true);imagePlay=newJRadioButton("圖像玩法",false);group.add(digitPlay);group.add(imagePlay);puzzlePad=newPuzzlePad();puzzlePad.setGrade(1);puzzlePad.setIsDigitPlay();add(puzzlePad,BorderLayout.CENTER);JPanelpNorth=newJPanel();pNorth.add(digitPlay);pNorth.add(imagePlay);pNorth.add(startButton);pNorth.add(newJLabel("如果圖像不能立刻顯示,請(qǐng)?jiān)賳螕粢淮伟磁?));add(pNorth,BorderLayout.NORTH);add(puzzlePad.getHandleMove(),BorderLayout.SOUTH);validate();setVisible(true);setBounds(100,50,550,380);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);try{image=tool.createImage(newFile("dog.jpg").toURI().toURL());puzzlePad.setImage(image);}catch(Exceptionexp){}}publicvoidactionPerformed(ActionEvente){if(e.getSource()==startButton){if(digitPlay.isSelected()){puzzlePad.setIsDigitPlay();}elseif(imagePlay.isSelected()){puzzlePad.setImage(image);puzzlePad.setIsImagePlay();}}elseif(e.getSource()==bofang){Sounds=newSound("D:\\wcq\\fu.wav");s.start();}elseif(e.getSource()==oneGrade){puzzlePad.setGrade(1);}elseif(e.getSource()==twoGrade){puzzlePad.setGrade(2);}elseif(e.getSource()==newImage){FileNameExtensionFilterfilter=newFileNameExtensionFilter("JPG&GIFImages","jpg","gif");JFileChooserchooser=newJFileChooser();chooser.setFileFilter(filter);intstate=chooser.showOpenDialog(null);Filefile=chooser.getSelectedFile();if(file!=null&&state==JFileChooser.APPROVE_OPTION){try{image=tool.createImage(file.toURI().toURL());puzzlePad.setImage(image);}catch(Exceptionexp){}}}elseif(e.getSource()==defaultImage){try{image=tool.createImage(newFile("dog.jpg").toURI().toURL());puzzlePad.setImage(image);}catch(Exceptionexp){}}}publicstaticvoidmain(Stringargs[]){newPuzzleGame();}}附錄1.2PuzzlePad模塊源程序importjavax.swing.*;importjava.io.*;importjava.util.*;importjava.awt.*;publicclassPuzzlePadextendsJPanel{Point[][]point;Block[][]block;intdistance=56,grade,m=3,n=3;HandleMovehandleMove;HandleImagehandleImage;VerifySuccessverifySuccess;Imageimage;booleanisDigitPlay;publicPuzzlePad(){setBackground(Color.gray);setLayout(null);handleMove=newHandleMove();handleMove.initSpendTime();handleImage=newHandleImage();verifySuccess=newVerifySuccess();handleMove.setVerifySuccess(verifySuccess);}publicHandleMovegetHandleMove(){returnhandleMove;}publicvoidsetImage(Imageimage){this.image=image;}publicvoidsetGrade(intgrade){this.grade=grade;if(grade==1){m=4;n=4;}elseif(grade==2){m=5;n=5;}}publicintgetGrade(){returngrade;}privatevoidneedInit(){handleMove.initSpendTime();removeAll();point=newPoint[m][n];block=newBlock[m][n];intHspace=distance,Vspace=distance;for(inti=0;i<m;i++){for(intj=0;j<n;j++){point[i][j]=newPoint(Hspace,Vspace);Hspace=Hspace+distance;}Hspace=distance;Vspace=Vspace+distance;}handleMove.setPoint(point);verifySuccess.setPoint(point);handleMove.setVerifySuccess(verifySuccess);intk=0;for(inti=0;i<m;i++){if(i<m-1)for(intj=0;j<n;j++){block[i][j]=newBlock();block[i][j].addMouseListener(handleMove);k++;}elsefor(intj=0;j<n-1;j++){block[i][j]=newBlock();block[i][j].addMouseListener(handleMove);k++;}}for(inti=0;i<m;i++){if(i<m-1)for(intj=0;j<n;j++){add(block[i][j]);block[i][j].setSize(distance,distance);block[i][j].setLocation(point[i][j].getX(),point[i][j].getY());block[i][j].setAtPoint(point[i][j]);point[i][j].setBlock(block[i][j]);point[i][j].setHaveBlock(true);}elsefor(intj=0;j<n-1;j++){add(block[i][j]);block[i][j].setSize(distance,distance);block[i][j].setLocation(point[i][j].getX(),point[i][j].getY());block[i][j].setAtPoint(point[i][j]);point[i][j].setBlock(block[i][j]);point[i][j].setHaveBlock(true);}}}publicvoidsetIsDigitPlay(){needInit();isDigitPlay=true;ArrayList<Integer>numberList=newArrayList<Integer>();for(intk=0;k<m*n-1;k++){numberList.add(k+1);}Object[]object=numberList.toArray();verifySuccess.setObject(object);Collections.shuffle(numberList);intk=0;for(inti=0;i<m;i++){if(i<m-1)for(intj=0;j<n;j++){block[i][j].setObject(numberList.get(k));k++;}elsefor(intj=0;j<n-1;j++){block[i][j].setObject(numberList.get(k));k++;}}repaint();}publicvoidsetIsImagePlay(){needInit();isDigitPlay=false;ArrayList<Image>imageList=newArrayList<Image>();Image[]blockImage=handleImage.getImages(image,m,n);for(intk=0;k<blockImage.length-1;k++){imageList.add(blockImage[k]);}Object[]object=imageList.toArray();verifySuccess.setObject(object);Collections.shuffle(imageList);intk=0;for(inti=0;i<m;i++){if(i<m-1)for(intj=0;j<n;j++){block[i][j].setObject(imageList.get(k));block[i][j].repaint();block[i][j].setBorder(null);k++;}elsefor(intj=0;j<n-1;j++){block[i][j].setObject(imageList.get(k));block[i][j].repaint();block[i][j].setBorder(null);k++;}}repaint();}publicvoidpaintComponent(Graphicsg){super.paintComponent(g);if(isDigitPlay==false)try{g.drawImage(image,20+distance*(m+1),point[0][0].getY(),distance*m,distance*n,this);}catch(Exceptionexp){}}}附錄1.3Block類(lèi)模塊源程序importjavax.swing.*;importjava.awt.*;publicclassBlockextendsJTextField{Pointpoint;Objectobject;Block(){setEditable(false);setHorizontalAlignment(JTextField.CENTER);setForeground(Color.blue);}publicvoidsetAtPoint(Pointp){point=p;}publicPointgetAtPoint(){returnpoint;}publicvoidsetObject(Objectobject){this.object=object;if(objectinstanceofInteger){Integernumber=(Integer)object;setText(""+Value());}elseif(objectinstanceofImage){repaint();}}publicObjectgetObject(){returnobject;}publicvoidpaintComponent(Graphicsg){super.paintComponent(g);intw=getBounds().width;inth=getBounds().height;try{g.drawImage((Image)object,0,0,w,h,this);}catch(Exceptionexp){}}}附錄1.4Point類(lèi)模塊源程序publicclassPoint{intx,y;booleanhaveBlock;Blockblock=null;publicPoint(intx,inty){this.x=x;this.y=y;}publicbooleanisHaveBlock(){returnhaveBlock;}publicvoidsetHaveBlock(booleanboo){haveBlock=boo;}publicintgetX(){returnx;}publicintgetY(){returny;}publicbooleanequals(Pointp){if(p.getX()==this.getX()&&p.getY()==this.getY())returntrue;elsereturnfalse;}publicvoidsetBlock(Blockblock){this.block=block;}publicBlockgetBlock(){returnblock;}}附錄1.5HandleImage類(lèi)模塊源程序importjava.awt.*;importjavax.swing.*;importjava.awt.image.*;publicclassHandleImageextendsJComponent{intimageWidth,imageHeight;Toolkittool;HandleImage(){tool=getToolkit();}publicImage[]getImages(Imageimage,introws,intcolums){Image[]blockImage=newImage[rows*colums];try{imageWidth=image.getWidth(this);imageHeight=image.getHeight(this);intw=imageWidth/colums;inth=imageHeight/rows;intk=0;PixelGrabberpg=null;ImageProducerip=null;for(inti=0;i<rows;i++){for(intj=0;j<colums;j++){intpixels[]=newint[w*h];pg=newPixelGrabber(image,j*w,i*h,w,h,pixels,0,w);pg.grabPixels();ip=newMemoryImageSource(w,h,pixels,0,w);blockImage[k]=tool.createImage(ip);k++;}}}catch(Exceptionee){}returnblockImage;}}附錄1.6HandleMove類(lèi)模塊源程序importjava.awt.event.*;importjava.awt.*;importjavax.swing.*;publicclassHandleMoveextendsJPanelimplementsMouseListener,ActionListener{Point[][]point;intspendTime=0;javax.swing.TimerrecordTime;JTextFieldshowTime;VerifySuccessverify;HandleMove(){recordTime=newjavax.swing.Timer(1000,this);showTime=newJTextField(16);showTime.setEditable(false);showTime.setHorizontalAlignment(JTextField.CENTER);showTime.setFont(newFont("楷體_GB2312",Font.BOLD,16));JLabelhitMess=newJLabel("用鼠標(biāo)單擊方塊",JLabel.CENTER);hitMess.setFont(newFont("楷體_GB2312",Font.BOLD,18));add(hitMess);add(showTime);setForeground(Color.red);setBackground(Color.yellow);}publicvoidsetPoint(Point[][]p){point=p;}publicvoidinitSpendTime(){recordTime.stop();spendTime=0;showTime.setText(null);}publicvoidsetVerifySuccess(VerifySuccessverify){this.verify=verify;}publicvoidmousePressed(MouseEvente){recordTime.start();Blockblock=null;block=(Block)e.getSource();intw=block.getBounds().width;inth=block.getBounds().height;intstartI=-1,startJ=-1,endI=-1,endJ=-1;PointstartPoint=block.getAtPoint();PointendPoint=null;for(inti=0;i<point[0].length;i++){for(intj=0;j<point[0].length;j++)if(point[i][j].equals(startPoint)){startI=i;startJ=j;break;}}for(inti=0;i<point.length;i++){for(intj=0;j<point[0].length;j++)if(point[i][j].isHaveBlock()==false){endI=i;endJ=j;endPoint=point[i][j];break;}}booleanmoveCondition1=Math.abs(endI-startI)==1&&endJ==startJ;booleanmoveCondition2=Math.abs(endJ-startJ)==1&&endI==startI;if(moveCondition1||moveCondition2){block.setLocation(endPoint.getX(),endPoint.getY());block.setAtPoint(endPoint);endPoint.setBlock(block);endPoint.setHaveBlock(true);startPoint.setHaveBlock(false);}}publicvoidactionPerformed(ActionEvente){spendTime++;showTime.setText("您的用時(shí):"+spendTime+"秒");}publicvoidmouseReleased(MouseEvente){if(verify.isSuccess()){recordTime.stop();JOptionPane.showMessageDialog(this,"您成功了!","消息框",JOptionPane.INFORMATION_MESSAGE);}}publicvoidmouseEntered(MouseEvente){}publicvoidmouseExited(MouseEvente){}publicvoidmouseClicked(MouseEvente){}}附錄1.7VertfySuccess類(lèi)模塊源程序publicclassVerifySuccess{Point[][]point;Object[]object;publicvoidsetPoint(Point[][]point){this.point=point;}publicvoidsetObject(Object[]object){this.object=object;}publicbooleanisSuccess(){booleanboo=true;intk=0;for(inti=0;i<point.length;i++){if(i<point.length-1){for(intj=0;j<point[i].length;j++){if(!(point[i][j].getBlock().getObject()==object[k])){boo=false;break;}k++;}}else{for(intj=0;j<point[i].length-1;j++){

溫馨提示

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

評(píng)論

0/150

提交評(píng)論