Android Studio实现一笔画完小游戏

news2024/11/24 20:08:59

文章目录

  • 一、项目概述
  • 二、开发环境
  • 三、详细设计
    • 3.1、数据库设计
    • 3.2、普通模式
    • 3.3、随机模式
    • 3.4、关卡列表
  • 四、运行演示
  • 五、项目总结
  • 六、源码获取

一、项目概述

Android一笔画完是一种益智游戏,玩家需要从起点开始通过一条连续的线,将图形中所有的方块都连接起来,而且不能重复经过已连接的线段。游戏主页有普通模式、随机模式和设置入口,普通模式包含8个大关卡,除了第1大关卡有10小关之外,其他的大关卡都有30小关,难度递增,地图丰富。

开始游戏后,可以使用左下角的显示功能,显示正确的路径,也可以使用右下角的刷新功能清除已经走不通的路径,还能直接跳过本关进入下一关。对于普通模式,已经通关的小关卡颜色会加深,与未通过的关卡区别开来。随机模式采用深度优先遍历算法和全组合算法生成地图,如果在设置中打开后台寻路,会持续生成新的地图备用。随机模式还能自定义地图的行数、列数以及障碍数,可以设置跳过已通过的,查看通关记录。在设置中打开背景音乐会给游戏增添更多趣味性。

二、开发环境

在这里插入图片描述

三、详细设计

3.1、数据库设计

MySql类是一个继承自SQLiteOpenHelper的自定义类,主要用于管理游戏中的数据存储和查询操作。通过继承SQLiteOpenHelper类,可以方便地进行数据库的创建、更新和查询等操作。在具体的游戏开发中,可以根据需要使用这些方法来实现对游戏数据的存储和读取。

    public void insertPassedYibi(Bean_Road road){
        if(checkPassedYibi(road) || road==null) return;
        ContentValues values=new ContentValues();
        values.put("rows",road.getRows());
        values.put("columns",road.getColumns());
        values.put("difficulties",road.getDifficulties());
        values.put("road",road.getRoadString());
        getReadableDatabase().insert("passedYibi",null,values);
    }

定义的构造方法用于初始化数据库的名称和版本号,并调用父类的构造方法。onCreate()方法在数据库第一次创建时调用,用于创建数据库表格。代码中创建了三个表格,分别是passedYibi、savedYibi和errorYibi。onUpgrade()方法:在数据库版本号发生变化时调用,用于更新数据库结构。代码中先删除原有的表格,然后重新调用onCreate()方法创建新的表格。

在这里插入图片描述

checkErrorYibi()方法:检查errorYibi表格中是否存在符合条件的数据记录。根据传入的参数进行查询,并返回查询结果是否存在的布尔值。insertErrorYibi()方法:向errorYibi表格中插入新的数据记录。在插入之前会先调用checkErrorYibi()方法进行重复性检查。checkPassedYibiWithRoad()方法:根据roadstring参数检查passedYibi表格中是否存在符合条件的数据记录。checkPassedYibi()方法:根据传入的Bean_Road对象检查passedYibi表格中是否存在符合条件的数据记录。insertPassedYibi()方法:向passedYibi表格中插入新的数据记录。在插入之前会先调用checkPassedYibi()方法进行重复性检查。getAllPassedYibi()方法:获取passedYibi表格中的所有数据记录,并返回Cursor对象。cleanPassedYibi()方法:清空passedYibi表格中的所有数据记录。checkSavedYibi()方法:根据传入的Bean_Road对象检查savedYibi表格中是否存在符合条件的数据记录。

3.2、普通模式

RoadFragment类是一个Fragment碎片类,用于显示游戏中普通模式的地图,主要实现了道路界面的初始化、按钮点击事件的处理、关卡和地图位置的管理,以及通过关卡和帮助功能的实现。它使用了Grid_Yibi类来显示道路的网格,并通过接口Grid_Yibi.yibiListener来处理与网格相关的操作。

    @Override
    public void passed(Bean_Road road) {
        if(road==null) return;
        if(!firstPassed){
            firstPassed=true;
            getMySql().insertPassedYibi(road);
            ViewUtil.getAskDialog( "","恭喜通过",new OtherUtil.OnCallBackListenerImpl<Boolean>(){
                @Override
                public void OnCallBackFirst(Boolean... params) {
                    goNext();
                }
            },"下一关", "算了");
        }
    }

