JAVA課程設(shè)計說明書模板_第1頁
JAVA課程設(shè)計說明書模板_第2頁
JAVA課程設(shè)計說明書模板_第3頁
JAVA課程設(shè)計說明書模板_第4頁
JAVA課程設(shè)計說明書模板_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、目 錄1. 摘要12. 概述22.1課程設(shè)計目的22.2課程設(shè)計內(nèi)容和要求33. 系統(tǒng)需求分析33.1 系統(tǒng)目標(biāo)33.2 主體功能34.系統(tǒng)總體設(shè)計34.1 系統(tǒng)的功能模塊劃分35.主要工作原理和關(guān)鍵技術(shù)介紹45.1 魔方旋轉(zhuǎn)原理技術(shù)介紹45.2關(guān)鍵問題解決思路55.2.1 三維魔方的描述問題的解決方法55.2.2 魔方整體旋轉(zhuǎn)問題的解決辦法56 .代碼調(diào)試67總結(jié)18參考文獻(xiàn)19塔里木大學(xué)課程設(shè)計網(wǎng)頁魔方塊游戲1. 摘要隨著科技發(fā)展和社會進(jìn)步,尤其是計算機(jī)大范圍的普及,計算機(jī)應(yīng)用逐漸由大規(guī)模計算的海量數(shù)據(jù)處理轉(zhuǎn)向大規(guī)模的事物處理和對工作流的管理,這就產(chǎn)生一臺式計算機(jī)為核心的管理系統(tǒng)。在80年

2、代成為一種流行的游戲,在中國把這游戲叫魔方塊游戲。真正的魔方塊總是讓人不停地鉆研,人們通過旋轉(zhuǎn)魔方,開發(fā)自己的思想,可是有時候買一個魔方還是一件很麻煩的事情,很多人有自己的電腦,他們有時候也想能否在電腦上就能體驗(yàn)一下玩魔方的感覺。很多人都有自己的電腦,他們有時候也想能否在電腦上就能體驗(yàn)一下玩魔方的感覺。Java高級程序設(shè)計課程設(shè)計是計算機(jī)科學(xué)與技術(shù)專業(yè)的主要時實(shí)踐性教學(xué)環(huán)節(jié)。解決具有一定規(guī)模的,具有實(shí)際意義的應(yīng)用題,實(shí)現(xiàn)理論課所要求掌握的java解決實(shí)際問題。提高進(jìn)行工程設(shè)計的基本技能及分析,解決實(shí)際問題的能力,為畢業(yè)設(shè)計和以后的工程實(shí)踐打下良好的基礎(chǔ)。解決具有一定規(guī)模的,具有實(shí)際意義的應(yīng)用題

3、,實(shí)現(xiàn)理論課所要求掌握的java解決實(shí)際問題。2. 概述2.1課程設(shè)計目的1.真實(shí)的魔方總是讓人不停地鉆研,人們通過旋轉(zhuǎn)魔方,開發(fā)自己的思維,可是有時候買一個魔方還是一件很麻煩的事情,很多人都有自己的電腦,他們有時候也想能否在電腦上就能體驗(yàn)一下玩魔方的感覺。2知道魔方的發(fā)明和流行歷史。3知道魔方的流行玩法。4知道三階魔方的結(jié)構(gòu)。 5提高學(xué)生科技論文寫作能力,規(guī)范完成課程設(shè)計報告。2.2課程設(shè)計內(nèi)容和要求魔方,Rubliks Cube又叫魔術(shù)方塊,也稱魯比克方塊。是匈牙利布達(dá)佩斯建筑學(xué)院厄爾諾.魯比克教授在1974年發(fā)明的。1.三階魔方核心是一個軸,并由26個小正方體組成。包括中心方塊6個,固定

4、不動,只一面有顏色。邊角方塊8個(3面有色)(角塊)可移動 。邊緣方塊12個(2面有色)(棱塊)亦可轉(zhuǎn)動。2對魔方的應(yīng)用也樂此不疲,數(shù)學(xué)與計算機(jī)方面,研究工作者以魔方為原型和工具,研究代數(shù)學(xué),計算機(jī)圖形圖像,加密算法理論等等。3.在電腦上最好能都簡單的通過鼠標(biāo)控制魔方游戲使其操作更簡單。4.當(dāng)用戶按要求排列好方塊后,程序彈出對話框,提示用戶成功的消息。5.繪制三維仿真魔方:繪制一個六面體,是一個3*3*3形式的魔方。6. 通過引進(jìn)開發(fā)包DirectX基于C#,來實(shí)現(xiàn)繪制三維的仿真實(shí)的九宮格虛擬魔方,并且通過鼠標(biāo)控制其整體的旋轉(zhuǎn),和各個層的旋轉(zhuǎn)。3.系統(tǒng)需求分析3.1 系統(tǒng)目標(biāo)使用所學(xué)知識制作一

