当前位置: 首页 > 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 命令…...

从‘偏差-方差’到一行代码:用NumPy/PyTorch五步实现GAE,附PPO实战避坑点

从‘偏差-方差’到一行代码&#xff1a;用NumPy/PyTorch五步实现GAE&#xff0c;附PPO实战避坑点 强化学习中的策略优化常常面临一个核心挑战&#xff1a;如何准确评估动作的价值&#xff1f;广义优势估计&#xff08;GAE&#xff09;通过巧妙平衡偏差与方差&#xff0c;成为PP…...

STM32姿态报警器设计:MPU6050与卡尔曼滤波实战

基于STM32的姿态翻转报警器设计与实现1. 项目概述1.1 系统架构本姿态翻转报警系统采用模块化设计&#xff0c;核心架构由STM32F103RCT6微控制器作为主控单元&#xff0c;通过I2C接口连接MPU6050惯性测量单元(IMU)传感器&#xff0c;实时采集设备的三轴加速度和三轴角速度数据。…...

ES920 Arduino库深度解析:Sub-1GHz工业无线通信实战指南

1. ES920无线模块Arduino库深度解析&#xff1a;面向工业级Sub-1GHz通信的工程实践指南ES920系列是日本Echostar公司推出的高性能Sub-1GHz无线通信模块&#xff0c;涵盖FSK调制的ES920与LoRa调制的ES920LR两个子型号。该系列模块专为日本920MHz ISM频段&#xff08;920.6–928.…...

OpenClaw怎么集成?OpenClaw移动云小白6分钟搭建及使用指南【最新!】

OpenClaw怎么集成&#xff1f;OpenClaw移动云小白6分钟搭建及使用指南【最新&#xff01;】。OpenClaw怎么部署&#xff1f;本文面向零基础用户&#xff0c;完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw&#xff08;Clawdbot&#xff09;的流程&#…...

AI 模型量化精度控制与评估方法

AI模型量化精度控制与评估方法 随着人工智能技术的快速发展&#xff0c;AI模型在边缘计算、移动设备等资源受限场景中的应用日益广泛。为了在有限的计算资源下保持模型性能&#xff0c;量化技术成为关键手段。量化过程中精度的损失直接影响模型的可靠性&#xff0c;因此量化精…...

CentOS7下SSD性能调优实战:iostat与dd命令的黄金组合

CentOS7下SSD性能调优实战&#xff1a;iostat与dd命令的黄金组合 在当今数据驱动的时代&#xff0c;存储性能往往成为系统瓶颈的关键所在。对于使用CentOS7系统的运维工程师来说&#xff0c;如何充分释放SSD硬件的性能潜力&#xff0c;是一个既具挑战性又充满成就感的技术课题。…...

效率提升秘籍:用快马AI自动生成六花直装更新页面,节省开发时间

作为一名经常需要维护应用更新页面的开发者&#xff0c;我深刻体会到手动编写更新日志的繁琐。每次版本迭代&#xff0c;从整理更新内容到排版发布&#xff0c;往往要耗费大量时间。最近尝试用InsCode(快马)平台的AI功能自动生成更新页面&#xff0c;效率提升非常明显。 传统更…...

3步实现Windows系统极致优化:Win11Debloat专业指南

3步实现Windows系统极致优化&#xff1a;Win11Debloat专业指南 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本&#xff0c;用于从Windows中移除预装的无用软件&#xff0c;禁用遥测&#xff0c;从Windows搜索中移除Bing&#xff0c;以及执行各种其他更改以简化和改善…...

告别手打公式!用SimpleTex截图转LaTeX+Axmath微调+Typora排版的保姆级教程

数学公式高效处理全流程&#xff1a;从截图识别到专业排版 每次在论文或笔记中插入复杂的数学公式时&#xff0c;你是否也经历过这样的痛苦&#xff1f;反复核对LaTeX代码中的每个括号&#xff0c;调整上下标位置&#xff0c;或是为了一个特殊符号翻遍文档。传统的手动输入方式…...

中兴光猫配置解密工具:轻松破解网络限制,完全掌控家庭网络

中兴光猫配置解密工具&#xff1a;轻松破解网络限制&#xff0c;完全掌控家庭网络 【免费下载链接】ZET-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/ze/ZET-Optical-Network-Terminal-Decoder 你是否遇到过想要修改光猫设置却找不到入…...