事件驱动程序设计.docx

上传人:b****5 文档编号:6099250 上传时间:2023-01-03 格式:DOCX 页数:11 大小:58.18KB
下载 相关 举报
事件驱动程序设计.docx_第1页
第1页 / 共11页
事件驱动程序设计.docx_第2页
第2页 / 共11页
事件驱动程序设计.docx_第3页
第3页 / 共11页
事件驱动程序设计.docx_第4页
第4页 / 共11页
事件驱动程序设计.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

事件驱动程序设计.docx

《事件驱动程序设计.docx》由会员分享,可在线阅读,更多相关《事件驱动程序设计.docx(11页珍藏版)》请在冰豆网上搜索。

事件驱动程序设计.docx

事件驱动程序设计

事件驱动程序设计(英语:

Event-drivenprogramming)是一种电脑程序设计模型。

种模型的程序运行流程是由用户的动作(如鼠标的按键,键盘的按键动作)或者是由其他程

序的消息来决定的。

相对于批处理程序设计(batchprogramming)而言,程序运行的流程是由程序员来决定。

批量的程序设计在初级程序设计教学课程上是一种方式。

然而,事件驱动

程序设计这种设计模型是在交互程序(Interactiveprogram)的情况下孕育而生的。

事件驱动程序可以由任何编程语言来实现,然而使用某些语言来撰写会比其他的语言

来的简单。

有些集成开发环境(简称IDE)也会影响实现事件驱动程序设计的难易程度。

的IDE会使的开发工作变的很简单,有的则否。

取代传统上一次等待一个完整的指令然后再做运行的方式,事件驱动程序模型下的系

统,基本上的架构是预先设计一个事件循环所形成的程序,这个事件循环程序不断地检查目

前要处理的信息,根据要处理的信息运行一个触发函数进行必要的处理。

其中这个外部信息

可能来自一个目录夹中的文件,可能来自键盘或鼠标的动作,或者是一个时间事件。

对一个事件驱动(eventdriven)系统进行程序设计,因此可以视为改写系统默认触发函数的行为,来符合自己需要的一种动作。

输入的事件可以放进事件循环或者是经由已经

注册的中断处理器来与硬件事件交互;而许多的软件系统使用了混和这两种技术的处理。

先设计好的算法确定了一件事,那就是当他们被需要的时候,就会在适当的时机被触发。

因此提供了一个模拟中断驱动环境(interruptdrivenenvironment)的软件抽象架构。

事件驱动程序设计基本上包含了许多小程序片段,这些小程序片段被称为事件处理器并且被用来回

应外部的事件与分发事件。

通常尚未被事件处理器处理的事件,都会被系统放在一个称为事

件队列的数据结构中,等待被处理。

许多情况下,事件处理器可以自己触发事件,因此也可能形成一个事件串。

事件驱

动程序设计的着重于弹性以及异步化上面,并且企图尽可能的modeless。

图形用户界面这

类程序就是典型的事件驱动设计方式。

计算机操作系统是事件驱动程序的典型示例。

在操作系统的最底层,中断处理器的动

作就像是硬件事件的直接处理器,搭配着CPU运行分配事件规则动作。

对软件进程而言,

基本上操作系统可视为一个事件分配器,发送数据和软件中断给用户自己写的软件进程。

packagetext;

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

publicclassFrame

extendsJFrame{

JTextFieldtext;

JLabelnowBomb,setBomb;

intBombNum,BlockNum;//当前雷数,当前方块数

intrightBomb,restBomb,restBlock;//找到的地雷数,剩余雷数,剩余方块数

JButtonstart=newJButton(”开始”);

JPanelMenuPamel=newJPanel();

JPanelbombPanel=newJPanel();

Bomb叩bombButton;

JPanelc;

newBorderLayout()newGridLayout();

EXIT_ON_CLOSE);

BorderLayoutborderLayout1=

GridLayoutgridLayout1=publicFrame(){try{setDefaultCloseOperation(jbInit();

}

catch(Exceptionexception){exception.printStackTrace();

}

}

privatevoidjbInit()throwsException{

c=(JPanel)getContentPane();

setTitle("扫雷");

c.setBackground(Color.WHITE);

MenuPamel.setBackground(Color.GRAY);c.setLayout(borderLayout1);

setSize(newDimension(600,600));

setResizable(false);

BlockNum=144;

BombNum=10;

text=newJTextField("10",3);

this));

