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小项目——抽奖系统
来了来了!这不又到考试周了吗!愁人,又得复习,复习,复习!这段时间每天都在复习线代和高数!(说是复习,说实话其实是在预习,啊哈哈哈哈哈),得有一段时间都没有学到新的知识了,代码感觉都生疏了,惆怅.博客 ...
随机推荐
- 2、Dapper的使用
1.表结构介绍: 1)课程表 2)成绩表 3)学生表 2.获取数据库连接的工厂类 需要添加System.Configuration和MySql.Data.MySqlClient引用 namespac ...
- H3C ISDN网络构成
- Laravel 中 validation 验证 返回中文提示 全局设置
<?php return [ /* |-------------------------------------------------------------------------- | V ...
- C#的选择语句
一.选择语句 if,else if是如果的意思,else是另外的意思,if'后面跟()括号内为判断条件,如果符合条件则进入if语句执行命令.如果不符合则不进入if语句.else后不用加条件,但是必须与 ...
- iptables [match] 常用封包匹配参数
参数 -p, --protocol 范例 iptables -A INPUT -p tcp 说明 匹配通讯协议类型是否相符,可以使用 ! 运算符进行反向匹配,例如: -p !tcp 意思是指除 tcp ...
- Codeforces Round #188 (Div. 1 + Div. 2)
A. Even Odds 奇数个数\(\lfloor \frac{n+1}{2}\rfloor\) B. Strings of Power 从位置0开始,统计heavy个数,若当前为metal,则可以 ...
- HDU 1326
题意:给出一堆高度不一的砖头,现在使他们高度一样,问最少的移动次数,(每减少1就是移动一次) 思路:求出平均高度,然后模拟最后平均高度的数组,也就是说,每个数组对应每一个平均高度,也就是说比平均高度大 ...
- netstat 显示当前网络连接的统计信息
C:\Users\Administrator\Desktop\hsqldb-2.3.2\data>netstat -h Displays protocol statistics and curr ...
- html设置<input type="text">内的内容自动为大写
添加css样式:text-transform:uppercase;可以实现自动转换为大写样式. 但是input 的value还是小写的,因为它是CSS样式. <input type=" ...
- Python--day36--操作系统的作用;多道技术;