java课程设计(扫雷游戏)
JAVA课程设计扫雷含代码
![JAVA课程设计扫雷含代码](https://img.taocdn.com/s3/m/c91764b7710abb68a98271fe910ef12d2af9a930.png)
0
随机生成:使用随 机数生成器生成地 图
地图大小:根据游 戏难度设置地图大 小
地雷分布:在地图 上随机分布地雷
标记地雷:在地图 上标记地雷位置, 方便玩家识别
雷区标记逻辑
初始化:创建雷区数组,设置初始状态 标记雷区:当玩家点击雷区时,标记为雷区 更新雷区:当玩家点击非雷区时,更新雷区状态 判断胜负:当所有非雷区都被标记时,游戏结束,判断胜负
游戏结束:当所有非雷方格都被点击,或者玩家踩到雷时,游戏结束
游戏界面设计
游戏界面分为两个部分:游戏区和菜单区 游戏区显示游戏地图和地雷位置 菜单区包括开始游戏、暂停游戏、重新开始、退出游戏等按钮 游戏界面采用简洁明了的设计风格,易于玩家操作和理解
游戏流程控制
初始化游戏:创建游戏界面,设置游戏参数 玩家输入:接收玩家输入的坐标,判断是否合法 游戏逻辑:根据玩家输入,更新游戏状态,判断是否触发雷 游戏结束:判断游戏是否结束,显示游戏结果 重新开始:提供重新开始游戏的选项,重新开始游戏流程
05
JAVA扫雷游戏代码实 现
游戏主程序代码实现
初始化游戏界面 生成随机雷区 玩家点击操作 判断输赢条件 游戏结束处理
游戏地图类代码实现
初始化地图,设置地雷位置 和状态
创建游戏地图类,定义地图 大小和地雷数量
实现地图显示,绘制地雷和 空白区域
实现地图更新,根据玩家操 作更新地雷状态和显示
游戏雷区类代码实现
感谢您的观看
汇报人:
兼容性:测试游戏在不同操作系统 和硬件配置下的兼容性
添加标题
添加标题
添加标题
添加标题
稳定性:测试游戏在长时间运行下 的稳定性
用户体验:测试游戏的易用性和用 户体验
JAVA课程设计扫雷小游戏
![JAVA课程设计扫雷小游戏](https://img.taocdn.com/s3/m/2c668bdbda38376baf1fae18.png)
Java游戏设计报告院系计算机科学学院班级计科11002姓名张林峰设计日期2012.12.18—2012.12.291·设计内容及要求1.1·扫雷小游戏的基本要求扫雷小游戏主要采用Java语言编写,适合windows XP以下的系统,以eclipse 为平台。
具体要求如下:<1>扫雷小游戏分为初级、中级和高级三个级别,扫雷排行榜保存着每个级别的最好成绩,即挖出全部的地雷并且用时最少。
单机游戏菜单选择“初级”、“中级”和“高级”。
<2>游戏默认的是初级级别,用户可以选择不同级别将出现对应级别的扫雷区域,单击扫雷区域任一方格以便启动计时器。
<3>用户选择某个方格,单击它就行。
若所选择的放阁下有雷,这一局就结束了,若所选择方格下无雷,则会显示一个数字,该数字代表方格周围8个方格中共有几颗雷。
<4>如果用户认为某个方格下有雷,单击右键可以在方格上标记一个用户认为是雷的图标(一个小旗子)。
<5>用户可以选择标记为疑问的方格,可以选择游戏菜单下的标记,或者双击右键所选方格显示(?)图标。
<6>扫雷完成后,程序弹出保存成绩的对话框,用户可以根据自身选择是否保存。
<7>如果用户喜欢有提示音,可以选择游戏菜单中的声音选项,单击扫雷区域任一方格,就会听到吧嗒声。
当点中地雷时,将会有爆炸声音响起,胜利后,将播放凯旋的旋律。
1.2需求实现的主要功能(1)该游戏具有计时功能,即扫完全部地雷所花费的时间。
(2)用户可以选择是否有音效。
(3)用户可以自定义级别,还可以输入任意地雷数。
(4)自动保存扫雷排行榜。
2·需求分析2.1扫雷区域的布局设计系统的整体布局为:CardLayout布局,采用菜单、按钮、面板……等组件,菜单项主要有开始,选择级别,自定义,标记,声音,扫雷排行榜,退出,按钮的功能是重新开始游戏(可以选择游戏菜单里的开局,也可以点击企鹅图标重新开始游戏)。
(完整word版)JAVA课程设计--扫雷游戏
![(完整word版)JAVA课程设计--扫雷游戏](https://img.taocdn.com/s3/m/600df4b831126edb6f1a108a.png)
合肥学院计算机科学与技术系课程设计报告2009~2010学年第二学期课程Java语言与应用课程设计名称扫雷游戏学生姓名胡远远学号0604031005专业班级07网络工程一班指导教师许强张贯虹2010年09月1.设计内容及要求1.1 扫雷游戏的基本要求Windows 2000/XP系统提供的扫雷游戏是一个很有趣的游戏。
本章的课程设计使用Java语言编写一个与其类似的扫雷游戏。
具体要求如下:(1)选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何一个方块便启动计时器。
(2)用户要揭开某个方块,可单击它。
若所揭方块下有雷,用户便输了这一局,若所揭方块下五雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。
(3) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。
用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。
(4)扫雷胜利后,显示游戏胜利。
(5) 用户可以右击空格,可以选择标记为“旗帜”、“问号”或者返回成空格。
1.2 需实现的主要功能(1)用户点击笑脸实现复位操作。
调用repaint()和validate()函数对界面进行重置以及刷新操作(2)可以显示用户完全扫雷成功所花时间。
文本框TF记录扫雷成功所花的时间(3)在失败和胜利后跳出失败或胜利的文本框JoptionPane 该类用来调出对话框并提示胜利2.需求分析2.1 扫雷棋盘的布局设计系统的整体布局为:CardLayout布局, 采用了文本框、按钮、面板、框架…等组件,菜单主要有run按钮笑脸和哭脸,按钮的功能是重新开始新的游戏。
2.2 雷区的设计MineArea类是javax.swing包中Jpanel容器的子类,实现了ActionListener 和MouseListener接口,所创建的对象:mineArea是MineGame类中最重要的成员之一,作为一个容器添加到MineGame窗口的中心。
java扫雷课程设计
![java扫雷课程设计](https://img.taocdn.com/s3/m/fd81c5b318e8b8f67c1cfad6195f312b3169eb31.png)
java 扫雷 课程设计一、课程目标知识目标:1. 理解并掌握Java基本语法和程序结构;2. 学会使用二维数组存储和处理扫雷游戏的数据;3. 掌握循环、条件判断等基本编程逻辑;4. 了解随机数的生成和应用。
技能目标:1. 能够编写并调试简单的Java程序;2. 能够运用所学知识设计并实现扫雷游戏的初级版本;3. 提高问题分析、程序设计和编程实现的能力;4. 培养团队协作和沟通表达能力。
情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发学习积极性;2. 培养学生勇于尝试、面对挑战的精神;3. 增强学生的逻辑思维能力和解决问题的自信心;4. 引导学生关注程序设计在现实生活中的应用,认识到编程的价值。
课程性质分析:本课程为中学信息技术课程,结合Java编程语言和扫雷游戏设计,旨在提高学生的编程兴趣和实际操作能力。
学生特点分析:初中年级学生对新鲜事物充满好奇,具备一定的逻辑思维能力,但编程基础薄弱,需要通过实际操作和趣味性强的案例来提高学习兴趣。
教学要求:1. 注重理论与实践相结合,让学生在实际操作中掌握Java编程知识;2. 采用任务驱动法,引导学生主动探究和解决问题;3. 创设有趣的游戏场景,提高学生的学习积极性;4. 分阶段教学,逐步提高学生编程能力和逻辑思维能力。
二、教学内容1. Java基本语法与程序结构- 数据类型、变量、常量- 运算符、表达式、语句- 程序流程控制(顺序、分支、循环)2. 二维数组的使用- 二维数组的定义、初始化- 遍历二维数组- 二维数组的应用场景3. 编程逻辑- 循环结构(for、while)- 条件判断(if、else、switch)- 随机数的生成与应用4. 扫雷游戏设计与实现- 游戏规则及界面设计- 二维数组存储雷区数据- 排雷逻辑实现- 游戏胜负判断5. 编程实践- 设计并编写扫雷游戏代码- 调试与优化程序- 团队协作与分享教学内容安排与进度:第1-2课时:Java基本语法与程序结构第3课时:二维数组的使用第4课时:编程逻辑第5-6课时:扫雷游戏设计与实现第7课时:编程实践与总结教材章节关联:《Java编程基础》第1章:Java概述《Java编程基础》第2章:数据类型与运算符《Java编程基础》第3章:控制流程《Java编程基础》第4章:数组与方法《Java编程基础》第5章:面向对象编程(部分内容)教学内容科学性和系统性:确保教学内容符合学科知识体系,由浅入深,让学生逐步掌握Java编程基础知识,并通过实际案例将所学知识应用于实践。
扫雷java课程设计
![扫雷java课程设计](https://img.taocdn.com/s3/m/cd2f052803768e9951e79b89680203d8ce2f6a2c.png)
扫雷java课程设计一、课程目标知识目标:1. 掌握Java基础语法,包括数据类型、运算符、控制流程等;2. 学会使用Java进行面向对象编程,理解类与对象的关系,掌握封装、继承、多态等概念;3. 了解Java图形用户界面(GUI)设计,掌握Swing组件的使用;4. 学会使用Java异常处理,提高程序的稳定性和可靠性;5. 掌握扫雷游戏的逻辑设计和实现。
技能目标:1. 能够运用Java编写简单的程序,实现基础功能;2. 能够运用面向对象思想进行问题分析,设计合理的类和对象;3. 能够独立完成扫雷游戏的编写,具备一定的编程实践能力;4. 能够运用所学知识解决实际问题,具备一定的创新和拓展能力。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习动力;2. 培养学生良好的编程习惯,注重代码规范和优化;3. 培养学生面对问题积极思考、独立解决的能力,增强自信心;4. 培养学生团队合作精神,学会沟通与协作。
课程性质:本课程为Java语言编程实践课程,以项目为导向,注重培养学生的编程能力和实际操作能力。
学生特点:学生具备一定的计算机基础,了解编程基本概念,但对Java语言和面向对象编程尚不熟悉。
教学要求:结合学生特点,采用案例教学,由浅入深地引导学生掌握Java编程技能,注重实践操作,提高学生编程水平。
同时,关注学生情感态度价值观的培养,使学生在学习过程中形成积极、主动的学习态度。
通过课程学习,将目标分解为具体的学习成果,便于后续教学设计和评估。
二、教学内容1. Java基础语法:- 数据类型与变量- 运算符与表达式- 控制流程(if条件语句、for循环、while循环)- 数组的使用2. 面向对象编程:- 类与对象- 封装、继承、多态- 抽象类与接口- 包的使用3. Java图形用户界面设计:- Swing组件基本使用- 布局管理器- 事件处理机制4. 异常处理:- 异常的概念与分类- try-catch-finally结构- 自定义异常5. 扫雷游戏设计与实现:- 游戏逻辑分析- 界面设计- 功能模块编写(如:初始化雷区、计算周围雷数、标记与挖雷等)- 游戏测试与优化教学内容安排与进度:第一周:Java基础语法学习第二周:面向对象编程基础第三周:Java图形用户界面设计第四周:异常处理与扫雷游戏逻辑分析第五周:扫雷游戏功能模块编写与测试本教学内容根据课程目标,结合教材章节进行选择和组织,确保内容的科学性和系统性。
复制java扫雷游戏课程设计
![复制java扫雷游戏课程设计](https://img.taocdn.com/s3/m/dd45cf5bbfd5b9f3f90f76c66137ee06eff94eeb.png)
复制java扫雷游戏课程设计一、课程目标知识目标:1. 让学生掌握Java基础语法和面向对象编程思想,能运用所学知识编写简单的游戏程序;2. 让学生了解扫雷游戏的基本规则和逻辑,理解游戏设计的基本流程;3. 使学生掌握使用Java进行二维数组操作和基本算法实现。
技能目标:1. 培养学生独立编写Java程序的能力,提高编程实践技能;2. 培养学生分析问题、解决问题的能力,能够将实际问题转化为程序逻辑;3. 培养学生团队协作和沟通能力,能够共同完成一个完整的游戏项目。
情感态度价值观目标:1. 激发学生对编程的兴趣,培养学生主动探究、自主学习的精神;2. 培养学生面对挑战时的坚持和耐心,树立克服困难的信心;3. 培养学生遵守编程规范,养成良好的编程习惯,提高职业道德素养。
课程性质:本课程为实践性较强的编程课程,以项目为导向,注重培养学生的动手能力和实际应用能力。
学生特点:学生具备一定的Java基础,对编程感兴趣,但实践经验不足,需要通过实际项目来提高。
教学要求:教师需引导学生掌握游戏设计的基本原理和编程技巧,注重启发式教学,鼓励学生积极参与讨论和实际操作。
同时,关注学生的个体差异,给予不同学生个性化的指导。
通过本课程的学习,使学生能够独立完成一个Java扫雷游戏的编写,达到预期的学习成果。
二、教学内容1. Java基础语法复习:变量、数据类型、运算符、控制结构(条件语句、循环语句);2. 面向对象编程:类与对象、继承与多态、接口与实现;3. 二维数组:数组声明、初始化,遍历和操作二维数组;4. 游戏设计原理:扫雷游戏规则、界面设计、逻辑实现;5. 编程实践:使用Java编写扫雷游戏的各个模块,如界面展示、地雷生成、翻开格子、标记地雷等;6. 算法实现:查找算法、递归算法等在扫雷游戏中的应用;7. 软件测试:单元测试、集成测试,确保游戏程序的正确性和稳定性;8. 项目实战:分组进行项目开发,按照软件工程流程,完成需求分析、设计、编码、测试和总结。
java扫雷的课程设计
![java扫雷的课程设计](https://img.taocdn.com/s3/m/291a2a773069a45177232f60ddccda38376be1f0.png)
java扫雷的课程设计一、课程目标知识目标:1. 理解Java语言基础,掌握面向对象编程的基本概念;2. 学会使用Java编写简单的图形用户界面(GUI)程序;3. 掌握扫雷游戏的规则和逻辑,了解二维数组的使用;4. 了解随机数的生成与应用。
技能目标:1. 能够运用所学知识,独立设计并编写Java扫雷游戏的代码;2. 培养分析问题、解决问题的能力,将实际问题转化为程序逻辑;3. 提高调试程序、解决问题的实际操作能力;4. 学会与他人合作,共同完成项目任务。
情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发主动学习的动力;2. 培养学生的耐心和毅力,面对困难时保持积极的态度;3. 培养团队协作精神,学会尊重他人,共同进步;4. 培养良好的编程习惯,注重代码规范和程序优化。
本课程针对的学生特点为具有一定Java基础知识和编程能力的初中生。
在教学过程中,要注意结合学生的实际水平和接受能力,循序渐进地引导他们掌握扫雷游戏的设计与实现。
通过本课程的学习,使学生将理论知识与实践相结合,提高编程技能,培养良好的编程习惯和团队协作精神。
同时,关注学生的情感态度价值观培养,激发学生的学习兴趣,提高他们面对困难的勇气和信心。
最终实现学生能够独立完成Java扫雷游戏的设计与实现,为后续学习奠定基础。
二、教学内容1. Java语言基础回顾:变量、数据类型、运算符、控制流程(条件语句、循环语句);2. 面向对象编程概念:类与对象、方法、属性、构造函数;3. Java GUI编程:Swing组件、事件处理、布局管理;4. 二维数组:定义、初始化、遍历、访问;5. 随机数生成:Random类、随机数在游戏中的应用;6. 游戏设计:扫雷游戏规则、游戏逻辑、界面设计;7. 编程实践:独立编写Java扫雷游戏代码,实现游戏基本功能;8. 团队合作:分组讨论、协作完成项目,分享编程经验;9. 程序调试与优化:代码审查、调试技巧、性能优化。
java扫雷课程设计
![java扫雷课程设计](https://img.taocdn.com/s3/m/0fae61b2f9c75fbfc77da26925c52cc58ad6905f.png)
java 扫雷课程设计一、教学目标本课程旨在通过Java编程语言实现一个扫雷游戏,让学生在学习Java编程的同时,培养逻辑思维能力、问题解决能力和团队合作能力。
具体的教学目标如下:1.掌握Java编程语言的基本语法和数据结构。
2.了解面向对象编程的基本概念和方法。
3.能够运用Java编程语言实现简单的游戏。
4.能够运用面向对象编程的方法设计游戏规则和界面。
情感态度价值观目标:1.培养学生的团队合作意识,提高他们的问题解决能力。
2.培养学生的创新思维,鼓励他们积极探索和尝试新的编程方法。
二、教学内容本课程的教学内容主要包括Java编程语言的基本语法和数据结构、面向对象编程的概念和方法,以及扫雷游戏的实现。
具体的教学大纲如下:1.Java编程语言的基本语法和数据结构:–数据类型、变量和运算符–控制流程:条件语句、循环语句–函数和数组2.面向对象编程的概念和方法:–类和对象的概念–属性和方法的定义–继承和多态的概念3.扫雷游戏的实现:–游戏规则的设计和实现–游戏界面的设计和实现–游戏逻辑的实现:雷的布局、玩家的操作、判断雷和数字的逻辑等三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法相结合的方式进行教学。
具体的教学方法如下:1.讲授法:教师通过讲解Java编程语言的基本语法和数据结构、面向对象编程的概念和方法,为学生提供理论知识的基础。
2.案例分析法:教师通过分析实际案例,让学生了解和掌握Java编程的实践应用。
3.实验法:学生通过编写代码实现扫雷游戏,培养他们的实际编程能力和问题解决能力。
4.小组讨论法:学生分组合作,共同完成扫雷游戏的实现,培养他们的团队合作意识和创新思维。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:《Java编程思想》2.参考书:《Java核心技术》3.多媒体资料:教学PPT、视频教程4.实验设备:计算机、网络设备以上是本课程的教学目标、教学内容、教学方法和教学资源的设计。
java课程设计扫雷游戏总结
![java课程设计扫雷游戏总结](https://img.taocdn.com/s3/m/883b272b7ed5360cba1aa8114431b90d6c8589a4.png)
java课程设计扫雷游戏总结一、课程目标知识目标:1. 学生能理解Java语言面向对象编程的基本概念,掌握类与对象的定义、属性和方法的使用。
2. 学生能运用数组管理二维空间数据,实现对扫雷游戏地图的表示与处理。
3. 学生能掌握异常处理机制,提高程序的健壮性。
技能目标:1. 学生能够运用所学知识独立设计并实现一个简易的扫雷游戏,具备基本的编程实践能力。
2. 学生能够通过分析问题,设计合理的类与对象,提高问题解决能力。
3. 学生能够运用调试工具,发现并修复程序中的错误,提高程序调试能力。
情感态度价值观目标:1. 学生在课程学习中,培养对编程的兴趣和热情,树立编程解决问题的自信心。
2. 学生通过小组合作,培养团队协作精神,增强沟通与交流能力。
3. 学生在游戏设计过程中,关注用户体验,培养产品思维和用户服务意识。
课程性质:本课程为Java语言编程实践课程,以项目为导向,注重学生动手能力培养。
学生特点:学生为初中生,具备一定的Java基础,对游戏编程有较高的兴趣。
教学要求:结合学生特点,课程要求以实践为主,注重引导学生自主探究和小组合作,提高编程实践能力。
将目标分解为具体的学习成果,以便于后续教学设计和评估。
二、教学内容1. 面向对象编程基础:- 类与对象的定义- 属性和方法的声明与使用- 构造方法的定义与重载2. 数组的使用:- 一维数组的基本操作- 二维数组的定义与应用- 数组在扫雷游戏地图中的应用3. 异常处理:- 异常的概念与分类- try-catch语句的使用- 自定义异常处理4. 游戏编程实践:- 扫雷游戏规则介绍- 游戏界面设计- 游戏逻辑实现(如:雷区生成、翻开格子、标记雷等)- 游戏胜负判断5. 教学大纲:- 第一课时:面向对象编程基础复习,类与对象的创建- 第二课时:二维数组在扫雷游戏中的应用,设计游戏地图- 第三课时:异常处理,提高程序健壮性- 第四课时:扫雷游戏逻辑实现,界面设计- 第五课时:游戏调试与优化,小组展示与评价教学内容依据教材相关章节,结合课程目标进行选择和组织,保证教学内容的科学性和系统性。
Java课程设计扫雷游戏
![Java课程设计扫雷游戏](https://img.taocdn.com/s3/m/20448256c381e53a580216fc700abb68a982ad30.png)
界面布局:合理规 划界面元素,提高 用户体验
色彩搭配:选择合 适的色彩搭配,增 强视觉效果
图标设计:设计简 洁明了的图标,便 于用户识别
动画效果:适当添 加动画效果,增加 游戏趣味性
游戏逻辑优化
优化界面:提高用户体验, 增加游戏趣味性
优化算法:提高游戏运行效 率,减少内存占用
优化规则:增加游戏难度, 提高挑战性
游戏控制逻辑实现
游戏开始:点击开始按钮, 进入游戏界面
游戏进行:鼠标点击格子, 显示数字或地雷
游戏结束:所有地雷被标 记或踩到,游戏结束
游戏重置:重新开始游戏, 重新生成地雷布局
游戏控制逻辑测试
游戏开始:点击开始按钮,游戏开始
游戏结束:点击结束按钮,游戏结束
游戏操作:鼠标点击,选择要翻开的格 子
游戏音效实现方式
音效播放:通过调用音效库 或音效文件进行播放
音效文件:使用MP3、 WAV 等 格 式 的 音 效 文 件
音效库:使用音效库如 S o u ndPool 、 Audi oTr ac k 等
音效控制:通过设置音量、 音调、音速等参数进行音效
控制
音效同步:与游戏场景、动 作等同步播放音效
音效优化:优化音效加载、 播放、控制等过程,提高游
戏性能
游戏音效逻辑实现
音效分类:背景音乐、音效、语音等 音效触发条件:点击、移动、爆炸等 音效播放:循环播放、单次播放、随机播放等 音效管理:音效音量、音效开关、音效选择等
游戏音效测试与调整
音效测试:在开发过程中,对音效进行测试,确保音效与游戏场景相匹配 音效调整:根据测试结果,对音效进行适当调整,提高音效质量 音效优化:对音效进行优化,提高音效的流畅性和清晰度 音效反馈:收集玩家对音效的反馈,根据反馈进行音效调整和优化
java_扫雷游戏课程设计报告(共5篇)
![java_扫雷游戏课程设计报告(共5篇)](https://img.taocdn.com/s3/m/b98997d80875f46527d3240c844769eae009a300.png)
java_扫雷游戏课程设计报告(共5篇)第一篇:java_扫雷游戏课程设计报告一、设计任务与要求扫雷游戏的基本要求Windows 2000/XP系统提供的扫雷游戏是一个很有趣的游戏。
本章的课程设计使用Java语言编写一个与其类似的扫雷游戏。
具体要求如下:(1)扫雷游戏分为初级、中级和高级三个级别,扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。
单击游戏菜单可以选择“初级”、“中级”和“高级”或“查看英雄版”。
(2)选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何一个方块便启动计时器。
(3)用户要揭开某个方块,可单击它。
若所揭方块下有泪,用户便输了这一局,若所揭方块下五雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。
(4)如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。
用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。
(5)扫雷胜利后(用时最少者),程序弹出保存成绩的对话框。
(6)用户可以选择标记疑问的方块,用可以勾选游戏菜单下的标记(或者用快捷键alt+G 然后M)即可,此时双击右键并可出现“?”标记。
另有颜色选项,当用户勾选此项时,游戏将以最低图像像素来显示。
(7)如果用户需要即使提示声,并可选中声音选项,此时将听到计时的卡塔声。
当用户点中雷时,将有爆炸声产生,胜利时,将有凯旋的旋律播放,此时企鹅出现欢悦表情。
二、需求分析1、扫雷游戏概述扫雷是一种具有迷惑性的对记忆和推理能力的简单测试,它是长久以来最受欢迎的Windows游戏之一。
游戏目标:找出空方块,同时避免触雷。
2、扫雷的操作方法游戏主区域由很多个方格组成。
使用鼠标随机点击一个方格,方格即被打开并显示出方格中的数字;方格中数字则表示其周围的8个方格隐藏了几颗雷;如果点开的格子为空白格,即其周围有0颗雷,则其周围格子自动打开。
java简易扫雷游戏课程设计
![java简易扫雷游戏课程设计](https://img.taocdn.com/s3/m/4b193197db38376baf1ffc4ffe4733687e21fc84.png)
java简易扫雷游戏课程设计一、课程目标知识目标:1. 让学生掌握Java编程语言的基本语法和结构;2. 培养学生运用面向对象编程思想,设计简易扫雷游戏;3. 让学生了解并应用二维数组进行游戏地图的表示;4. 引导学生掌握随机数的生成和使用。
技能目标:1. 培养学生独立编写、调试和运行Java程序的能力;2. 提高学生分析问题、解决问题的能力;3. 培养学生的逻辑思维能力和团队协作能力。
情感态度价值观目标:1. 培养学生积极的学习态度,激发对编程的兴趣;2. 培养学生面对挑战时不放弃的精神,增强自信心;3. 引导学生认识到编程在现实生活中的应用,提高社会责任感。
课程性质:本课程为实践性较强的学科,通过设计简易扫雷游戏,让学生在实际操作中掌握Java编程知识。
学生特点:学生已具备一定的Java编程基础,具有较强的逻辑思维能力和动手能力。
教学要求:教师需结合学生特点,设计合理的教学环节,引导学生独立完成游戏设计,注重培养学生的实践能力和团队合作精神。
在教学过程中,将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. Java基本语法回顾:变量、数据类型、运算符、控制结构;2. 面向对象编程:类与对象、构造方法、成员变量、成员方法;3. 二维数组:定义、初始化、遍历、应用;4. 随机数生成:Random类、Math类;5. 简易扫雷游戏设计:游戏规则、界面设计、逻辑实现;6. 异常处理:try-catch语句、异常类型;7. 教学大纲:- 第一课时:Java基本语法回顾,面向对象编程基础;- 第二课时:二维数组的使用,随机数生成;- 第三课时:简易扫雷游戏规则介绍,界面设计;- 第四课时:简易扫雷游戏逻辑实现,异常处理;- 第五课时:课程总结与作业布置。
教学内容参考教材相关章节,结合课程目标,确保学生能系统掌握Java编程知识,并能够将所学知识应用于简易扫雷游戏的设计中。
在教学过程中,教师需关注学生的掌握情况,及时调整教学进度,保证教学质量。
java课程设计——扫雷
![java课程设计——扫雷](https://img.taocdn.com/s3/m/b7ec090353d380eb6294dd88d0d233d4b14e3fc6.png)
java课程设计——扫雷⼀、团队课程设计博客链接:⼆、个⼈负责模块或任务说明:模块:⽂件操作 Minefield类实现三、⾃⼰的代码提交记录截图四、⾃⼰负责模块或任务详细说明1.Minefield类实现Minefield是我们主要的算法实现模块。
在正式开始扫雷游戏时,看见的是如下界⾯:⼀格⼀格的蓝⾊格⼦表⽰可点击区域。
点击后,分三个情况:1)标记该区域为雷(右击)2)该区域是点击到雷,游戏结束 3)该区域⽆雷,显⽰区域九宫格范围内的雷的个数。
(此处有9种情况)4)游戏提前结束,显⽰所有未被点击的雷。
下图囊括四种情况:选项区域:这⾥涉及到的保存进度,下条中讲解。
对于以上游戏功能,我们是这样实现的。
先根据所选等级,初始化⼀个map数组,数组的⾏数和列数取决于等级。
然后⽤Math.random()数结合循环语句和判断语句⽣成,将类的区域置9。
其余位置元素值属于0~8,分别表⽰以当前位置为中⼼的九宫格中雷的数⽬。
⾄此,map数组⽣成完毕。
由于游戏界⾯中,真正显⽰出来的状态有13种(0~8九个数字九种,标记该位置为雷、该位置是被点击的雷、游戏成功后未被点击的雷、当前可点击区域各⼀种),⽤map数组来控制游戏界⾯的显⽰会有冲突,所以此处引⼊hiddenmap数组,元素数值范围为0~12,分别表⽰上述13种情况。
对于游戏界⾯,其实是⼀个JButton数组,由于界⾯的美观性,⽤hiddenmap数组值为每个按钮分配图⽚,根据hiddenmap数组值分配对应的功能图⽚。
⽣成雷:⽣成map数组其他位置的数字:for (int i = 0; i < getWidth(); i++)for (int j = 0; j < getLength(); j++) {if (map[i][j] != 9) // 只对不为雷的区域进⾏雷数判断{int number = 0;if (i == 0) {if (j == 0) {if (map[i][j + 1] == 9)number++;if (map[i + 1][j] == 9)number++;if (map[i + 1][j + 1] == 9)number++;} else if (j == getLength() - 1) {if (map[i][j - 1] == 9)number++;if (map[i + 1][j] == 9)number++;if (map[i + 1][j - 1] == 9)number++;} else {if (map[i][j - 1] == 9)number++;if (map[i][j + 1] == 9)number++;if (map[i + 1][j - 1] == 9)number++;if (map[i + 1][j] == 9)number++;if (map[i + 1][j + 1] == 9)number++;}}if (i == getWidth() - 1) {if (j == 0) {if (map[i][j + 1] == 9)number++;if (map[i - 1][j] == 9)number++;if (map[i - 1][j + 1] == 9)number++;} else if (j == getLength() - 1) {if (map[i][j - 1] == 9)number++;if (map[i - 1][j] == 9)number++;if (map[i - 1][j - 1] == 9)number++;} else {if (map[i][j - 1] == 9)number++;if (map[i][j + 1] == 9)number++;if (map[i - 1][j - 1] == 9)number++;if (map[i - 1][j] == 9)number++;if (map[i - 1][j + 1] == 9)number++;}}if (i != 0 && i != (getWidth() - 1)) {if (j == 0) {if (map[i - 1][j + 1] == 9)number++;if (map[i][j + 1] == 9)number++;if (map[i + 1][j + 1] == 9)number++;if (map[i - 1][j] == 9)number++;if (map[i + 1][j] == 9)number++;}if (j == getLength() - 1) {if (map[i - 1][j - 1] == 9)number++;if (map[i][j - 1] == 9)number++;if (map[i + 1][j - 1] == 9)number++;if (map[i - 1][j] == 9)number++;if (map[i + 1][j] == 9)number++;}}if ((i != 0) && (j != 0) && (i != getWidth() - 1) && (j != getLength() - 1)) { // 不在边缘的情况// 单位九宫格内的雷数for (int n = i - 1; n <= i + 1; n++)for (int m = j - 1; m <= j + 1; m++)if (map[n][m] == 9)number++;}map[i][j] = number;}}}所有过程中我们的操作都是对我们的hiddenmap做修改,我们的map是我们的真实雷区不做改动,接下来讲讲核⼼的具体实现。
java扫雷课程设计
![java扫雷课程设计](https://img.taocdn.com/s3/m/0b56ad7abdd126fff705cc1755270722182e5960.png)
java扫雷课程设计一、课程目标知识目标:1. 让学生理解扫雷游戏的基本规则和逻辑;2. 掌握Java编程语言中的数组、循环、条件判断等基本语法;3. 学会使用Java编写图形用户界面(GUI)。
技能目标:1. 培养学生运用Java语言解决问题的能力;2. 提高学生在编程过程中运用逻辑思维和算法设计的能力;3. 培养学生团队协作和沟通能力。
情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发主动探索精神;2. 培养学生面对困难和挑战时的坚持和耐心;3. 引导学生认识到编程在生活中的应用,激发他们对科技创新的热情。
分析课程性质、学生特点和教学要求,将课程目标具体分解如下:1. 知识目标:- 学生能描述扫雷游戏的基本规则和逻辑;- 学生能运用Java基本语法编写扫雷游戏的代码;- 学生能设计并实现扫雷游戏的图形用户界面。
2. 技能目标:- 学生能运用所学知识独立解决编程问题;- 学生能在编程过程中运用合适的算法设计;- 学生能在团队协作中发挥自己的作用,共同完成任务。
3. 情感态度价值观目标:- 学生对编程保持积极的态度,愿意主动学习和探索;- 学生在编程过程中能够克服困难,保持耐心和毅力;- 学生能认识到编程对生活和社会的影响,增强科技创新意识。
二、教学内容根据课程目标,教学内容分为以下三个部分:1. Java基本语法和数组- 章节一:Java基本语法- 数据类型、变量、运算符- 控制语句(条件判断、循环)- 章节二:数组- 数组定义和初始化- 数组遍历和操作2. 图形用户界面(GUI)- 章节三:Swing基础- JFrame、JButton、JLabel等组件- 布局管理器(边界布局、流布局等)- 章节四:事件处理- 鼠标事件、键盘事件- 事件监听器和适配器3. 扫雷游戏设计- 章节五:扫雷游戏逻辑- 游戏规则和基本算法- 随机生成雷区和数字区域- 章节六:扫雷游戏GUI实现- 设计游戏界面- 实现游戏逻辑与界面交互教学进度安排:1. Java基本语法和数组(2课时)2. 图形用户界面(GUI)(3课时)3. 扫雷游戏设计(4课时)教学内容确保科学性和系统性,结合教材章节进行教学,使学生能够在掌握基础知识的基础上,逐步深入完成扫雷游戏的设计与实现。
java扫雷游戏的开发
![java扫雷游戏的开发](https://img.taocdn.com/s3/m/02cd366ff68a6529647d27284b73f242336c31cb.png)
1设计题目及具体要求设计题目:扫雷游戏的开发题目需求:玩者进入游戏后,开始游戏,目的是为了找出所有隐藏的小方格后一定数目地雷,进行标记,把所有地雷找出并用时最少的胜利者进出扫雷英雄榜。
单击游戏菜单可以选择<初级>,<高级>,<中级>和<扫雷英雄榜>。
扫雷的各个级别是根据游戏的总格子数和地雷总数来区别的,初级的总格子数最少,地雷数也最少,高级的总格子数和地雷数最多。
扫雷英雄榜中记录着各个级别的第一名玩家,而且玩家可以刷新纪录。
游戏上方可以显示这盘中还有多少颗地雷,还可以显示在这盘游戏中游戏进行了多长时间。
选择级别后游戏去会出现相应的扫雷区域,这是玩家用鼠标单击任意一个方格,开始计时及游戏开始。
玩家要揭开某个方块可单击它,若该方块不是雷,会显示出一个数字或者是一个空格子这表示一概方格为中心周围的把各方格子中总共有多少颗地雷,玩家需要进行判断继续游戏,若是地雷则玩家输了这盘游戏,这时玩家可以退出游戏或选择重新开始。
若玩家确定某个方格子底下是地雷,这是可以单击鼠标右键,不管是不是正确,这时会出现一个小旗子标志,同时剩余地雷数减一个。
游戏胜利后,系统会弹出对话框保存成绩可以记录胜利者的名字。
实现环境及工具简介系统开发平台:Eclipse1.7数据库管理系统软件:Oracle运行平台:windows XPJava开发包:jdk7.02总体设计总体设计:再设计扫雷游戏时,需要编写7个源文件:MineGame.java,MineArea.java,Block.java,BlockView.java,LayMines.java,ShowRecord.java,Record.java 除了这七个源文件外,还需要Java系统提供一些重要的类,如File,JButton和JLabel等类。
2.1 MineGame.java(主类):主要负责创建扫雷游戏主窗口,该文件有main方法,扫雷游戏从该类开始执行。
java扫雷源课程设计
![java扫雷源课程设计](https://img.taocdn.com/s3/m/c3db67fe0129bd64783e0912a216147917117e34.png)
java扫雷源课程设计一、课程目标知识目标:1. 学生能掌握Java编程语言的基本语法和结构;2. 学生能理解二维数组的使用方法,并能运用其创建扫雷游戏的地图;3. 学生能掌握循环、条件判断等基本编程逻辑,实现扫雷游戏的逻辑功能;4. 学生了解游戏设计中的人机交互原理,并能实现简单的用户界面。
技能目标:1. 学生能够运用所学知识,独立编写出完整的扫雷游戏程序;2. 学生能够通过分析问题,设计合理的算法,解决编程中遇到的问题;3. 学生能够运用调试工具,找出程序中的错误并进行修正;4. 学生能够运用所学知识,对扫雷游戏进行优化和扩展。
情感态度价值观目标:1. 学生通过编程实践,培养解决问题的能力和团队合作精神;2. 学生在编程过程中,培养坚持不懈、勇于尝试的精神;3. 学生通过学习,认识到编程在现实生活中的应用,激发对计算机科学的兴趣;4. 学生在学习过程中,树立正确的价值观,遵循道德规范,尊重他人的知识产权。
课程性质:本课程为实践性较强的课程,旨在让学生通过编写扫雷游戏程序,巩固所学Java知识,培养编程技能和逻辑思维能力。
学生特点:学生处于高年级阶段,已具备一定的编程基础,具有较强的逻辑思维能力和自主学习能力。
教学要求:教师应注重理论与实践相结合,引导学生运用所学知识解决问题,关注学生的个体差异,鼓励学生积极参与讨论和交流。
同时,注重培养学生的团队合作精神和情感态度价值观。
通过本课程的学习,使学生在知识、技能和情感态度价值观方面取得具体的学习成果。
二、教学内容1. Java基本语法和结构复习:回顾变量、数据类型、运算符、控制结构等基本概念,确保学生具备编写程序的基础能力。
- 教材章节:第一章至第四章2. 二维数组的应用:讲解二维数组的定义、初始化和操作方法,为学生创建扫雷游戏地图打下基础。
- 教材章节:第五章3. 循环与条件判断:通过实例讲解循环和条件判断在编程中的应用,使学生能够实现扫雷游戏的逻辑功能。
JAVA课程设计_扫雷游戏报告(定稿)
![JAVA课程设计_扫雷游戏报告(定稿)](https://img.taocdn.com/s3/m/5a6f924eb307e87101f6965c.png)
合肥学院计算机科学与技术系课程设计报告20013~2014学年第一学期课程JA V A语言基础课程设计名称扫雷游戏学生姓名龚天棚学号**********专业班级网络工程1班指导教师张贯虹2013年9月目录第一章设计内容及要求 (1)1.1 扫雷游戏的基本要求 (1)1.2 游戏需要实现的主要功能 (1)第二章需求分析 (2)2.1扫雷游戏界面设计 (2)2.2 雷区的设计 (2)2.3 音效的设计 (3)2.4 扫雷英雄榜的设计 (3)第三章总体设计 (5)3.1 总体功能图 (5)3.2 总体流程图 (5)第四章主要功能设计流程 (6)4.1 雷区设计流程图 (6)4.2 音效设计流程图 (6)4.3 英雄榜设计流程图 (7)第五章主要功能设计流程 (8)5.1 类之间关系图 (8)5.2 程序运行效果图 (8)5.2.1 游戏登录界面 (8)5.2.2 游戏菜单界面 (9)5.2.3 游戏运行界面 (10)5.2.4 游戏英雄榜界面 (12)第六章总结 (13)参考文献 (14)附录 (15)第一章设计内容及要求1.1扫雷游戏的基本要求当前各种游戏层出不穷,因为游戏的开发成本非常大,所以游戏的开发具有一定的风险性,但是一些小游戏的开发成本具有成本小,编写简单的优势,所以这些小游戏在游戏开发中也占有一席之地。
在这类小游戏中包括益智类游戏,它以画面精美、游戏方法简单等特点得到大家的认可。
成为人们在工作之余不可或缺的好伙伴。
针对这种情况我选择了扫雷游戏该课题作为我的课程题目。
Windows XP和Windows 7系统提供的扫雷游戏是一个很有趣的游戏。
本次课程设计的主要任务是使用JA V A语言编写一个与其类似的扫雷游戏。
具体要求如下:1、扫雷游戏分为初级、中级和高级三个级别,同时扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。
单击游戏菜单可以选择“初级”、“中级”和“高级”或“查看英雄版”。
java初级扫雷课程设计
![java初级扫雷课程设计](https://img.taocdn.com/s3/m/f6cd6e8877eeaeaad1f34693daef5ef7ba0d12da.png)
java 初级扫雷课程设计一、课程目标知识目标:1. 让学生掌握Java编程语言的基本语法和结构,特别是扫雷游戏中常用的数据类型、变量、运算符和流程控制语句。
2. 使学生了解二维数组的使用,并能通过数组存储和操作扫雷游戏中的数据。
3. 帮助学生理解面向对象编程的基本概念,如类、对象、方法和封装等,通过设计扫雷游戏的类和对象来实现游戏功能。
技能目标:1. 培养学生运用Java编程语言解决问题的能力,特别是分析、设计和实现扫雷游戏的基本功能。
2. 提高学生的逻辑思维能力,学会运用流程图和伪代码来分析问题,编写结构清晰、逻辑严密的Java程序。
3. 培养学生的团队协作能力,分组进行项目开发,共同完成扫雷游戏的编程和测试。
情感态度价值观目标:1. 激发学生对计算机编程的兴趣,培养他们主动探索、自主学习的精神。
2. 培养学生面对困难和挑战时的坚持和毅力,提高他们克服问题的自信心。
3. 引导学生认识到编程在生活中的应用价值,培养他们的创新意识和实践能力。
课程性质:本课程为初级Java编程课程,以项目驱动的形式进行教学,让学生在实践中掌握编程技能。
学生特点:学生处于初级阶段,对Java编程有一定了解,但实践经验不足,需要通过实际项目来提高编程能力。
教学要求:结合学生特点和课程性质,采用任务驱动、分组合作的教学方法,注重理论与实践相结合,提高学生的编程实践能力和团队协作能力。
通过本课程的学习,使学生能够独立完成扫雷游戏的编程和测试,达到预期的学习成果。
二、教学内容1. Java基本语法和数据类型:回顾Java的基本语法,包括数据类型、变量声明和初始化,重点讲解整型、布尔型和字符型在扫雷游戏中的应用。
教材章节:第一章 Java基础2. 流程控制语句:介绍顺序结构、分支结构和循环结构,通过设计扫雷游戏的逻辑,让学生掌握流程控制语句的使用。
教材章节:第二章 Java流程控制3. 二维数组:讲解二维数组的定义、初始化和遍历,以及如何用二维数组存储扫雷游戏中的雷区和数字区。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
成绩评定表课程设计任务书目录1.设计目的----------------------------------------------------------------------------- 4 2.总体设计----------------------------------------------------------------------------- 4 2.1设计需求------------------------------------------------------------------------------------------ 4 2.2程序功能模块图----------------------------------------------------------------------------------- 4 3.关键技术----------------------------------------------------------------------------- 7 4.程序流程----------------------------------------------------------------------------- 8 5.主要源代码-------------------------------------------------------------------------- 8 6.运行结果及结论------------------------------------------------------------------- 27 7.参考文献--------------------------------------------------------------------------- 291.设计目的通过选择扫雷游戏软件设计,这个综合性的题目作为本次的课程设计。
可以让我们更加熟悉Java 程序设计这门课程,学会熟练使用Java这个软件,加深对Java语言的掌握,提高编程水平。
同时培养独立思考和同学间团结合作的能力,为毕业设计以及将来的工作打下坚实的基础。
2.总体设计2.1 设计需求在设计扫雷游戏时,需要编写7个源文件:MineGame.java,MineArea.java,Block.java,BlockView.java,LayMines.java,ShowRecord.java,Record.java 除了这七个源文件外,还需要Java系统提供一些重要的类,如File,JButton和JLabel等类。
2.2 程序功能模块图2.2 程序功能模块图2.2.1 MineGame.java(主类):成员变量bar和fileMenu 提供菜单操作,单击菜单操作中的选项为“初级”,“中级”,“高级”或“扫雷英雄榜”;mineArea 是扫雷区域,提供有关雷的主要功能;英雄榜”负责存放三个级别的扫雷最好成绩;showHeroRecord负责显示英雄榜中的数据方法MineGame()是构造窗口,负责完成窗口的初始化。
ActionPerformed(ActionEvent)方法是MineGame类实现的ActionListener接口中的方法,该方法负责执行菜单发出的有关命令。
用户选择菜单中的菜单项可触发ActionEvent事件,导致actionPerformed(ActionEvent)方法执行相应的操作。
Main(String[])方法是程序运行的入口方法。
2.2.2 MineArea.java:成员变量block和Block类型的数组,用来确定雷区有多少需进行扫雷的方块;blockView是BlockView类型的数组,负责block数组中Block对象提供视图;lay是LayMines类型的对象,负责设置block数组中的哪些方块不是雷;record负责提供保存成绩的界面,是一个对话框,默认为不可见,用户只有扫雷成功后,才可以看见该对话框;reStart是一个按钮对象,用户单击它重新开始游戏;time是计时器对象,负责计算用户用时。
方法initMineArea(int,int,int,int)方法可根据参数提供的数据设置雷区的宽度,高度,类的数目以及雷区的级别。
actionPerformed(actionEvent)是MineArea类实现的ActionListener接口中的方法。
当用户单击blockView中的某个方块时actionPerformed(actionEvent)执行有关算法。
Show()方法是一个递归方法,actionPerformed(actionEvent)方法执行将调用show方法进行扫雷。
mousePressed(mouseEvent)方法是MineArea类实现的MouseListener接口中的方法,当用户按下鼠标右键时,mousePressed(mouseEvent)方法负责让方块上显示一个探雷标记。
inquireWin()方法用来判断用户扫雷是否成功,如果成功该方法负责让record对话框可见。
2.2.3 Block.java:成员变量name方块上的名字aroundMineNumber是方块周围雷的数目mineIcon是方块上雷的图标isMine用来表示方块是否是雷isMark用来表示方块是否被标记isOpen用来表示方块是否被挖开方法setAroundMineNumber(int)方法用来设置aroundMineNumber的值;getAroundMineNumber()方法用来获取aroundMineNumber的值。
2.2.4 BlockView.java成员变量blockNameOrIcon用来显示Block对象的name,number和mineIcon属性;blockCover用来遮挡blockNameOrIcon;card卡片式布局。
方法giveView(Block block)方法给参数指定的Block对象提供视图;seeBlockNameOrIcon()方法让用户看见视图中的标签,无法看见按钮;seeBlockCover()方法让用户看见视图中的按钮,无法看见标签。
2.2.5 LayMines.java:成员变量mineIcon用来存放一个格式为gif的图像。
方法layMinesForBlock(Block[][],int)方法对参数指定的Block数组进行设置,其中int参数指定雷的数目。
2.2.6 Record.java:成员变量textName提供用户扫雷优胜者出入姓名;用户单击“确定”按钮,可以保存成绩。
方法actionPerformed(ActionEvent)方法是Record类实现的ActionListener接口中的方法,当用户单击“确定”按钮后,该方法被执行,所执行的操作就是获取用户输入的名字和用时,然后调用writeRecord(String,String)方法将信息写入英雄榜中;writeRecord(String,String)负责将有关信息写入“英雄榜”文件。
2.2.7 ShowRecord:成员变量file存放文件的引用,用户单击“显示成绩”按钮,可以查看各个级别的最好成绩;用户单击“重新计分”按钮,可以将“英雄榜”中的成绩恢复为初始值。
方法actionPerformed(ActionEvent)方法是ShowRecord类实现的ActionListener接口中的方法,当用户单击“显示成绩”按钮后,该方法被执行,所执行的操作就是调用readAndShow()方法;readAndShow()方法负责读取存放在文件中的各个级别的扫雷最好成绩以及扫雷者姓名,并显示这些相关信息。
3.关键技术3.1 实现窗口的初始化:利用MineGame.java实现MineGame()是构造窗口,负责完成窗口的初始化。
ActionPerformed(ActionEvent)方法是MineGame类实现的ActionListener接口中的方法,该方法负责执行菜单发出的有关命令。
用户选择菜单中的菜单项可触发ActionEvent事件,导致actionPerformed(ActionEvent)方法执行相应的操作。
3.2 利用产生随机数的方法完成游戏中随机布雷的要求:利用MineArea.java实现initMineArea(int,int,int,int)方法可根据参数提供的数据设置雷区的宽度,高度,类的数目以及雷区的级别。
actionPerformed(actionEvent)是MineArea类实现的ActionListener接口中的方法。
当用户单击blockView中的某个方块时actionPerformed(actionEvent)执行有关算法。
Show()方法是一个递归方法,actionPerformed(actionEvent)方法执行将调用show方法进行扫雷。
mousePressed(mouseEvent)方法是MineArea类实现的MouseListener接口中的方法,当用户按下鼠标右键时,mousePressed(mouseEvent)方法负责让方块上显示一个探雷标记。
inquireWin()方法用来判断用户扫雷是否成功,如果成功该方法负责让record对话框可见。
4.程序流程4.1 程序流程图打开程序后点重新开始,游戏定义并初始化,用户开始进行游戏,计数器开始统计用户点击次数并记录,判断用户是否中雷,否继续游戏,是结束游戏并处理结果5.主要源代码import 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();}}import 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){}}import 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;}import 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;}}import 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(int t=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);}}}}}import 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;}import 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();}}}6. 运行结果及结论6.1 运行过程6.2 运行界面7.参考文献[1] Java面向对象程序设计清华大学出版社董小园[2] Java2实用教程(第三版)清华大学出版社耿祥义[3] 基于MVC的Java Web设计与开发. 电子工业出版社孙卫琴[4]《JAVA 语言与面向对象程序设计》清华大学出版社印旻[5]《 JavaApplet 实例编程》中国水利水电出版社赤金、聂松编。