JAVA_Applet舞動(dòng)小球項(xiàng)目報(bào)告模板_第1頁
JAVA_Applet舞動(dòng)小球項(xiàng)目報(bào)告模板_第2頁
JAVA_Applet舞動(dòng)小球項(xiàng)目報(bào)告模板_第3頁
JAVA_Applet舞動(dòng)小球項(xiàng)目報(bào)告模板_第4頁
JAVA_Applet舞動(dòng)小球項(xiàng)目報(bào)告模板_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、重慶科創(chuàng)職業(yè)學(xué)院Java高級(jí)應(yīng)用開發(fā)課程作業(yè)(二)課題名稱: Applet舞動(dòng)的小球設(shè)計(jì)與實(shí)現(xiàn) 專 業(yè): 計(jì)算機(jī)應(yīng)用技術(shù) 班 級(jí): 計(jì)算機(jī)應(yīng)用ZK0901 學(xué) 號(hào): 姓 名: 成 績:_ _完成時(shí)間:二一 年 十一月 二十五 日一、課題設(shè)計(jì)目的1、進(jìn)一步掌握Applet的生命周期及各種方法的應(yīng)用;2、利用Graphics類完成簡單的多媒體設(shè)計(jì);3、掌握線程的生命周期及其相關(guān)的方法;4、掌握線程應(yīng)用的兩種方法及線程調(diào)度;5、通過本次課題設(shè)計(jì),進(jìn)一步理解Applet小應(yīng)用程序的基本結(jié)構(gòu)和線程的基本原理。二、課題的描述和要求本次課題要求運(yùn)用JAVA語言完成一個(gè)基于Applet的舞動(dòng)小球,并可將這個(gè)小

2、程序進(jìn)行修改拓展完成一個(gè)簡單的游戲設(shè)計(jì)。三、課題設(shè)計(jì)的步驟3.1 完成小球的繪制任務(wù)一:創(chuàng)建一個(gè)Java項(xiàng)目DancingBallApplet,然后再創(chuàng)建一個(gè)主類DancingBall來完成設(shè)計(jì);任務(wù)二:在DancingBall主類中完成小球的繪制。步驟1:定義小球坐標(biāo)位置和小球的大小。int x,y;final int SIZE=50;步驟2:重寫小應(yīng)用程序的init()方法完成對(duì)小球坐標(biāo)x,y的初始public void init() x=0; y=0;步驟3:重寫小應(yīng)用程序的paint(Graphics g)方法完成小球的繪制public void paint(Graphics g) g

3、.fillOval(x,y,SIZE,SIZE);3.2 將小球舞動(dòng)起來要使小球運(yùn)動(dòng)起來,即是需要不停地改變小球的坐標(biāo)??梢酝ㄟ^線程不停地改變坐標(biāo)值,然后調(diào)用repaint()的方法重新繪制小球。任務(wù)一:定義一個(gè)線程Ball,完成對(duì)小球坐標(biāo)的修改任務(wù)二:修改paint方法中繪制小球的方法任務(wù)三:在DancingBall中聲明一個(gè)線程Ball的對(duì)象,并在init()方法中創(chuàng)建。任務(wù)四:重寫start()方法,在其中運(yùn)行線程對(duì)象import java.applet.Applet;import java.awt.*;public class DancingBall extends Applet fi

