扫雷
教你如何玩扫雷课件

当自己无法解决复杂局面时,可以寻求其 他高级玩家的帮助,或者参考相关教程和 解析,从中获取启发和指导。
04
扫雷游戏实战演练与案例 分析
初级难度实战演练
01
02
03
规则与基本操作
首先,讲解扫雷游戏的基 本规则和操作方式,包括 如何标记地雷、如何翻开 方块等。
初级关卡实战
通过实战演练初级难度的 关卡,让玩家了解基本的 游戏策略和技巧,如如何 通过逻辑判断避免地雷。
在扫雷游戏中,通过概率分析可以推测出未翻开格子中雷的分布 概率,帮助玩家更准确地判断下一步的操作。
周边数字与概率的关系
当玩家翻开一个数字时,可以通过该数字推测周边格子中雷的数量 和分布概率,进而选择最有可能安全的格子进行点击。
多次概率分析的综合应用
随着游戏的进行,玩家可以不断利用已经翻开的数字和已知的雷的 位置进行多次概率分析,逐渐提高判断的准确性。
玩家处理复杂局面的情况。
如何处理复杂局面及陷入僵局时的应对策略
保持冷静
重新评估局面
当面临复杂局面或陷入僵局时,首先要保 持冷静,不要盲目进行点击,否则容易犯错。
在僵局时,可以重新审视已经翻开的格子 和数字,重新进行概率分析和策略选择, 找到新的线索和突破口。
试探与记录
寻求帮助或参考教程
在无法准确判断时,可以通过试探性的点 击,并结合记录已知信息和潜在可能性, 逐渐揭示出雷的位置。
则不会有任何变化。
右键点击
玩家可以使用右键点击网格进行标 记,通常用来标记疑似雷的位置。 再次右键点击可以取消标记。
双击操作
当玩家确定某个数字格周围雷的位 置时,可以双击该数字格自动展开 周围的格子。
判断未知区域雷数的技巧
扫雷入门的技巧

扫雷入门的技巧
扫雷是一种经典的数字推理游戏,以下是一些入门的技巧:
1. 观察周围数字:数字表示周围格子中地雷的数量,利用这些数字来判断哪些格子是安全的。
当一个数字周围8个格子都被揭开时,可以根据周围的数字来判断该格子的状态。
2. 利用推理:根据已经揭开的数字和周围的空格,推理周围的地雷位置。
如果一个数字周围所有的地雷都被揭开,那么剩下的未被揭开的格子肯定不是地雷。
3. 标记潜在地雷:如果你怀疑某个格子可能是地雷,可以右键点击标记它。
这有助于你记住潜在的地雷位置,以及避免误点击。
4. 寻找安全格子:经过观察和推理,你可以找到一些确定安全的格子。
揭开这些格子可以帮助你扩大搜索范围,并减少猜测。
5. 不要冒险:在没有足够信息的时候,不要随意猜测。
如果你无法确定一个格子是否安全,可以先揭开周围相对安全的格子,以获取更多的信息。
6. 练习分段:将扫雷分成几个小段进行解决,以避免在大面积搜索中出错。
通过逐步揭开并分析每个区域,你可以更好地掌握每个区域地雷位置的可能性。
7. 学习经典模式:对于初学者来说,开始尝试较简单的级别,如初级或中级模式。
逐渐提高难度,以提高扫雷技巧和推理能力。
最重要的是,扫雷需要耐心和集中力,不要急于揭开所有格子。
通过反复练习和经验积累,你会逐渐提高你的技巧。
幼儿园益智游戏《扫雷》教案

幼儿园益智游戏《扫雷》教案幼儿园益智游戏《扫雷》教案扫雷是一款益智游戏,其简单的规则和多样的玩法受到了很多人的喜爱,包括一些幼儿园的老师和家长。
在幼儿园的教学活动中,扫雷游戏可以被用来培养幼儿的逻辑思维能力、注意力和集中精力的能力。
在本文中,我们将深入探讨幼儿园益智游戏《扫雷》的教案,帮助老师们更好地在教学中引入这个游戏,并更好地指导幼儿参与其中。
1. 游戏背景介绍- 介绍扫雷游戏的起源和基本规则,引发幼儿的兴趣。
2. 游戏材料准备- 准备一块棋盘、小标志或棋子来代表地雷、数字和空白方块,确保材料的安全性和清洁度。
3. 游戏规则说明- 对幼儿简单易懂地解释扫雷游戏的规则,包括如何揭示方块、如何判断开启方块是否会触雷、如何标记潜在的地雷等。
4. 学习目标- 指导教师明确扫雷游戏在幼儿园教学中的学习目标,比如培养幼儿的逻辑思维能力、注意力集中能力和判断能力。
5. 游戏进行- 根据幼儿的芳龄和认知水平,设计不同难度级别的扫雷游戏活动,让幼儿亲身体验游戏的乐趣。
6. 游戏引导- 指导老师如何引导幼儿进行游戏,如何在游戏中引导幼儿思考、讨论和共享。
7. 游戏总结- 对游戏进行总结和回顾,引导幼儿总结自己的游戏经验和收获,从中体会到逻辑推理的乐趣。
8. 我的观点和理解- 我认为,扫雷游戏不仅可以培养幼儿的逻辑思维能力和注意力集中能力,还能锻炼他们在不确定性环境下做出决策的能力。
对于幼儿园的老师来说,引入扫雷游戏也是一种创新教学方法,可以活跃课堂氛围,提高幼儿的学习兴趣。
通过上述教案,老师们可以更好地在幼儿园的教学活动中引入《扫雷》益智游戏,并通过这个游戏帮助幼儿培养多方面的能力。
希望本文对幼儿园老师和家长们能够有所帮助,也希望幼儿们能够在游戏中得到更多的乐趣和成长。
扫雷游戏教案的完整实施需要在教学前做好充分的准备。
老师需要确保游戏材料的准备工作,包括棋盘、小标志或棋子等材料的安全性和清洁度。
老师需要对扫雷游戏的规则进行详细的了解,以便能够清晰地向幼儿解释游戏规则。
扫雷怎么玩的技巧

