




已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
事件驅(qū)動(dòng)程序設(shè)計(jì)(英語(yǔ):Event-driven programming)是一種電腦程序設(shè)計(jì)模型。這種模型的程序運(yùn)行流程是由用戶的動(dòng)作(如鼠標(biāo)的按鍵,鍵盤(pán)的按鍵動(dòng)作)或者是由其他程序的消息來(lái)決定的。相對(duì)于批處理程序設(shè)計(jì)(batch programming)而言,程序運(yùn)行的流程是由程序員來(lái)決定。批量的程序設(shè)計(jì)在初級(jí)程序設(shè)計(jì)教學(xué)課程上是一種方式。然而,事件驅(qū)動(dòng)程序設(shè)計(jì)這種設(shè)計(jì)模型是在交互程序(Interactive program)的情況下孕育而生的。事件驅(qū)動(dòng)程序可以由任何編程語(yǔ)言來(lái)實(shí)現(xiàn),然而使用某些語(yǔ)言來(lái)撰寫(xiě)會(huì)比其他的語(yǔ)言來(lái)的簡(jiǎn)單。有些集成開(kāi)發(fā)環(huán)境(簡(jiǎn)稱(chēng)IDE)也會(huì)影響實(shí)現(xiàn)事件驅(qū)動(dòng)程序設(shè)計(jì)的難易程度。有的 IDE 會(huì)使的開(kāi)發(fā)工作變的很簡(jiǎn)單,有的則否。取代傳統(tǒng)上一次等待一個(gè)完整的指令然后再做運(yùn)行的方式,事件驅(qū)動(dòng)程序模型下的系統(tǒng),基本上的架構(gòu)是預(yù)先設(shè)計(jì)一個(gè)事件循環(huán)所形成的程序,這個(gè)事件循環(huán)程序不斷地檢查目前要處理的信息,根據(jù)要處理的信息運(yùn)行一個(gè)觸發(fā)函數(shù)進(jìn)行必要的處理。其中這個(gè)外部信息可能來(lái)自一個(gè)目錄夾中的文件,可能來(lái)自鍵盤(pán)或鼠標(biāo)的動(dòng)作,或者是一個(gè)時(shí)間事件。對(duì)一個(gè)事件驅(qū)動(dòng)(event driven)系統(tǒng)進(jìn)行程序設(shè)計(jì),因此可以視為改寫(xiě)系統(tǒng)默認(rèn)觸發(fā)函數(shù)的行為,來(lái)符合自己需要的一種動(dòng)作。輸入的事件可以放進(jìn)事件循環(huán)或者是經(jīng)由已經(jīng)注冊(cè)的中斷處理器來(lái)與硬件事件交互;而許多的軟件系統(tǒng)使用了混和這兩種技術(shù)的處理。預(yù)先設(shè)計(jì)好的算法確定了一件事,那就是當(dāng)他們被需要的時(shí)候,就會(huì)在適當(dāng)?shù)臅r(shí)機(jī)被觸發(fā)。也因此提供了一個(gè)模擬中斷驅(qū)動(dòng)環(huán)境(interrupt driven environment)的軟件抽象架構(gòu)。事件驅(qū)動(dòng)程序設(shè)計(jì)基本上包含了許多小程序片段,這些小程序片段被稱(chēng)為事件處理器并且被用來(lái)回應(yīng)外部的事件與分發(fā)事件。通常尚未被事件處理器處理的事件,都會(huì)被系統(tǒng)放在一個(gè)稱(chēng)為事件隊(duì)列的數(shù)據(jù)結(jié)構(gòu)中,等待被處理。許多情況下,事件處理器可以自己觸發(fā)事件,因此也可能形成一個(gè)事件串。 事件驅(qū)動(dòng)程序設(shè)計(jì)的著重于彈性以及異步化上面,并且企圖盡可能的modeless。 圖形用戶界面這類(lèi)程序就是典型的事件驅(qū)動(dòng)設(shè)計(jì)方式。計(jì)算機(jī)操作系統(tǒng)是事件驅(qū)動(dòng)程序的典型示例。在操作系統(tǒng)的最底層,中斷處理器的動(dòng)作就像是硬件事件的直接處理器,搭配著 CPU 運(yùn)行分配事件規(guī)則動(dòng)作。對(duì)軟件進(jìn)程而言,基本上操作系統(tǒng)可視為一個(gè)事件分配器,發(fā)送數(shù)據(jù)和軟件中斷給用戶自己寫(xiě)的軟件進(jìn)程。package text;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Frame extends JFrame JTextField text; JLabel nowBomb, setBomb; int BombNum, BlockNum; / 當(dāng)前雷數(shù),當(dāng)前方塊數(shù) int rightBomb, restBomb, restBlock; / 找到的地雷數(shù),剩余雷數(shù),剩余方塊數(shù) JButton start = new JButton( 開(kāi)始 ); JPanel MenuPamel = new JPanel(); JPanel bombPanel = new JPanel(); Bomb bombButton; JPanel c; BorderLayout borderLayout1 = new BorderLayout(); GridLayout gridLayout1 = new GridLayout(); public Frame() try setDefaultCloseOperation(EXIT_ON_CLOSE); jbInit(); catch (Exception exception) exception.printStackTrace(); private void jbInit() throws Exception c = (JPanel) getContentPane(); setTitle(掃雷); c.setBackground(Color.WHITE); MenuPamel.setBackground(Color.GRAY); c.setLayout(borderLayout1); setSize(new Dimension(600, 600); setResizable(false); BlockNum = 144; BombNum = 10; text = new JTextField(10 , 3); nowBomb = new JLabel(當(dāng)前雷數(shù) + : + BombNum); setBomb = new JLabel(設(shè)置地雷數(shù)); start.addActionListener(new Frame1_start_actionAdapter(this); MenuPamel.add(setBomb); MenuPamel.add(text); MenuPamel.add(start); MenuPamel.add(nowBomb); c.add(MenuPamel, java.awt.BorderLayout.SOUTH); bombPanel.setLayout(gridLayout1); gridLayout1.setColumns( (int) Math.sqrt(BlockNum); gridLayout1.setRows( (int) Math.sqrt(BlockNum); bombButton = new Bomb (int) Math.sqrt(BlockNum) (int) Math.sqrt(BlockNum); for (int i = 0; i (int) Math.sqrt(BlockNum); i+) for (int j = 0; j = 5 & num 50) BombNum = num; startBomb(); else if (num 5) JOptionPane.showMessageDialog(null, 您設(shè)置的地雷數(shù)太少了,請(qǐng)重設(shè)!, 錯(cuò)誤, JOptionPane.ERROR_MESSAGE); num=10; BombNum = num; else JOptionPane.showMessageDialog(null, 您設(shè)置的地雷數(shù)太多了,請(qǐng)重設(shè)!, 錯(cuò)誤, JOptionPane.ERROR_MESSAGE); num=10; BombNum = num; /* 開(kāi)始,布雷 */ public void startBomb() nowBomb.setText(當(dāng)前雷數(shù) + : + BombNum); for (int i = 0; i (int) Math.sqrt(BlockNum); i+) for (int j = 0; j (int) Math.sqrt(BlockNum); j+) bombButtonij.isBomb = false; bombButtonij.isClicked = false; bombButtonij.isRight = false; bombButtonij.BombFlag = 0; bombButtonij.BombRoundCount = 9; bombButtonij.setEnabled(true); bombButtonij.setText(); bombButtonij.setFont(new Font(, Font.PLAIN, 14);/設(shè)置字體大小 bombButtonij.setForeground(Color.BLUE); rightBomb = 0; restBomb = BombNum; restBlock = BlockNum - BombNum; for (int i = 0; i BombNum; ) int x = (int) (Math.random() * (int) (Math.sqrt(BlockNum) - 1); int y = (int) (Math.random() * (int) (Math.sqrt(BlockNum) - 1); if (bombButtonxy.isBomb != true) bombButtonxy.isBomb = true; i+; CountRoundBomb(); /* 計(jì)算方塊周?chē)讛?shù) */ public void CountRoundBomb() for (int i = 0; i (int) Math.sqrt(BlockNum); i+) for (int j = 0; j (int) Math.sqrt(BlockNum); j+) int count = 0; / 當(dāng)需要檢測(cè)的單元格本身無(wú)地雷的情況下,統(tǒng)計(jì)周?chē)牡乩讉€(gè)數(shù) if (bombButtonij.isBomb != true) for (int x = i - 1; x i + 2; x+) for (int y = j - 1; y = 0) & (y = 0) & (x ( (int) Math.sqrt(BlockNum) & (y ( (int) Math.sqrt(BlockNum) if (bombButtonxy.isBomb = true) count+; bombButtonij.BombRoundCount = count; /* 是否挖完了所有的雷 */ public void isWin() restBlock = BlockNum - BombNum; for (int i = 0; i (int) Math.sqrt(BlockNum); i+) for (int j = 0; j (int) Math.sqrt(BlockNum); j+) if (bombButtonij.isClicked = true) restBlock-; if (rightBomb = BombNum | restBlock = 0) JOptionPane.showMessageDialog(this, 您挖完了所有的雷,您勝利了!, 勝利, JOptionPane.INFORMATION_MESSAGE); startBomb(); /* 當(dāng)選中的位置為空,則翻開(kāi)周?chē)牡貓D* */ public void isNull(Bomb ClickedButton) int i, j; i = ClickedButton.num_x; j = ClickedButton.num_y; for (int x = i - 1; x i + 2; x+) for (int y = j - 1; y = 0) & (y = 0) & (x ( (int) Math.sqrt(BlockNum) & (y 0) ClickedButton.setText(ClickedButton.BombRoundCount + ); else isNull(ClickedButton); /* 左鍵點(diǎn)擊 */ public void actionPerformed(ActionEvent e) if ( ( (Bomb) e.getSource().isClicked = false & ( (Bomb) e.getSource().isRight = false) if ( ( (Bomb) e.getSource().isBomb = false) turn( ( (Bomb) e.getSource(); isWin(); else for (int i = 0; i (int) Math.sqrt(BlockNum); i+) for (int j = 0; j 0) bombSource.setForeground(Color.RED); bombSource.setText(F); bombSource.isRight = true; restBomb-; else bombSource.BombFlag = 0; else if (bombSource.BombFlag = 2) restBomb+; bombSource.setText(Q); bombSource.isRight = false; else bombSource.setText(); if (bombSource.isBomb = true) if (bombSource.BombFlag = 1) rightBomb+; else if (bombSource.BombFlag = 2) rightBomb-; nowBomb.setText(當(dāng)前雷數(shù) + : + restBomb); isWin(); public static void main(String args) Frame frame = new Frame(); frame.setVisible(true); class Frame1_start_actionAdapter implements ActionListener private Frame adaptee; Frame1_start_actionAdapter(Frame adaptee) this.adaptee = adaptee; public void actionPerformed(ActionEvent e) adaptee.start_actionPerformed(e); class Bomb extends JButton i
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年雙端面磨床合作協(xié)議書(shū)
- 2025年GPS接收設(shè)備及其綜合應(yīng)用系統(tǒng)合作協(xié)議書(shū)
- 2025年輪式裝甲車(chē)玻璃系列合作協(xié)議書(shū)
- 2025年空中交通管制設(shè)備項(xiàng)目發(fā)展計(jì)劃
- 2025年變頻與逆變電源裝置項(xiàng)目發(fā)展計(jì)劃
- 共同研發(fā)新能源汽車(chē)技術(shù)協(xié)議
- 餐飲業(yè)員工培訓(xùn)與晉升協(xié)議
- 健康產(chǎn)業(yè)人才培訓(xùn)協(xié)議
- 農(nóng)村智能水肥一體化應(yīng)用協(xié)議
- 數(shù)字創(chuàng)意內(nèi)容開(kāi)發(fā)合作協(xié)議
- T-CCTAS 117-2024 橋梁轉(zhuǎn)體支座
- 二年級(jí)數(shù)學(xué)北師大版下冊(cè)第七單元《淘氣的作息時(shí)間》教學(xué)設(shè)計(jì)教案1
- 項(xiàng)目進(jìn)度跟進(jìn)及完成情況匯報(bào)總結(jié)報(bào)告
- DBJ50- T-445-2023建筑邊坡工程監(jiān)測(cè)技術(shù)標(biāo)準(zhǔn)
- 重大版小學(xué)英語(yǔ)六年級(jí)下冊(cè)期中試卷(含答案含聽(tīng)力原文無(wú)聽(tīng)力音頻)
- 手衛(wèi)生課件(完整版)
- 藥店稅務(wù)合規(guī)管理制度
- 中國(guó)成人重癥患者鎮(zhèn)痛管理專(zhuān)家共識(shí)2023解讀課件
- DB61-T+1801-2023水工隧洞外水壓力確定與應(yīng)對(duì)技術(shù)規(guī)范
- 指向核心素養(yǎng)的小學(xué)科學(xué)“教-學(xué)-評(píng)一體化”的實(shí)踐研究
- 兒童糖尿病酮癥酸中毒的護(hù)理治療措施
評(píng)論
0/150
提交評(píng)論