扫雷教案资料.docx

上传人:b****8 文档编号:11323127 上传时间:2023-02-26 格式:DOCX 页数:28 大小:1.60MB
下载 相关 举报
扫雷教案资料.docx_第1页
第1页 / 共28页
扫雷教案资料.docx_第2页
第2页 / 共28页
扫雷教案资料.docx_第3页
第3页 / 共28页
扫雷教案资料.docx_第4页
第4页 / 共28页
扫雷教案资料.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

扫雷教案资料.docx

《扫雷教案资料.docx》由会员分享,可在线阅读,更多相关《扫雷教案资料.docx(28页珍藏版)》请在冰豆网上搜索。

扫雷教案资料.docx

扫雷教案资料

 

扫雷

郑州工业应用技术学院

课程设计说明书

题目扫雷游戏实验设计专业班级学号1姓名

主要目的:

实训主要是锻炼我们的操作能力,将学习的理论知识运用于实践当中,反过来还能检验书本上理论的正确性,有利于融会贯通。

让我们对本专业知识形成一一个客观,理性的认识,从而不与社会现实相脱节。

基本要求:

1.深入学习和理解Java原理,掌握Java编程方法。

2.深入分析扫雷游戏运行流程,绘制程序流程图。

主要参考资料:

[1]Eric.Java编程思想[M].第4版.机械工业出版社,机械工业出版社.

[2]杜波依斯.MySQL技术内幕[M].第4版.人民邮电出版社,2011年

[3]林信良.JSP&Servlet学习笔记[M].清华大学出版社,2012年

[4]张峋,杨三成.JSP与JDBC应用详解[M].中国铁道出版社,2010年

 

完成期限10月7日-12月10日

指导教师签名

课程负责人签名

摘要

SunMicrosystems公司在推出Java语言的同时,推出了一套开发工具JDK。

Sun提供的基于字符模式的Java开发工具包JDK:

Java开发工具(JDK)是许多Java专家最初使用的开发环境。

Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。

Java源程序编写借助于记事本,Editpuls,UltraEdit等第三方编辑工具。

所有的Java文件编辑、编译、调试、解释运行都是通过使用字符命令来执行操作。

JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。

其核心JavaAPI是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。

JDK是整个Java的核心,包括了Java运行环境(JavaRuntimeEnvirnment),一堆Java工具和Java基础的类库(rt.jar)。

不论什么Java应用服务器实质都是内置了某个版本的JDK。

因此掌握JDK是学好Java的第一步。

JDK里面是java类库和java的语言规范,它提供的是无论你用何种开发软件写java程序都必须用到的类库和java语言规范.没有jdk,你的java程序根本就不能用。

最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。

其中IBM的JDK包含的JVM(JavaVirtualMachine)运行效率要比SunJDK包含的JVM高出许多。

而专门运行在x86平台的Jrocket在服务端运行效率也要比SunJDK好很多。

关键词:

扫雷游戏;算法设计;事件;AVA

第一章概述

本课程设计的目标是设计一个名为《扫雷》的游戏软件,扫雷游戏分为初级、中级和高级三个级别。

单击游戏菜单可以选择“初级”、“中级”和“高级”。

1、选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击‘“开始”便启动计时器。

2、用户要揭开某个方块,可左键单击它。

若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。

3、如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。

用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。

1.1课程设计目的

通过选择扫雷游戏软件设计,这个综合性的题目作为本次的课程设计。

可以让我们更加熟悉Java程序设计这门课程,学会熟练使用Java这个软件,加深对Java语言的掌握,提高编程水平。

同时培养独立思考和同学间团结合作的能力,为毕业设计以及将来的工作打下坚实的基础。

1.2预备知识

JAVA是一种功能强大和多用途的编程语言,具有面向对象、与平台无关的、安全、稳定和多线程等优良特性,可用于开发大型的应用程序,而且特别适合Internet应用的开发。

java是由JamesGosling在Sun公司的领导的小组开发的,最初成为Oak(橡树),1995年更名为java。