nowBomb=newJLabel("

setBomb=newJLabel("

start.addActionListener(当前雷数"+":

"+BombNum);设置地雷数");

newFrame1_start_actionAdapter(

MenuPamel.add(setBomb);

MenuPamel.add(text);

MenuPamel.add(start);

MenuPamel.add(nowBomb);

SOUTH);

c.add(MenuPamel,java.awt.BorderLayout.

bombPanel.setLayout(gridLayout1);

gridLayout1.setColumns((int)Math.sqrt(BlockNum));gridLayout1.setRows((int)Math.sqrt(BlockNum));bombButton=newBomb[(int)Math.sqrt(BlockNum)][(int)

Math.sqrt(BlockNum)];

for(inti=0;i<(

for(intj=0;j<(

int)Math.sqrt(BlockNum);i++){

int)Math.sqrt(BlockNum);j++){

bombButton[i][j]=newBomb(i,j);

//bombButton[i][j].setSize(10,10);

bombButton[i][j].setFont(

bombButton[i][j].setForeground(Color.bombButton[i][j].addMouseListener(bombButton[i][j].addActionListener(bombPanel.add(bombButton[i][j]);

}

}

c.add(bombPanel,java.awt.BorderLayout.

startBomb();

}

/*开始按钮*/

white);

newBomb_mouseAdapter(this));newBomb_actionAdapter(this));

CENTER);

publicvoidstart_actionPerformed(ActionEvente){intnum=Integer.parseInt(text.getText().trim());

if(num>=5&&num<50){

BombNum=num;

startBomb();

}

elseif(num<5){

(null,"您设置的地雷数太少了,请重设!

","错误

ERROR_MESSAG)E;

JOptionPane.showMessageDialog

JOptionPane.

num=10;

BombNum=num;

}

else{

(null,"您设置的地雷数太多了,请重设!

","错误

ERROR_MESSAG)E;

JOptionPane.showMessageDialog

JOptionPane.

num=10;

BombNum=num;

}

}

/*开始,布雷*/

publicvoidstartBomb(){

nowBomb.setText("当前雷数"+":

"+BombNum);

for(inti=0;i<(int)Math.sqrt(BlockNum);i++){

设置字体大小

bombButton[i][j].isBomb=bombButton[i][j].isClicked=bombButton[i][j].isRight=bombButton[i][j].BombFlag=0;bombButton[i][j].BombRoundCount=9;bombButton[i][j].setEnabled(bombButton[i][j].setText("");bombButton[i][j].setFont(bombButton[i][j].setForeground(Color.rightBomb=0;restBomb=BombNum;restBlock=BlockNum-BombNum;

}

}

for(inti=0;i

int

int

if(bombButton[x][y].isBomb!

=bombButton[x][y].isBomb=i++;

}

}

CountRoundBomb();

}

/*计算方块周围雷数*/

false;

false;

false;

true);

newFont("",Font.PLAIN,14));//

BLUE);

int)(Math.sqrt(BlockNum)int)(Math.sqrt(BlockNum)

true){

true;

publicvoidCountRoundBomb(){

for(inti=0;i<(int)Math.sqrt(BlockNum);i++){

for(intj=0;j<(int)Math.sqrt(BlockNum);j++){

intcount=0;

//当需要检测的单元格本身无地雷的情况下,统计周围的地雷个数if(bombButton[i][j].isBomb!

=true){

for(intx=i-1;x

for(inty=j-1;y

if((x>=0)&&(y>=0)

&&(x<((int)Math.sqrt(BlockNum)))

&&(y<((int)Math.sqrt(BlockNum)))){

if(bombButton[x][y].isBomb==true){

count++;

}

}bombButton[i][j].BombRoundCount=count;

}

}

}

}

/*是否挖完了所有的雷*/

publicvoidisWin(){restBlock=BlockNum-BombNum;

for(inti=0;i<(int)Math.sqrt(BlockNum);i++){

for(intj=0;j<(int)Math.sqrt(BlockNum);j++){

if(bombButton[i][j].isClicked==true){restBlock--;

}

}

}

if(rightBomb==BombNum||restBlock==0){

胜利

JOptionPane.showMessageDialog(this,"您挖完了所有的雷,您胜利了!

",

>

JOptionPane.INFORMATION_MESSAGE);startBomb();

}

}

/**当选中的位置为空,则翻开周围的地图**/

publicvoidisNull(BombClickedButton){

inti,j;

i=ClickedButton.num_x;

j=ClickedButton.num_y;

for(intx=i-1;x

for(inty=j-1;y

if(((x!

=i)||(y!

=j))&&(x>=0)&&(y>=0)

&&(x<((int)Math.sqrt(BlockNum)))

&&(y<((int)Math.sqrt(BlockNum)))){

if(bombButton[x][y].isBomb==false

&&bombButton[x][y].isClicked==false

&&bombButton[x][y].isRight==false){turn(bombButton[x][y]);

}

}

}

}

}

/*翻开*/

publicvoidturn(BombClickedButton){

ClickedButton.setEnabled(false);

ClickedButton.isClicked=true;

if(ClickedButton.BombRoundCount>0){

ClickedButton.setText(ClickedButton.BombRoundCount+"");}

else{

isNull(ClickedButton);

}

}

/*左键点击*/

publicvoidactionPerformed(ActionEvente){

if(((Bomb)e.getSource()).isClicked==false

&&((Bomb)e.getSource()).isRight==false){

if(((Bomb)e.getSource()).isBomb==false){turn(((Bomb)e.getSource()));

isWin();

}

else{

for(inti=0;i<(

startBomb();

}

}

/*右键点击*/

publicvoidmouseClicked(MouseEvente){

BombbombSource=(Bomb)e.getSource();

booleanright=SwingUtilities.isRightMouseButton(e);

if((right==true)&&(bombSource.isClicked==false)){

bombSource.BombFlag=(bombSource.BombFlag+1)%3;

if(bombSource.BombFlag==1){

if(restBomb>0){bombSource.setForeground(Color.RED);bombSource.setText("F");

bombSource.isRight=true;

restBomb--;

}

else{bombSource.BombFlag=0;

}

}

elseif(bombSource.BombFlag==2){restBomb++;

bombSource.setText("Q");bombSource.isRight=false;

}

else{bombSource.setText("");

}

if(bombSource.isBomb==true){

if(bombSource.BombFlag==1){rightBomb++;

}

elseif(bombSource.BombFlag==2){rightBomb--;

}

}

nowBomb.setText("当前雷数"+":

"+restBomb);isWin();

}

}

publicstaticvoidmain(String[]args){

Frameframe=newFrame();frame.setVisible(true);

}

}

classFrame1_start_actionAdapter

implementsActionListener{

privateFrameadaptee;

Frame1_start_actionAdapter(Frameadaptee){this.adaptee=adaptee;

}

publicvoidactionPerformed(ActionEvente){adaptee.start_actionPerformed(e);

}

}

classBomb

extendsJButton{

intnum_x,num_y;

intBombRoundCount;

booleanisBomb;

booleanisClicked;

intBombFlag;

booleanisRight;

publicBomb(intx,inty){num_x=x;

num_y=y;

BombFlag=0;

BombRoundCount=9;

isBomb=false;

isClicked=false;

isRight=false;

}

}

classBomb_actionAdapterimplementsActionListener{privateFrameadaptee;

Bomb_actionAdapter(Frameadaptee){this.adaptee=adaptee;

publicvoidactionPerformed(ActionEvente){adaptee.actionPerformed(e);

}

}

classBomb_mouseAdapter

extendsMouseAdapter{

privateFrameadaptee;

Bomb_mouseAdapter(Frameadaptee){this.adaptee=adaptee;

}

publicvoidmouseClicked(MouseEvente){adaptee.mouseClicked(e);

}

}

•4lHli*(IM))・I』砒)闪"代-1>H

Jj«ty-(W)g.ran^W:

i■■limtjr^rth.rqri-i:

BlcciciLn>-l)|i

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1