Mineclearance
目的(Purpose)
With Java generic under Windows 7 bring minesweeping game
用Java仿制win7下自带游戏扫雷
打开游戏(OpentheGame)
首先会看到如下界面:
Mineclearance.png游戏规则(The rules of the game)
(本游戏没有原版的选择游戏难度功能。)扫雷就是要把所有非地雷的格子揭开从而获得胜利,踩到地雷则游戏失败。
游戏区域由81个方格组成,鼠标左键随机单击一个方格,方格即被打开并显示出方格中的数字;方格中数字则表示其周围的8个方格隐藏了几颗雷;如果点开的格子显示数字0,即其周围有0颗雷,则其周围格子自动打开;如果其周围还有0,则会引发连锁反应;在你认为有雷的格子上,点击右键即可标记雷字,再点击一次右键可把雷字变成问号;如果一个已打开格子周围所有的雷已经正确标出,则可以在此格上点击鼠标左键两次以打开其周围剩余的无雷格。这里需要注意,如果有不是雷的方格被标记了雷 ……当自动排雷过后,标记被取消,依然显示出周围雷数的数字,不会出任何问题(好吧,我承认这是个BUG),1代表1的上下左右及斜角合计有一颗雷,依次轮推,2则有2颗,3则有3颗...最后,游戏胜利和失败分别会有如下提示:
游戏胜利:
WintheMineclearance.png点击确定会重新开始游戏,点击取消则退出程序。
游戏失败:
FailMineclearance.png点击确定重新开始游戏,退出请在重新开始后单击红叉。
界面设置
private Need[] needs = new Need[82]; public static int INIT_GAME_WIDTH = 333; public static int INIT_GAME_HEIGHT = 333;
直接设定81个小方格,设定宽高都为333.
方法摘要
Random r = new Random(); Set<Integer> bigbingnumber = new HashSet<Integer>(); for(int i=0; i<10; i++) { int temp = r.nextInt(81); while(temp == 0 || bigbingnumber .contains(temp)) {// 不能为0并且不重复 temp = r.nextInt(81); } bigbingnumber.add(temp); }
随机产生十个1-81范围内不重复的数字。
if(e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2)
设定鼠标左键双击排雷的方法,在里面进行方法的判断。
public Need(Need[] needs) { this.needs = needs; }
持所有小方块的引用,方便进行操作。
public void moved(Set<Need> set)
递归,set是用来装已经翻过的小方块的,不然会死循环,为什么用set,因为set是不重复的
网友评论