java实训报告扫雷.docx

上传人:b****6 文档编号:4762254 上传时间:2022-12-08 格式:DOCX 页数:26 大小:95.68KB
下载 相关 举报
java实训报告扫雷.docx_第1页
第1页 / 共26页
java实训报告扫雷.docx_第2页
第2页 / 共26页
java实训报告扫雷.docx_第3页
第3页 / 共26页
java实训报告扫雷.docx_第4页
第4页 / 共26页
java实训报告扫雷.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

java实训报告扫雷.docx

《java实训报告扫雷.docx》由会员分享,可在线阅读,更多相关《java实训报告扫雷.docx(26页珍藏版)》请在冰豆网上搜索。

java实训报告扫雷.docx

java实训报告扫雷

-------------学院

课程设计(实训)报告

 

系部_信息工程系__专业_软件技术

班级__学号

姓名课题扫雷

指导教师_报告成绩_____________

 

日期:

2011年12月29日

摘要

本次课程设计是用java语言及相关知识设计一个扫雷游戏系统,完成扫雷的基本功能。

并在此基础上,自行完善和优化系统功能。

理解和掌握选择游戏级别,记录游戏时间和保存游戏成绩的方法,学习程序设计的基本思路和方法,培养计算机专业学生运用所学知识解决计算机应用领域内实际问题能力,进一步提高动手操作能力和用java语言综合编成能力,程序调试技能。

 

一、前言…………………………………………………………………4

二、正文…………………………………………………………………5

2.1设计题目及要求…………………………………………………………5

2.2概要(总体)设计………………………………………………………6

2.3详细设计…………………………………………………………………6

2.4程序的核心代码…………………………………………………………7

2.5调试中出现的问题………………………………………………………9

2.6运行结果…………………………………………………………………10

三、总结………………………………………………………………12

四、参考文献………………………………………………………12五、附录………………………………………………………………12

 

一、前言

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

  不久之后,“方块”被改写成了游戏“Rlogic”。

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

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

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

  这款游戏的玩法是在一个9*9(初级),16*16(中级),16*30(高级),或自定义大小的方块矩阵中随机布置一定量的地雷(初级为10个,中级为40个,高级为99个)。

由玩家逐个翻开方块,以找出所有地雷为最终游戏目标。

如果玩家翻开的方块有地雷,则游戏结束。

 

二、正文

2.1设计题目及要求(需求分析)

1设计题目:

基于Java的扫雷游戏

2游戏的描述:

本产品是一个简单的游戏软件,目的是尽快找到雷区中的所有地雷,而不许踩到地雷。

如果挖开的是地雷,您将输掉游戏。

3实现的功能:

可以实现简单的游戏功能开始游戏、改变雷数。

4游戏的界面:

游戏的菜单栏中有‘开始游戏’和‘列’‘行’‘宽’选项,游戏的显示界面中有游戏的主界面和信息界面(列、行、宽和雷的个数)。

5软件可实现扫雷游戏的简单操作:

1)、游戏功能:

点击鼠标左键点击下寻找地雷

右键点击下标记地雷

点击笑脸的标记开始重新游戏

计雷功能:

游戏当前雷数

2)、设置功能:

设置扫雷的行、宽、列和改变雷数

6用户的操作:

在游戏菜单上,单击开局。

单击游戏区中的任何方块,要启动计时器。

通过单击即可挖开方块。

如果挖开的是地雷,则您输掉游戏。

如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷。

要标记您认为可能有地雷的方块,请右键单击它。

2.2概要(总体)设计

1流程图

2扫雷概述(类)

JAVA的图形界面

图形界面简称GUI,是用图形的方式,借助菜单、按纽等标准界面元素和鼠标操作,帮助用户方便地想计算机系统发出指令、启动操作,并将系统的运行结果同样以图形方式显示给用户的技术。

JAVA的图形界面技术既为使用java.awt包来创建图形界面的方法,包括AWT组件、窗口和菜单设计、布局管理器以及绘图操作等。

AWT概述

AWT既抽象窗口工具集,用于图形用户界面的开发。

AWT的功能包括以下方面:

(1)丰富的图形界面组件。

(2)强大的事件处理模型图形和图形工具,包括形状、颜色和字体。

