Android Studio实现连连看小游戏,比比看谁过关最快~

这篇具有很好参考价值的文章主要介绍了Android Studio实现连连看小游戏,比比看谁过关最快~。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、项目概述

这是一款基于Android studio开发的连连看小游戏。主要实现的功能有:

  • 难度设置
  • 打乱重排
  • 排行榜
  • 计时器
  • 背景音乐
  • 消除音效

二、主要技术

主要应用的技术如下:

Fragment碎片 Service服务 Menu菜单 自定义view Java反射
handler消息机制 BroadcastReceiver 多线程 SQLiteOpenHelper SharedPreferences
Bitmap ViewPager MediaPlayer Dialog ListView

本项目几乎涵盖了Android入门级的所有知识点,适合新手练手实践。

三、开发环境

开发环境依旧是在4.2.1上进行开发的,只要你的AS是近两年从官网下载的,都是可以满足的。

Android Studio实现连连看小游戏,比比看谁过关最快~

四、详细设计

1、数据库

创建了一张users表来存储排行榜的数据,建表语句如下:

db.execSQL("create table users (id integer primary key,name varchar(50),time varchar(50),date varchar(50))");

与以往的数据库帮助类不同,这次并没有提前创建好数据库和表,而是在类中调用构造函数进行创建,创建之后会自动执行建表语句。因为要加上表头,所以我们在建表之后率先插入一条数据作为表头。

myDBHelper = new DataBaseHelper(this,"ranking",null,1);
db = myDBHelper.getWritableDatabase();
Cursor cursor = db.query("users", null, null, null, null, null, "time");
mData = new LinkedList<>();
mData.add(new Ranking("名次","昵称","用时(s)","上榜时间"));

游戏所有的配置采用键值对形式存储——“背景音乐”:“开”。所以使用SharedPreferences,通过读取key的value判断是否关闭音乐/音效。

sp = this.getSharedPreferences("config",MODE_PRIVATE);
if(sp.getBoolean("music",true)) {
    mp.start();
}
if(!sp.getBoolean("sound",true)) {
    sound = false;
}

2、排行榜

首先肯定创建排行榜的实体类,其实就是数据表的结构。类的属性、构造函数、get和set方法。

public class Ranking {
    private String id;
    private String name;
    private String time;
    private String date;

    public Ranking(String id, String name, String time, String date) {
        this.id = id;
        this.name = name;
        this.time = time;
        this.date = date;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }
}

因为要在列表中显示排行榜,所以需要自定义适配器。然后获取数据源,创建适配器,加载适配器即可。这部分内容属于老生常谈了,就当复习一下。

/* 排行榜列表的适配器 */
public class RankingAdapter extends BaseAdapter {
    private LinkedList<Ranking> mData;
    private Context mContext;

    public RankingAdapter(LinkedList<Ranking> mData, Context mContext) {
        this.mData = mData;
        this.mContext = mContext;
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = LayoutInflater.from(mContext).inflate(R.layout.ranking_item,null);
        TextView uid = convertView.findViewById(R.id.uid);
        TextView uname = convertView.findViewById(R.id.uname);
        TextView utime = convertView.findViewById(R.id.utime);
        TextView udate = convertView.findViewById(R.id.udate);
        uid.setText(mData.get(position).getId());
        uname.setText(mData.get(position).getName());
        utime.setText(mData.get(position).getTime());
        udate.setText(mData.get(position).getDate());
        return convertView;
    }
}

3、游戏实现

因为连连看游戏是消除一个个小方块,所以最基本的游戏单元就是方块类。每个方块有哪些属性呢?首先方块上面有图片,有自己在屏幕上的左上角坐标(x,y),以及在二维数组中的一维和二维索引值。有哪些方法呢?首先必须能够判断两个Piece上的图片是否相同,不然无法进入消除判断,然后获取方块中心点坐标,用于画图。

/* 方块对象 */
public class Piece {
    /**
     * 保存方块对象的所对应的图片
     */
    private PieceImage pieceImage;
    /**
     * 该方块的左上角的x坐标
     */
    private int beginX;
    /**
     * 该方块的左上角的y座标
     */
    private int beginY;
    /**
     * 该对象在Piece[][]数组中第一维的索引值
     */
    private int indexX;
    /**
     * 该对象在Piece[][]数组中第二维的索引值
     */
    private int indexY;