扫雷怎么玩的技巧简介扫雷是一款经典的单人益智游戏,最早由微软公司于1990年代开发并内置在Windows操作系统中。
目前已经成为了全球范围内最受欢迎的小游戏之一。
接下来,我们将为大家介绍一些扫雷的基本规则和一些常用的技巧,帮助你提高在扫雷中的胜率。
游戏规则1.地雷布置:扫雷游戏中,玩家需要在一个矩形的区域中扫雷,该区域被分成了若干个正方形的网格。
一些网格中隐藏有地雷,其他网格则安全。
2.数字提示:玩家需要依靠周围已经被翻开的方块上的数字提示来判断是否有地雷。
提示的数字表示该方块周围8个方向上的地雷数量。
3.翻开方块:玩家可以逐一点击方块来翻开它们。
如果点击的方块是地雷,游戏就会结束;否则,会显示方块周围的数字提示。
4.标记地雷:玩家可以标记地雷的位置,以便不会错误点击方块。
标记可以通过右键点击方块或者点击旁边的旗帜图标进行。
5.游戏胜利:当所有地雷都被标记并且所有安全方块都被翻开时,玩家获得胜利。
技巧和策略下面是一些扫雷游戏中常用的技巧和策略,帮助玩家在游戏中提高胜率。
1. 掌握基本规则在开始玩扫雷游戏之前,玩家需要先完全了解游戏规则。
熟悉数字提示、翻开方块和标记地雷的操作是基本的技能,这样可以帮助玩家迅速地分析局势,做出更好的决策。
2. 优先翻开安全方块游戏一开始,玩家应该优先选择翻开周围没有数字的方块。
这些方块不会周围有地雷,翻开后可以扩大玩家的掌握的信息范围,有助于后续的决策。
3. 利用数字提示数字提示是决策的关键。
玩家需要学会如何从数字提示中推断出地雷的位置。
例如,当一个方块周围有多个数字,且已经标记了尽可能多的地雷后,剩下的方块肯定是安全的。
另外,当一个方块的数字等于周围未标记的方块数时,这些未标记的方块都是地雷。
4. 利用边缘方块边缘方块意味着它们周围的方块数量受到限制,因为它们只与部分方块相连。
利用这一特点,可以减少地雷的位置并加快翻开方块的速度。
5. 避免无法确定的决策有时候,游戏中会出现无法确定的决策,也就是说,无论哪个方块被翻开都可能是地雷。
扫雷游戏教案幼儿园

扫雷游戏教案幼儿园1. 引言扫雷游戏是一种经典的益智游戏,可以锻炼玩家的逻辑思维和判断能力。
本教案针对幼儿园儿童的特点,设计了一系列扫雷游戏的教学活动,旨在帮助幼儿了解游戏规则、培养观察力和耐心等能力。
2. 教育目标通过本教学活动,幼儿应能够:1.知道扫雷游戏的基本规则;2.观察和分析数字的含义,并据此判断雷的位置;3.培养耐心和细心的品质。
3. 教学过程3.1 游戏规则的介绍老师向幼儿们简单介绍扫雷游戏的基本规则:1.游戏的棋盘由多个格子组成;2.棋盘上有一些格子下面隐藏着地雷;3.未隐藏地雷的格子上会显示一个数字,表示它周围的8个格子中有几个格子下面隐藏着地雷;4.去掉所有未隐藏地雷的格子,游戏就胜利了。
3.2 游戏的演示老师进行一次扫雷游戏的演示,让幼儿们直观地了解游戏规则和操作方法。
3.3 游戏的分析与讨论老师引导幼儿们结合实际游戏中的情况,分析和讨论数字的含义和作用。
比如,数字5表示周围有5个格子下面隐藏了地雷,那么这5个格子中必定有4个格子正下方或正左方或正右方的格子。
让幼儿细心观察数字,并尝试根据数字猜测地雷的位置,讨论出各自的猜测结果。
3.4 游戏练习老师提供一些扫雷游戏的练习题,让幼儿练习观察和分析,培养他们的逻辑思维和判断能力。
可以设置不同难度的题目,逐渐提高练习的难度。
3.5 游戏比赛为了增加趣味性和竞争性,可以组织一次扫雷游戏比赛,让幼儿们互相学习和交流。
比赛可以分为多个阶段,先进行基础训练,再进行小组比赛,最后进行全班比赛,以激发幼儿的积极性和兴趣。
4. 总结通过本教案的学习和实践,幼儿们将能够对扫雷游戏有更深刻的认识,掌握基本的游戏规则和操作方法,并通过练习和游戏比赛来提高自己的观察力、逻辑思维和判断能力。
希望本教案能够为教师们在幼儿园开展扫雷游戏的教学活动提供一些参考和借鉴。
扫雷答题知识点总结