JAVA语言规范、API(应用程序接口)、JDK(java开发工具包)、IDE(集成开发环境):

Java语言规范定义了Java的语法,Java库则在JavaAPI中定义;JDK是用于开发和运行java程序的软件;IDE是快速开发程序的集成开发环境。

java是一门编程性的语言,编程时区分大小写,我们需要多加练习才能快速有效的提高。

要知道java是分两部分的:

一个是编译,一个是运行。

javac:

负责的是编译的部分,当执行javac时,会启动java的编译器程序。

对指定扩展名的.java文件进行编译。

生成了jvm可以识别的字节码文件。

也就是class文件,也就是java的运行程序。

JAVA:

负责运行的部分.会启动jvm加载运行时所需的类库,并对class文件进行执行. 每个java程序至少有一个类,类名是按照惯例都以大写字母开头,一个文件要被执行,必须要有一个执行的起始点,这个起始点就是main函数。

编程中一个良好的习惯就是写注释,分为行注释//(注释的内容)和块注释/ (注释的内容) 。

1.3课程设计内容和要求

Windows2000/XP系统提供的扫雷游戏是一个很有趣的游戏。

本章的课程设计使用Java语言编写一个与其类似的扫雷游戏。

具体要求如下:

(1) 扫雷游戏分为初级、中级和高级三个级别,扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。

单击游戏菜单可以选择“初级”、“中级”和“高级”。

(2) 选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何一个方块便启动计时器。

(3) 用户要揭开某个方块,可单击它。

若所揭方块下有泪,用户便输了这一局,若所揭方块下五雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。

(4) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。

用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。

   

(5) 扫雷胜利后(用时最少者),程序弹出保存成绩的对话框。

  

(6)如果用户需要即使提示声,并可选中声音选项,此时将听到计时的卡塔声。

当用户点中雷时,将有爆炸声产生,胜利时,将有凯旋的旋律播放。

第二章需求分析

2.1系统目标

本系统主要是完成俄罗斯方块游戏的基本操作,在玩游戏的过程中玩家可以放松心情得到娱乐。

2.2主题功能

(1)用户可以自定义级别并且可以任意输入雷数; 

(2)具有计时功能,即显示用户完成移动盘子所花费的时间;

(3)用户可以选择是否有音效;

2.3开发环境

操作系统可以有以下几种:

Win XP/Win Vista/Win 7。

硬件要求:

奔腾四处理器,主频2.0GHz,512M以上内存。

2.4概念设计

随着社会的不断进步,人们的压力也不断的提高,在游戏层出不穷的时刻,扫雷游戏任然受到不少人的青睐,,其本身的性质,决定了人们对它的喜爱的程度,不需要特殊的技巧,不需要不断的升级,还不需要太多的时间进行熟悉,简简单单却趣味无穷。

扫雷最原始的版本可以追溯到1973年一款名为“方块”的游戏。

不久之后,

“方块”被改写成了游戏“Rlogic”。

在“Rlogic”里,玩家的任务是作为美国海军陆战队队员,为指挥中心探出一条没有地雷的安全路线,如果路全被地雷堵死就算输。

两年后,汤姆·安德森在“Rlogic”的基础上又编写出了游戏“地雷”,由此奠定了现代扫雷游戏的雏形。

1981年, 微软公司的罗伯特·杜尔和卡特·约翰逊两位工程师在Windows3.1系统上加载了该游戏,扫雷游戏才正式在全世界推广开来。

Java语言是面向对象编程,并涉及到网络、多线程等重要的基础知识,因此Java语言也是学习面向对象编程和网络编程的首选语言。

该课题的主要目的是使Java游戏开发者深入理解所学的Java语言,并实践于该俄罗斯方块游戏设计中,深刻体会以前所学的有关Java程序设计方面的语言基础、异常处理、事件处理、应用程序以及图形用户界面设计等方面的知识,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构等。

学会使用Java系统,其中包括对程序的调试、运行、保存等知识的运用,还包括提高程序开发功能,能运用合理的方法简化Java程序的操作,开发过程中应培养分析问题、解决问题的能力。