在initView()方法中,初始化界面元素,并设置按钮的点击事件。设置返回按钮点击事件时调用onBackClick()方法,设置刷新按钮点击事件时调用grid_yibi.refreshGrid()方法,设置帮助按钮点击事件时根据ishelping标志调用grid_yibi.getHelp()方法或者grid_yibi.refreshGrid()方法,设置主页按钮点击事件时跳转到MainActivity中的IndexFragment页面。

在这里插入图片描述

在goNext()方法中,检查当前关卡和地图的位置是否有效,如果有效则进入下一关卡或下一个地图的界面。如果已经是最后一关,则显示提示信息。在checkPosition()方法中,检查当前关卡和地图的位置是否有效。如果有效,则返回true,否则显示获取地图失败的提示信息,并返回false。在getCurRoad()方法中,根据当前关卡和地图的位置获取对应的Bean_Road对象。如果位置有效,则返回该对象,否则返回null。在passed()方法中,当通过一个关卡时,会调用该方法。首次通过时,将通过的道路记录插入数据库,并显示恭喜通过的对话框。点击对话框中的下一关按钮时,调用goNext()方法进入下一关。在setIsHelping()方法中,根据传入的isHelping参数设置ishelping标志,并根据该标志设置帮助按钮的背景图片。在isHelping()方法中,返回ishelping标志的值。

3.3、随机模式

RandomRoadFragment类实现了随机模式游戏界面的初始化、状态检查和网格道路的生成。主要包含以下功能:initView() 方法用于初始化视图。首先从偏好设置中获取行数、列数、难度等参数,并进行相应的初始化操作。然后设置按钮的点击监听器,并对一些视图元素进行状态设置和事件处理。最后,根据条件进行一些异步操作,包括更新文本视图的内容和执行定时任务。最终返回 truecheckPassedView() 方法用于检查已通过的视图。根据给定的道路对象,判断该道路是否已通过,并相应地设置相关视图的可见性。onDetach() 方法在 Fragment 解除绑定时调用,用于清除动画和道路队列。onDestroyView() 方法在销毁视图时调用,用于移除定时任务。 initGirdRoad() 方法用于初始化游戏中的网格道路。首先重置一些状态变量,然后根据条件选择从数据库中获取道路数据或从队列中获取道路数据,或者直接生成新的道路数据。接着对道路进行验证和处理,并根据结果更新相关视图的显示,最后保存道路数据和相关信息。

在这里插入图片描述

3.4、关卡列表

DifficultyDetailFragment类是一个BaseFragment的子类。有三个成员变量,分别是difficultyHint(用于显示关卡提示信息的TextView)、returnButton(返回按钮的View)和recyclerView(用于显示关卡详细信息的RecyclerView。实现了一个关卡详细信息的界面,其中包括关卡提示信息、返回按钮和用于显示关卡详细信息的列表视图。在视图初始化时,根据传递的参数设置相关视图的内容和适配器。同时,提供了处理新参数和返回结果的方法。

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(data!=null&&data.getExtras()!=null) getNonNullArguments().putAll(data.getExtras());
        runOnUiThread(this::initView);
    }

getLayoutId()方法:重写了BaseFragment中的方法,用于返回布局文件的ID。initView()方法:重写了BaseFragment中的方法,用于初始化视图。首先获取当前关卡的位置position,然后设置返回按钮的点击监听器。接下来设置recyclerView的布局管理器为GridLayoutManager,并指定列数为5。然后根据position的值设置适配器,如果position在合法范围内,则使用Adapter_difficulty_detail作为适配器,否则显示提示信息。最后设置关卡提示信息的可见性为可见,并设置对应的文本内容。最终返回true表示视图初始化成功。onNewArguments()方法:重写了BaseFragment中的方法,当有新的参数传递给Fragment时调用。在该方法中调用initView()方法初始化视图,并将isLoaded标志设置为trueonActivityResult()方法:重写了BaseFragment中的方法,当Fragment的目标Activity返回结果时调用。在该方法中判断返回的IntentBundle是否为空,如果不为空,则将其中的参数添加到Fragment的参数中。然后在主线程上调用initView()方法重新初始化视图。