5、個基于java的魔方游戲。3.2 主體功能這個程序定義了一些組件,工具欄按鈕,文本區(qū)和菜單。魔板游戲程序設(shè)計通過繪制三維仿真魔方 等類來實(shí)現(xiàn)魔方游戲的整體功能。4.系統(tǒng)總體設(shè)計4.1 系統(tǒng)的功能模塊劃分魔方游戲所用到的一些重要的類以及之間的組合關(guān)系如下圖。 5主要工作原理和關(guān)鍵技術(shù)介紹5.1 魔方旋轉(zhuǎn)原理技術(shù)介紹魔方的旋轉(zhuǎn)主要是通過算法記錄旋轉(zhuǎn)前各個小塊的顏色,旋轉(zhuǎn)后重新對其著色。對圖形不停地進(jìn)行渲染。 圖 1-1 魔方塊外面圖魔方6面正方體。核心是一個軸,并由26小正方體組成包括中心方塊有6個,固定不動只有一面有顏色。邊角方塊8個可轉(zhuǎn)動。5.2關(guān)鍵問題解決思路5.2.1 三維魔方的描述問題的

6、解決方法定義了一個Block類,用來表示一個小的六面體,以及它所在的位置的世界坐標(biāo),和給它的每個面著色的實(shí)現(xiàn)。5.2.2 魔方整體旋轉(zhuǎn)問題的解決辦法通過鼠標(biāo)點(diǎn)擊拖動,控制魔方的整體旋轉(zhuǎn)。定義了一個鼠標(biāo)監(jiān)聽函數(shù),鼠標(biāo)移動后,坐標(biāo)的改變將引起視圖顯示的角度的變化,然后視覺上給人以不同的效果。5.2.3魔方每一層旋轉(zhuǎn)和打亂問題的解決方法每一層的旋轉(zhuǎn),定義了一個旋轉(zhuǎn)函數(shù),每次指定旋轉(zhuǎn)層,根據(jù)其中心塊的表面顏色,來執(zhí)行函數(shù)。旋轉(zhuǎn)函數(shù)通過改變塊的顏色,視覺上給人以旋轉(zhuǎn)后的效果,即重新對魔方的部分要求被改變的小塊進(jìn)行著色。5.3 魔方的打亂 魔方的打亂只是多次隨機(jī)調(diào)用魔方的層旋轉(zhuǎn)函數(shù)。系統(tǒng)實(shí)現(xiàn) 6.代碼調(diào)試

7、import java.applet.*;import java.awt.*;import java.awt.event.*;import java.awt.image.*;import java.awt.geom.*;import static java.awt.RenderingHints.*;import javax.swing.Timer;public class m extends Applet implements ActionListener,MouseListener,MouseMotionListenerprivate int xyz; /4個坐標(biāo)構(gòu)成的面private do

8、uble x,y,z; /原始點(diǎn)private double x1,y1,z1; / 旋轉(zhuǎn)后的點(diǎn)private double mxy=1,0,0,0,1,0,0,0,1; /旋轉(zhuǎn)矩陣private int time=0;private int colors=0x70e33e,0x65f0e4,0xf20f2f,0xffff00,0x454545,0xaaaaaa; /六面色privateint 數(shù)量=4; /在此設(shè)置是(4*4)的魔方private int 視距=800; /越大越遠(yuǎn)private int 鼠標(biāo)點(diǎn)=-1; /裝的是點(diǎn)擊后得到的方塊在xyz里的索引private int 鼠標(biāo)點(diǎn)擊

9、=-1,-1; /點(diǎn)擊時的鼠標(biāo)坐標(biāo)private int 鼠標(biāo)移動=-1,-1;private double nou;/旋轉(zhuǎn)矩陣private double 段號;private int 取軸;private BufferedImage bi;private Graphics2D big;/定時器public void actionPerformed(ActionEvent e)if(time>0)for(int i=0;i<數(shù)量*數(shù)量*6;i+)if(get軸(i)for(int u=0;u<4;u+)double hh=xxyziu,yxyziu,zxyziu;doubl

10、e hjh=setMxy(hh,nou);xxyziu=hjh0;yxyziu=hjh1;zxyziu=hjh2;time-;repaint();/Download by /初始化數(shù)據(jù)public void init()double 臨時點(diǎn)=new double3;int i1,i2,i3,i4;int 直徑=100;int 邊距=8;int 中心點(diǎn)=(直徑+邊距)*數(shù)量-邊距)/2;x=new double數(shù)量*數(shù)量*數(shù)量<<3;y=new double數(shù)量*數(shù)量*數(shù)量<<3;z=new double數(shù)量*數(shù)量*數(shù)量<<3;x1=new double數(shù)量*