    /**
     * 设置该Piece对象在数组中的索引值
     *
     * @param indexX
     *            该方块的左上角的x坐标
     * @param indexY
     *            该方块的左上角的y座标
     */
    public Piece(int indexX, int indexY) {
        this.indexX = indexX;
        this.indexY = indexY;
    }

    /**
     * 获取该Piece的中心位置
     *
     * @return 中心点的坐标对象Point
     */
    public Point getCenter() {
        return new Point(getBeginX() + GameConf.PIECE_WIDTH / 2, getBeginY() + GameConf.PIECE_HEIGHT / 2);
    }

    /**
     * 判断两个Piece上的图片是否相同
     *
     * @param otherPieceImage
     *            另外的一个Piece对象
     * @return 是否相同
     */
    public boolean isSameImage(Piece otherPieceImage) {
        if (pieceImage == null) {
            if (otherPieceImage.pieceImage != null)
                return false;
        }
        // 当两个Piece封装图片资源ID相同时,即可认为这两个Piece上的图片相同。
        return pieceImage.getImageId() == otherPieceImage.pieceImage
                .getImageId();
    }

    /**
     * @return 该方块的左上角的X坐标
     */
    public int getBeginX() {
        return beginX;
    }

    /**
     * 设置该方块的左上角的X坐标
     *
     * @param beginX
     */
    public void setBeginX(int beginX) {
        this.beginX = beginX;
    }

    /**
     * @return 该方块的左上角的Y座标
     */
    public int getBeginY() {
        return beginY;
    }

    /**
     * 设置该方块的左上角的Y坐标
     *
     * @param beginY
     */
    public void setBeginY(int beginY) {
        this.beginY = beginY;
    }

    /**
     * @return 该对象在Piece[][]数组中第一维的索引值
     */
    public int getIndexX() {
        return indexX;
    }

    /**
     * 设置该对象在Piece[][]数组中第一维的索引值
     *
     * @param indexX
     */
    public void setIndexX(int indexX) {
        this.indexX = indexX;
    }

    /**
     * @return 该对象在Piece[][]数组中第二维的索引值
     */
    public int getIndexY() {
        return indexY;
    }

    /**
     * 设置该对象在Piece[][]数组中第二维的索引值
     *
     * @param indexY
     */
    public void setIndexY(int indexY) {
        this.indexY = indexY;
    }

    /**
     * @return 保存方块对象的所对应的图片
     */
    public PieceImage getPieceImage() {
        return pieceImage;
    }

    /**
     * 设置保存方块对象的所对应的图片
     *
     * @param pieceImage
     */
    public void setPieceImage(PieceImage pieceImage) {
        this.pieceImage = pieceImage;
    }
}

方块图片很简洁,两个属性分别是image位图和image的id。

 /**
  * 图片
  */
 private Bitmap image;
 /**
  * 图片资源ID
  */
 private int imageId;

做完这些后,我们就可以将方块放入到我们的屏幕中了,这时候定义个平板类,每次打乱方块。

protected List<Piece> createPieces(GameConf config, Piece[][] pieces) {
    List<Piece> notNullPieces = new ArrayList<Piece>();
    for (int i = 0; i < pieces.length; i++) {
        for (int j = 0; j < pieces[i].length; j++) {
            Piece piece = new Piece(i, j);
            notNullPieces.add(piece);
        }
    }
    return notNullPieces;
}

我们创建了一个类用来保存连接点,方法直接调用。

private List<Point> points = new ArrayList<Point>();

获取到所有连接点后,开始在画布上画线,这样就有了动画效果。

private void drawLine(LinkInfo linkInfo, Canvas canvas) {
      // 获取LinkInfo中封装的所有连接点
      List<Point> points = linkInfo.getLinkPoints();
      // 依次遍历linkInfo中的每个连接点
      for (int i = 0; i < points.size() - 1; i++) {
          // 获取当前连接点与下一个连接点
          Point currentPoint = points.get(i);
          Point nextPoint = points.get(i + 1);
          // 绘制连线
          canvas.drawLine(currentPoint.x, currentPoint.y, nextPoint.x,
                  nextPoint.y, this.paint);
      }
  }