(3)布局管理器,可以进行灵活的的窗口布局,设计特定窗口的尺寸和和屏幕分辨率。

(4)无关数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴操作。

(5)打印和无鼠标操作。

Java.awt是java基本包中最大的一个,其中定义了所有的GUI组件类,以及其他用于构造图形界面的类。

AWT基本组件

(1)标签组件(Label)

标签组件显示的是静态文本,在通常情况下是不能编辑的,能起到提示的作用

Label组件有三种构造函数:

Label():

创建空的标签

Label(String):

创建一个带初始字符串的标签。

Label(String,int):

创建一个带初始字符串及指定对齐方式的标签。

(2)文本域

文本域一般用来让用户输入姓名、信用卡号等这样的信息,它是一个能够接收用户的键盘输入的小块区域。

TextField():

创建空的文本域

(3)按钮(Button)

几乎所有的交互式程序中都会有按纽,它是一种交互能力强且交互方便的控件,这个控件提供了“按下并动作”的基本用户界面。

按纽的构造方法有:

Button():

建立一个没有标示字符串的新按纽类对象。

Button(StringLabel):

建立一个标示字符串为Label的新按纽类的对象

(4)画板组件(Panel)

我们在界面上安排各种组件时,有时会需要将组件成组放置,这时就可以使用面板组件。

Panel是最简单的容器组件,本身是一个矩形区域,可以在其中放入各种组件。

但它仅仅是安排各种组件的一种结构,需要最后加入到别的容器中才能实现GUI的功能。

面板组件的创建

Panel():

用默认的布局管理器创建面板组件。

Panel(LayoutManagerlayout):

用指定的布局管理器创建面板组件。

(5)框架窗口组件(Frame)

Frame是独立于浏览器的可独立运行的主窗口,通常用于进行开发桌面应用程序。

Frame拥有边界和标题栏设置,其大小可以进行设置调整。

Frame里面需要加入组件,也可以加入菜单,或在上面绘图。

Frame的创建

Frame():

创建一个没有窗口标题的窗口框架。

Frame(String):

创建一个指定窗口标题的窗口框架。

2.3详细设计

游戏胜利和失败的条件创建,当所有雷都被找出时胜利,当左键点击到雷时失败,具体实现函数如下示:

publicvoidpaint(Graphicsg)胜利失败条件

g.clearRect(0,0,600,600);

g.drawString("GameOver",0,200);

2.4程序的核心代码

publicvoidpaint(Graphicsg)