11、數(shù)量*數(shù)量<<3;y1=new double數(shù)量*數(shù)量*數(shù)量<<3;z1=new double數(shù)量*數(shù)量*數(shù)量<<3;xyz=new int數(shù)量*數(shù)量*數(shù)量<<14;double X軸矩陣=1,0,0,0,0,1,0,-1,0;double Y軸矩陣=0,0,1,0,1,0,-1,0,0;for(i1=0;i1<數(shù)量;i1+)i4=i1<<2;xi4+3=xi4=i1*(直徑+邊距)-中心點(diǎn);xi4+1=xi4+2=xi4+直徑;yi4+1=yi4=中心點(diǎn);yi4+2=yi4+3=yi4-直徑;zi4=zi4+1=zi4+2=z

12、i4+3=中心點(diǎn);for(i2=1;i2<數(shù)量;i2+)for(i1=0;i1<數(shù)量*4;i1+)xi2*數(shù)量*4+i1=xi1;zi2*數(shù)量*4+i1=zi1;yi2*數(shù)量*4+i1=yi1-i2*(直徑+邊距);for(i2=0;i2<3;i2+)for(i1=0;i1<數(shù)量*數(shù)量*4;i1+)臨時點(diǎn)0=xi2*數(shù)量*數(shù)量*4+i1;臨時點(diǎn)1=yi2*數(shù)量*數(shù)量*4+i1;臨時點(diǎn)2=zi2*數(shù)量*數(shù)量*4+i1;臨時點(diǎn)=setMxy(臨時點(diǎn),X軸矩陣);x(i2+1)*數(shù)量*數(shù)量*4+i1=臨時點(diǎn)0;y(i2+1)*數(shù)量*數(shù)量*4+i1=臨時點(diǎn)1;z(i2+1)*數(shù)

13、量*數(shù)量*4+i1=臨時點(diǎn)2;for(i1=0;i1<數(shù)量*數(shù)量*4;i1+)臨時點(diǎn)0=xi1;臨時點(diǎn)1=yi1;臨時點(diǎn)2=zi1;double sy=setMxy(臨時點(diǎn),Y軸矩陣);x數(shù)量*數(shù)量*16+i1=sy0;y數(shù)量*數(shù)量*16+i1=sy1;z數(shù)量*數(shù)量*16+i1=sy2;double kj=getMxy(getMxy(Y軸矩陣,Y軸矩陣),Y軸矩陣);sy=setMxy(臨時點(diǎn),kj);x數(shù)量*數(shù)量*20+i1=sy0;y數(shù)量*數(shù)量*20+i1=sy1;z數(shù)量*數(shù)量*20+i1=sy2;for(i1=0;i1<數(shù)量*數(shù)量*6;i1+)for(i2=0;i2<4

14、;i2+)xyzi1i2=i1*4+i2;addMouseMotionListener(this);addMouseListener(this);Timer t=new Timer(40,this);setBackground(new Color(0x00ff00);bi= new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);big = bi.createGraphics();t.start();/生成圖像public void paint(Graphics g)int i,u,o;Graphics2D g2=(Graphics2D)