本次课程设计的主要目的是为了通过具体的程序来加深对Java语言的掌握,提高自己的编程水平。

选择的题目来自《Java课程设计(第二版)》中的扫雷游戏,这是一个综合性的题目,可以对Java中的各项功能有更好的理解和使用,同时也为以后的工作打下一定的基础。

第三章设计步骤

3.1程序流程图

下图为扫雷流程图,点击开始进入初始化,进入循环。

如图3.1所示:

图3.1扫雷程序流程图

3.2雷区设计流程图

扫雷逻辑分析也很重要,敲一个好的游戏,首先就要分析游戏逻辑,下图为扫雷雷区图,如图3.2所示:

图3.2扫雷雷区流程图

3.4游戏背景图

扫雷游戏背景也很重要,拥有一个好的背景图会让玩家拥有更好的体验感,下图为1扫雷游戏背景图图,如图3.3所示:

图3.3扫雷背景图图

第四章设计正文

4.1AllButtonPanel()类:

AllButtonPanel代码如下:

packagecleanMine;

importjavax.swing.*;

importjava.awt.*;

importjava.awt.event.*;

/**

*显示所有按钮的面板

*@authorAdministrator

*

*/

publicclassAllButtonPanelextendsJPanelimplementsActionListener{

privateintrow;//行数

privateintcol;//列数

privateintmineCount;//地雷数

privateMineButton[][]allButtons;//所有按钮

publicAllButtonPanel(introw,intcol,intmineCount){

this.row=row;

this.col=col;

this.mineCount=mineCount;

allButtons=newMineButton[row][col];

createButtons();

createMine();

init();

}

privatevoidinit(){

this.setLayout(newGridLayout(row,col));

for(inti=0;i

for(intj=0;j

this.add(allButtons[i][j]);

}

}

}

/**

*随机布雷的方法

*

*/

privatevoidcreateMine(){

intn=0;

while(n

inti=(int)(Math.random()*row);

intj=(int)(Math.random()*col);

if(allButtons[i][j].getCountOfSurroundMines()!

=-1){

allButtons[i][j].setCountOfSurroundMines(-1);

n++;

}

}

for(inti=0;i

for(intj=0;j

if(allButtons[i][j].getCountOfSurroundMines()!

=-1){

allButtons[i][j].setCountOfSurroundMines(getSurroundMineCount(i,j));

}

}

}

}

/**

*统计(i,j)坐标周围8个位置的地雷数

*@paramdata

*@parami

*@paramj

*@return

*/

privateintgetSurroundMineCount(inti,intj){

intnum=0;//统计周围的雷数

if(i-1>=0&&j-1>=0){

num+=(allButtons[i-1][j-1].getCountOfSurroundMines()==-1?

1:

0);

}

if(i-1>=0){

num+=(allButtons[i-1][j].getCountOfSurroundMines()==-1?

1:

0);

}

if(i-1>=0&&j+1

num+=(allButtons[i-1][j+1].getCountOfSurroundMines()==-1?

1:

0);

}

if(j-1>=0){

num+=(allButtons[i][j-1].getCountOfSurroundMines()==-1?

1:

0);

}

if(j+1

num+=(allButtons[i][j+1].getCountOfSurroundMines()==-1?

1:

0);

}

if(i+1=0){

num+=(allButtons[i+1][j-1].getCountOfSurroundMines()==-1?

1:

0);

}

if(i+1

num+=(allButtons[i+1][j].getCountOfSurroundMines()==-1?

1:

0);

}

if(i+1

num+=(allButtons[i+1][j+1].getCountOfSurroundMines()==-1?

1:

0);

}

returnnum;

}

/**

*生成按钮

*

*/

privatevoidcreateButtons(){

for(inti=0;i

for(intj=0;j

allButtons[i][j]=newMineButton(i,j);

allButtons[i][j].setSize(6,6);

allButtons[i][j].addActionListener(this);//添加点击事件监听

allButtons[i][j].addMouseListener(newMouseAdapter(){//添加鼠标右键事件监听

publicvoidmouseClicked(MouseEvente){

if(e.getButton()==MouseEvent.BUTTON3){

intremain=Integer.parseInt(CleanMine.remainMine.getText());

JButtonb=(JButton)e.getSource();

if(b.getText().equals("")){

remain--;

CleanMine.remainMine.setText(remain+"");

b.setText("&");

}elseif(b.getText().equals("&")){

remain++;

CleanMine.remainMine.setText(remain+"");

b.setText("");

}

}

}

});

}

}

}

publicvoidactionPerformed(ActionEvente){//点击事件监听的方法

MineButtonb=(MineButton)e.getSource();

intr=b.getRow();

intc=b.getCol();

if(allButtons[r][c].getCountOfSurroundMines()==-1){//如果是地雷

for(inti=0;i

for(intj=0;j

if(allButtons[i][j].getCountOfSurroundMines()==-1){//如果该位置是地雷

allButtons[i][j].setText("$");

}elseif(allButtons[i][j].getCountOfSurroundMines()==0){//如果该位置为空(该位置不是地雷,周围8个位置也没有地雷)

allButtons[i][j].setText("");

allButtons[i][j].setBackground(Color.CYAN);

}else{//如果该位置不是地雷,但周围8个位置中有地雷

allButtons[i][j].setText(allButtons[i][j].getCountOfSurroundMines()+"");

allButtons[i][j].setBackground(Color.CYAN);

}

}

}

}else{//如果不是地雷

showEmpty(r,c);//执行排空操作

}

}

/**

*排空方法,若(i,j)位置为空,则显示空白。

然后依次递归找它周围的8个位置。

*@paramdata

*@parami

*@paramj

*/

privatevoidshowEmpty(inti,intj){

MineButtonb=allButtons[i][j];

if(b.isCleared()){

return;

}

if(allButtons[i][j].getCountOfSurroundMines()==0){

b.setBackground(Color.CYAN);

b.setCleared(true);

if(i-1>=0&&j-1>=0){

showEmpty(i-1,j-1);

}

if(i-1>=0){

showEmpty(i-1,j);

}

if(i-1>=0&&j+1

showEmpty(i-1,j+1);

}

if(j-1>=0){

showEmpty(i,j-1);

}

if(j+1

showEmpty(i,j+1);

}

if(i+1=0){

showEmpty(i+1,j-1);

}

if(i+1

showEmpty(i+1,j);

}

if(i+1

showEmpty(i+1,j+1);

}

}elseif(allButtons[i][j].getCountOfSurroundMines()>0){

b.setText(allButtons[i][j].getCountOfSurroundMines()+"");

b.setBackground(Color.CYAN);

b.setCleared(true);

}

}

}

4.2cleanMine类

cleanMine代码如下:

packagecleanMine;

importjavax.swing.*;

importjava.awt.*;

importjava.awt.event.*;

/**

*扫雷游戏主界面

*@authortony.tang

*

*/

publicclassCleanMineextendsJFrameimplementsActionListener{

privateJLabeltext1,text2;

publicstaticJLabelremainMine;//剩余地雷数

privateJLabeltime;//消耗时间

privateJButtonreset;//重新开始

privateJPanelcenter;

privateintrow,col,mine;

publicCleanMine(){

text1=newJLabel("剩余地雷:

");

text2=newJLabel("消耗时间:

");

remainMine=newJLabel("10");

time=newJLabel("0");

reset=newJButton("重新开始");

reset.addActionListener(this);

JMenuBarbar=newJMenuBar();

JMenugame=newJMenu("游戏");

JMenuhelp=newJMenu("帮助");

JMenuItemitem;

game.add(item=newJMenuItem("开局"));item.addActionListener(this);

game.addSeparator();

ButtonGroupbg=newButtonGroup();

game.add(item=newJCheckBoxMenuItem("初级",true));bg.add(item);item.addActionListener(this);

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

当前位置:首页 > 初中教育 > 语文

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

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