Java实现消消乐中的消除功能

本文实例为大家分享了Java实现消消乐消除功能的具体代码,供大家参考,具体内容如下

有n行m列矩阵,每个位置的元素取值(1~9),同一行或者同一列中如果有三个以及三个以上的数字相同时,将改相同的数字全部消除(即改为0)

**注意:**同一个数字可能同时在某一行和某一列被消除。

解题思路:先将行中满足条件的数字消除(在新数组中消除,不改变原数组的数据。),然后将列中满足条件的数字消除(同样是在新数组中消除),最后在合并经过行消除和列消除得到的两个数组。

/**消除行中满足条件的数字*/
public static int[][] TD(int[][] sourceArray) {
  //数组行的长度;
        int hang = sourceArray.length;
        //数组列的长度;
        int lie = sourceArray[0].length;
        //定义一个新数组;为了不改变原数组的数据;
        int[][] arr = new int[hang][lie];
        for (int i = 0; i < hang; i++) {
            for (int j = 0; j < lie; j++) {
                arr[i][j] = sourceArray[i][j];
            }
        }
        //行消除:某一行中有三个及三个以上相邻,相同的数字,就将满足该条件的数字修改为0。
        for (int i = 0; i < hang; i++) {
        //注意:索引不要越界。
            for (int j = 1; j < lie-1; j++) {
                if (arr[i][j-1]==arr[i][j]&&arr[i][j+1]==arr[i][j]) {
                    arr[i][j-1]=0;
                    arr[i][j+1]=0;
                    int count = 2;
                    while((j+count<lie)&&arr[i][j+count]==arr[i][j]) {
                        arr[i][j+count]=0;
                        count++;
                    }
                    arr[i][j]=0;
                }
            }
        }
        return arr;
}
/**消除列中满足条件的数字*/
public static int[][] MD(int[][] sourceArray) {
        int hang = sourceArray.length;
        int lie = sourceArray[0].length;
        int[][] arr = new int[hang][lie];
        for (int i = 0; i < hang; i++) {
            for (int j = 0; j < lie; j++) {
                arr[i][j] = sourceArray[i][j];
            }
        }
        for (int j = 0; j < lie; j++) {
            for (int i = 1; i < hang-1; i++) {
                if (arr[i-1][j]==arr[i][j]&&arr[i+1][j]==arr[i][j]) {
                    arr[i-1][j]=0;
                    arr[i+1][j]=0;
                    int count = 2;
                    while(i+count<hang&&arr[i][j]==arr[i+count][j]) {
                        arr[i+count][j]=0;
                        count++;
                    }
                    arr[i][j]=0;
                }
            }
        }
        return arr;
}
/**将上面两次消除得到的两个数组合并*/
public static int[][] copyTDAndMD(int[][] sourceArray,int[][] td,int[][] md) {
        for (int i = 0; i < td.length; i++) {
            for (int j = 0; j < md[0].length; j++) {
            //如果两个数组(行消除和列消除得到的数组)中同一位置的元素相等,就将该元素添加到原数组中,不相等就将0添加到原数组中。
                sourceArray[i][j] = (td[i][j]==md[i][j])?td[i][j]:0;
            }
        }
        return sourceArray;
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java基于swing实现的连连看代码

    本文实例讲述了java基于swing实现连连看代码.分享给大家供大家参考. 主要功能代码如下: 复制代码 代码如下: package llkan; import javax.swing.*; import java.awt.*; import java.awt.event.*; /**  * 连连看游戏  * @author Administrator  *2014年10月17日  */ public class MainGame implements ActionListener {     

  • java连连看游戏菜单设计

    本文实例为大家分享了java连连看游戏菜单的具体实现代码,供大家参考,具体内容如下 先写GUI. 首先初始化框架,菜单,按钮,需要把菜单和按钮都添加在框架中.注意添加的顺序,首先要设置菜单,再设置框架,再设置按钮,如果交换了设置菜单和框架的顺序,会导致菜单显示不出,被框架挡住.对菜单设置了三个选项,第一个选项有五个下拉按键,用循环添加,第二个和第三个选项的下拉按键直接添加. GUI代码如下: package gui; import java.awt.Font; import javax.swin

  • Java实现连连看算法

    连连看是个经典的小游戏,规则是:两图案相同的方块在2折以内的线连接下可以消除.里面的算法还是非常有趣,今天来研究一下. 初始化棋盘 假设有一个8*8的棋盘,我们要将其扩充至10*10,为什么?因为这样外围的连接就可以不用越界了. 消除基本条件 判断是否具备消除的基本条件有 3 个 两个方块不能是同一个坐标 两个方块必须是同种类型(图案) 两个方块中不能有任何一个已经消除过的(消除过后的值用 mark 表示) // 判断是否具备消除的基本条件:两个方块不能是同一个坐标:两个方块必须是同种类型:两个

  • java仿QQ连连看游戏

    关于这个项目,真的是花了很多心思在上面,从开始构思,到最后完成,真的是花了整整一个月.大概是11月初开始学java swing的时候有的想法,然后开始构思整个思路,相关算法讨论以及调试. 最开始先对连连看基础算法进行测试,就用一般的二维数组,然后就用控制台输入两个点的坐标进行删除,这一步就调试了我整整一个星期,基础算法搞完了 终于开始设计界面了,反正也不知道那时候花了多长时间才把界面给设计好,反正还设计的特别丑(至今也如此). 功能如下: 运行程序后有背景音乐 菜单栏有:重新开始,提示,炸弹,排

  • java实现连连看游戏

    本文实例为大家分享了java实现连连看游戏的具体代码,供大家参考,具体内容如下 代码会实现共享的,这个是截图 代码: package com.lr.bean; import java.util.Scanner; import java.util.Random; import com.lr.bean.Point; public class Link{ public static void main(String[] args){ Scanner sc=new Scanner(System.in);

  • Java实现消消乐中的消除功能

    本文实例为大家分享了Java实现消消乐消除功能的具体代码,供大家参考,具体内容如下 有n行m列矩阵,每个位置的元素取值(1~9),同一行或者同一列中如果有三个以及三个以上的数字相同时,将改相同的数字全部消除(即改为0) **注意:**同一个数字可能同时在某一行和某一列被消除. 解题思路:先将行中满足条件的数字消除(在新数组中消除,不改变原数组的数据.),然后将列中满足条件的数字消除(同样是在新数组中消除),最后在合并经过行消除和列消除得到的两个数组. /**消除行中满足条件的数字*/ publi

  • java基于正则提取字符串中的数字功能【如提取短信中的验证码】

    本文实例讲述了java基于正则提取字符串中的数字功能.分享给大家供大家参考,具体如下: 使用Java正则可以很方便的从字符串中提取符合条件的内容. 1.提取字符串中所有的手机号: private void getPhoneNum(String smsBody) { Pattern pattern = Pattern.compile("(13|14|15|18)\\d{9}"); Matcher matcher = pattern.matcher(smsBody); while (mat

  • 利用PHP实现开心消消乐的算法示例

    前言 本文主要介绍了关于PHP如何实现我们大家都知道的开心消消乐的算法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.需求描述: 1.在一个8*8的矩阵方格中随机出现5种颜色的色块. 2.当有三个或以上色块在横向或纵向上相连,则消除这些色块. 3.色块消除后,上方色块往下平移,并掉下颜色随机的色块填充矩阵空缺. 4.重复2.3步骤. 5.消除3个相同色块加10分,4个加15分,5个加20分,6个加30分,7个加40分,8个加70分,9个加100分,10个加150分,再往后

  • Android开心消消乐代码实例详解

    突然想要在android上写一个消消乐的代码,在此之前没有系统地学过java的面向对象,也没有任何android相关知识,不过还是会一点C++.8月初开始搭建环境,在这上面花了相当多的时间,然后看了一些视频和电子书,对android有了一个大概的了解,感觉差不多了的时候就开始写了. 疯狂地查阅各种资料,反反复复了好几天后,也算是写出了个成品.原计划有很多地方还是可以继续写下去的,比如UI设计,比如动画特效,时间设计,关卡设计,以及与数据库的连接,如果可以的话还能写个联网功能,当然因为写到后期内心

  • Vue实现开心消消乐游戏算法

    之前做过一个算法题,算法要求就是写一个开心消消乐的逻辑算法,当时也是考虑了一段时间才做出来.后来想了想,既然核心算法都有了,能不能实现一个开心消消乐的小游戏呢,于是花了两天时间做了一个小游戏出来. 效果展示# 先在这里放一个最终实现的效果,还是一个比较初级的版本,大家有什么想法欢迎评论哦 游戏规则: 初始时会给玩家十分的初始分,每拖动一次就减一分,每消除一个方块就加一分,直到最后分数为0游戏结束 任意两个方块都可以拖动 界面设计# 页面的布局比较简单,格子的数据是一个二维数组的形式,说到这里大家

  • C/C++百行代码实现热门游戏消消乐功能的示例代码

    游戏设计 首先我们需要使用第三方框架,这里我使用的是sfml,不会使用sfml在我的上几篇文章当中-扫雷(上)有详细的开发环境搭建介绍 首先准备图片资源 一张背景图片,一张宝石图片 窗口初始化加载图片 Texture t1; t1.loadFromFile("images/bg2.png"); 当鼠标第一次单击时,记录下位置,第二次单击又记录一下位置,如果两个小方块相邻就交换位置,如果不相邻如图c的位置则,不发生变化 判断行或列如果三张一样的图片相邻,清除一下图片,进行刷新 实列 #i

  • C++语言实现开心消消乐

    本文实例为大家分享了C++实现开心消消乐的具体代码,供大家参考,具体内容如下 用C++实现的开心消消乐主要分成一个一个模块去实现的,较少代码的耦合性,在这里用了一个xiaoxiaogame类去实现,其中构造函数中对数组和变量的初始化 xiaoxiaogame(int row1, int col1); 用void display();这样一个函数实现显示,用bool isvalid(int x, int y);来判断一个坐标所在的位置能不能消除, 用bool isgameover();判断游戏有没

  • 使用python+pygame开发消消乐游戏附完整源码

    效果是这样的 ↓ ↓ ↓ 一.环境要求 windows系统,python3.6+ pip21+ 开发环境搭建地址 一起来学pygame吧 游戏开发30例(开篇词)--环境搭建+游戏效果展示 安装游戏依赖模块 pip install pygame 二.游戏简介 消消乐应该大家都玩过,或者看过.这个花里胡哨的小游戏 用python的pygame来实现,很简单. 今天带大家,用Python来实现一下这个花里胡哨的小游戏. 三.完整开发流程 1.项目主结构 首先,先整理一下项目的主结构,其实看一下主结构

  • Unity3D实现甜品消消乐游戏

    目录 前言 项目效果展示 项目概况 素材展示 场景展示 场景元素 玩法介绍 版本说明 项目源码 前言 解释: 之前用的ScreenToGif录屏,因为上传的.gif最大不超过5MB,所以做了不少删帧和色彩弱化等处理,这才导致色彩看上去不是很舒服,不要盯着它看太久,不然会有点难受... 由于使用的素材是现成的,没有花时间精力去扒,所以细节方面可能不是做的很好. 说明: 这次的甜品消消乐虽然看上去好像挺简单普通的,但是相对于之前的坦克大战,某种程度上已然提升难度了,归类到了算法类层的游戏. 拉到最后

  • 基于Python实现开心消消乐小游戏的示例代码

    目录 前言 一.准备 1.1 图片素材 1.2 音频素材 二.代码 2.1 导入模块 2.2 游戏音乐设置 2.3 制作树类 2.4 制作鼠标点击效果 2.5 制作出现元素 2.6 数组 2.7 制作人物画板 三.效果展示(仅部分) 3.1 初始页面 3.2 第一关画面 3.3 失败画面 3.4 第十关画面 穿过云朵升一级是要花6个金币的,有的时候金币真的很重要 前言 嗨喽,大家好呀!这里是魔王~ 一天晚上,天空中掉下一颗神奇的豌豆种子,正好落在了梦之森林的村长屋附近. 种子落地后吸收了池塘的水

随机推荐