java小项目之:扫雷,这游戏没有你想的那么简单!
扫雷
我之前分享的小项目和小游戏,电影购票、坦克大战、捕鱼达人、贪吃蛇等,虽然已经是耳熟能详人尽皆知的项目和游戏,但是保不齐真的有人没接触过。
今天分享的这个项目,我不相信没人接触过(仅限80后-00后)。扫雷,这几乎所有电脑都有的一款超级小游戏,在全国各地的微机课上饱受欢迎,玩法紧张刺激、老少皆宜,而且还益智。今天便分享用java怎么实现这一款神作。(文末附带源码素材获取方式)
游戏介绍:
扫雷就是要把所有非地雷的格子揭开即胜利;踩到地雷格子就算失败。
游戏主区域由很多个方格组成。使用鼠标左键随机点击一个方格,方格即被打开并显示出方格中的数字;方格中数字则表示其周围的8个方格隐藏了几颗雷;如果点开的格子为空白格,即其周围有0颗雷,则其周围格子自动打开;如果其周围还有空白格,则会引发连锁反应;在你认为有雷的格子上,点击右键即可标记雷;如果一个已打开格子周围所有的雷已经正确标出,则可以在此格上同时点击鼠标左右键以打开其周围剩余的无雷格。
1代表1的上下左右及斜角合计有一颗雷,依次轮推,2则有2颗,3则有3颗..
在确实是炸弹的方格上点了旗子,就安全了,不是炸弹的被点了旗子,后面会被炸死的..问号就先不确定这里有没有炸弹,不会存在点错了被炸死的状况..
有个小窍门,在数字旁同时点左键和右键可以排雷..
第一下点的一定不是雷, 左键点开,右键用旗子标记雷,同时左右键点数字可以判断周围的雷是否已经全部标出..
每个数字代表 这个数字周围九个格里,有几颗雷!比如,1,周围九个格里只有一颗雷,2 周围九个格里就有两颗雷,以此类推 ..通过单击即可挖开方块。如果挖开的是地雷,则您输掉游戏..如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷..要标记您认为可能有地雷的方块,请右键单击它..
游戏区包括雷区、地雷计数器和计时器..数字就是这个方块周围的8个方块里有的雷的数量,问号是自己弄上去的,可以的地方可以弄个问号,旗子就是确定那里有雷了..
代码介绍:
主要运用java语言来完成。Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言,用Java写的应用程序不用修改就可在不同的软硬件平台上运行。
1、设计整个游戏的结构,一般采用MVC作为整个游戏的结构,结构清晰又容易理解。
2、一般来说,做这些游戏的时候,我们先从底层的model开始做起。在这里,model部分就是由两张二维数组表组成,其中一张是mine,他上面放的就是一些最底层的数据,也就是说雷得分布情况。另外一张表是界面表chess,就是记录一些显示给用户的数据。
3、然后要做的是对两张表的初始化,这一步非常重要,对于第一张表mine的的初始化的方法为先随机n个不重复的雷,分布到mine表中,然后,对雷周围的格子进行赋值。这里我用到方法为:遍历所有的雷,将雷周围的格子加一,这样就能达到赋数值这个工作了。其中,这里有一个难点,就是如何判定雷周围的八个格子,其实方法很多,但是大多代码繁琐,或者处理边界困难。这里我用到的方法是,计算两个格子之间的距离,如果与雷的距离为1或者根号2的话,就能确定该格子在雷的周围。然后是对chess进行初始化,chess就是界面表,也就是说,这里的数据是直接显示给用户看的。当然,初始化部分就是直接将赋值为板,就是等待去扫雷的状态。
4、 然后就是扫雷部分,就是点击一个格子,利用jlabel的触发器将格子坐标传送到controller中去,controller中根据mine表判断点击的是什么,分三种情况,如果是雷,那就将底层的所有数据都赋到chess中,然后gameover。如果是数字,那就直接把数字赋值到chess中去。如果是0,那就非常麻烦了,这也是这个游戏中的一个难点,玩过扫雷的同学应该都知道,点击0时,会散开周围所有的0.我这边的解决方法是,将点到的0的坐标加到list里面去,在遍历这个list,取出里面的坐标,查找他周围的8个格子,如果是0,且坐标不与list中的中的坐标重复,就将第二次查找到的坐标放到list里面,然后取list的下一个值,点击这个点,然后就是循环上面的语句。
5 、游戏中的另一个难点是,在游戏过程中,左右键同时点击数字,会有一个提示,这里的做法是如果如果是数字的格子,监听到左右键同时点击数字事件,查找这个格子周围的8个格子的红旗数,如果周围的红旗数正好是格子上的数字,那么就将除红旗之外的所有内容都显示出来。
素材展示:
需要游戏源码和素材练手的小伙伴可以私信我领取!
如果喜欢这样文章的可以关注我,我会持续更新,你们的关注是我更新的动力!
祝关注我的人都:身体健康,财源广进,福如东海,寿比南山,早生贵子,从不掉发!
java小项目之:扫雷,这游戏没有你想的那么简单!的更多相关文章
- Java小项目--坦克大战(version1.0)
Java小项目--坦克大战<TankWar1.0> 这个小项目主要是练习j2se的基础内容和面向对象的思想.项目实现了基本的简单功能,我方一辆坦克,用上下左右键控制移动方向,按F键为发射炮 ...
- java小项目之:植物大战僵尸,这个僵尸有点冷!内附素材源码
Java小项目之:植物大战僵尸! <植物大战僵尸>是由PopCap Games开发的一款益智策略类单机游戏,于2009年5月5日发售,这款游戏可谓是无人不知无人不晓. 在我身边,上到40岁 ...
- Java学习笔记三十:Java小项目之租车系统
Java小项目之租车系统 一:项目背景介绍: 根据所学知识,编写一个控制台版的“呱呱租车系统” 功能: 1.展示所有可租车辆: 2.选择车型.租车量: 3.展示租车清单,包含:总金额.总载货量以及其车 ...
- Java小项目之:五子棋,你下棋下得过电脑吗?
Java小项目之:五子棋,你下棋下得过电脑吗? Java五子棋功能要求: 1.创建窗口和设计一个棋盘界面 2.实现鼠标点击,棋子出现,黑白棋轮流下 3.能够判断五子相连输赢 4.添加重新开始,悔棋,退 ...
- Java小项目之:教你做个聊天系统!
Java小项目之:聊天系统 今天给大家带来的java练手小项目是一个简单的聊天室,界面简单,操作不难. 分为注册系统,登录系统和聊天系统三部分,很适合java小白练手. 完整的源码和素材请关注并私信我 ...
- 有趣的java小项目------猜拳游戏
package com.aaa; //总结:猜拳游戏主要掌握3个方面:1.人出的动作是从键盘输入的(System.in)2.电脑是随机出的(Random随机数)3.双方都要出(条件判断) import ...
- java小项目之:象棋,羡慕你们有对象的!
象棋,是我国传统棋类益智游戏,在中国有着悠久的历史,属于二人对抗性游戏的一种,由于用具简单,趣味性强,成为流行极为广泛的棋艺活动.中国象棋是中国棋文化也是中华民族的文化瑰宝. 象棋还有很多口诀,这是最 ...
- JAVA小项目之五子棋
五子棋V1.0 功能: 人人对战,人机对战(初级) 记录双方分数: 主要知识点: 二维坐标系中,各方向坐标的关系及规律. 效果图: 主框架类: package com.gxlee.wzq; /** * ...
- java小项目——抽奖系统
来了来了!这不又到考试周了吗!愁人,又得复习,复习,复习!这段时间每天都在复习线代和高数!(说是复习,说实话其实是在预习,啊哈哈哈哈哈),得有一段时间都没有学到新的知识了,代码感觉都生疏了,惆怅.博客 ...
随机推荐
- POJ 3159 Candies、
题意:n个小孩,m个比较(给你两个孩子代号a,b.然后c意味着a比b最多只能少c个糖果),问1和n之间差距最大的糖果数量. 思路:这是一个差分约束思路 不懂得:传送门, 转化一下就是一个SPFA求最短 ...
- Element-ui学习笔记3--Form表单(二)
Input输入框 Input 为受控组件,它总会显示 Vue 绑定值. 通常情况下,应当处理 input 事件,并更新组件的绑定值(或使用v-model).否则,输入框内显示的值将不会改变. 不支持 ...
- php三目运算计算三个数最大值最小值
文章地址:https://www.cnblogs.com/sandraryan/ $x = 10; $y = 45; $z = 3; //求出三个数字中最大值最小值 //先比较x y,如果x> ...
- PyCharm自定义代码块设置方法-添加-删除【详细步骤】
原文:https://blog.csdn.net/chichu261/article/details/82887108 在做项目的时候,有些代码会需要频繁的码.如果去已有的项目中去复制,又需要找很久. ...
- 【t018】派对
Time Limit: 1 second Memory Limit: 256 MB [问题描述] N头牛要去参加一场在编号为X(1≤X≤n)的牛的农场举行的派对(1≤N≤1000),有M(1≤M≤10 ...
- Roslyn 使用 WriteLinesToFile 解决参数过长无法传入
在写 Roslyn 的时候,经常需要辅助编译的工具,而这些工具需要传入一些参数,在项目很大的时候,会发现自己传入的参数比微软限制控制台可以传入的参数大很多,这时就无法传入了参数 本文告诉大家如何使用 ...
- Struts 2三种方式实现Ajax
Ajax本质上和普通的HTTP请求是一样的,只不过普通的HTTP请求是给人看的,而Ajax请求是给JS代码去用的. 所以Ajax请求的页面一般比普通的HTTP请求的响应内容还要简单,可能是一个页面的一 ...
- ZR993
ZR993 首先,这种和平方有关的,首先应当考虑根号做法 这道题目,我们可以直接暴力\(\log_{10}w + 10\)判断一个数是否能够由原数变化的到 直接\(O(\sqrt{n})\)枚举所有的 ...
- Linux 内核kobject非 缺省属性
在许多情况中, kobject 类型的 default_attrs 成员描述所有的 kobject 会拥有的属性. 但是那不是一个设计中的限制; 属性随意可以添加到和删除自 kojects. 如果你想 ...
- oracle 包 简单使用
理解PL/SQL包 简介 包(package)的主要作用是用于逻辑组合相关的PL/SQL类型 比如记录类型或者集合类型,PL/SQL游标或游标声明以及PL/SQL子程序 还可以包含任何可以在块的声明区 ...