{

intx,y,w;

ints;

intcx=bw/2-4;

intcy=bw/2+4;

g.clearRect(0,0,600,600);

for(i=1;i<=bx;i++)

{

for(j=1;j<=by;j++)

{

draw(g,i,j);

}

}

if(f==1)

{

Fontf=newFont("11",1,70);

Fontfo=g.getFont();

g.setColor(Color.white);

g.setFont(f);

//g.setSize();

g.drawString("GameOver",0,200);

g.setFont(fo);

}

if(f==2)

{

Fontf=newFont("11",1,70);

Fontfo=g.getFont();

g.setColor(Color.white);

g.setFont(f);

//g.setSize();

g.drawString("Youwin!

",0,200);

g.setFont(fo);

}

}

2.5调试中出现的问题

1.类定义未找到错误java.lang.NoClassDefFoundError。

􀀛原因分析

⑴由于该程序调用到的JAVA类文件没有正确上传。

⑵JAVA类文件已经上传,但应用服务器并未检测到,建议将JSP页面重新更新。

􀀛解决方案

⑴将JAVA类文件重新上传。

⑵将JSP页面更新并上传;或将应用程序服务器进行重新启动。

2.解决java.lang.StackOverflowError错误。

􀀛错误信息

严重:

Exceptioninitializingpagecontext

java.lang.StackOverflowError........................

􀀛原因分析

运行一个程序,JVM会开辟一块内存空间去储存程序进行时的某些信息,当程序运行时需

要储存的信息超过了分配的空间,就会出现那样的问题.比如死循环,递归次数过多,等等。

􀀛解决方案

首先从程序代码优化方面着手,检查是否有死循环、递归等程序,如果有,修正、优化

相关代码。

2.6运行结果

1运行程序,生成指定行列数的扫雷游戏的图形界面,运行结果如图所示

 

2鼠标左键点击到雷时,失败,游戏结束,运行结果如图所示:

 

3改变雷的个数,从15个雷改为20个雷,开始游戏,运行结果如图所示:

 

4所有雷都被找出时,游戏胜利,运行结果如图所示:

三、总结

这不是我第一次做课程设计,但这个扫雷游戏我平常也会经常的玩,所以对于做这个扫雷游戏的课程设计我也是很兴奋,虽然这设计过程中遇到很多困难,但都在尽力的克服,对于我自己做出的这个程序我还是比较满意的,基本功能基本都实现了,图形界面虽然不能说是非常友好,但好象也至少能看的过去,通过这个课程设计我学到了很多的东西,把以前所学的课本知识很好的用到了实践当中,并且通过实践,重新发现了很多问题和很多以前不理解的没掌握的知识点,并且通过完成这个设计,很好的重新的理解并掌握了各种知识点。

四、参考文献

[1]耿祥义.JAVA大学实用教程.电子工业出版社.2005.03

[2]朱战立,沈伟编著.Java程序设计实用指南.电子工业出版社,2005.1

[3][美]CayS.Horstmann.程峰等译.JAVA2核心技术.机械工业出版社.2003.06

[4]陈占伟,刘旭,陈文霞《Java程序设计》武昌,武汉大学出版社,2011年7月第一版

[5]朱庆生,古平,《java程序设计》北京,清华大学出版社,2011

[6]包海山,李占玲,《java程序设计案例教程》,北京,机械工业出版社

[7]刘瑞挺,侯冬梅,《java程序设计实用教程》,北京,清华大学出版社,2009

五、附录

全部程序代码

importjava.awt.*;

importjavax.swing.*;

importjava.util.Random;

importjava.awt.event.*;

classMinextendsJPanel//雷的类

{

//备注:

鼠标的左键=1;右键=3;中键=2

privateintflag=0,statu=0;//定义雷的属性0:

没有打开1:

打开2:

标示为雷3:

不确定

//flag=0不是雷;flag=1是雷

privateintbut,count=0;//but:

哪一个鼠标键被按下去了count:

这个区域周围有多少个雷

privateintmx=0,my=0,mw=10;//定义雷的坐标和宽度

publicMin()//构造函数

{

statu=0;

}

publicMin(intf,intx,inty,intw)

//构造函数

{

flag=f;

mx=x;

my=y;

mw=w;

}

publicintgetFlag(){returnflag;}

publicintgetStatu(){returnstatu;}

publicintgetMx(){returnmx;}

publicintgetMy(){returnmy;}

publicintgetMw(){returnmw;}

publicintgetCount(){returncount;}

publicvoidsetFlag(intf){flag=f;}

publicvoidsetCount(intc){count=c;}

publicvoidsetData(intf,intx,inty,intw,ints)

//传递值

{

flag=f;

mx=(x-1)*w;

my=(y-1)*w;

mw=w-1;

statu=s;

}

//根据你点击鼠标的不同来改变雷的属性

publicintsendKey(intkey)

{

//返回值,如果游戏结束则返回-1

intrtn=1;

if(key==3)

{

switch(statu)

{

case1:

break;

case2:

statu=3;

break;

case3:

statu=0;

break;

case0:

statu=2;

break;

}

rtn=1;

}

if(key==1&&statu==0)

{

switch(flag)

{

case0:

statu=1;

rtn=2;

break;

case1:

statu=1;

rtn=-1;

break;

}

}

returnrtn;

}

}

classDrawPanelextendsJPanel

{

privateinti,j;

privateintf=0;//iff=1thengameover,iff=2thenwin

privateintchx=0,chy=0;//专门记录坐标x,y的值

privateintmsum=6,ksum=0;//msum:

雷的个数,ksum:

标示雷的个数

privateintbx=10,by=10,bw=40;//bx,by:

棋盘的大小,bw:

棋子的大小

publicMinboard[][]={

{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},

{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},

{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},

{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},

{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},

{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},

{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},

{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},

{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},

{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},

{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},

{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},

{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},

{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},

{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},

{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},

{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},

{newMin(),newMin(),newMin(),newMin(),newMin(

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

当前位置:首页 > 高中教育 > 其它课程

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

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