欢迎光临
我们一直在努力

Java版的扫雷游戏源码

package com.xz.sl; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.GridLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; public class Saolei extends JFrame{ final int ROW = 20; final int COL = 20; final int LEI = 30; JButton[][] buttons = new JButton[ROW][COL]; int[][] counts = new int[ROW][COL]; final int LCODE = 11; //雷的编码  Container container = new Container(); public Saolei() { init(); } private void init() { JButton restBtn = new JButton("重来"); restBtn.setOpaque(true); restBtn.setBackground(Color.PINK); restBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { for(int i=0;i<ROW;i++) { for(int j=0;j<COL;j++) { buttons[i][j].setText(""); buttons[i][j].setEnabled(true); buttons[i][j].setBackground(Color.YELLOW); counts[i][j] = 0; } } mailei(); jslsl(); } }); setLayout(new BorderLayout()); add(restBtn,BorderLayout.NORTH); add(container,BorderLayout.CENTER); container.setLayout(new GridLayout(ROW,COL)); for(int i=0;i<ROW;i++) { for(int j=0;j<COL;j++) { JButton button = new JButton(); button.setMargin(new Insets(0, 0, 0, 0)); button.setBackground(Color.YELLOW); button.setOpaque(true); buttons[i][j] = button; button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JButton button = (JButton) e.getSource(); if(button.equals(restBtn)) { }else { int count = 0; for(int i=0;i<ROW;i++) { for(int j=0;j<COL;j++) { if(button.equals(buttons[i][j])) { count = counts[i][j]; //踩到雷了 if(count == LEI) { clcl(); }else { openCell(i,j); checkWin(); } return; } } } } } private void checkWin() { for(int i=0;i<ROW;i++) { for(int j=0;j<COL;j++) { //说明还没有赢 if(buttons[i][j].isEnabled() == true && counts[i][j] != LEI) { return; } } } JOptionPane.showMessageDialog(container, "恭喜您赢了..."); } private void openCell(int i,int j ) { //如果格子已经打开,直接返回 if(buttons[i][j].isEnabled() == false) { return ; } buttons[i][j].setText(counts[i][j]+""); buttons[i][j].setEnabled(false); buttons[i][j].setBackground(Color.CYAN); if(counts[i][j] == 0) { //左上角 if(i > 0 && j > 0 && counts[i-1][j-1] != LEI) { openCell(i-1, j-1); } if(i > 0 && j > 0 && counts[i-1][j] != LEI) { openCell(i-1, j); } if(i > 0 && j < 19 && counts[i-1][j+1] != LEI) { openCell(i-1, j+1); } if(i > 0 && j > 0 && counts[i][j-1] != LEI) { openCell(i, j-1); } if(i > 0 && j < 19 && counts[i][j+1] != LEI) { openCell(i, j+1); } if(i < 19 && j > 0 && counts[i+1][j-1] != LEI) { openCell(i+1, j-1); } if(i < 19 && j > 0 && counts[i+1][j] != LEI) { openCell(i+1, j); } if(i < 19 && j < 19 && counts[i+1][j+1] != LEI) { openCell(i+1, j+1); } }else { buttons[i][j].setText(counts[i][j]+""); } } }); container.add(button); } } mailei(); //计算周边的雷的数量  jslsl(); setVisible(true); setTitle("扫雷游戏"); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(600,700); } private void jslsl() { for(int i=0;i<ROW;i++) { for(int j=0;j<COL;j++) { int count = 0; if(counts[i][j] == LEI) { continue; } //左上角 if(i > 0 && j > 0 && counts[i-1][j-1] == LEI) { count++; } if(i > 0 && j > 0 && counts[i-1][j] == LEI) { count++; } if(i > 0 && j < 19 && counts[i-1][j+1] == LEI) { count++; } if(i > 0 && j > 0 && counts[i][j-1] == LEI) { count++; } if(i > 0 && j < 19 && counts[i][j+1] == LEI) { count++; } if(i < 19 && j > 0 && counts[i+1][j-1] == LEI) { count++; } if(i < 19 && j > 0 && counts[i+1][j] == LEI) { count++; } if(i < 19 && j < 19 && counts[i+1][j+1] == LEI) { count++; } counts[i][j] = count; // buttons[i][j].setText(counts[i][j]+" ");  } } } private void clcl() { for(int i=0;i<ROW;i++) { for(int j=0;j<COL;j++) { int c = counts[i][j]; if(c == LEI) { buttons[i][j].setText("X"); buttons[i][j].setBackground(Color.RED); buttons[i][j].setEnabled(false); }else { buttons[i][j].setText(c+""); buttons[i][j].setEnabled(false); } } } } private void mailei() { Random random = new Random(); int randRow,randCol; for(int i=0;i<LEI;i++) { randRow = random.nextInt(ROW); randCol = random.nextInt(COL); if(counts[randRow][randCol] == LEI) { i--; }else { counts[randRow][randCol] = LEI; // buttons[randRow][randCol].setText(LEI+"");  } } } public static void main(String[] args) { new Saolei(); } }

以上代码纯属练习用,没有经过任何的封装,有兴趣的小伙伴可以自行封装一下哦。

  • 海报
海报图正在生成中...
赞(1) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《Java版的扫雷游戏源码》
文章链接:https://www.456zj.com/40950.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址