Android Studio实现一笔画完小游戏

文章目录

  • 一、项目概述
  • 二、开发环境
  • 三、详细设计
    • 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来处理与网格相关的操作。

    @Overridepublic void passed(Bean_Road road) {if(road==null) return;if(!firstPassed){firstPassed=true;getMySql().insertPassedYibi(road);ViewUtil.getAskDialog( "","恭喜通过",new OtherUtil.OnCallBackListenerImpl<Boolean>(){@Overridepublic 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。实现了一个关卡详细信息的界面,其中包括关卡提示信息、返回按钮和用于显示关卡详细信息的列表视图。在视图初始化时,根据传递的参数设置相关视图的内容和适配器。同时,提供了处理新参数和返回结果的方法。

    @Overridepublic 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.rhkb.cn/news/127373.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一种基于注意机制的快速、鲁棒的混合气体识别和浓度检测算法,配备了具有双损失函数的递归神经网络

A fast and robust mixture gases identification and concentration detection algorithm based on attention mechanism equipped recurrent neural network with double loss function 摘要 提出一个由注意力机制组成的电子鼻系统。首先采用端到端的编码器译码器&#xff…

树莓派入门

目录 前言系统烧录使用官方烧录工具选择操作系统选择存储卡配置 Win32DiskImager 有屏幕树莓派开机树莓派关机无屏幕树莓派开机获取树莓派IP地址通过路由器获取共享网络方式获取给树莓派配置静态IP地址查找默认网关分盘给树莓派的IP地址修改树莓派DHCP配置文件 ssh登录 让树莓派…

C# PSO 粒子群优化算法 遗传算法 随机算法 求解复杂方程的最大、最小值

复杂方程可以自己定义&#xff0c;以下是看别人的题目&#xff0c;然后自己来做 以下是计算结果 private void GetMinResult(out double resultX1, out double min){double x1, result;Random random1 new Random(DateTime.Now.Millisecond* DateTime.Now.Second);min 99999…

数字城市:科技革命下的未来之城

随着科技的不断进步&#xff0c;数字城市已经成为了未来城市发展的关键趋势。数字城市是指利用先进的信息技术、互联网和大数据等工具&#xff0c;将城市各个方面进行数字化、智能化、互联化的发展模式。它不仅仅是一种技术&#xff0c;更是一种对城市管理、发展和居民生活方式…

局域网ntp服务器设置(windows时间同步服务器NetTime)(ubuntu systemd-timesyncd ntp客户端)123端口、ntp校时

文章目录 背景windows如何配置ntp服务器手动配置配置参数AnnounceFlags和Enabled含义 使用软件配置&#xff08;NetTime&#xff09;实操相关疑问&#xff1a;0.nettime.pool.ntp.org是什么&#xff1f; 注意事项请务必检查windows主机123端口是否已被占用&#xff0c;方法请参…

B站:AB Test 知识全解

AB Test的实质&#xff1a;假设检验&#xff0c;主要有以下几个步骤&#xff1a; 1、在实验开始前&#xff0c;找产品、项目经理等确认&#xff1a;实验需要验证的改动点&#xff08;一次只能看一个&#xff01;&#xff01;&#xff01;&#xff09; 2、数据分析师设计需要去观…

C++ 多态

引例&#xff1a; #include<iostream> using namespace std; class Animal { public:void speak(){cout<<"动物在说话"<<endl;} }; class Cat:public Animal { public:void speak(){cout<<"小猫在说话"<<endl;} }; void Do…

Java事件机制简介 内含面试题

面试题分享 云数据解决事务回滚问题 点我直达 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java、python面试题 项目实战:AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮…

用go实现一个循环队列

目录 队列数组队列的“假溢出”现象循环队列三种判断队列空和满的方法无下标&#xff08;链式&#xff09;有下标&#xff08;顺序&#xff09;长度标记 go用顺序表实现一个循环队列队列的链式存储结构 队列 队列&#xff08;queue&#xff09;是只允许在一端进行插入操作&…

TSN时间敏感网络

目录 时间敏感网络介绍 子协议介绍 时间同步 IEEE802.1AS 调度和流量整形 IEEE802.1Q IEEE802.1Qbv IEEE802.1cr IEEE802.1Qbu IEEE802.1Qch IEEE802.1Qav IEEE802.1Qcc 纠错机制与安全 IEEE802.1Qci IEEE802.1CB IEEE802.1Qca 参考 时间敏感网络介绍 TSN(Tim…

【技术分享】RK Android11系统SD卡启动方法

本文基于Purple Pi OH 3566主板&#xff0c;介绍Android11源码的修改&#xff0c;获得可从SD卡启动的Android11系统镜像。 Purple Pi OH作为一款兼容树莓派的开源主板&#xff0c;采用瑞芯微RK3566 (Cortex-A55) 四核64位超强CPU,主频最高达1.8 GHz,算力高达1Tops&#xff0c;…

C#,数值计算——多项式微分(Binomial Deviates)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 二项式偏差 /// Binomial Deviates /// </summary> public class Binomialdev : Ran { private double pp { get; set; } private double p…

docker 安装 Node-RED

Node-RED 是构建物联网应用程序的一个强大工具&#xff0c;使用可视化编程方法&#xff0c;连接起来执行任务。而homeassistant是家居智慧中枢&#xff0c;本文介绍如何安装Node-RED及HASS的插件 1、拉取镜像 docker pull nodered/node-red # 2、部署镜像 创建目录 mkidr -…

状态管理Pinia

Vue3 状态管理 - Pinia 1. 什么是Pinia Pinia 是 Vue 的专属的最新状态管理库 &#xff0c;是 Vuex 状态管理工具的替代品 2. 手动添加Pinia到Vue项目 后面在实际开发项目的时候&#xff0c;Pinia可以在项目创建时自动添加&#xff0c;现在我们初次学习&#xff0c;从零开始…

D. Choosing Capital for Treeland

Problem - 219D - Codeforces 问题描述&#xff1a;Treeland国有 n 个城市, 这 n 个城市连接成了一棵树, 靠单向道路相连, 现在政府想要选择一个城市作为首都, 条件是首都必须能到达其他所有城市, 现在我们不得不将一些道路反转方向, 记反转的条数为 k 条, 我们要找到所有使 k…

DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION (论文解析)

DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION 摘要1 介绍2 相关工作3 重新审视 Transformers 和 DETR4 方法4.1 用于端到端目标检测的可变形transformer4.2 Deformable Detr的其他改进和变型5 实验5.1 和DETR 比较5.2 消融实验5.3 与最先进方法的…

构建知识库:一文解决跨平台科研文献及笔记同步问题

文章目录 需求及目标现有方案调研文献管理方案云存储方案Markdown编辑器Windows端Ipad端 图床管理方案 最终方案操作流程最后 作为一个十级懒人&#xff0c;要么躺着要么在探寻提效工具的路上。 开始打工生涯之后&#xff0c;除了正常工作时间&#xff0c;总想利用业余时间提升…

vscode调试程序设置

主要设置和json内容如下&#xff1a; cpp_properties.json内容&#xff1a; {"configurations": [ //C intellisense插件需要这个文件&#xff0c;主要是用于函数变量等符号的只能解析{"name": "Win32","includePath": ["${work…

【IC设计】Chisel开发环境搭建

首先安装一个Ubuntu的虚拟机 然后给Ubuntu换个镜像&#xff0c;方便下载 注意换源后使用apt-get update更新下 安装vim&#xff08;可以不做&#xff09; 这里安装Vim是我感觉Ubuntu自带的vi编辑器似乎有问题&#xff0c;因为我按i进入【插入模式】并没有提示&#xff0c;所以…

Python+Requests+Pytest+Excel+Allure 接口自动化测试项目实战【框架之间的对比】

--------UnitTest框架和PyTest框架的简单认识对比与项目实战-------- 定义&#xff1a; Unittest是Python标准库中自带的单元测试框架&#xff0c;Unittest有时候也被称为PyUnit&#xff0c;就像JUnit是Java语言的标准单元测试框架一样&#xff0c;Unittest则是Python语言的标…