扫雷答题知识点总结扫雷是一款经典的单人电脑游戏,也是Windows操作系统自带的游戏之一。
玩家需要在不触雷的情况下,通过逻辑推理和猜测找出所有的地雷,游戏的胜利依赖于玩家的智慧和运气。
在这篇文章中,我将总结扫雷游戏中的一些重要知识点,帮助玩家更好地理解游戏规则和策略。
一、扫雷游戏规则1. 扫雷游戏场地由大小不等的方块组成,每个方块可能是地雷、数字或者安全空白。
2. 鼠标左键点击方块进行翻开,如果是地雷游戏结束,如果是数字或者空白则继续进行。
3. 数字方块代表着周围相邻的地雷数量,根据这些数字可以推断出周围的地雷分布。
4. 当玩家认为某个方块是地雷时,可以用鼠标右键进行标记,避免误触。
5. 游戏胜利的条件是找出所有的地雷,并将所有非雷方块全部翻开。
二、扫雷游戏策略1. 规避初始点击在游戏一开始,一般情况下不会直接点击边缘的方块,因为这样有可能触雷。
玩家可以先点击中间的方块,减小触雷的概率。
2. 利用数字线索当翻开数字方块时,需要根据其周围的数字数量判断周围的地雷分布情况。
例如,当一个方块上标注着数字“3”时,表示该方块周围有3个地雷,那么在周围的方块中就可以排除掉3个可能的地雷位置。
3. 排除方块在游戏中,通过排除法可以得到一些方块的地雷位置。
例如,当周围的方块都已排除地雷时,接下来的方块就可以确定是安全的。
4. 利用标记在游戏过程中,可以使用右键对方块进行标记,以便记录下可能的地雷位置。
这有助于玩家在后续的游戏中更快地进行推理。
5. 根据地雷密度活用标记在扫雷中,地雷的分布是随机的,但根据地雷密度可以大致推测出一些可能的地雷位置。
当某个区域地雷密度较高时,可以对周围的方块进行标记,以防止误触。
6. 善用猜测有时候,玩家需要根据已知信息进行猜测。
在游戏中,不断地尝试和推理,可以帮助玩家更加熟悉地雷的分布规律,提高猜测的准确率。
三、扫雷游戏高级技巧1. 记忆地雷位置在扫雷中,对于一些复杂的局面,需要玩家记忆地雷的位置并结合已知信息进行推理。
幼儿园益智游戏《扫雷》教案及游戏实践报告

《扫雷》教学实践与游戏报告1. 前言幼儿园益智游戏一直是幼儿园教学中不可或缺的一部分。
而在幼儿园益智游戏中,《扫雷》作为一款富有挑战性和趣味性的益智游戏,受到了越来越多幼儿园老师和家长的关注。
本文将以《扫雷》为主题,围绕教学实践及游戏报告展开探讨,并希望能在对该游戏进行深入了解的为幼儿园教师及家长提供一些有益的借鉴。
2. 《扫雷》教案设计2.1 游戏概述《扫雷》是一款在方块矩阵中排雷的游戏。
每个方块中可能有地雷,也可能没有。
玩家需要根据已知信息判断哪些方块中有地雷,哪些没有,并用旗帜标记。
游戏的目标是找出所有没有地雷的方块。
2.2 游戏目标通过玩《扫雷》游戏,培养幼儿的观察能力、逻辑推理能力和空间想象能力,提高幼儿的专注力和耐心。
3. 游戏实践报告3.1 游戏实践过程在一次《扫雷》游戏实践中,我们为幼儿们准备了一块由小方块组成的游戏板,其中隐藏了一些小石子代表地雷。
幼儿们在老师的指导下,用小旗帜标记出他们认为有地雷的位置,并逐渐揭开没有地雷的位置。
3.2 游戏实践效果通过《扫雷》游戏实践,我们发现幼儿们在游戏中展现出了较强的观察力和逻辑推理能力。
他们能够根据已知信息做出判断,并在游戏中不断尝试,提高了他们的空间想象能力和解决问题的能力。
4. 总结通过对《扫雷》教学实践及游戏报告的深度和广度探讨,我们可以看到,《扫雷》作为一款益智游戏,确实对幼儿的能力培养有着积极的促进作用。
在今后的教学实践中,我们应该充分发挥益智游戏在幼儿教育中的作用,为幼儿的个性发展和综合能力的培养提供更多的可能性。
5. 个人观点和理解在我看来,《扫雷》这款益智游戏能够很好地锻炼幼儿的观察力和逻辑推理能力,同时也能够培养幼儿的耐心和解决问题的能力。
我认为在幼儿园教学中,引入类似的益智游戏是非常有益的。
结语通过本文的撰写,希望能够对幼儿园教师及家长们对《扫雷》益智游戏有更深入的了解,并帮助他们更好地教育和培养孩子。
希望本文的内容能够为读者带来一些启发和帮助。
扫雷技巧十句口诀