最后在主碎片上面设置游戏中的逻辑,篇幅比较长,代码也比较简单,大家可以直接阅读源码学习。

// 初始化游戏失败的对话框
lostDialog = createDialog("GAME OVER", "游戏失败!请重新开始", R.drawable.lost)
       .setPositiveButton("确定", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int which) {
               startGame(0);
           }
       });
// 初始化游戏胜利的对话框
successDialog = createDialog("Success", "你真厉害!请输入你的大名!",
       R.drawable.success).setView(et).setPositiveButton("确定",
       new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int which) {
               String input = et.getText().toString();
               myDBHelper = new DataBaseHelper(getContext(),"ranking",null,1);
               db = myDBHelper.getWritableDatabase();
               Time t=new Time();
               t.setToNow();
               int year = t.year;
               int month = t.month+1;
               int day = t.monthDay;
               String date = year+"/"+month+"/"+day;
               ContentValues cv = new ContentValues();
               cv.put("name",input);
               cv.put("time",String.valueOf(gameTime));
               cv.put("date",date);
               db.insert("users",null,cv);
               Intent intent = new Intent();
               intent.setAction("top.ysccx.broadcast");
               intent.putExtra("name",input);
               intent.putExtra("time",String.valueOf(gameTime));
               getActivity().sendBroadcast(intent);
               startActivity(new Intent(getActivity(),RankingActivity.class));
           }
       });
}

五、运行演示

1、Build项目,运行到模拟器中,可以看到默认碎片显示游戏界面,底部导航栏和顶部菜单栏。

Android Studio实现连连看小游戏,比比看谁过关最快~

2、我们点击右上角的下拉菜单,有难度、排行榜、打乱重排、重新开始和退出五个选项。

Android Studio实现连连看小游戏,比比看谁过关最快~

3、在难度菜单项中还有子菜单,从简单和地狱的难度,满足你的一切渴望。

Android Studio实现连连看小游戏,比比看谁过关最快~

4、我们先选择简单难度,然后点击Play,游戏开始,方块随机排列在屏幕上,底部是计时。

Android Studio实现连连看小游戏,比比看谁过关最快~

5、然后进行消除,消除时候有背景音乐和音效,消除会有动画。

Android Studio实现连连看小游戏,比比看谁过关最快~

6、消除成功后弹出对话框,输入昵称用来排行。

Android Studio实现连连看小游戏,比比看谁过关最快~

7、输入昵称可以自动跳转到排行榜,也可以点击菜单栏查看排行榜。

Android Studio实现连连看小游戏,比比看谁过关最快~

8、如果消除时候遇到死局,可以在菜单栏选择【打乱重排】,然后就会随机打乱剩余的方块。

Android Studio实现连连看小游戏,比比看谁过关最快~

9、玩的不满意了就重新开始,也都没有问题的。

Android Studio实现连连看小游戏,比比看谁过关最快~
10、我们点击导航栏的说明,可以看到游戏说明,原来是周杰伦制作的游戏啊(因为我非常喜欢周杰伦)。

Android Studio实现连连看小游戏,比比看谁过关最快~

11、在设置导航栏中可以选择打开音乐或者音效。

Android Studio实现连连看小游戏,比比看谁过关最快~

六、源码获取

关注公众号《萌新加油站》,后台回复:连连看

点此直接下载源码:👉Android Studio实现连连看小游戏文章来源地址https://www.toymoban.com/news/detail-402384.html


🚀这有你错过的精彩内容🚀
Android Studio实现考试管理系统
Android Studio实现记账本App
Android Studio实现贪吃蛇小游戏
Android Studio实现文艺阅读App
Android Studio实现多功能日记本

