当前位置: 首页 > news >正文

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实现多功能日记本

相关文章:

Android Studio实现一笔画完小游戏

文章目录 一、项目概述二、开发环境三、详细设计3.1、数据库设计3.2、普通模式3.3、随机模式3.4、关卡列表 四、运行演示五、项目总结六、源码获取 一、项目概述 Android一笔画完是一种益智游戏&#xff0c;玩家需要从起点开始通过一条连续的线&#xff0c;将图形中所有的方块…...

【Python 程序设计】数据人员入门【02/8】

一、说明 介绍如何管理 Python 依赖项和一些虚拟环境最佳实践。 以下文章是有关 Python 数据工程系列文章的一部分&#xff0c;旨在帮助数据工程师、数据科学家、数据分析师、机器学习工程师或其他刚接触 Python 的人掌握基础知识。迄今为止&#xff0c;本初学者指南包括&#…...

学习笔记——树上哈希

普通子树哈希 树上的很多东西都是转化成链上问题的&#xff0c;比如树上哈希 树上哈希&#xff0c;主要是用于树的同构这个东西上的 什么是树的同构&#xff1f; 如图&#xff0c;不考虑节点编号&#xff0c;三棵树是同构的 将树转化成链&#xff0c;一般有两种方式&#xf…...

Opencv快速入门教程,Python计算机视觉基础

快速入门 OpenCV 是 Intel 开源计算机视觉库。它由一系列 C 函数和少量 C 类构成&#xff0c; 实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV 拥有包括 300 多个 C 函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也 可以使用某些外部库。 OpenCV 对非…...

laravel 报错误信息 Carbon\Exceptions\InvalidFormatException