扫雷技巧十句口诀
1. 角落格子要小心,说不定就有雷呀!就像走在陌生小路,边缘可能有陷阱。
比如在游戏开头,角落的格子就得格外关注。
2. 数字周围有乾坤,这可是关键线索哟!好比侦探找线索,数字能指明方向。
像遇到数字 3,周围肯定有 3 个雷。
3. 大片空白别乱猜,很可能是安全区呢!就如同在黑暗中找明灯,大片明亮处也许没危险。
你看那一大片没数字的地方。
4. 孤立格子多思量,说不定是个大陷阱哇!好像独自一人在荒野,可能有未知危险。
遇到单独一个格子,真得好好想想。
5. 连续数字有门道,仔细分析别大意呀!好比一串密码,得用心去解开。
像连续几个数字在一起,其中肯定有文章。
6. 遇到僵局换个地,别在一棵树上吊死呀!就像走路遇到堵墙,得绕过去找别的路。
死磕一个地方可不行哦。
7. 直觉有时也靠谱,但可不能全靠它哟!好比天空中的星星,偶尔能指引方向可不能当导航。
关键时刻,直觉也能帮上忙呢。
我的观点结论就是:记住这些口诀,多加练习,你扫雷的水平肯定能大大提高!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大连科技学院Java课程设计报告题目扫雷小游戏学生姓名 XXX 专业班级软件工程12-1 指导教师史原职称讲师所在单位大连科技学院教研室主任刘瑞杰完成日期 2015年6月12日目录1.总体设计 (1)1.1本系统的主要功能 (1)1.2系统包含的类及类之间的关系 (1)2.详细设计 (2)2.1 MineGame.java(主类): (2)2.2 MineArea.java: (2)2.3 Block.java: (3)2.4 BlockView.java (3)2.5 LayMines.java: (3)2.6 Record.java: (4)2.7 ShowRecord: (4)3.运行效果 (5)3.1 系统主界面 (5)3.2初级录入界面 (5)3.3中级录入界面 (6)3.4高级录入界面 (6)3.5游戏结束录入界面 (7)3.6游戏英雄榜界面 (7)参考文献 (8)附录1 软件源程序 (8)课程设计实践总结: (25)1.总体设计1.1本系统的主要功能(1)本系统用户可以自定义级别并且可以任意输入雷数;(2)具有计时功能,即显示用户完成移动盘子所花费的时间;(3)自动保存扫雷英雄榜;1.2系统包含的类及类之间的关系本系统共包括7个java源文件。
如图1-1所示。
图1-1 类之间的关系2.详细设计2.1 MineGame.java(主类):(1)成员变量bar和fileMenu 提供菜单操作,单击菜单操作中的选项为“初级”,“中级”,“高级”或“扫雷英雄榜”;mineArea 是扫雷区域,提供有关雷的主要功能;英雄榜”负责存放三个级别的扫雷最好成绩;showHeroRecord负责显示英雄榜中的数据(2)方法MineGame()是构造窗口,负责完成窗口的初始化。
ActionPerformed(ActionEvent)方法是MineGame类实现的ActionListener接口中的方法,该方法负责执行菜单发出的有关命令。
用户选择菜单中的菜单项可触发ActionEvent事件,导致actionPerformed(ActionEvent)方法执行相应的操作。
Main(String[])方法是程序运行的入口方法。
(3)源代码见文件MineGame.java2.2 MineArea.java:(1)成员变量block和Block类型的数组,用来确定雷区有多少需进行扫雷的方块;blockView是BlockView类型的数组,负责block数组中Block对象提供视图;lay是LayMines类型的对象,负责设置block数组中的哪些方块不是雷;record负责提供保存成绩的界面,是一个对话框,默认为不可见,用户只有扫雷成功后,才可以看见该对话框;reStart是一个按钮对象,用户单击它重新开始游戏;time是计时器对象,负责计算用户用时。
(2)方法initMineArea(int,int,int,int)方法可根据参数提供的数据设置雷区的宽度,高度,类的数目以及雷区的级别。
actionPerformed(actionEvent)是MineArea类实现的ActionListener接口中的方法。
当用户单击blockView中的某个方块时actionPerformed(actionEvent)执行有关算法。
Show()方法是一个递归方法,actionPerformed(actionEvent)方法执行将调用show 方法进行扫雷。
mousePressed(mouseEvent)方法是MineArea类实现的MouseListener接口中的方法,当用户按下鼠标右键时,mousePressed(mouseEvent)方法负责让方块上显示一个探雷标记。
inquireWin()方法用来判断用户扫雷是否成功,如果成功该方法负责让record对话框可见。
(3)源代码见文件MineArea.java2.3 Block.java:(1)成员变量name方块上的名字aroundMineNumber是方块周围雷的数目mineIcon是方块上雷的图标isMine用来表示方块是否是雷isMark用来表示方块是否被标记isOpen用来表示方块是否被挖开(2)方法setAroundMineNumber(int)方法用来设置aroundMineNumber的值;getAroundMineNumber()方法用来获取aroundMineNumber的值。
(3)源代码见文件Block.java2.4 BlockView.java(1)成员变量blockNameOrIcon用来显示Block对象的name,number和mineIcon属性;blockCover用来遮挡blockNameOrIcon;card卡片式布局。
(2)方法giveView(Block block)方法给参数指定的Block对象提供视图;seeBlockNameOrIcon()方法让用户看见视图中的标签,无法看见按钮;seeBlockCover()方法让用户看见视图中的按钮,无法看见标签。
(3)源代码见文件BlockView.java2.5 LayMines.java:(1)成员变量mineIcon用来存放一个格式为gif的图像。
(2)方法layMinesForBlock(Block[][],int)方法对参数指定的Block数组进行设置,其中int参数指定雷的数目。
(3)源代码见文件LayMines.java2.6 Record.java:(1)成员变量textName提供用户扫雷优胜者出入姓名;用户单击“确定”按钮,可以保存成绩。
(2)方法actionPerformed(ActionEvent)方法是Record类实现的ActionListener接口中的方法,当用户单击“确定”按钮后,该方法被执行,所执行的操作就是获取用户输入的名字和用时,然后调用writeRecord(String,String)方法将信息写入英雄榜中;writeRecord(String,String)负责将有关信息写入“英雄榜”文件。
(3)源代码见文件Record.java2.7 ShowRecord:(1)成员变量file存放文件的引用,用户单击“显示成绩”按钮,可以查看各个级别的最好成绩;用户单击“重新计分”按钮,可以将“英雄榜”中的成绩恢复为初始值。
(2)方法actionPerformed(ActionEvent)方法是ShowRecord类实现的ActionListener接口中的方法,当用户单击“显示成绩”按钮后,该方法被执行,所执行的操作就是调用readAndShow()方法;readAndShow()方法负责读取存放在文件中的各个级别的扫雷最好成绩以及扫雷者姓名,并显示这些相关信息。
(3)源代码见文件ShowRecord.java3.运行效果3.1 系统主界面3.2初级录入界面3.3中级录入界面3.4高级录入界面3.5游戏结束录入界面3.6游戏英雄榜界面T参考文献[1] 耿祥义,张跃平.Java 2实用教程(第三版)[M].北京:清华大学出版社,2006.8 附录1 软件源程序MineGame.javaimport java.awt.event.*;import java.awt.*;import javax.swing.*;import javax.swing.border.*;import java.util.*;import java.io.*;public class MineGame extends JFrame implements ActionListener{JMenuBar bar;JMenu fileMenu;JMenuItem 初级,中级,高级,扫雷英雄榜;MineArea mineArea=null;File 英雄榜=new File("英雄榜.txt");Hashtable hashtable=null;ShowRecord showHeroRecord=null;MineGame(){mineArea=new MineArea(16,16,40,1);add(mineArea,BorderLayout.CENTER);bar=new JMenuBar();fileMenu=new JMenu("游戏");初级=new JMenuItem("初级");中级=new JMenuItem("中级");高级=new JMenuItem("高级");扫雷英雄榜=new JMenuItem("扫雷英雄榜");fileMenu.add(初级);fileMenu.add(中级);fileMenu.add(高级);fileMenu.add(扫雷英雄榜);bar.add(fileMenu);setJMenuBar(bar);初级.addActionListener(this);中级.addActionListener(this);高级.addActionListener(this);扫雷英雄榜.addActionListener(this);hashtable=new Hashtable();hashtable.put("初级","初级#"+999+"#匿名");hashtable.put("中级","中级#"+999+"#匿名");hashtable.put("高级","高级#"+999+"#匿名");if(!英雄榜.exists()) {try{ FileOutputStream out=new FileOutputStream(英雄榜);ObjectOutputStream objectOut=new ObjectOutputStream(out);objectOut.writeObject(hashtable);objectOut.close();out.close();}catch(IOException e){}}showHeroRecord=new ShowRecord(this,hashtable);setBounds(100,100,280,380);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);validate();}public void actionPerformed(ActionEvent e){if(e.getSource()==初级){mineArea.initMineArea(8,8,10,1);setBounds(100,100,200,280);}if(e.getSource()==中级){mineArea.initMineArea(16,16,40,2);setBounds(100,100,280,380);}if(e.getSource()==高级){mineArea.initMineArea(22,22,99,3);setBounds(100,100,350,390);}if(e.getSource()==扫雷英雄榜){if(showHeroRecord!=null)showHeroRecord.setVisible(true);}validate();}public static void main(String args[]){new MineGame();}}MineArea.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;public class MineArea extends JPanel implements ActionListener,MouseListener{JButton reStart;Block [][] block;BlockView [][] blockView;LayMines lay;int row,colum,mineCount,markMount;//雷区的行数、列数以及地雷个数和用户给出的标记数ImageIcon mark;int grade;JPanel pCenter,pNorth;JTextField showTime,showMarkedMineCount; //显示用时以及标记数Timer time; //计时器int spendTime=0;Record record;public MineArea(int row,int colum,int mineCount,int grade) {reStart=new JButton("重新开始");mark=new ImageIcon("mark.gif"); //探雷标记time=new Timer(1000,this);showTime=new JTextField(5);showMarkedMineCount=new JTextField(5);showTime.setHorizontalAlignment(JTextField.CENTER);showMarkedMineCount.setHorizontalAlignment(JTextField.CENTER);showMarkedMineCount.setFont(new Font("Arial",Font.BOLD,16));showTime.setFont(new Font("Arial",Font.BOLD,16));pCenter=new JPanel();pNorth=new JPanel();lay=new LayMines();initMineArea(row,colum,mineCount,grade); //初始化雷区,见下面的LayMines()reStart.addActionListener(this);pNorth.add(showMarkedMineCount);pNorth.add(reStart);pNorth.add(showTime);setLayout(new BorderLayout());add(pNorth,BorderLayout.NORTH);add(pCenter,BorderLayout.CENTER);}public void initMineArea(int row,int colum,int mineCount,int grade){ pCenter.removeAll();spendTime=0;markMount=mineCount;this.row=row;this.colum=colum;this.mineCount=mineCount;this.grade=grade;block=new Block[row][colum];for(int i=0;i<row;i++){for(int j=0;j<colum;j++)block[i][j]=new Block();}yMinesForBlock(block,mineCount);blockView=new BlockView[row][colum];pCenter.setLayout(new GridLayout(row,colum));for(int i=0;i<row;i++) {for(int j=0;j<colum;j++) {blockView[i][j]=new BlockView();blockView[i][j].giveView(block[i][j]); //给block[i][j]提供视图pCenter.add(blockView[i][j]);blockView[i][j].getBlockCover().addActionListener(this);blockView[i][j].getBlockCover().addMouseListener(this);blockView[i][j].seeBlockCover();blockView[i][j].getBlockCover().setEnabled(true);blockView[i][j].getBlockCover().setIcon(null);}}showMarkedMineCount.setText(""+markMount);validate();}public void setRow(int row){this.row=row;}public void setColum(int colum){this.colum=colum;}public void setMineCount(int mineCount){this.mineCount=mineCount;}public void setGrade(int grade) {this.grade=grade;}public void actionPerformed(ActionEvent e) {if(e.getSource()!=reStart&&e.getSource()!=time) {time.start();int m=-1,n=-1;for(int i=0;i<row;i++) {for(int j=0;j<colum;j++) {if(e.getSource()==blockView[i][j].getBlockCover()){m=i;n=j;break;}}}if(block[m][n].isMine()) {for(int i=0;i<row;i++) {for(int j=0;j<colum;j++) {blockView[i][j].getBlockCover().setEnabled(false); if(block[i][j].isMine())blockView[i][j].seeBlockNameOrIcon();}}time.stop();spendTime=0;markMount=mineCount;}else {show(m,n); //见本类后面的show方法}}if(e.getSource()==reStart) {initMineArea(row,colum,mineCount,grade);}if(e.getSource()==time){spendTime++;showTime.setText(""+spendTime);}inquireWin();}public void show(int m,int n) {if(block[m][n].getAroundMineNumber()>0&&block[m][n].getIsOpen()==false){ blockView[m][n].seeBlockNameOrIcon();block[m][n].setIsOpen(true);return;}elseif(block[m][n].getAroundMineNumber()==0&&block[m][n].getIsOpen()==false){ blockView[m][n].seeBlockNameOrIcon();block[m][n].setIsOpen(true);for(int k=Math.max(m-1,0);k<=Math.min(m+1,row-1);k++) {for(int t=Math.max(n-1,0);t<=Math.min(n+1,colum-1);t++) show(k,t);}}}public void mousePressed(MouseEvent e){JButton source=(JButton)e.getSource();for(int i=0;i<row;i++) {for(int j=0;j<colum;j++) {if(e.getModifiers()==InputEvent.BUTTON3_MASK&&source==blockView[i][j].getBlockCover()){if(block[i][j].getIsMark()) {source.setIcon(null);block[i][j].setIsMark(false);markMount=markMount+1;showMarkedMineCount.setText(""+markMount);}else{source.setIcon(mark);block[i][j].setIsMark(true);markMount=markMount-1;showMarkedMineCount.setText(""+markMount);}}}}}public void inquireWin(){int number=0;for(int i=0;i<row;i++) {for(int j=0;j<colum;j++) {if(block[i][j].getIsOpen()==false) number++;}}if(number==mineCount){time.stop();record=new Record();switch(grade){case 1: record.setGrade("初级"); break;case 2: record.setGrade("中级"); break;case 3: record.setGrade("高级"); break;}record.setTime(spendTime);record.setVisible(true);}}public void mouseReleased(MouseEvent e){}public void mouseEntered(MouseEvent e){}public void mouseExited(MouseEvent e){}public void mouseClicked(MouseEvent e){}}Block.javaimport javax.swing.ImageIcon;public class Block {String name; //名字,比如"雷"或数字 int aroundMineNumber; //周围雷的数目 ImageIcon mineIcon; //雷的图标boolean isMine=false; //是否是雷boolean isMark=false; //是否被标记boolean isOpen=false; //是否被挖开public void setName(String name) {=name;}public void setAroundMineNumber(int n) {aroundMineNumber=n;}public int getAroundMineNumber() {return aroundMineNumber;}public String getName() {return name;}public boolean isMine() {return isMine;}public void setIsMine(boolean b) {isMine=b;}public void setMineIcon(ImageIcon icon){mineIcon=icon;}public ImageIcon getMineicon(){return mineIcon;}public boolean getIsOpen() {return isOpen;}public void setIsOpen(boolean p) {isOpen=p;}public boolean getIsMark() {return isMark;}public void setIsMark(boolean a) {isMark=a;}}BlockView.javaimport javax.swing.*;import java.awt.*;public class BlockView extends JPanel{JLabel blockNameOrIcon; //用来显示Block对象的name、number和mineIcon 属性JButton blockCover; //用来遮挡blockNameOrIcon.CardLayout card; //卡片式布局BlockView(){card=new CardLayout();setLayout(card);blockNameOrIcon=new JLabel("",JLabel.CENTER);blockNameOrIcon.setHorizontalTextPosition(AbstractButton.CENTER);blockNameOrIcon.setVerticalTextPosition(AbstractButton.CENTER);blockCover=new JButton();add("cover",blockCover);add("view",blockNameOrIcon);}public void giveView(Block block){if(block.isMine){blockNameOrIcon.setText(block.getName());blockNameOrIcon.setIcon(block.getMineicon());}else {int n=block.getAroundMineNumber();if(n>=1)blockNameOrIcon.setText(""+n);elseblockNameOrIcon.setText(" ");}}public void seeBlockNameOrIcon(){card.show(this,"view");validate();}public void seeBlockCover(){card.show(this,"cover");validate();}public JButton getBlockCover(){return blockCover;}}LayMines.javaimport java.util.*;import javax.swing.*;public class LayMines{ImageIcon mineIcon;LayMines() {mineIcon=new ImageIcon("mine.gif");}public void layMinesForBlock(Block block[][],int mineCount){ int row=block.length;int column=block[0].length;LinkedList<Block> list=new LinkedList<Block>();for(int i=0;i<row;i++) {for(int j=0;j<column;j++)list.add(block[i][j]);}while(mineCount>0){int size=list.size(); // list返回节点的个数int randomIndex=(int)(Math.random()*size);Block b=list.get(randomIndex);b.setIsMine(true);b.setName("雷");b.setMineIcon(mineIcon);list.remove(randomIndex); //list删除索引值为randomIndex的节点mineCount--;}for(int i=0;i<row;i++){for(int j=0;j<column;j++){if(block[i][j].isMine()){block[i][j].setIsOpen(false);block[i][j].setIsMark(false);}else {int mineNumber=0;for(int k=Math.max(i-1,0);k<=Math.min(i+1,row-1);k++) { for(intt=Math.max(j-1,0);t<=Math.min(j+1,column-1);t++){if(block[k][t].isMine())mineNumber++;}}block[i][j].setIsOpen(false);block[i][j].setIsMark(false);block[i][j].setName(""+mineNumber);block[i][j].setAroundMineNumber(mineNumber);}}}}}Record.javaimport java.io.*;import java.util.*;import javax.swing.*;import java.awt.event.*;import java.awt.*;public class Record extends JDialog implements ActionListener{ int time=0;String grade=null;String key=null;String message=null;JTextField textName;JLabel label=null;JButton 确定,取消;public Record(){setTitle("记录你的成绩");this.time=time;this.grade=grade;setBounds(100,100,240,160);setResizable(false);setModal(true);确定=new JButton("确定");取消=new JButton("取消");textName=new JTextField(8);textName.setText("匿名");确定.addActionListener(this);取消.addActionListener(this);setLayout(new GridLayout(2,1));label=new JLabel("您现在是...高手,输入您的大名上榜");add(label);JPanel p=new JPanel();p.add(textName);p.add(确定);p.add(取消);add(p);setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);}public void setGrade(String grade){this.grade=grade;label.setText("您现在是"+grade+"高手,输入您的大名上榜");}public void setTime(int time){this.time=time;}public void actionPerformed(ActionEvent e) {}}ShowRecord.javaimport java.io.*;import java.util.*;import javax.swing.*;import java.awt.event.*;import java.awt.*;public class ShowRecord extends JDialog implements ActionListener{ File file=new File("英雄榜.txt");String name=null;Hashtable hashtable=null;JButton 显示,重新记分;JLabel label初级[],label中级[],label高级[];public ShowRecord(JFrame frame,Hashtable h) {setTitle("扫雷英雄榜");hashtable=h;setBounds(100,100,320,185);setResizable(false);setVisible(false);setModal(true);label初级=new JLabel[3];label中级=new JLabel[3];label高级=new JLabel[3];for(int i=0;i<3;i++) {label初级[i]=new JLabel();label初级[i].setBorder(null);label中级[i]=new JLabel();label中级[i].setBorder(null);label高级[i]=new JLabel();label高级[i].setBorder(null);}label初级[0].setText("初级");label初级[1].setText(""+999);label初级[1].setText("匿名");label中级[0].setText("中级");label中级[1].setText(""+999);label中级[1].setText("匿名");label高级[0].setText("高级");label高级[1].setText(""+999);label高级[1].setText("匿名");JPanel pCenter=new JPanel();pCenter.setLayout(new GridLayout(3,3));for(int i=0;i<3;i++)pCenter.add(label初级[i]);for(int i=0;i<3;i++)pCenter.add(label中级[i]);for(int i=0;i<3;i++)pCenter.add(label高级[i]);pCenter.setBorder(BorderFactory.createTitledBorder("扫雷英雄榜"));显示=new JButton("显示成绩");重新记分=new JButton("重新记分");显示.addActionListener(this);重新记分.addActionListener(this);JPanel pSouth=new JPanel();pSouth.setLayout(new FlowLayout(FlowLayout.RIGHT));pSouth.add(重新记分);pSouth.add(显示);add(pCenter,BorderLayout.CENTER);add(pSouth,BorderLayout.SOUTH) ;}public void readAndShow(){try{ FileInputStream in=new FileInputStream(file);ObjectInputStream object_in=new ObjectInputStream(in); hashtable=(Hashtable)object_in.readObject();object_in.close();in.close();String temp=(String)hashtable.get("初级");StringTokenizer fenxi=new StringTokenizer(temp,"#"); label初级[0].setText(fenxi.nextToken());label初级[1].setText(fenxi.nextToken());label初级[2].setText(fenxi.nextToken());temp=(String)hashtable.get("中级");fenxi=new StringTokenizer(temp,"#");label中级[0].setText(fenxi.nextToken());label中级[1].setText(fenxi.nextToken());label中级[2].setText(fenxi.nextToken());temp=(String)hashtable.get("高级");fenxi=new StringTokenizer(temp,"#");label高级[0].setText(fenxi.nextToken());label高级[1].setText(fenxi.nextToken());label高级[2].setText(fenxi.nextToken());}catch(Exception e){}}public void actionPerformed(ActionEvent e) {if(e.getSource()==重新记分) {hashtable.put("初级","初级#"+999+"#匿名");label初级[0].setText("初级");label初级[1].setText(""+999);label初级[2].setText("匿名");hashtable.put("中级","中级#"+999+"#匿名");label中级[0].setText("初级");label中级[1].setText(""+999);label中级[2].setText("匿名");hashtable.put("高级","高级#"+999+"#匿名");label高级[0].setText("初级");label高级[1].setText(""+999);label高级[2].setText("匿名");try{ FileOutputStream out=new FileOutputStream(file);ObjectOutputStream object_out=new ObjectOutputStream(out);object_out.writeObject(hashtable);object_out.close();out.close();}catch(IOException event){}setVisible(false);}if(e.getSource()==显示){readAndShow();}}}课程设计实践总结:。