版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> * * * * 大 學(xué)</p><p> 操 作 系 統(tǒng) 課 程 設(shè) 計(jì)</p><p> 學(xué)生班級(jí)__________________________</p><p> 學(xué)生學(xué)號(hào)__________________________</p><p> 學(xué)生姓名__________________________&
2、lt;/p><p> ______年 ___月 ___日</p><p><b> 一、設(shè)計(jì)要求</b></p><p><b> 設(shè)計(jì)目的</b></p><p> 掌握進(jìn)程和線程的概念;掌握進(jìn)程進(jìn)程控制原語(yǔ)或進(jìn)程控制系統(tǒng)調(diào)用的使用;掌握多道程序設(shè)計(jì)的基本理論、方法和技術(shù);掌握相關(guān)語(yǔ)言進(jìn)程控
3、制的函數(shù)及windows進(jìn)程控制的API函數(shù)的使用 </p><p><b> 設(shè)計(jì)內(nèi)容</b></p><p> 在windows操作系統(tǒng)下,使用的VC、VB、java或C等編程語(yǔ)言,采用多道程序設(shè)計(jì)技術(shù)編寫(xiě)一個(gè)游戲軟件或解決一個(gè)簡(jiǎn)單的實(shí)際問(wèn)題。</p><p><b> 設(shè)計(jì)要求</b></p>
4、<p> 經(jīng)調(diào)試后程序能夠正常運(yùn)行,并體現(xiàn)多道程序的特點(diǎn)。</p><p> 采用多進(jìn)程或多線程方式運(yùn)行,盡量體現(xiàn)進(jìn)程間的同步和互斥關(guān)系。</p><p><b> 二、設(shè)計(jì)思想</b></p><p> 2.1多線程思想:根據(jù)設(shè)計(jì)要求 “在windows操作系統(tǒng)下,使用的VC、VB、java或C等編程語(yǔ)言,采用多道程序設(shè)計(jì)
5、技術(shù)編寫(xiě)一個(gè)游戲軟件” “采用多進(jìn)程或多線程方式運(yùn)行”,本程序使用Java語(yǔ)言,編寫(xiě)的是多線程的小游戲。</p><p> 由于操作系統(tǒng)對(duì)于程序的管理是通過(guò)這樣一種方式,即為每個(gè)程序都建立一個(gè)進(jìn)程,然后通過(guò)對(duì)進(jìn)程進(jìn)行管理從而間接的管理程序。每個(gè)進(jìn)程又可以進(jìn)一步細(xì)分成多個(gè)線程,多線程意味著一個(gè)程序的多行語(yǔ)句同時(shí)執(zhí)行。于是運(yùn)用多任務(wù)操作系統(tǒng)的這種進(jìn)程并發(fā)機(jī)制,我們就可以在程序中加入多線程,每個(gè)線程完成程序的一部分功
6、能,并可以和其他線程并發(fā)執(zhí)行。</p><p> 一個(gè)線程在其生命周期內(nèi)總是處于某種狀態(tài):</p><p> 創(chuàng)建: 當(dāng)一個(gè)線程對(duì)象被聲明并創(chuàng)建后,它處于“創(chuàng)建”狀態(tài);</p><p> 就緒:線程對(duì)象調(diào)用 start() 方法后,將進(jìn)入“就緒”狀態(tài),處于“就緒”狀態(tài)的線程不是立即執(zhí)行,而是進(jìn)入就緒隊(duì)列,等待CPU;</p><p>
7、 運(yùn)行:當(dāng)就緒隊(duì)列中具有最高優(yōu)先級(jí)的就緒線程被調(diào)度并獲得CPU時(shí),便進(jìn)入“運(yùn)行”狀態(tài),執(zhí)行 run() 方法,run 方法中定義了線程的操作和功能;</p><p> 非運(yùn)行:處于“運(yùn)行”狀態(tài)的線程可能因?yàn)槟承┰?(例如人為掛起)進(jìn)入“非運(yùn)行”狀態(tài),讓出CPU并臨時(shí)中止自己的執(zhí)行;</p><p> 停止:線程完成了它的全部工作或調(diào)用 stop() 方法強(qiáng)制中止線程,線程就進(jìn)入“停止
8、”狀態(tài)</p><p> 于是,利用多線程,就可以在同一時(shí)刻運(yùn)行多個(gè)線程,并且設(shè)置按鈕的監(jiān)聽(tīng),監(jiān)聽(tīng)事件中運(yùn)用start()方法讓線程進(jìn)入就緒隊(duì)列,或者運(yùn)用stop()方法中止一個(gè)線程,或者運(yùn)行其他事件。</p><p> 2.2 游戲的思想:點(diǎn)擊窗口內(nèi)由于多線程和隨機(jī)數(shù)坐標(biāo)而實(shí)現(xiàn)的隨機(jī)出現(xiàn)位置不定的按鈕,按鈕設(shè)置不同的加減分,在規(guī)定的時(shí)間內(nèi)盡量多得分。并且不同的按鈕sleep時(shí)間不同,
9、即在屏幕上停留的時(shí)間不同,加分多的按鈕停留時(shí)間短,要想多得分反應(yīng)要夠快!其中還有“地雷”按鈕,點(diǎn)擊后會(huì)強(qiáng)制中止游戲,游戲結(jié)束。以此來(lái)鍛煉人們的反應(yīng)敏捷性。</p><p><b> 三、程序流程圖</b></p><p><b> 四、程序清單</b></p><p> package duoxiancheng;&l
10、t;/p><p> import java.awt.event.ActionEvent;</p><p> import java.awt.event.ActionListener;</p><p> import java.util.Random;</p><p> import javax.swing.Icon;</p>
11、<p> import javax.swing.JButton;</p><p> import javax.swing.JFrame;</p><p> import javax.swing.JLabel;</p><p> import javax.swing.JOptionPane;</p><p> //定義一個(gè)
12、JFrame窗體作為顯示載體</p><p> public class saolei extends JFrame{</p><p> private static final long serialVersionUID = 1L;</p><p> public static boolean stop;</p><p> publ
13、ic static int s; </p><p> public static int t=30;//stop、s、t分別用于停止控制、得分統(tǒng)計(jì)與倒計(jì)時(shí)時(shí)間</p><p> private JButton begin = new JButton("開(kāi)始");</p><p> private JButton exit = new JBu
14、tton("退出"); </p><p> private jiafen1 add1 = new jiafen1("加1分");</p><p> private jiafen2 add2= new jiafen2("加2分");</p><p> private jianfen1 sub1=new
15、jianfen1("減1分");</p><p> private dilei dl=new dilei("地雷");</p><p> private shijian sj=new shijian("30");</p><p> private JLabel score=new JLabel();
16、//定義窗體載體中的組件</p><p> public saolei(){</p><p> super("小心地雷");</p><p> setLayout(null);</p><p> setBounds(200, 50, 1000, 800);</p><p> add(add
17、1);</p><p> add1.setBounds(320, 350, 80, 30);</p><p> add(add2);</p><p> add2.setBounds(320, 400, 80, 30);</p><p> add(sub1);</p><p> sub1.setBounds(4
18、20, 350, 80, 30);</p><p><b> add(dl);</b></p><p> dl.setBounds(420, 400, 80, 30);</p><p><b> add(sj);</b></p><p> sj.setBounds(700,30,50,50)
19、;</p><p> add(begin);begin.setBounds(300, 700, 80, 30);</p><p> add(exit);exit.setBounds(600, 700, 80, 30); </p><p> add(score);score.setBounds(300, 50, 100 ,20);</p><
20、p> score.setText("您的得分為:"+s);</p><p> setVisible(true);//向窗體載體添加組件并初始化</p><p> begin.addActionListener(new ActionListener() {//開(kāi)始按鈕設(shè)置監(jiān)聽(tīng),執(zhí)行時(shí)啟動(dòng)線程</p><p> public void
21、actionPerformed(ActionEvent e) {</p><p> new Thread(add1).start();</p><p> new Thread(add2).start();</p><p> new Thread(sub1).start();</p><p> new Thread(dl).start(
22、);</p><p> new Thread(sj).start();</p><p> begin.setVisible(false);</p><p> } </p><p><b> });</b></p><p&
23、gt; exit.addActionListener(new ActionListener() {//退出鍵設(shè)置監(jiān)聽(tīng)</p><p> public void actionPerformed(ActionEvent e) {</p><p> System.exit(0);</p><p><b> }</b></p>&
24、lt;p><b> });</b></p><p> add1.addActionListener(new ActionListener(){//“加一分”按鈕設(shè)置監(jiān)聽(tīng)</p><p> public void actionPerformed(ActionEvent e) {</p><p><b> s+=1;<
25、/b></p><p> add1.setVisible(false);</p><p> score.setText("您的得分為:"+s);</p><p> } </p><p><b> });</b>&l
26、t;/p><p> add2.addActionListener(new ActionListener(){//“加兩分”按鈕設(shè)置監(jiān)聽(tīng)</p><p> public void actionPerformed(ActionEvent e) {</p><p><b> s+=2;</b></p><p> add2.
27、setVisible(false);</p><p> score.setText("您的得分為:"+s);</p><p> } </p><p><b> });</b></p><p> sub1.addActio
28、nListener(new ActionListener(){//“減一分”按鈕設(shè)置監(jiān)聽(tīng)</p><p> public void actionPerformed(ActionEvent e) {</p><p><b> s-=1;</b></p><p> sub1.setVisible(false);</p><
29、p> score.setText("您的得分為:"+s);</p><p> } </p><p><b> });</b></p><p> dl.addActionListener(new ActionListener() {//“地雷
30、”按鈕設(shè)置監(jiān)聽(tīng)</p><p> public void actionPerformed(ActionEvent e) {</p><p> stop=true;</p><p> JOptionPane.showMessageDialog(saolei.this,</p><p> "很不幸踩中地雷!最后得分為"
31、+s);</p><p> score.setText("您的得分為:"+s);</p><p> } </p><p><b> });</b></p><p><b> }</b></p>
32、<p> public static void main(String[] args) { //main函數(shù)開(kāi)始,新建窗體載體對(duì)象</p><p> new saolei();</p><p><b> } </b></p><p> class jiafen1 extends JButton implements Ru
33、nnable //創(chuàng)建加一分線程</p><p><b> {</b></p><p> private static final long serialVersionUID = 1L;</p><p> public jiafen1(String name) {</p><p> super(name);&l
34、t;/p><p><b> }</b></p><p> public jiafen1(Icon icon) {</p><p> super(icon);</p><p><b> }</b></p><p><b> int x, y;</b>
35、</p><p> public void run()</p><p><b> {</b></p><p> Random r = new Random();</p><p> while (!stop){</p><p> x = r.nextInt(100)*8;</p>
36、;<p> y = r.nextInt(100)*6;</p><p> this.setVisible(true); </p><p> setLocation(x, y); //重新定位組件</p><p><b> try {</b></p><p> Thread.sleep(22
37、00);</p><p> } catch (InterruptedException e) {</p><p> e.printStackTrace();</p><p><b> }</b></p><p><b> }</b></p><p><b>
38、 }</b></p><p><b> }</b></p><p> class jiafen2 extends JButton implements Runnable //創(chuàng)建加二分線程</p><p><b> {</b></p><p> private static
39、final long serialVersionUID = 1L;</p><p> public jiafen2(String name) {</p><p> super(name);</p><p><b> }</b></p><p> public jiafen2(Icon icon) {</p&
40、gt;<p> super(icon);</p><p><b> }</b></p><p><b> int x, y;</b></p><p> public void run()</p><p><b> {</b></p><
41、;p> Random r = new Random();</p><p> while (!stop){</p><p> x = r.nextInt(100)*8;</p><p> y = r.nextInt(100)*6;</p><p> this.setVisible(true);</p><p&
42、gt; setLocation(x, y);</p><p><b> try {</b></p><p> Thread.sleep(1000);</p><p> } catch (InterruptedException e) {</p><p> e.printStackTrace();</p&g
43、t;<p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> class jianfen1 extends JButton im
44、plements Runnable //創(chuàng)建減一分線程</p><p><b> {</b></p><p> private static final long serialVersionUID = 1L;</p><p> public jianfen1(String name) {</p><p> su
45、per(name);</p><p><b> }</b></p><p> public jianfen1(Icon icon) {</p><p> super(icon);</p><p><b> }</b></p><p><b> int x,
46、 y;</b></p><p> public void run()</p><p><b> {</b></p><p> Random r = new Random();</p><p> while (!stop){</p><p> x = r.nextInt(100
47、)*8;</p><p> y = r.nextInt(100)*6;</p><p> this.setVisible(true);</p><p> setLocation(x, y);</p><p><b> try {</b></p><p> Thread.sleep(250
48、0);</p><p> } catch (InterruptedException e) {</p><p> e.printStackTrace();</p><p><b> }</b></p><p><b> }</b></p><p><b>
49、 }</b></p><p><b> }</b></p><p> class shijian extends JLabel implements Runnable //創(chuàng)建時(shí)間線程</p><p><b> {</b></p><p> private static fina
50、l long serialVersionUID = 1L;</p><p> public shijian(String name) {</p><p> super(name);</p><p><b> }</b></p><p> public shijian(Icon icon) {</p>
51、<p> super(icon);</p><p><b> }</b></p><p> public void run()</p><p><b> {</b></p><p> while (t>0)</p><p><b> {
52、</b></p><p><b> if(!stop)</b></p><p><b> {</b></p><p><b> try {</b></p><p> Thread.sleep(1000);</p><p> } ca
53、tch (InterruptedException e) {</p><p> e.printStackTrace();</p><p><b> }</b></p><p><b> t--;</b></p><p> sj.setText(t+"");</p&g
54、t;<p><b> }</b></p><p><b> }</b></p><p> stop=true;</p><p> JOptionPane.showMessageDialog(saolei.this,</p><p> "時(shí)間到!最后得分為"
55、+s);</p><p> //score.setText("您的得分為:"+s);</p><p><b> }</b></p><p><b> }</b></p><p> class dilei extends JButton implements Runnabl
56、e//創(chuàng)建“地雷”線程</p><p><b> {</b></p><p> private static final long serialVersionUID = 1L;</p><p> public dilei(String name) {</p><p> super(name);</p>
57、<p><b> }</b></p><p> public dilei(Icon icon) {</p><p> super(icon);</p><p><b> }</b></p><p><b> int x, y;</b></p>
58、<p> public void run()</p><p><b> {</b></p><p> Random r = new Random();</p><p> while (!stop){</p><p> x = r.nextInt(100)*8;</p><p&g
59、t; y = r.nextInt(100)*6;</p><p> setLocation(x, y);</p><p><b> try {</b></p><p> Thread.sleep(1500);</p><p> } catch (InterruptedException e) {</p&g
60、t;<p> e.printStackTrace();</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>&
61、lt;p><b> }</b></p><p><b> 五、運(yùn)行結(jié)果</b></p><p> 1.開(kāi)始初始化界面:</p><p><b> 2.游戲運(yùn)行界面</b></p><p> 3.時(shí)間到,游戲結(jié)束</p><p><b
62、> 4.點(diǎn)中地雷</b></p><p><b> 六、心得體會(huì)呢</b></p><p> 這次設(shè)計(jì)中遇到最難的問(wèn)題就是多線程的實(shí)現(xiàn),由于之前很少接觸多線程編程,所以通過(guò)查閱各種資料,終于實(shí)現(xiàn)了功能,能夠?qū)⑽鍌€(gè)線程同時(shí)運(yùn)行,同時(shí)倒計(jì)時(shí)也是用線程實(shí)現(xiàn)的。 </p><p> 主要解決多線程問(wèn)題和按鈕監(jiān)聽(tīng)問(wèn)題,由于Jav
63、a編程能力有限,程序編寫(xiě)的很普通,而且還有部分功能未能實(shí)現(xiàn),例如:將按鈕換成圖片實(shí)現(xiàn),添加背景音樂(lè),設(shè)置簡(jiǎn)單、普通、困難等級(jí)別以及玩的時(shí)間長(zhǎng)短控制速度等功能。這些問(wèn)題還有待深入學(xué)習(xí)和探討。</p><p> 通過(guò)幾天來(lái)的設(shè)計(jì)和學(xué)習(xí),真的學(xué)習(xí)到了很多東西。通過(guò)這次的操作系統(tǒng)的課程設(shè)計(jì),在同學(xué)和老師的幫助下,終于做出了此程序,能夠簡(jiǎn)單運(yùn)用多線程實(shí)現(xiàn)一個(gè)小游戲,因此加深了對(duì)多線程的理解。</p><
64、;p><b> 七、參考文獻(xiàn)</b></p><p> 1.《計(jì)算機(jī)操作系統(tǒng)》(第三版)(西安電子科技大學(xué)出版社) 梁小丹 梁紅兵 湯子瀛 編著</p><p> 2.《JAVA語(yǔ)言最新實(shí)用案例教案》 (清華大學(xué)出版社) 楊樹(shù)林 胡潔萍 編著</p><p> 3.《數(shù)據(jù)結(jié)構(gòu)與算法 Java語(yǔ)言版》 (機(jī)械工業(yè)出版社) (美)
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計(jì) (2)
- 操作系統(tǒng)課程設(shè)計(jì)-- 操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告2
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 內(nèi)存管理(操作系統(tǒng))操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)題目
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)論文
- 操作系統(tǒng)課程設(shè)計(jì) (4)
- 操作系統(tǒng)課程設(shè)計(jì)1
- 課程設(shè)計(jì)報(bào)告--操作系統(tǒng)
- linux操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)原理課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--模擬操作系統(tǒng)的實(shí)現(xiàn)
評(píng)論
0/150
提交評(píng)論