Carbon\Exceptions\InvalidFormatException Unexpected data found. at vendor\nesbot\carbon\src\Carbon\Traits\Creator.php:687 683▕ return $instance; 684▕ } 685▕ 686▕ if (static::isStrictModeEnabled()) { ➜ 687…...

UI自动化之混合框架

什么是混合框架&#xff0c;混合框架就是将数据驱动与关键字驱动结合在一起&#xff0c;主要用来回归业务主流程&#xff0c;将核心流程串联起来。 上一篇我们写到了关键字驱动框架&#xff0c;关键字驱动框架是针对一个业务场景的单条测试用例的。 我们以163邮箱的登录到创建…...

SQL创建用户-非DM8.2环境(达梦数据库)

DM8:达梦数据库SQL创建用户-非DM8.2环境 环境介绍 环境介绍 在没有图形化界面&#xff0c;或者想快速创建用户&#xff0c;可以使用一下SQL语句&#xff1b;将其中的 CESHI 替换为要创建的用户名即可&#xff0c;默认创建了数据表空间&#xff0c;索引表空间&#xff0c;文件大…...

Thread类中run和start的区别

答&#xff1a;调用线程类中的 start 方法&#xff0c;才开始创建并启动线程&#xff0c;而线程被回收&#xff0c;则是要执行完线程的入口方法&#xff08;对于主线程来说&#xff0c;则是要执行完 main 方法&#xff09;&#xff0c;这里要回收线程则是要将&#xff08;&…...

ElementUI浅尝辄止35:Checkbox 多选框

一组备选项中进行多选 1.如何使用&#xff1f; 单独使用可以表示两种状态之间的切换&#xff0c;写在标签中的内容为 checkbox 按钮后的介绍。 //在el-checkbox元素中定义v-model绑定变量&#xff0c;单一的checkbox中&#xff0c;默认绑定变量的值会是Boolean&#xff0c;选…...

讲讲如何用IDEA开发java项目——本文来自AI创作助手

使用IDEA开发Java项目&#xff0c;您可以按照以下步骤进行操作&#xff1a; 下载并安装IntelliJ IDEA 您可以从JetBrains官网下载并安装最新版的IntelliJ IDEA。 创建项目 启动IDEA&#xff0c;在欢迎界面中选择“Create New Project”或者在主菜单中选择“File”->“Ne…...

Kafka3.0.0版本——消费者(Range分区分配策略以及再平衡)

目录 一、Range分区分配策略原理1.1、Range分区分配策略原理的示例一1.2、Range分区分配策略原理的示例二1.3、Range分区分配策略原理的示例注意事项 二、Range 分区分配策略代码案例2.1、创建带有4个分区的fiveTopic主题2.2、创建三个消费者 组成 消费者组2.3、创建生产者2.4、…...

WeiTools

目录 1.1 WeiTools 1.2 getTime 1.3 getImageView 1.4 StringEncode 1.4.1 // TODO Auto-generated catch block WeiTools package com.shrimp.xiaoweirobot.tools;...

目标检测数据集:医学图像检测数据集(自己标注)

1.专栏介绍 ✨✨✨✨✨✨目标检测数据集✨✨✨✨✨✨ 本专栏提供各种场景的数据集,主要聚焦:工业缺陷检测数据集、小目标数据集、遥感数据集、红外小目标数据集,该专栏的数据集会在多个专栏进行验证,在多个数据集进行验证mAP涨点明显,尤其是小目标、遮挡物精度提升明显的…...

【系统设计系列】数据库

系统设计系列初衷 System Design Primer&#xff1a; 英文文档 GitHub - donnemartin/system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards. 中文版&#xff1a; https://github.com/donnemarti…...

mp4压缩视频不改变画质?跟我这样压缩视频大小

在当今数字化时代&#xff0c;视频文件变得越来越普遍&#xff0c;然而&#xff0c;这些文件通常都很大&#xff0c;给存储和传输带来了困难&#xff0c;为了解决这个问题&#xff0c;许多人都希望将视频压缩得更小&#xff0c;而又不牺牲画质&#xff0c;下面就来看看具体应该…...

AQS同步队列和等待队列的同步机制

理解AQS必须要理解同步队列和等待队列之间的同步机制&#xff0c;简单来说流程是&#xff1a; 获取锁失败的线程进入同步队列&#xff0c;成功的占用锁&#xff0c;占锁线程调用await方法进入条件等待队列&#xff0c;其他占锁线程调用signal方法&#xff0c;条件等待队列线程进…...

vue3实现无限循环滚动的方法;el-table内容无限循环滚动的实现

需求&#xff1a;vue3实现一个div内的内容无限循环滚动 方法一&#xff1a; <template><div idcontainer><div class"item" v-foritem in 5>测试内容{{{ item }}</div></div> </template><script setup> //封装一个方法…...

Windows 安装 MariaDB 数据库

之前一直使用 MySQL&#xff0c;使用 MySQL8.0 时候&#xff0c;占用内存比较大&#xff0c;储存空间好像也稍微有点大&#xff0c;看到 MariaDB 是用来代替 MySQL 的方案&#xff0c;之前用着也挺得劲&#xff0c;MySQL8.0 以上好像不能去导入低版本的 sql&#xff0c;或者需要…...

RK3568-mpp(Media Process Platform)媒体处理软件平台

第一章 MPP 介绍 1.1 概述 瑞芯微提供的媒体处理软件平台(Media Process Platform,简称 MPP)是适用于瑞芯微芯片系列的通用媒体处理软件平台。 该平台对应用软件屏蔽了芯片相关的复杂底层处理,其目的是为了屏蔽不同芯片的差异,为使用者提供统一的视频媒体处理接口(Medi…...

【ModelSim】使用终端命令行来编译、运行Verilog程序,创建脚本教程

▚ 01 ModelSim命令解说 &#x1f4e2; 这些命令是 ModelSim 中常用的命令&#xff0c;用于创建库、编译源代码和启动仿真。 &#x1f514; 在使用这些命令之前&#xff0c;你需要在 ModelSim 的命令行界面或脚本中执行 vlib 命令来创建一个库&#xff0c;然后使用 vlog 命令…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...