在这里插入图片描述

四、运行演示

Android Studio实现一笔画完小游戏

五、项目总结

享受开发过程并保持耐心和持续学习,开发一款成功的游戏需要时间和努力,但最终的成果将会令人满意。

六、源码获取

点此直接下载源码:👉Android Studio实现一笔画完小游戏


🚀这有你错过的精彩内容🚀
Android Studio实现五子棋小游戏
Android Studio实现知乎日报App
Android Studio实现贪吃蛇小游戏
Android Studio实现文艺阅读App
Android Studio实现多功能日记本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/994977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谷歌浏览器书签位置及怎么导入书签

谷歌浏览器书签位置&#xff1f; 在谷歌浏览器地址栏输入chrome://version/ 按回车键打开谷歌浏览器安装信息在显示的个人资料路径查找到Bookmarks文件&#xff0c;及为谷歌浏览器书签文件 谷歌浏览器怎么导入书签&#xff1f; 将Bookmarks加入.html后缀在书签管理器中找到右…

可观测性在灰度发布中的应用

前言 随着云计算的发展、云原生时代的来临&#xff0c;企业数字化转型进程不断深入&#xff0c;应用开发也越来越多地基于微服务化模式&#xff0c;快速迭代的能力使得应用开发更高效、更灵活。同时&#xff0c;也不得不面临应用版本快速升级所带来的的巨大挑战。 传统的发布方…

【数据结构与算法系列3】有序数组的平方 (C++ Python)

给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;平方后&#xff0c;数组变为 …

Spring框架的未来:Spring 6的新特性预览

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Matlab图像处理-自适应阈值

自适应阈值 在许多的情况下&#xff0c;背景的灰度值并不是常数&#xff0c;物体和背景的对比度在图像中也有变化。这时&#xff0c;一个在图像中某一区域效果良好的阈值在其它区域却可能效果很差。在这种情况下&#xff0c;把灰度阈值取成一个随图像中位置缓慢变化的函数值是…

深度优先搜索遍历与广度优先搜索遍历

目录 一.深度优先搜索遍历 1.深度优先遍历的方法 2.采用邻接矩阵表示图的深度优先搜索遍历 3.非连通图的遍历 二.广度优先搜索遍历 1.广度优先搜索遍历的方法 2.非连通图的广度遍历 3.广度优先搜索遍历的实现 4.按广度优先非递归遍历连通图 一.深度优先搜索遍历 1.深…

D. Matrix Cascade

Problem - D - Codeforces 思路&#xff1a;这个题就是要维护每个位置被修改了几次&#xff0c;但是一直没想到一个好的方法&#xff0c;一直在关注这个点对下面的点产生的影响&#xff0c;但是其实我们可以维护这个点能够由那几个点影响&#xff0c;其实就是一个以x,y为下顶点…

如何把glb格式模型gltf格式模型导入3dmax和C4D,U3D,UE4这些主流软件中

咱有时候去glbxz.com添加链接描述 官网下载免费glb格式模型&#xff0c;gltf模型下载时候是没有通用格式&#xff0c;例如fbx&#xff0c;obj&#xff0c;这个时候3dmax和C4D直接打开导入是不行的&#xff0c;也可以制作glb模型&#xff0c;扣扣&#xff1a;424081801 这个时候…

扫地僧万能HTML模板站群【搜狗站群单站模式内页收录】配置教程

