




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
事件驱动程序设计(英语:Event-driven programming)是一种电脑程序设计模型。这种模型的程序运行流程是由用户的动作(如鼠标的按键,键盘的按键动作)或者是由其他程序的消息来决定的。相对于批处理程序设计(batch programming)而言,程序运行的流程是由程序员来决定。批量的程序设计在初级程序设计教学课程上是一种方式。然而,事件驱动程序设计这种设计模型是在交互程序(Interactive program)的情况下孕育而生的。事件驱动程序可以由任何编程语言来实现,然而使用某些语言来撰写会比其他的语言来的简单。有些集成开发环境(简称IDE)也会影响实现事件驱动程序设计的难易程度。有的 IDE 会使的开发工作变的很简单,有的则否。取代传统上一次等待一个完整的指令然后再做运行的方式,事件驱动程序模型下的系统,基本上的架构是预先设计一个事件循环所形成的程序,这个事件循环程序不断地检查目前要处理的信息,根据要处理的信息运行一个触发函数进行必要的处理。其中这个外部信息可能来自一个目录夹中的文件,可能来自键盘或鼠标的动作,或者是一个时间事件。对一个事件驱动(event driven)系统进行程序设计,因此可以视为改写系统默认触发函数的行为,来符合自己需要的一种动作。输入的事件可以放进事件循环或者是经由已经注册的中断处理器来与硬件事件交互;而许多的软件系统使用了混和这两种技术的处理。预先设计好的算法确定了一件事,那就是当他们被需要的时候,就会在适当的时机被触发。也因此提供了一个模拟中断驱动环境(interrupt driven environment)的软件抽象架构。事件驱动程序设计基本上包含了许多小程序片段,这些小程序片段被称为事件处理器并且被用来回应外部的事件与分发事件。通常尚未被事件处理器处理的事件,都会被系统放在一个称为事件队列的数据结构中,等待被处理。许多情况下,事件处理器可以自己触发事件,因此也可能形成一个事件串。 事件驱动程序设计的着重于弹性以及异步化上面,并且企图尽可能的modeless。 图形用户界面这类程序就是典型的事件驱动设计方式。计算机操作系统是事件驱动程序的典型示例。在操作系统的最底层,中断处理器的动作就像是硬件事件的直接处理器,搭配着 CPU 运行分配事件规则动作。对软件进程而言,基本上操作系统可视为一个事件分配器,发送数据和软件中断给用户自己写的软件进程。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; / 当前雷数,当前方块数 int rightBomb, restBomb, restBlock; / 找到的地雷数,剩余雷数,剩余方块数 JButton start = new JButton( 开始 ); 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(当前雷数 + : + BombNum); setBomb = new JLabel(设置地雷数); 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, 您设置的地雷数太少了,请重设!, 错误, JOptionPane.ERROR_MESSAGE); num=10; BombNum = num; else JOptionPane.showMessageDialog(null, 您设置的地雷数太多了,请重设!, 错误, JOptionPane.ERROR_MESSAGE); num=10; BombNum = num; /* 开始,布雷 */ public void startBomb() nowBomb.setText(当前雷数 + : + 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);/设置字体大小 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(); /* 计算方块周围雷数 */ 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; / 当需要检测的单元格本身无地雷的情况下,统计周围的地雷个数 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(); /* 当选中的位置为空,则翻开周围的地图* */ 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); /* 左键点击 */ 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(当前雷数 + : + 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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年产540套矿用除杂筛项目可行性研究报告
- 电梯售后服务改进项目可行性研究报告
- 防暑降温急救知识培训课件
- 食品配送行业市场需求分析
- 智慧城市建设对房地产市场的影响
- 消瘀药物临床应用现状-洞察及研究
- 浙江省名校协作体2026届高三上学期开学考试(一模)语文试卷(含答案)
- 山东省济南市2024-2025学年高一上学期期末学习质量检测历史试卷(含答案)
- 绿色工厂概念在皮革制品行业的应用研究-洞察及研究
- 第十三章 三角形 单元测试(含答案)2025-2026学年人教版数学八年级上册
- 建筑外观设计设计理念
- 部编人教版一年级上册道德与法治全册教案
- 乳牙根管治疗的护理配合
- 掘进支护安全培训课件
- 新概念二单词表
- 突发性耳聋演示课件
- 《雅思阅读技巧》课件
- 中医基础理论9病机课件
- 2023年全国出版专业技术人员职业资格考试出版专业基础知识(中级)试题及参考答案
- 工程结构检测与加固-3-砌体结构检测与加固
- 《影视美学教学》课件
评论
0/150
提交评论