4、nal int SIZE=50; Ball ball; class Ball extends Thread int x=0,y=0,m=2,n=2;/x、y為小球出現(xiàn)的坐標(biāo),m、n為每次改變的數(shù)值 public void run() while(true)x=x+m;y=y+n;if(y+SIZE>=getHeight()n=(-1)*n;else if(y<=0)n=(-1)*n;if(x+SIZE>=getWidth()m=(-1)*m;else if(x<=0)m=(-1)*m;try sleep(10);/小球運(yùn)動(dòng)的速度,即每次移動(dòng)等待的時(shí)間 catch (In

5、terruptedException e) e.printStackTrace();repaint();/首先調(diào)用update清除界面,然后再調(diào)用paint方法重繪 public void init() ball=new Ball();/創(chuàng)建改變小球坐標(biāo)的線程對(duì)象 public void start() ball.start();/運(yùn)行線程 public void paint(Graphics g) g.fillOval(ball.x,ball.y,SIZE,SIZE); 思考:如何讓小球出現(xiàn)的初始位置每次都不一樣?解決方案:要使小球的初始位置不一樣,即每次啟動(dòng)線程時(shí)都需要給x、y賦不同的數(shù)值

6、,因此我們可以通過隨機(jī)函數(shù)來實(shí)現(xiàn)。步驟1:為線程類Ball增加構(gòu)造方法,通過構(gòu)造方法為x,y賦值;Ball(int x,int y) this.x=x; this.y=y;步驟2:創(chuàng)建Ball類對(duì)象時(shí),給構(gòu)造方法傳入隨機(jī)數(shù)。ball=new Ball(int)(Math.random()*400), (int)(Math.random()*400);思考:如果要求每次小球都從頂端開始出現(xiàn),又該如何創(chuàng)建呢?3.3 接球擋板的設(shè)計(jì)任務(wù)一:完成擋板的繪制步驟1:聲明擋板的坐標(biāo)int x1,y1;步驟2:完成g.fillRect(x1,y1,SIZE,10);任務(wù)二:完成擋板隨著鼠標(biāo)移動(dòng)步驟1:主類D

7、ancingBall引用MouseMotionListener接口步驟2:在init()方法中為小應(yīng)用程序加載MouseMontionListener監(jiān)視器步驟3:重寫MouseMontionListener的抽象方法public void mouseDragged(MouseEvent arg0) public void mouseMoved(MouseEvent arg0) x1=arg0.getX();y1=arg0.getY();repaint();任務(wù)三:完成游戲計(jì)分步驟1:完成計(jì)分規(guī)則制定,接住一次加10分,小球掉下一次減20分步驟2:完成游戲計(jì)分并顯示 關(guān)鍵問題:在于如何判斷接住

8、了小球?if(n>0&&y1-y=SIZE&&(Math.abs(x-x1)<= SIZE&&Math.abs(x-x1)>=0)score=score+10;n=(-1)*n;if(y+SIZE>=this.getHeight()score=score-10;n=(-1)*n;else if(y<=0)n=(-1)*n;if(x+BALLSIZE>=this.getWidth()m=(-1)*m;else if(x<=0)m=(-1)*m;3.4 多個(gè)小球的同時(shí)舞動(dòng)要有多個(gè)小球就需要在paint()方法

9、中多次調(diào)用fillOval(x,y,SIZE,SIZE)方法來實(shí)現(xiàn)小球的繪制,但必須保證每個(gè)小球的初始坐標(biāo)x、y都不一樣,否則就會(huì)使得兩個(gè)小球重疊。任務(wù)一:在創(chuàng)建Ball對(duì)象時(shí)設(shè)置不同的x、y值;ball1=new Ball(int)(Math.random()*(getWidth()-SIZE), 0);ball2=new Ball(int)(Math.random()*(getWidth()-SIZE), 0);然后分別運(yùn)行ball1和ball2兩個(gè)線程。思考:如果需要更多的小球呢?解決方案:可以通過線程數(shù)組來完成。1、首先聲明Ball類的數(shù)組對(duì)象ballBall ball=new Bal

10、l5;2、在init()方法中用循環(huán)創(chuàng)建每個(gè)數(shù)組對(duì)象,并在start()方法中循環(huán)運(yùn)行每個(gè)線程(此時(shí)5個(gè)小球在同一軌跡上,需要改變每個(gè)小球出現(xiàn)的初始位置或者運(yùn)動(dòng)改變值的大?。┧伎迹喝绾胃淖兠總€(gè)小球出現(xiàn)的初始位置呢?即是要改變Ball類中x,y的初始值參考代碼import java.applet.Applet;import java.awt.*;import java.awt.event.*;public class KeyGame extends Applet implements KeyListenerfinal int NUM=10;/定義線程的數(shù)量,即每次出現(xiàn)字符的個(gè)數(shù)Keys key=

11、new KeysNUM;int score=0;char c='A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','

12、W','X','Y','Z'/,'a','b','c','d','e','f','g','h','i','j','k','l','m','n',/'o','p','q','r','s','t','u',

13、9;v','w','x','y','z'class Keys extends Threadint x=0,y=0,a=2,b=3;int aa;/用來保存當(dāng)前線程中字符對(duì)應(yīng)的字符數(shù)組c的下標(biāo)Keys(int x,int y,int a,int b)this.x=x; this.y=y;this.a=a; this.b=b;public void run()while(true)x=x+a; y=y+b;if(y>=getHeight()aa=(int)(Math.random()*25);y=0;score=scor

14、e-10;if(x>=getWidth()x=0;try sleep(80); catch (InterruptedException e) / TODO 自動(dòng)生成 catch 塊e.printStackTrace();repaint();public void init()for(int i=0;i<NUM;i+)keyi=new Keys(int)(Math.random()*getWidth(),0,(int)(Math.random()*(5)+1),(int)(Math.random()*(5)+1);keyi.aa=(int)(Math.random()*25);/th

15、is.setBackground(Color.black);public void start()this.addKeyListener(this);for(int i=0;i<key.length;i+)keyi.start();public void paint(Graphics g)g.setColor(Color.black);g.setFont(new Font("黑體",Font.BOLD,16);for(int i=0;i<key.length;i+) g.drawChars(c, keyi.aa, 1,keyi.x,keyi.y);this.sh

16、owStatus("你當(dāng)前的成績?yōu)椋?quot;+score); public void keyTyped(KeyEvent arg0) / TODO 自動(dòng)生成方法存根public void keyPressed(KeyEvent arg0) for(int i=0;i<NUM;i+) if(arg0.getKeyChar()=ckeyi.aa) score=score+10; keyi.x=0; keyi.y=0; keyi.aa=(int)(Math.random()*25); repaint(); public void keyReleased(KeyEvent arg0

17、) / TODO 自動(dòng)生成方法存根3.5 拓展作業(yè):模擬雪花飛舞的夜空模擬雪花飛舞的夜空與完成舞動(dòng)小球的編程思想一致,需要注意以下幾個(gè)方面:(1)可以把雪花看著小球,只是雪花的直徑更小而已;(2)每片雪花的運(yùn)動(dòng)軌跡都不一樣,并只需下落不能向上返回(即當(dāng)雪花落地后重新設(shè)置坐標(biāo));(3)將背景顏色設(shè)置為黑色,前景顏色設(shè)置為白色。參考代碼import java.applet.Applet;import java.awt.*;public class Snowing extends AppletSnow snow=new Snow500;class Snow extends Threadfinal i

18、nt SIZE=8;int x=0,y=0,a=2,b=3;Snow(int x,int y,int a,int b)this.x=x; this.y=y;this.a=a; this.b=b;public void run()while(true)x=x+a; y=y+b;if(y>=getHeight() y=0;if(x>=getWidth() x=0;try sleep(10); catch (InterruptedException e) / TODO 自動(dòng)生成 catch 塊e.printStackTrace();repaint();public void init()

19、for(int i=0;i<snow.length;i+)snowi=new Snow(int)(Math.random()*(getWidth(),(int)(Math.random()*(getHeight(),(int)(Math.random()*(5)+1),(int)(Math.random()*(5)+1);this.setBackground(Color.black);public void start()for(int i=0;i<snow.length;i+) snowi.start();public void paint(Graphics g)g.setCol

20、or(Color.white);for(int i=0;i<snow.length;i+) g.fillOval(snowi.x,snowi.y,snowi.SIZE,snowi.SIZE);3.6 拓展作業(yè)2:字母打字游戲在雪花飛舞的基礎(chǔ)上,完成字母打字游戲的設(shè)計(jì)。要求26個(gè)英文字母每次隨機(jī)的從頂端出現(xiàn)5個(gè),如果鍵盤按鍵與字母相同,則將成績加10分并讓其獲得新的隨機(jī)字母再從頂端出現(xiàn);如果字母掉落到低端,則將成績減10分并讓其獲得新的隨機(jī)字母再從頂端出現(xiàn)。參考代碼import java.applet.Applet;import java.awt.*;import java.awt.eve

21、nt.*;public class KeyGame extends Applet implements KeyListenerfinal int NUM=10;/定義線程的數(shù)量,即每次出現(xiàn)字符的個(gè)數(shù)Keys key=new KeysNUM;int score=0;char c='A','B','C','D','E','F','G','H','I','J','K','L','M','

22、N','O','P','Q','R','S','T','U','V','W','X','Y','Z'/,'a','b','c','d','e','f','g','h','i','j','k','l','

23、;m','n',/'o','p','q','r','s','t','u','v','w','x','y','z'class Keys extends Threadint x=0,y=0,a=2,b=3;int aa;/用來保存當(dāng)前線程中字符對(duì)應(yīng)的字符數(shù)組c的下標(biāo)Keys(int x,int y,int a,int b)this.x=x; this.y=y;this.a=a; this.b=b;public void run()while(true)x=x+a; y=y+b;if(y>=getHeight()aa=(int)(Math.random()*25);y=0;score=score-10;if(x>=getWidth()x=0;try sleep(80); catch (InterruptedException e) / TODO 自動(dòng)生成 catch 塊e.printStackTrace();repaint();public void init()for(int i=0;i<NUM;i+)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論