浅测【搜狗内页收录较好】可自行进行测试对比 [测试的域名有搜狗蜘蛛&#xff0c;但是不收录] [一换程序嘎嘎乱叫] [测试的为内页收录&#xff0c;非泛站] [泛站容易被端&#xff0c;搜狗不建议泛站] 第一步配置SEO设置如图&#xff1a; 站群模式&#xff1a;单站 泛站…

网络延迟简介:为什么它重要,如何测量

1、什么是延迟呢? 延迟其实就是我们在网页浏览或者使用应用时,从我们点击请求到服务器返回结果给我们之间的时间差。就像你在跟朋友打电话,你说完话后,朋友听到并回应你所说话的时间差一样。 我们的最终目标是创建一个系统,让这个时间差变得尽可能短,也就是实现零延迟。…

使用Mybatis实现基本的增删改查------数据输出

需要和批量注入一起使用 当sql返回的实体类在java中没有的时候,可以使用map接值 开启自动事务提交openSession(true),事务在最后会进行自动提交 //3.获取Sqlsession对象[自动开启JDBC]//会自动开启事务,不会自动提交事务.但是提交事务需要sqlsession.commit()方法//openSession…

【C++】day2学习成果:引用、结构体等等。。。

1.封装一个结构体&#xff0c;结构体中包含一个私有数组&#xff0c;用来存放学生的成绩&#xff0c;包含一个私有变量&#xff0c;用来记录学生个数&#xff0c; 提供一个公有成员函数&#xff0c;void setNum(int num)用于设置学生个数 提供一个公有成员函数&#xff1a;void…

Python进阶语法之推导式

目录 目录 前言 思维导图 1.普通写法 1.1代码解读 1.2,结果展示 2.列表推导式 2.1,重要 2.2,列表推导式初步写法 2.2.1,代码解读 2.2.2,结果展示 2.3,列表表达式之条件判断式 2.3.1,代码解读 2.3.2,结果展示 2.4,进行两层for循环 2.4.1,代码解读 2.4.2,结…

【PowerQuery】Excel 的自动刷新功能-最低一分钟刷新

在Excel集成了PowerQuery之后,它提供了数据的手动刷新功能之外,也提供了数据的自动刷新功能。需要注意的是,PowerQuery提供的自动刷新功能是针对连接的,也就是说在PowerQuery自动刷新功能不是全局刷新功能,而是针对连接本身提供。接下来我们来看一下如何实现PowerQuery连接…

Python绘图——生存曲线

今天我们将一起学习如何利用Python中____lifelines包_____建模和分析生存数据并用plot_绘制生存曲线&#xff0c;以及更改其样式如标题字号大小&#xff0c;坐标轴及图例设置等&#xff0c;使用Python即可绘制出SCI论文图&#xff01;___” lifelines包 lifelines 是一个 Pyt…

猫头虎的技术笔记:Spring Boot启动报错解决方案

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

算法竞赛个人注意事项

浅浅记录一下自己在算法竞赛中的注意事项。 数据类 注意看数大小&#xff0c;数学库中的函数尽量加上 * 1.0&#xff0c;转成double&#xff0c;防止整型溢出。&#xff0c;int型相乘如果可能溢出&#xff0c;乘 * 1LL。 数据范围大于1e6&#xff0c;注意用快读。 浮点数输…

桉木建筑模板与其他常见建筑模板材料相比有什么优势?

桉木建筑模板与其他常见建筑模板材料相比具有以下优势&#xff1a; 1. 强度和稳定性&#xff1a;桉木具有较高的密度和硬度&#xff0c;使其具备出色的抗弯和抗压能力。相比于其他常见建筑模板材料如胶合板或钢模板&#xff0c;桉木建筑模板能够更好地承受施工期间的荷载和压力…

类和对象的基本概念

目录 c和c中结构体的区别 类的封装 c语言中的行为和属性封装存在的问题 c中对事物的封装——类的封装 尽量将成员变量设置为private 代码示例 c和c中结构体的区别 c语言中struct只有变量,不能存放函数&#xff0c;也就是数据&#xff08;属性&#xff09;和行为&#xf…

学信息系统项目管理师第4版系列06_项目管理概论

1. 项目基础 1.1. 项目是为创造独特的产品、服务或成果而进行的临时性工作 1.1.1. 独特的产品、服务或成果 1.1.2. 临时性工作 1.1.2.1. 项目有明确的起点和终点 1.1.2.2. 不一定意味着项目的持续时间短 1.1.2.3. 临时性是项目的特点&#xff0c;不是项目目标的特点 1.1…