版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告</p><p> 坦克大戰(zhàn)游戲設(shè)計(java版)</p><p> 組長: </p><p> 組員: </p><p> 指導(dǎo)老師: &l
2、t;/p><p> 所在學(xué)院: 電子與信息工程學(xué)院 </p><p> 班級: 軟件工程1001班 </p><p><b> 目錄</b></p><p><b> 目錄1</b></p><p><b>
3、 1.需求分析2</b></p><p> 1.1選題的意義及背景2</p><p> 1.2本組課程設(shè)計的目標(biāo)2</p><p><b> 1.3人員組成3</b></p><p><b> 2.設(shè)計方案3</b></p><p><b&
4、gt; 2.1原始數(shù)據(jù)3</b></p><p><b> 2.2輸出數(shù)據(jù)3</b></p><p> 2.3對數(shù)據(jù)的處理3</p><p> 2.4 程序流程圖4</p><p> 2.5封裝的數(shù)據(jù)元素5</p><p> 2.6游戲的主要組成5</p
5、><p><b> 3.詳細設(shè)計5</b></p><p> 3.1構(gòu)建游戲主類5</p><p> 3.2構(gòu)建坦克類Tank6</p><p> 3.3添加炮彈Missile類9</p><p> 3.4實現(xiàn)坦克的互相攻擊10</p><p> 3.5創(chuàng)
6、建Explode類15</p><p> 3.6添加障礙物16</p><p> 3.7添加血塊類18</p><p> 4設(shè)計結(jié)果與分析19</p><p><b> 5 設(shè)計體會22</b></p><p> 坦克大戰(zhàn)游戲的設(shè)計與實現(xiàn)</p><p>
7、; 摘 要:通過此次課程設(shè)計,深刻認識了單鏈表和順序表的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu),熟練掌握了線性表的存儲方式和一些基本操作,如單鏈表和線性表的建立、求表長操作、取元素操作、按值查找、插入和刪除操作等。通過綜合運用課程知識來設(shè)計一個初具規(guī)模的游戲-坦克大戰(zhàn)。借此熟練了數(shù)據(jù)結(jié)構(gòu)以及復(fù)雜條件語句在游戲中的作用、隨機函數(shù)在中型游戲中的應(yīng)用、游戲中狀態(tài)的概念和切換方法、游戲中速度的實現(xiàn)方法、覆蓋和碰撞問題的實現(xiàn)方法、使用API函數(shù)和Buffer實現(xiàn)
8、復(fù)雜的游戲圖像顯示以及聲音和輸入的處理。該游戲設(shè)計已經(jīng)實現(xiàn)以下功能:坦克能力說明、地圖說明、獎勵物品說明、游戲操作說明、游戲技術(shù)組成、“坦克大戰(zhàn)”游戲的創(chuàng)意、控件參數(shù)和窗體屬性的設(shè)置、游戲代碼設(shè)計等說明。</p><p> 關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu) java 游戲設(shè)計 函數(shù)和變量</p><p><b> 1.需求分析</b></p><p>
9、; 1.1選題的意義及背景</p><p> 運用數(shù)據(jù)結(jié)構(gòu)知識,開發(fā)一個基于J2SE的游戲-坦克大戰(zhàn)</p><p> 1.2本組課程設(shè)計的目標(biāo)</p><p> 培養(yǎng)自己綜合利用數(shù)據(jù)結(jié)構(gòu)進行程序設(shè)計的能力,主要是培養(yǎng)自己的綜合編程能力。</p><p> 基本實現(xiàn)游戲圖形界面,讓玩家能看到游戲給出的反饋,讓玩家能感受到游戲的樂趣&
10、lt;/p><p> 玩家能操縱特定的游戲元素</p><p> 不同隊伍的坦克須顯示不同的外觀,以分辨敵我</p><p> 坦克能夠開火攻擊敵方,但不能攻擊隊友</p><p> 需要有不可被子彈穿透的墻,且墻有可摧毀和不可摧毀兩種</p><p> 能夠模擬爆炸,實現(xiàn)較美觀的爆炸效果</p>
11、<p> 坦克有生命值,并非被擊中一次就會爆炸</p><p> 游戲中隨機出現(xiàn)血塊,可以將主戰(zhàn)坦克的血量加滿</p><p><b> 1.3人員組成</b></p><p><b> 組長:</b></p><p><b> 組內(nèi)成員:</b></
12、p><p><b> 2.設(shè)計方案</b></p><p><b> 2.1原始數(shù)據(jù)</b></p><p> 各種坦克的圖片,各種墻的圖片,基地圖片,爆炸的圖片,草地圖片,河道的圖片,藥劑的圖片。</p><p> 通過鍵盤操作,進行游戲。</p><p><b&
13、gt; 2.2輸出數(shù)據(jù)</b></p><p> 玩家需要從游戲輸出數(shù)據(jù)中獲得游戲信息,如坦克往上行駛,坦克發(fā)射了子彈,坦克爆炸等,這些均需要通過游戲數(shù)據(jù)的輸出來告知玩家</p><p><b> 2.3對數(shù)據(jù)的處理</b></p><p> 本次課程設(shè)計主要運用了數(shù)據(jù)結(jié)構(gòu)中的數(shù)組和鏈表以及向量的存儲,</p>
14、<p> 2.4 程序流程圖</p><p> TankClient類</p><p> 2.5封裝的數(shù)據(jù)元素 </p><p> 窗口:主窗口 TankClient</p><p> 游戲元素:子彈 Missile,坦克tank,墻壁brickWall,爆炸類explode, 敵人坦克enemyTank,血量Bloo
15、d,方向Direction,背景音樂sound.</p><p> 2.6游戲的主要組成</p><p><b> (1)構(gòu)建游戲主類</b></p><p> (2)構(gòu)建坦克類Tank</p><p> (3)添加炮彈Missile類</p><p> (4)實現(xiàn)坦克的互相攻擊<
16、/p><p> (5)創(chuàng)建Explode類</p><p><b> (6)添加障礙物</b></p><p><b> (7)添加血塊類</b></p><p><b> 3.詳細設(shè)計</b></p><p><b> 3.1構(gòu)建游戲主
17、類</b></p><p> 在主類中構(gòu)建一個主Frame框架,主要代碼如下:</p><p> this.setLocation(200,100);</p><p> this.setSize(Game_wide,Game_height);</p><p> this.setTitle("坦克大戰(zhàn)")
18、;</p><p> this.addWindowListener(new WindowAdapter(){</p><p> public void windowClosing(WindowEvent e){</p><p> System.exit(0);</p><p><b> }</b></p&g
19、t;<p><b> });</b></p><p> 3.2構(gòu)建坦克類Tank</p><p> 構(gòu)建主窗口中所需的Tank類,用單鏈表來存儲產(chǎn)生的每一輛坦克并將坦克加到主窗體中,</p><p> template <class U> //建立結(jié)構(gòu)體 定義結(jié)點</p><p&
20、gt; struct Node</p><p><b> {</b></p><p><b> U data;</b></p><p> Node<U> *next; // <T>也可以省略</p><p><b> };</b></p
21、><p> template <class T></p><p> LinkList<T>::LinkList()</p><p><b> {</b></p><p> first=new Node<T>; // 動態(tài)分配內(nèi)存</p><p> if(f
22、irst==NULL)</p><p><b> {</b></p><p> cout<<"out of memory"<<endl;</p><p><b> exit(0);</b></p><p><b> }</b>
23、</p><p> first->next=NULL; // 建立只有頭結(jié)點的空鏈表</p><p><b> }</b></p><p> template <class T> //用尾插法建立單鏈表</p><p> LinkList<T>::LinkList(T a[],i
24、nt n)</p><p> { // 尾插法</p><p> first=new Node<T>; // 生成頭結(jié)點</p><p> Node<T> *p=first; // 尾指針初始化</p><p> for(int i=0;i<n;i++)</p><p>
25、<b> {</b></p><p> Node<T> *s=new Node<T>; // 為每一個數(shù)組元素建立一個結(jié)點</p><p> s->data=a[i];</p><p> p->next=s;</p><p> p=s; // 插入到終端結(jié)點之后</p
26、><p><b> }</b></p><p> p->next=NULL;// 單鏈表建立完畢,將終端結(jié)點的指針域置空</p><p><b> } </b></p><p> Public void paint(Graphics g){ //調(diào)用paint方法畫坦克<
27、/p><p> myTank.draw(g);</p><p><b> }</b></p><p> 讓坦克朝八個方向運動起來,在主類TankClient中啟用多線程機制,讓系統(tǒng)不斷的進行重畫。并在Tank類中建立處理按鍵的方法,實現(xiàn)坦克的手動移動;根據(jù)坦克類修改TankClient主類,在主類中注冊事件監(jiān)聽器,并調(diào)用Tank類中的方法。主
28、類TankClient中使用雙緩沖機制消除坦克的閃爍現(xiàn)象。在Tank類當(dāng)中添加的按鍵方法,代碼如下:</p><p> public void keyPressed(KeyEvent e) {</p><p> int key = e.getKeyCode();</p><p> switch(key) {</p><p> case
29、 KeyEvent.VK_LEFT :</p><p> bL = true;</p><p><b> break;</b></p><p><b> ……</b></p><p><b> }</b></p><p> locateDire
30、ction();</p><p><b> }</b></p><p> public void keyReleased(KeyEvent e) {</p><p> int key = e.getKeyCode();</p><p> switch(key) {</p><p> ca
31、se KeyEvent.VK_LEFT :</p><p> bL = false;</p><p><b> break;</b></p><p><b> ……</b></p><p><b> }</b></p><p> locateD
32、irection();</p><p><b> }</b></p><p> TankClient類中的多線程機制的主要代碼如下:</p><p> new Thread(new PaintThread()).start();</p><p><b> ……</b></p>
33、<p> private class PaintThread implements Runnable {</p><p> public void run() {</p><p> while(true) {</p><p> repaint();</p><p><b> try {</b>&l
34、t;/p><p> Thread.sleep(100);</p><p> } catch (InterruptedException e) {</p><p> e.printStackTrace();</p><p><b> }</b></p><p><b> }</
35、b></p><p><b> }</b></p><p><b> }</b></p><p> 3.3添加炮彈Missile類</p><p> 在Missile類當(dāng)中添加x,y,dir等屬性以及常量。在Missile類當(dāng)中添加構(gòu)造方法,draw方法等必要方法。根據(jù)不同的方向,子彈
36、要進行不同的運動。在TankClient當(dāng)中new一顆子彈出來,要用到數(shù)據(jù)結(jié)構(gòu)單鏈表的插入方法。</p><p> template <class T></p><p> bool LinkList<T>::Insert(T key,int pos)</p><p><b> {</b></p>&l
37、t;p> Node<T> *p=first; </p><p><b> int j=0;</b></p><p> while(p&&j<pos-1) // 第pos-1個元素 j=1 j<pos</p><p><b> {</b></p>&l
38、t;p> p=p->next;</p><p><b> j++;</b></p><p><b> }</b></p><p> if(p==NULL)</p><p><b> {</b></p><p> cout<&
39、lt;"erro"<<endl;</p><p> return false;</p><p><b> }</b></p><p> Node<T> *s=new Node<T>;</p><p> s->data=key;</p>&
40、lt;p> s->next=p->next; // 向內(nèi)存申請一個結(jié)點s</p><p> p->next=s; // 將結(jié)點s插入到結(jié)點p之后</p><p> return true;</p><p><b> }</b></p><p> 3.4實現(xiàn)坦克的互相攻擊<
41、/p><p> (1)讓主戰(zhàn)坦克出炮彈</p><p> 1)在Tank類當(dāng)中增加對ctrl鍵的處理,使每按下ctrl鍵的時候,坦克打出一發(fā)炮彈。</p><p> case KeyEvent.VK_CTRL :</p><p><b> fire();</b></p><p><b&g
42、t; break;</b></p><p> 2)根據(jù)“坦克打出炮彈”這句話,確定Tank當(dāng)中的fire方法,其返回值為Missile。</p><p> public Missile fire() {</p><p><b> ……</b></p><p> Missile m = new Mis
43、sile(x, y, ptDir);</p><p><b> return m;</b></p><p><b> }</b></p><p> 3)為了解決坦克停下來也能開火的問題——給坦克加一炮筒,根據(jù)炮筒方向和 位置設(shè)定子彈的方向和位置并new出來,然后返回,每次move之后根據(jù)Ta
44、nk的新方向確定炮筒的方向。</p><p> if(this.dir != Direction.STOP) {</p><p> this.ptDir = this.dir;</p><p><b> }</b></p><p> 4)為了能夠打出多發(fā)炮彈,使用容器填裝多發(fā)炮彈,每當(dāng)抬起Ctrl鍵的時候就往容器
45、中加入新的炮彈</p><p> List<Missile> missiles = new ArrayList<Missile>();</p><p> 5)解決炮彈不消亡的問題,加入控制炮彈生死的量live,當(dāng)炮彈已經(jīng)死去就不需要對其重畫,當(dāng)炮彈飛出邊界就死亡,當(dāng)炮彈死亡就從容器中移去,移除用到了單鏈表的delete方法</p><p>
46、; template <class T></p><p> bool LinkList<T>::Delete(int pos)</p><p><b> {</b></p><p> Node<T> *p=first;</p><p><b> int j=0;&l
47、t;/b></p><p> while(p&&j<pos-1)// 查找第i-1個結(jié)點 j=1 j<pos</p><p><b> {</b></p><p> p=p->next;</p><p><b> j++;</b></p>
48、<p><b> }</b></p><p> if(!p||!p->next) // 結(jié)點p或結(jié)點p的后繼結(jié)點不存在</p><p><b> {</b></p><p> cout<<"error"<<endl;</p><p&
49、gt; return false;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> Node<T> *q=p->next;</p><p&g
50、t; T x=q->data; // 暫存被刪結(jié)點</p><p> p->next=q->next; // 摘鏈</p><p> delete q; </p><p> cout<<"被刪結(jié)點元素是:"<<x<<endl;</p><p> return
51、true;</p><p><b> }</b></p><p><b> }</b></p><p> // 通過邊界條件判定是否移除</p><p> if(x < 0 || y < 0 || x > TankClient.GAME_WIDTH || y > Ta
52、nkClient.GAME_HEIGHT){</p><p> live = false;</p><p><b> }</b></p><p> public void draw(Graphics g) {</p><p> if(!live) {</p><p> tc.missil
53、es.delete(this);</p><p><b> return;</b></p><p><b> }</b></p><p><b> ……</b></p><p><b> }</b></p><p> (2
54、)實現(xiàn)坦克的互相開火</p><p> 1)加入?yún)^(qū)分?jǐn)澄业腂oolean量good,根據(jù)敵我設(shè)置不同的坦克</p><p> 2)更新Tank的構(gòu)造函數(shù),加入good</p><p> 3)在TankClient中new出敵人并畫出</p><p> 4)在Missile中加入hitTank(Tank t)方法,返回布爾類型<
55、/p><p> 5)借用碰撞檢測的輔助類Rectangle,為Tank和Missile類都添加getRect()方法。</p><p> public Rectangle getRect() {</p><p> return new Rectangle(x, y, WIDTH, HEIGHT);</p><p><b> }&
56、lt;/b></p><p> 6)增加控制坦克生死的Boolean量live,如果live為false就不畫了。當(dāng)炮彈擊中敵人坦克時,坦克被打死,子彈也死去。 </p><p> public boolean hitTank(Tank t) { </p><p> if(this.getRect().intersects(t.getRect())
57、 && t.isLive()) {</p><p> t.setLive(false);</p><p> this.live = false;</p><p> return true;</p><p><b> }</b></p><p> return false;
58、</p><p><b> }</b></p><p> (3) 添加多輛坦克</p><p> 1)建一容器向里面添加敵人的Tank</p><p> List<Tank> tanks = new ArrayList<Tank>();</p><p><b&
59、gt; 添加Tank</b></p><p> for(int i=0; i<10; i++) {</p><p> tanks.add(new Tank(50 + 40*(i+1), 50, false, this));</p><p><b> }</b></p><p> 2)在Tank
60、類當(dāng)中添加hitTanks方法,打一系列Tank;在TankClient里面每發(fā)子彈都打tanks</p><p> Tank類當(dāng)中hitTanks方法</p><p> public boolean hitTanks(List<Tank> tanks) {</p><p> for(int i=0; i<tanks.size(); i++)
61、 { </p><p> if(hitTank(tanks.get(i))) {</p><p> return true;</p><p><b> }</b></p><p><b> }</b></p><p> return false;<
62、;/p><p><b> }</b></p><p> 在TankClient里面每發(fā)子彈都打tanks</p><p> for (int i=0; i<missiles.size(); i++) {</p><p> Missile m = missiles.get(i);</p><p
63、> m.hitTanks(tanks);</p><p> m.draw(g);</p><p><b> }</b></p><p> (4) 讓坦克更加智能</p><p> 1)讓敵軍坦克向隨機方向移動。添加隨機數(shù)產(chǎn)生器java.util.Random,move完成之后如果是敵軍坦克的,在走完一定的
64、步數(shù)之后隨機產(chǎn)生一個數(shù),來設(shè)定坦克的下一個方向。</p><p> if(!good) {</p><p> Direction[] dirs = Direction.values();</p><p> if(step == 0) {</p><p> step = r.nextInt(12) + 3;</p><
65、;p> int rn = r.nextInt(dirs.length);</p><p> dir = dirs[rn];</p><p><b> }</b></p><p><b> step --;</b></p><p> if(r.nextInt(40) >
66、38) this.fire();</p><p><b> }</b></p><p> 2)讓敵方坦克發(fā)射炮彈。本軍坦克不打本軍坦克,向炮彈添加表示好壞的Boolean量good。</p><p> 3)修改炮彈的構(gòu)造方法;修改Tank的fire方法;修改hitTank方法,坦克只能打擊對方。</p><p>
67、 3.5創(chuàng)建Explode類</p><p> (1)加入位置屬性x,,y,加入Boolean變量live</p><p> (2)加入draw方法,用一系列的爆炸圖片來模擬爆炸</p><p> (3)在TankClient當(dāng)中創(chuàng)建容器,將爆炸存放與容器當(dāng)中,擊斃一輛坦克就產(chǎn)生 爆炸,將爆炸逐一畫出(如果死去就去除),delete方法在前面已寫。 <
68、/p><p> Missile類當(dāng)中的hitTank()方法</p><p> public boolean hitTank(Tank t) {</p><p> if(this.getRect().intersects(t.getRect()) && t.isLive()) {</p><p> t.setLive(f
69、alse);</p><p> this.live = false;</p><p> Explode e = new Explode(x, y, tc);</p><p> tc.explodes.add(e);</p><p> return true;</p><p><b> }</b
70、></p><p> return false;</p><p><b> }</b></p><p><b> 爆炸死后去除</b></p><p> if(!live) {</p><p> tc.explodes.remove(this); //死后去
71、除</p><p><b> return;</b></p><p><b> }</b></p><p><b> 3.6添加障礙物</b></p><p><b> (1)添加金屬墻</b></p><p> 1)建立
72、Wall類,建立Wall對象,用繪圖工具畫出來</p><p> 2)讓每一顆子彈打擊每一堵墻,添加hitMetalWall()方法。當(dāng)子彈接觸到墻時子彈消失。</p><p> public boolean hitMetalWall(MetalWall w) {</p><p> if(this.live && this.getRect().
73、intersects(w.getRect())) {</p><p> this.live = false;</p><p> return true;</p><p><b> }</b></p><p> return false;</p><p><b> }</b
74、></p><p> 3)讓坦克不能穿過墻。添加記錄上一次位置的oldX,oldY;修改構(gòu)造函數(shù) 每次move之前記錄上一次的位置。添加stay方法記錄移動之前的位置,當(dāng)坦克撞到檣時回到移動前的位置,即當(dāng)碰到墻時stay。</p><p> public boolean collidesWithMetalWall (MetalWall w) {</p>&
75、lt;p> if(this.live && this.getRect().intersects(w.getRect())) {</p><p> this.stay();</p><p> return true;</p><p><b> }</b></p><p> return fa
76、lse;</p><p><b> }</b></p><p><b> (2)添加普通墻</b></p><p> 建立brickWall類,往里添加相應(yīng)屬性以及相應(yīng)方法。具體步驟參考2.7.1中添加金屬墻。不同之處在于Missile類當(dāng)中的hitbrickWall()方法,擋子彈接觸到墻壁時,墻壁消失。</
77、p><p> (3)加入圖片替換主窗口中的各對象</p><p> 再將圖片加入時,運用了系統(tǒng)提供的工具包ToolKit,用工具包拿到所需圖片后再將它放入容器中。然后再做相應(yīng)的替換。</p><p> 下面是Missle類當(dāng)中的圖片加入</p><p> private static Toolkit tk = Toolkit.getDe
78、faultToolkit();</p><p> private static Image[] missileImages = null;</p><p> private static Map<String, Image> imgs = new HashMap<String, Image>();</p><p><b> s
79、tatic {</b></p><p> missileImages =new Image[] { </p><p> tk.getImage(Missile.class.getClassLoader().getResource("images/missileL.gif")),tk.getImage(Missile.class.getClass
80、Loader().getResource("images/missileU.gif")),</p><p> tk.getImage(Missile.class.getClassLoader().getResource("images/missileR.gif")),tk.getImage(Missile.class.getClassLoader().getReso
81、urce("images/missileD.gif")),</p><p><b> };</b></p><p> imgs.put("L", missileImages[0]);</p><p> imgs.put("U", missileImages[1]);</p&
82、gt;<p> imgs.put("R", missileImages[2]);</p><p> imgs.put("D", missileImages[3]);</p><p><b> }</b></p><p> 其他類的圖片載入類似Missile類。</p>
83、<p><b> 3.7添加血塊類</b></p><p> 創(chuàng)建Blood類,添加血塊,假如必要的屬性和方法,使血塊沿著固定的軌跡運動,</p><p> private int[][] pos={</p><p> {350,300}, {360,300}, {375,310},{385,290},{400,260},{
84、380,300},{350,300}</p><p><b> };</b></p><p> private void move(){</p><p><b> step++;</b></p><p> if(step>=pos.length) step=0;</p>
85、<p> x=pos[step][0];</p><p> y=pos[step][1];</p><p><b> }</b></p><p> 當(dāng)主戰(zhàn)坦克與血塊接觸的時候,主戰(zhàn)坦克的血量自動加滿</p><p> public boolean eat(Blood b){</p>&
86、lt;p> if(this.Live && b.isLive()&&this.getRect().intersects(b.getRect())){</p><p> this.life=100;</p><p> b.setLive(false);</p><p> return true;</p>&l
87、t;p><b> }</b></p><p> return false;</p><p><b> }</b></p><p><b> 4設(shè)計結(jié)果與分析</b></p><p><b> 主戰(zhàn)坦克的方向鍵:</b></p>
88、<p> 上移:鍵盤方向鍵向上 下移: 方向鍵向下</p><p> 左移:鍵盤方向鍵向下 右移: 方向鍵向右</p><p> 左上:鍵盤方向鍵上和左 右上:鍵盤方向鍵上和右</p><p> 左下:鍵盤方向鍵下和左 右上:鍵盤方向鍵下和右</p><p> 普通開火鍵:
89、ctrl</p><p><b> 超級開火鍵: A</b></p><p> 主戰(zhàn)坦克重生鍵: F2</p><p><b> 運行結(jié)果:</b></p><p><b> 5 設(shè)計體會</b></p><p> 通過這次課程設(shè)計,初步了
90、解了高級編程語言面向?qū)ο蟮奶攸c,掌握了數(shù)據(jù)結(jié)構(gòu)及Java編程的許多基本知識,提升了自己的動手能力。使我對數(shù)據(jù)結(jié)構(gòu)這門課又做了一次系統(tǒng)的復(fù)習(xí),對各個知識點也都有了更深刻的理解,讓我掌握的更扎實,掌握了JAVA的應(yīng)用、編寫、上機調(diào)試的基本方法,同時也增強了實際操作能力,了解了程序開發(fā)過程中涉及到的相關(guān)知識,使我對數(shù)據(jù)結(jié)構(gòu)的使用也更加的熟練,另一方面對編程語言有了新的認識,為以后的學(xué)習(xí)打下了基礎(chǔ)。本項目要學(xué)會圖形化用戶界面的構(gòu)建,并且本項目用
91、到了多線程Thread的知識。通過啟用多線程機制,不斷調(diào)用java.awt.*中的paint(Graphics g)方法,將畫面構(gòu)造出來。其中要使用雙緩沖消除閃爍現(xiàn)象。程序中還使用了鍵盤監(jiān)聽器接口KeyActionListener實現(xiàn)坦克的控制操作。碰撞檢測的輔助類Rectangle可以完成坦克之間,以及坦克與障礙物之間的碰撞檢測。初步了解反射,知道對于classloader每一個.class實際就是一個Class對象。學(xué)會使用Tool
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java坦克大戰(zhàn)課程設(shè)計報告
- java坦克大戰(zhàn)課程設(shè)計報告
- java坦克大戰(zhàn)課程設(shè)計報告
- java課程設(shè)計坦克大戰(zhàn)游戲(含代碼)
- java坦克大戰(zhàn)課程設(shè)計報告.doc
- 坦克大戰(zhàn)--java課程設(shè)計
- java關(guān)于坦克大戰(zhàn)的課程設(shè)計報告
- 基于java坦克大戰(zhàn)課程設(shè)計
- java課程設(shè)計---基于java的坦克大戰(zhàn)
- java課程設(shè)計----基于java的坦克大戰(zhàn)
- java語言程序課程設(shè)計-- 坦克大戰(zhàn)
- 課程設(shè)計報告--坦克大戰(zhàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-紙牌游戲
- 迷宮游戲數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計——紙牌游戲
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--紙牌游戲
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-紙牌游戲
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計“紙牌游戲”
- 新世紀(jì)坦克大戰(zhàn)課程設(shè)計報告
- java版坦克大戰(zhàn)
評論
0/150
提交評論