Java实现扫雷,扫雷程序代码java
用Java实现简单的扫雷程序供你参考,具体内容如下
页面设置:的框架是borderlayout,要添加到外面的组件是在顶部、中部和底部添加的(左右不加)。排雷使用的布局是gridlayout,即网格布局,它与排雷界面自然吻合。
使用组件:面板、按钮、框架、标签等组件,最后将它们集中在框架中,形成一个整体。并对其进行适当的监控。监控算法实现如下。
在扫雷算法:.有三种情况要考虑,第一种是打雷的情况,第二种是空网格的情况,第三种是数字的情况。让我们逐一考虑这些情况,完成算法的设计。首先随机生成扫雷地图,地图中包含随机生成的地雷,以及地雷旁边由数字和空格组成的矩阵矩阵。之后所有的监控都是基于这个矩阵matrix。
当点为空时,调用递归算法找到其旁边的空格(周围一圈)并显示出来(这里作者只是为他换了一个颜色,即完成了显示工作,读者也可以将点击的按钮组件替换为标签),在这个方向停止显示,直到找到是数字的单元格。当点击该数字时,将显示网格。当雷霆到来时,matrix中的所有值都会显示出来,即游戏结束。
当递归算法:点击一个空白网格时,它搜索它周围的网格,当它是空的时显示它,如果它不是空的则停止这个网格上的递归算法。
参照矩阵matrix的生成:随机使用random函数随机生成一个1大小的随机数(扫雷的尺度),形成地雷的横坐标和纵坐标,加入到矩阵中,矩阵为string类型,地雷用“*”表示。根据地雷的位置,在其周围网格上的数字分别加1,形成参考矩阵。
添加算法的改进:菜单栏,实时定时器,改变扫雷游戏的尺度,代码多余(毕竟完成大于完美)。这里有一个模板给读者,读者可以参考做进一步的修改。
以下是成品的展示图和源代码:
导入Java . awt . borderlayout;导入Java . awt . color;导入Java . awt . gridlayout;导入Java . awt . event . action event;导入Java . awt . event . action listener;导入javax . swing . jbutton;导入javax . swing . jframe;导入javax . swing . jpanel;/* *扫雷*/classnewJButton扩展JButton {//创建一个新的组合jbutton类int axisxint axisynewJButton(String s,int axisx,int axisy){ super(s);this.axisx=axisxthis.axisy=axisy} public int getaxisx(){ return axisx;} public int getaxisy(){ return axisy;}}公共类Minetest实现动作监听器{//组件定义静态最终int size=10//扫雷游戏尺度int time//统计地雷数量jframe=newjframe(扫雷);JPanel panel 1=new JPanel();//timer JPanel panel 2=new JPanel();//笑脸JPanel panel 3=new JPanel();//初级扫雷newj button t;newJButton t2long program start=system . current time millis();长程序结束;String[][]matrix=new String[size][size];//扫雷信息记录矩阵newjbutton[][]buttons=newjbutton[size][size];//创建扫雷按钮矩阵int[][]tip=new int[size][size];//确定按钮是否可以显示//Prompt public void init time(){ t=newnewjbutton( in progress ,101,101);t2=new newJButton(/,102,102);panel 2 . add(t);panel 2 . add(T2);}
// 笑脸 public void initsmile() { newJButton b = new newJButton("O", 100, 100); // 将归零按键"O"的坐标设置为(100,100) b.addActionListener(this); panel1.add(b); } // 初级扫雷 public void initmine() { panel3.setLayout(new GridLayout(10, 10, 1, 1)); // panel3.setSize(250,250); for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { // button.setSize(25,25); panel3.add(buttons[i][j]); } } } // 总界面的组合 public void initcombine() { frame.setLayout(new BorderLayout()); frame.add(panel1, BorderLayout.NORTH); frame.add(panel2, BorderLayout.CENTER); frame.add(panel3, BorderLayout.SOUTH); // frame.add(panel4); } // 扫雷页面初始化 MineTest() { // 产生按钮 for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { newJButton jb = new newJButton(" ", i, j); jb.setBackground(Color.WHITE); jb.addActionListener(this); buttons[i][j] = jb; } } inittime(); initsmile(); initmine(); initcombine(); frame.setVisible(true); frame.setSize(500, 500); frame.setLocation(700, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 可以关闭 // frame.pack(); // 产生size个雷并加入到矩阵中 do { time = 0; pmatrix(); // 初始化原始矩阵 boom(); // 加入雷 for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (matrix[i][j] == "*") { time = time + 1; } } } } while (time != 10); caculate(); // 计算扫雷矩阵中的距离 // 形成改变颜色的状态矩阵 for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (matrix[i][j] == "0") { tip[i][j] = 0; } else { tip[i][j] = 1; } } } // 打印 for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { System.out.print(matrix[i][j] + " "); } System.out.println("n"); } } private void pmatrix() { // 扫雷矩阵初始化 for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { matrix[i][j] = "0"; } } } private void boom() { // 产生炸弹; int num = 0; while (num < size) { int i = (int) (Math.random() * size); int j = (int) (Math.random() * size); matrix[i][j] = "*"; num = num + 1; } } @Override public void actionPerformed(ActionEvent e) { // 按钮响应事件 newJButton temp = (newJButton) e.getSource(); if (temp.getText() == "O") { // 产生size个雷并加入到矩阵中 do { time = 0; pmatrix(); // 初始化原始矩阵 boom(); // 加入雷 for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (matrix[i][j] == "*") { time = time + 1; } } } } while (time != 10); caculate(); // 计算扫雷矩阵中的距离 // 形成改变颜色的状态矩阵 for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (matrix[i][j] == "0") { tip[i][j] = 0; } else { tip[i][j] = 1; } } } // 打印 for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { System.out.print(matrix[i][j] + " "); } System.out.println("n"); } for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { buttons[i][j].setText(" "); buttons[i][j].setBackground(Color.WHITE); } } t.setLabel("进行中"); t2.setLabel("/"); programStart = System.currentTimeMillis(); // System.out.println("smile"); } else if (matrix[temp.getaxisx()][temp.getaxisy()] == "*") { for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (matrix[i][j] != "0") { buttons[i][j].setText(matrix[i][j]); if (matrix[i][j] == "*") { buttons[i][j].setBackground(Color.RED); } } } } t.setLabel("失败"); programOver = System.currentTimeMillis(); t2.setLabel("" + (programOver - programStart) / 1000 + "s"); } else if (matrix[temp.getaxisx()][temp.getaxisy()] != "0") { buttons[temp.getaxisx()][temp.getaxisy()].setText(matrix[temp.getaxisx()][temp.getaxisy()]); buttons[temp.getaxisx()][temp.getaxisy()].setBackground(Color.gray); } else if (matrix[temp.getaxisx()][temp.getaxisy()] == "0") { digui(temp.getaxisx(), temp.getaxisy()); } } private void digui(int i, int j) { // 递归调用该函数,处理按钮是“0”的情况 if (i == 0 && j == 0) { if (tip[i][j] == 0) { buttons[i][j].setBackground(Color.gray); tip[i][j] = 1; digui(i, j + 1); digui(i + 1, j + 1); digui(i + 1, j); } else { if (matrix[i][j] == "0") { buttons[i][j].setBackground(Color.gray); tip[i][j] = 1; } else { buttons[i][j].setText(matrix[i][j]); buttons[i][j].setBackground(Color.gray); tip[i][j] = 1; } } } else if (i == 0 && j == size-1) { if (tip[i][j] == 0) { buttons[i][j].setBackground(Color.gray); tip[i][j] = 1; digui(i, j - 1); digui(i + 1, j - 1); digui(i + 1, j); } else { if (matrix[i][j] == "0") { buttons[i][j].setBackground(Color.gray); tip[i][j] = 1; } else { buttons[i][j].setText(matrix[i][j]); buttons[i][j].setBackground(Color.gray); tip[i][j] = 1; } } } else if (i == size-1 && j == 0) { if (tip[i][j] == 0) { buttons[i][j].setBackground(Color.gray); tip[i][j] = 1; digui(i, j + 1); digui(i - 1, j + 1); digui(i - 1, j); } else { if (matrix[i][j] == "0") { buttons[i][j].setBackground(Color.gray); tip[i][j] = 1; } else { buttons[i][j].setText(matrix[i][j]); buttons[i][j].setBackground(Color.gray); tip[i][j] = 1; } } } else if (i == size-1 && j == size-1) { if (tip[i][j] == 0) { buttons[i][j].setBackground(Color.gray); tip[i][j] = 1; digui(i, j - 1); digui(i - 1, j - 1); digui(i - 1, j); } else { if (matrix[i][j] == "0") { buttons[i][j].setBackground(Color.gray); tip[i][j] = 1; } else { buttons[i][j].setText(matrix[i][j]); buttons[i][j].setBackground(Color.gray); tip[i][j] = 1; } } } else if (i == 0) { if (tip[i][j] == 0) { buttons[i][j].setBackground(Color.gray); tip[i][j] = 1; digui(i, j - 1); digui(i, j + 1); digui(i + 1, j - 1); digui(i + 1, j); digui(i + 1, j + 1); } else { if (matrix[i][j] == "0
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。