15、g;big.setColor(new Color(0x000000);big.fillRect(0,0,800,600);double xx1=new double3;for(i=0;i<數(shù)量*數(shù)量*24;i+)xx10=xi;xx11=yi;xx12=zi;xx1=setMxy(xx1,mxy);x1i=xx10;y1i=xx11;z1i=xx12;for(i=0;i<數(shù)量*數(shù)量*6;i+)int lx1=new int4;int ly1=new int4;int lz1=new int4;for(u=0;u<4;u+)lz1u=(int)(z1xyziu)-視距;lx1u

16、=(int)(x1xyziu)*400/-lz1u+400;ly1u=(int)(y1xyziu)*400/-lz1u+300;big.setColor(new Color(colorsi/數(shù)量/數(shù)量);if(getabc(lx10,ly10,lx11,ly11,lx13,ly13)big.fillPolygon(lx1,ly1,4);g2.drawImage(bi,0,0,null);public boolean get軸(int i)if(取軸=0)return (xxyzi0>段號-2 && xxyzi0<段號+2)|(xxyzi1>段號-2 &

17、& xxyzi1<段號+2) | (xxyzi2>段號-2 && xxyzi2<段號+2);else if(取軸=1)return (yxyzi0>段號-2 && yxyzi0<段號+2) | (yxyzi1>段號-2 && yxyzi1<段號+2) | (yxyzi2>段號-2 && yxyzi2<段號+2);elsereturn (zxyzi0>段號-2 && zxyzi0<段號+2) | (zxyzi1>段號-2 &&am

18、p; zxyzi1<段號+2) | (zxyzi2>段號-2 && zxyzi2<段號+2);/坐標(biāo)旋轉(zhuǎn)public double setMxy(double l,double m)double xx2=0,0,0;for(int u=0;u<3;u+)for(int o=0;o<3;o+)xx2u+=lo*mou;return xx2;/矩陣乘法public double getMxy(double xx,double yy) int i=0,u=0,o=0;double xx1=0,0,0,0,0,0,0,0,0;for(i=0;i<3;

19、i+)for(u=0;u<3;u+)for(o=0;o<3;o+)xx1iu+=xxio*yyou;return xx1;/判斷是否是順時針方向排列public boolean getabc(double ax,double ay,double bx,double by,double cx,double cy) double cax=cx-ax;double cay=cy-ay;double bcx=bx-cx;double bcy=by-cy;return cax*bcy>cay*bcx;public void mouseClicked(MouseEvent e)publi

20、c void mouseEntered(MouseEvent e)public void mouseExited(MouseEvent e)/鼠標(biāo)按下時的動作public void mousePressed(MouseEvent e)if(e.getButton()=1)鼠標(biāo)點(diǎn)=getf(e.getX(),e.getY();鼠標(biāo)點(diǎn)擊0=e.getX();鼠標(biāo)點(diǎn)擊1=e.getY();else if(e.getButton()=3)鼠標(biāo)移動0=e.getX();鼠標(biāo)移動1=e.getY();public double 取點(diǎn)(int n,double o)double li=oxyzn0;if(l

21、i>0)for(int i=1;i<4;i+)li=(li>oxyzni)?li:oxyzni;elsefor(int i=1;i<4;i+)li=(li<oxyzni)?li:oxyzni;return li;/鼠標(biāo)放開時的動作public void mouseReleased(MouseEvent e)if(e.getButton()=1 && time=0 && 鼠標(biāo)點(diǎn)!=-1)double 點(diǎn)=new double2;鼠標(biāo)點(diǎn)擊0=e.getX()-鼠標(biāo)點(diǎn)擊0;鼠標(biāo)點(diǎn)擊1=e.getY()-鼠標(biāo)點(diǎn)擊1;if(Math.abs(

22、鼠標(biāo)點(diǎn)擊0)>Math.abs(鼠標(biāo)點(diǎn)擊1)鼠標(biāo)點(diǎn)擊1=0;else鼠標(biāo)點(diǎn)擊0=0;double cos1=Math.cos(2*Math.PI/180);double sin1=Math.sin(2*Math.PI/180);if( (zxyz鼠標(biāo)點(diǎn)0>zxyz鼠標(biāo)點(diǎn)2-10 &&zxyz鼠標(biāo)點(diǎn)0<zxyz鼠標(biāo)點(diǎn)1+10) && (zxyz鼠標(biāo)點(diǎn)1>zxyz鼠標(biāo)點(diǎn)2-10 &&zxyz鼠標(biāo)點(diǎn)1<zxyz鼠標(biāo)點(diǎn)2+10) )double hu=Math.atan2(mxy01,mxy00);點(diǎn)0=鼠標(biāo)點(diǎn)擊0*Math

23、.cos(hu)+鼠標(biāo)點(diǎn)擊1*Math.sin(hu);點(diǎn)1=鼠標(biāo)點(diǎn)擊1*Math.cos(hu)-鼠標(biāo)點(diǎn)擊0*Math.sin(hu);if(Math.abs(點(diǎn)0)>Math.abs(點(diǎn)1)int l=(點(diǎn)0>0)?-1:1;if(zxyz鼠標(biāo)點(diǎn)0<0)l*=-1;double anou=cos1,0,sin1*l,0,1,0,-sin1*l,0,cos1;nou=anou;段號=取點(diǎn)(鼠標(biāo)點(diǎn),y);取軸=1;elseint l=(點(diǎn)1>0)?-1:1;double anou=1,0,0,0,cos1,sin1*l,0,-sin1*l,cos1;nou=anou;段

24、號=取點(diǎn)(鼠標(biāo)點(diǎn),x);取軸=0;else if( (xxyz鼠標(biāo)點(diǎn)0>xxyz鼠標(biāo)點(diǎn)2-10 &&xxyz鼠標(biāo)點(diǎn)0<xxyz鼠標(biāo)點(diǎn)1+10) && (xxyz鼠標(biāo)點(diǎn)1>xxyz鼠標(biāo)點(diǎn)2-10 &&xxyz鼠標(biāo)點(diǎn)1<xxyz鼠標(biāo)點(diǎn)2+10) )double hu=Math.atan2(mxy21,mxy20);點(diǎn)0=鼠標(biāo)點(diǎn)擊0*Math.cos(hu)+鼠標(biāo)點(diǎn)擊1*Math.sin(hu);點(diǎn)1=鼠標(biāo)點(diǎn)擊1*Math.cos(hu)-鼠標(biāo)點(diǎn)擊0*Math.sin(hu);if(Math.abs(點(diǎn)0)>Math.ab

25、s(點(diǎn)1)int l=(點(diǎn)0>0)?-1:1;if(xxyz鼠標(biāo)點(diǎn)0>0)l*=-1;double anou=cos1,0,sin1*l,0,1,0,-sin1*l,0,cos1;nou=anou;段號=取點(diǎn)(鼠標(biāo)點(diǎn),y);取軸=1;elseint l=(點(diǎn)1>0)?-1:1;double anou=cos1,sin1*l,0,-sin1*l,cos1,0,0,0,1;nou=anou;段號=取點(diǎn)(鼠標(biāo)點(diǎn),z);取軸=2;elsedouble hu=Math.atan2(mxy01,mxy00);點(diǎn)0=鼠標(biāo)點(diǎn)擊0*Math.cos(hu)+鼠標(biāo)點(diǎn)擊1*Math.sin(hu)

26、;點(diǎn)1=鼠標(biāo)點(diǎn)擊1*Math.cos(hu)-鼠標(biāo)點(diǎn)擊0*Math.sin(hu);if(Math.abs(點(diǎn)0)>Math.abs(點(diǎn)1)int l=(點(diǎn)1>0)?-1:1;System.out.println(yxyz鼠標(biāo)點(diǎn)0);if(yxyz鼠標(biāo)點(diǎn)0<0)l*=-1;double anou=cos1,sin1*l,0,-sin1*l,cos1,0,0,0,1;nou=anou;段號=取點(diǎn)(鼠標(biāo)點(diǎn),z);取軸=2;Elseint l=(點(diǎn)1>0)?-1:1;double anou=1,0,0,0,cos1,sin1*l,0,-sin1*l,cos1;nou=anou

27、;段號=取點(diǎn)(鼠標(biāo)點(diǎn),x);取軸=0;time=45;/System.out.println(hu*180/Math.PI);鼠標(biāo)點(diǎn)=-1;鼠標(biāo)移動0=鼠標(biāo)移動1=-1;/鼠標(biāo)按下移動時的動作public void mouseDragged(MouseEvent e)if(鼠標(biāo)移動0!=-1&&鼠標(biāo)移動1!=-1)double oix=(鼠標(biāo)移動0-e.getX()*Math.PI/720;double oiy=(鼠標(biāo)移動1-e.getY()*Math.PI/720;double fff=1,0,0,0,1,0,0,0,1;fff00=fff22=Math.cos(oix);f

28、ff02=Math.sin(oix);fff20=-fff02;double fff1=1,0,0,0,1,0,0,0,1;fff111=fff122=Math.cos(oiy);fff112=Math.sin(oiy);fff121=-fff112;mxy=getMxy(mxy,fff);mxy=getMxy(mxy,fff1);鼠標(biāo)移動0=e.getX();鼠標(biāo)移動1=e.getY();public void mouseMoved(MouseEvent e)/判斷鼠標(biāo)點(diǎn)是在哪個方塊上public int getf(int xx,int yy)boolean t1=new boolean4;

29、double x4,y4,z4,x5,y5,z5;for(int i=0;i<數(shù)量*數(shù)量*6;i+)for(int j=0;j<4;j+)int l=(j=3)?0:j+1;z4=z1xyzij-視距;x4=x1xyzij*400/-z4+400;y4=y1xyzij*400/-z4+300;z5=z1xyzil-視距;x5=x1xyzil*400/-z5+400;y5=y1xyzil*400/-z5+300;t1j=getabc(x4,y4,x5,y5,xx,yy);if(t10&&t11&&t12&&t13)return i;return -1; 圖 1-2 魔方塊后面旋轉(zhuǎn)運(yùn)行旋轉(zhuǎn)的方塊是

溫馨提示

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

評論

0/150

提交評論