热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java版的扫雷游戏源码

JButton[][]buttons=newJButton[ROW][COL];int[][]counts=newint[ROW][COL];finali

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 i++) {
for(int j=0;j 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 i++) {
for(int j=0;j 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 i++) {
for(int j=0;j 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 i++) {
for(int j=0;j 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 i++) {
for(int j=0;j 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 i++) {
for(int j=0;j 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 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();
}



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


   



推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 微信小程序导航跟随的实现方法
    本文介绍了在微信小程序中实现导航跟随的方法。通过设置导航的position属性和绑定滚动事件,可以实现页面向下滚动到导航位置时,导航固定在页面最上方;页面向上滚动到导航位置时,导航恢复到原始位置;点击导航可以平滑跳转到相应位置。代码示例也给出了具体实现方法。 ... [详细]
author-avatar
手机用户2602917255
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有