到了这里,关于Android Studio实现连连看小游戏,比比看谁过关最快~的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android实训1_动物连连看游戏界面制作_线性布局

    实训1  动物连连看游戏界面制作 【实训名称】 动物连连看游戏界面制作 【实训效果】 【实训目的】 掌握Android中线性布局的使用 【实训素材】 drawable-hdpi文件夹: 【实训素材CSDN资源链接】 https://download.csdn.net/download/xiaohui_student/88351533?spm=1001.2014.3001.5503 【准备工作】 创建

    2024年02月08日
    浏览(30)
  • 基于Java的连连看游戏设计与实现

    目录 一、连连看开发背景 二、Java游戏开发 1.现状 2.Java日益趋向成熟 3.Java在网络方面的良好表现 4.游戏速度 三、连连看开发环境 四、技术介绍 Java swing 五、连连看所用画图方法 1.简介 2.描述 3.方法 注意: 六、连连看游戏设计 1.功能模块 2.玩家面向游戏体验 七、连连看游戏

    2024年02月04日
    浏览(33)
  • 六一儿童节-王者连连看

    庆祝六一 用java实现的连连看练手小游戏    王者连连看 游戏的目标是通过消除相同的图案来得分并进入更高级别的挑战。   游戏分为四个难度   可以自由选择也可以依次闯关。   每次时间倒计时100秒 ,你需要在有效时间内连完所有的即为过关。   ps:图片用的王

    2024年02月09日
    浏览(27)
  • 【开发Log】C++QT连连看

    开发的初衷是闲来无事开了把宠物连连看,然后发现打了几遍第一关都过不去,于是想自己写个,这样就可以任意使用提示次数了(bushi。其实今天正好是老妈生日,问了下老妈她竟然还玩连连看,还ak了orz。于是乎,想写个上强度版给老妈作生日礼物2333 昨天出去玩了,今天

    2023年04月27日
    浏览(29)
  • Python 一步一步教你用pyglet制作“彩色方块连连看”游戏

    目录 彩色方块连连看 第一步 第二步 第三步 第四步 第五步 第六步 第七步 动态效果展示 小结 本篇除了介绍怎样用pyglet制作连连看游戏,还将介绍如果使用自定义库colorlib,用它来描绘游戏中多种颜色的彩色方块。自定义库colorlib的由来,另请阅读《python 教你如何创建一个自

    2024年04月08日
    浏览(42)
  • Python 一步一步教你用pyglet制作“彩色方块连连看”游戏(续)

    上期讲到相同的色块连接,链接见: Python 一步一步教你用pyglet制作“彩色方块连连看”游戏-CSDN博客 续上期,接下来要实现相邻方块的连线: 首先来进一步扩展 行列的类: class RC:     def __init__(self, r=0, c=0):         self.r, self.c = r, c     def __repr__(self):         return f\\\'Rc

    2024年04月08日
    浏览(46)
  • Android Studio实现贪吃蛇小游戏

    贪吃蛇是一款经典的街机游戏,不仅在电子游戏史上占有一席之地,也在很多人的童年回忆中留下了深刻的印象。在游戏中,玩家需要操纵一条蛇通过吃食物来增加自己的长度,同时要避免撞到墙或自己的身体。随着蛇不断吃食物,它的身体会越来越长,游戏的难度也会随之

    2024年02月05日
    浏览(32)
  • Android Studio实现钢琴块小游戏

    钢琴块(别踩白块)是一款非常受欢迎的益智游戏,游戏的玩法很简单。游戏界面由多行黑白相间的方块组成,玩家需要尽量不要踩到白色方块,只能踩黑色方块。游戏开始后,方块会从屏幕的顶部往下移动,玩家需要及时点击黑色方块,使其消失。如果玩家点击到白色方块

    2024年02月04日
    浏览(30)
  • Android Studio实现五子棋小游戏

    五子棋是一种两人对弈的策略型棋类游戏,本次五子棋小游戏具有人机对战和人人对战两种玩法。人机对战可以单人挑战AI,实时记录比赛得分,AI是根据棋盘上每个点的得分进行决策,人人对战采用轮流下棋方式进行对决,下棋过程中会记录当前棋子的颜色。可以在下棋过程

    2024年02月08日
    浏览(32)
  • 【Android Studio】图形化数字游戏,小游戏2048。

    手机中的小游戏是一种在日常生活中应用广泛的休闲软件,无论是在超市商店,还是在办公室,或是家庭都有着它的身影。随着移动互联网和智能手机的不断发展和进步,当今市场上已经出现了多种简单轻松的小游戏,几乎每一位智能手机的使用者都会在种类繁多的App网站上

    2024年02月03日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包