uni app 写的 小游戏,文字拼图?文字拼写?不知道叫啥

从下方的偏旁部首中选在1--3个组成上面文章中的文字,完成的文字标红

不喜勿喷

《满江红》 其中用到了两个文件 strdata.json  parameters.json  这两个文件太大 放到资源中了

资源文件

<template>
	<view class="wenzi_page_main">



		<view class="wenzi_main_view">
			<view v-for="(item,index) in words" :key="index">
				<text :style="{color:item.color}">{{item.name}}</text>
			</view>
		</view>

		<view class="bushou_main_view">


			<view class="mall">
				<view v-for="(item,index) in ppbslist" :key="index" class="item" :class="item.disabled ? 'disabled' :''"
					@click="move(item,index)" :id="item.id" :style="{
					width: size+'rpx',
					height: size+'rpx',
					left: item.left + 'rpx',
					top: item.top + 'rpx'
				}">
					<image :style="{
					width: (size-6)+'rpx',
					height: (size-6)+'rpx',
					borderRadius: '8rpx',
					backgroundColor: '#fff',
					border: '2rpx solid #71a419',
					borderBottom: '10rpx solid #71a419'
				}" :src="item.src"></image>
				</view>
			</view>

		</view>
		<view class="yixuan_main_view">

			<view v-for="(item,index) in select" :key="index">
				<image :src="item.src" class="item_image">
				</image>
			</view>


		</view>

		<view class="add_button_view">
			<text class="add_button" @click="spick_click"> 满江红</text>
			<text class="add_button" @click="spick_click"> 开始</text>
		</view>

	</view>
</template>

<script>
	import strdata from './strdata.json'
	import parameters from './parameters.json'

	// 以下功能库请按需使用

	export default {
		data() {
			return {
				allppbslist: [],
				ppbslist: [],
				words: [],

				strword: '怒发冲冠,凭阑处、潇潇雨歇。抬望眼,仰天长啸,壮怀激烈。三十功名尘与土,八千里路云和月。莫等闲、白了少年头,空悲切。靖康耻,犹未雪。臣子恨,何时灭。驾长车,踏破贺兰山缺。壮志饥餐胡虏肉,笑谈渴饮匈奴血。待从头、收拾旧山河,朝天阙。',

				select: [],
				isover: false,

				layerCount: 5, //绘制4层
				//行
				rows: 7,
				//列
				cols: 7,

				//卡片大小
				size: 70,

				canMove: true
			}
		},

		onLoad() {





		},
		onShow() {





		},

		onReady() {



		},
		methods: {
			move(item, index) {
				if (this.isover || item.disabled || item.click) {
					return
				}


				item.left = 800
				item.top = 10000
				item.id = item.id + '-move'
				item.click = true



				this.select.push(JSON.parse(JSON.stringify(item)))


				this.pipei()

			},

			getppbs: function(str, id) {
				let strdatas = strdata[str]
				var word = {
					isbj: false,
					id: id,
					name: str,
					childcodes: [],
					color: "#666"
				}
				if (strdatas) {
					var valuearr = strdatas[strdatas.length - 1]
					for (let j = 0; j < valuearr.length; j++) {
						word.childcodes.push(this.convertTextToUnicode(valuearr[j]))
					}
				} else {
					word.childcodes.push(this.convertTextToUnicode(str))
				}
				this.words.push(word)

			},

			convertTextToUnicode: function(text) {

				return ("" + text).charCodeAt(0).toString(16).toUpperCase().toLowerCase();

			},


			init: function() {

				var ppbslist = JSON.parse(JSON.stringify(this.allppbslist))


				this.ppbslist = this.convertToArray5x7x7(ppbslist)


				this.checkDisabled()


			},
			convertToArray5x7x7: function(flatArray) {

				const cellHtml = []
				//整理

				//第一步画表格
				//先绘制  最上面一层    然后  从顶层到底层绘制  进行行和列的 数据循环
				for (let ly = this.layerCount - 1; ly >= 0; ly--) {
					for (let i = 0; i < this.rows; i++) {
						for (let j = 0; j < this.cols; j++) {

							let pyStep = (ly + 1) % 2 === 0 ? this.size / 2 : 0 //给偏移量和不给偏移量  实现错开的效果
							//进行  图层的渲染   id 是必要的   这个定义了 第几层ly 第几行 i 第几列j  可以判断这个卡片有没有被盖住
							//最终  我们会以绝对定位的方式 进行 布局
							//整个随机数
							let item = (flatArray.pop()) //取完随机数  然后用pop  随用 随删  直到没有为止
							item && cellHtml.push({
								ly: ly,
								i: i,
								j: j,
								left: this.size * j + pyStep,
								top: this.size * i + pyStep,
								id: 'm' + ly + '-' + i + '-' + j,
								name: item.name,
								src: item.image,
								code: item.code,
								isMove: false
							})

						}
					}
				}
				console.log(cellHtml.length)
				return cellHtml.reverse()


			},



			checkDisabled() {
				this.ppbslist.forEach((v, index) => {
					const arr = v.id.substring(1).split('-').map(v => Number(v))
					const isPy = (arr[0] + 1) % 2 === 0
					for (let i = arr[0] + 1; i <= this.layerCount - 1; i++) {
						const isPyB = (i + 1) % 2 === 0
						if (isPy === isPyB) {
							let el = this.ppbslist.find(item => {
								return item.id === 'm' + i + '-' + arr[1] + '-' + arr[2]
							})
							if (el) {
								v.disabled = true
								break;
							}
						} else if (isPy && !isPyB) {
							[
								`${i}-${arr[1]}-${arr[2]}`,
								`${i}-${arr[1]}-${arr[2] + 1}`,
								`${i}-${arr[1] + 1}-${arr[2]}`,
								`${i}-${arr[1] + 1}-${arr[2] + 1}`
							].every(k => {
								let el = this.ppbslist.find(item => {
									return item.id === 'm' + k
								})
								return !el
							})
							if (![
									`${i}-${arr[1]}-${arr[2]}`,
									`${i}-${arr[1]}-${arr[2] + 1}`,
									`${i}-${arr[1] + 1}-${arr[2]}`,
									`${i}-${arr[1] + 1}-${arr[2] + 1}`
								].every(k => {
									let el = this.ppbslist.find(item => {
										return item.id === 'm' + k
									})
									return !el
								})) {
								v.disabled = true
								break;
							} else {
								v.disabled = false
							}
						} else if (!isPy && isPyB) {
							if (![
									`${i}-${arr[1]}-${arr[2]}`,
									`${i}-${arr[1]}-${arr[2] - 1}`,
									`${i}-${arr[1] - 1}-${arr[2]}`,
									`${i}-${arr[1] - 1}-${arr[2] - 1}`
								].every(k => {
									let el = this.ppbslist.find(item => {
										return item.id === 'm' + k
									})
									return !el
								})) {
								v.disabled = true
								break;
							} else {
								v.disabled = false
							}
						}
					}
				})

			},


			//将数组打乱
			shuffle: function(array) {
				if (!Array.isArray(array)) {
					return array;
				}
				for (var i = array.length - 1; i > 0; i--) {
					var j = Math.floor(Math.random() * (i + 1));
					[array[i], array[j]] = [array[j], array[i]]
				}
				return array;
			},


			spick_click: function() {


				this.isover = false
				this.allppbslist = this.shuffle(JSON.parse(JSON.stringify(parameters)))

				this.words = []
				this.select = []
				for (let i = 0; i < this.strword.length; i++) {

					this.getppbs(this.strword[i], i)

				}

				this.init()
			},







			pipei: function() {


				// 将arrayC中的code提取到一个Set中,以便快速查找
				let setC = new Set(this.select.map(item => item.code));




				for (let i = 0; i < this.words.length; i++) {

					if (!this.words[i].isbj) {
						let allChildCodesMatched = this.words[i].childcodes.every(code => setC.has(code));


						if (allChildCodesMatched) {
							this.words[i].color = "#f00"; // 如果全部匹配,将父元素的color设置为红色
							this.words[i].isbj = true

							for (let j = 0; j < this.words[i].childcodes.length; j++) {

								for (let z = 0; z < this.select.length; z++) {
									if (this.words[i].childcodes[j] == this.select[z].code) {
										this.select.splice(z, 1)
										if (this.select.length != 6) {
											this.isover = false

										}
										break

									}

								}

							}
							this.checkDisabled()
							return
						}

					}

				}

				if (this.select.length == 6) {
					this.isover = true
					uni.showToast({
						title: "结束",
						icon: "none"
					})
				} else {
					this.checkDisabled()
				}




			},




		}
	}
</script>

<style>
	.wenzi_page_main {
		background-color: #efefef;
		width: 100vw;
		height: 100vh;
	}

	.wenzi_main_view {

		margin-top: 26rpx;
		display: flex;
		flex-wrap: wrap;
		flex-direction: row;
		background: #fff;
		min-height: 32px;
		padding: 32rpx 32rpx 32rpx 32rpx;
	}

	.yixuan_main_view {
		width: 100%;
		margin-top: 26rpx;
		display: flex;
		flex-wrap: wrap;
		flex-direction: row;
		background-color: #efefef;
		min-height: 40px;
		padding: 32rpx 32rpx 32rpx 32rpx;
	}


	.item_image {
		width: 30px;
		height: 30px;
		border: 1rpx solid #efefef;
		margin: 2rpx;


	}

	.start_tv {
		width: 100vw;
		height: 80rpx;
		background-color: #fff;
		display: flex;
		justify-content: center;
		align-items: center;
		position: fixed;
		bottom: 0;
	}


	.bushou_main_view {
		display: block;
		height: 450rpx;
		width: 100vw;
		justify-content: center;
		align-items: center;
		position: relative;
		margin-top: 26rpx;
		margin-left: 100rpx;
		flex-wrap: wrap;
		flex-direction: row;
		background-color: #efefef;
		min-height: 32px;
		padding: 32rpx 32rpx 32rpx 32rpx;
	}



	.main {
		position: relative;
	}

	.item {
		position: absolute;
		color: #fff;
		display: flex;
		justify-content: center;
		align-items: center;
		border-radius: 10rpx;
		transition: left .3s, top .3s;
	}

	/* 如果被压在底下的颜色  应该是一种灰色 */
	.item:after {
		content: '';
		position: absolute;
		top: 0;
		bottom: 0;
		left: 0;
		right: 0;
		transition: background-color .3s;
	}

	/* 这个是为了   当配够  有disabled 属性的时候 就会透明掉 */
	.disabled:after {
		background-color: rgba(0, 0, 0, 0.7);
	}


	.add_button_view {
		display: flex;
		z-index: 4;
		/*row 横向  column 列表  */
		flex-direction: row;
		justify-content: center;
		align-items: center;
		text-align: center;
		height: 140rpx;
		width: 100vw;
		background: #fff;

		border-top: solid 1rpx #efefef;



		position: fixed;
		bottom: 0;

	}

	.add_button {


		flex: 1;
		height: 88rpx;
		border: solid 2rpx #07a5a6;
		color: #fff;
		background: #07a5a6;
		font-size: 32rpx;
		border-radius: 10rpx;
		align-items: center;
		justify-content: center;
		display: flex;
		margin-left: 16rpx;
		margin-right: 16rpx;
	}

	.not_add_button {

		background: #effcfb;
		flex: 1;
		height: 88rpx;
		border: solid 2rpx #07a5a6;
		color: #07a5a6;
		font-size: 32rpx;
		border-radius: 10rpx;
		align-items: center;
		justify-content: center;
		display: flex;
		margin-left: 16rpx;
		margin-right: 16rpx;
	}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【杂记】qt

1、终端下载PySide6以转换文件格式&#xff1a;pip install PySide6 -i https://pypi.tuna.tsinghua.edu.cn/simple 命令提示符下载完毕后&#xff1a;powerShell &#xff1a;cd 跳转到文件对应地址 &#xff08;1、pyside6-uic.exe test.ui -o test.py #将Ui界面文件转换成…

宁德时代2025年Verify入职测评语言理解及数字推理真题SHL题库汇总、考情分析

宁德时代社招Verify入职测评对薪酬有着重要影响&#xff0c;其规定正确率达到80%才能顺利通过测评。这体现了公司对人才专业素养与能力的严格要求&#xff0c;旨在筛选出真正符合岗位需求的优秀人才。测评内容涵盖了专业知识、技能运用、逻辑思维等多方面&#xff0c;只有综合能…

Jenkins-持续集成、交付、构建、部署、测试

Jenkins-持续集成、交付、构建、部署、测试 一: Jenkins 介绍1> Jenkins 概念2> Jenkins 目的3> Jenkins 特性4> Jenkins 作用 二&#xff1a;Jenkins 版本三&#xff1a;DevOps流程简述1> 持续集成&#xff08;Continuous Integration&#xff0c;CI&#xff0…

Flink系统知识讲解之:如何识别反压的源头

Flink系统知识之&#xff1a;如何识别反压的源头 什么是反压 Ufuk Celebi 在一篇古老但仍然准确的文章中对此做了很好的解释。如果您不熟悉这个概念&#xff0c;强烈推荐您阅读这篇文章。如果想更深入、更低层次地了解该主题以及 Flink 网络协议栈的工作原理&#xff0c;这里有…

Go学习:多重赋值与匿名变量

1. 变量的多重赋值 1.1 基本语法格式 go语言中&#xff0c;可以将多个赋值语句 合并成 一句&#xff0c;比如&#xff1a; a : 10 b : 20 c : 30//a,b,c三个变量的赋值语句可以简练成以下格式a, b, c : 10, 20, 30 1.2 交换变量值 当需要交换两个变量的值时&#…

ArkUI-应用数据持久化

应用数据持久化&#xff0c;是指应用将内存中的数据通过文件或数据库的形式保存到设备上。内存中的数据形态通常是任意的数据结构或数据对象&#xff0c;存储介质上的数据形态可能是文本、数据库、二进制文件等。 HarmonyOS标准系统支持典型的存储数据形态&#xff0c;包括用户…

SOLID原则学习,开闭原则

文章目录 1. 定义2. 开闭原则的详细解释3. 实现开闭原则的方法4. 总结 1. 定义 开闭原则&#xff08;Open-Closed Principle&#xff0c;OCP&#xff09;是面向对象设计中的五大原则&#xff08;SOLID&#xff09;之一&#xff0c;由Bertrand Meyer提出。开闭原则的核心思想是…

西电-算法分析-研究生课程复习笔记

24年秋的应该是张老师最后一次用卷面考试&#xff0c;他说以后这节课的期末考试都是在OJ上刷题了张老师上课还挺有意思的&#xff0c;上完之后能学会独立地思考算法设计问题了。整节课都在强调规模压缩这个概念&#xff0c;考试也是考个人对这些的理解&#xff0c;还挺好玩的哈…

插入实体自增主键太长,mybatis-plaus自增主键

1、问题 spring-boot整合mybtais执行insert语句时&#xff0c;主键id为长文本数据。 2、分析问题 1)数据库主键是否自增 2&#xff09;数据库主键的种子值设置的多少 3、解决问题 1&#xff09;数据库主键设置的时自增 3&#xff09;种子值是1 所以排查是数据库的问题 4、继…

上海亚商投顾:沪指探底回升微涨 机器人概念股午后爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 市场全天探底回升&#xff0c;沪指盘中跌超1.6%&#xff0c;创业板指一度跌逾3%&#xff0c;午后集体拉升翻红…

基于深度学习算法的AI图像视觉检测

基于人工智能和深度学习方法的现代计算机视觉技术在过去10年里取得了显著进展。如今&#xff0c;它被广泛用于图像分类、人脸识别、图像中物体的识别等。那么什么是深度学习&#xff1f;深度学习是如何应用在视觉检测上的呢&#xff1f; 什么是深度学习&#xff1f; 深度学习是…

基于Spring Boot的海滨体育馆管理系统的设计与实现

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的海滨体育馆管理系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 宠物医院…

深度学习每周学习总结R3(LSTM-火灾温度预测)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客R4中的内容&#xff0c;为了便于自己整理总结起名为R3&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结1. LSTM介绍LSTM的基本组成部分如何理解与应用LSTM 2. 数据导入3. 数据…

全方位解读消息队列:原理、优势、实例与实践要点

全方位解读消息队列&#xff1a;原理、优势、实例与实践要点 一、消息队列基础认知 在数字化转型浪潮下&#xff0c;分布式系统架构愈发复杂&#xff0c;消息队列成为其中关键一环。不妨把消息队列想象成一个超级“信息驿站”&#xff0c;在古代&#xff0c;各地的信件、物资运…

conda install包时出现CondaHTTPError: HTTP 403 FORBIDDEN for url ....问题,但已经排除镜像源问题

最近连WIFI下包出现如下问题&#xff0c;已排除镜像源问题。但是一直装不上包。 CondaHTTPError: HTTP 403 FORBIDDEN for url https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64/ca-certifica Elapsed: 00:00.202308 An HTTP error occurred when trying to …

【Rust自学】11.3. 自定义错误信息

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.3.1. 添加错误信息 在 11.2. 断言(Assert) 中我们学习了assert!、assert_eq!和assert_ne!这三个宏&#xff0c;而这篇文章讲的就是它…

linux下shell中使用上下键翻出历史命名时出现^[[A^[[A^[[A^[[B^[[B的问题解决

前言 今天在使用linux的时候&#xff0c;使用上下键想翻出历史命令时&#xff0c;却出现[[A[[A[[A[[B^[[B这种东东&#xff0c;而tab键补全命令的功能也无法使用。最终发现是由于当前用户使用的shell是/bin/sh的原因。 解决方法 运行以下命令&#xff0c;将默认 shell 设置为…

【操作系统】课程 8文件管理 同步测练 章节测验

8.1知识点导图 它详细地展示了文件的定义、分类、逻辑结构、目录结构以及文件共享和保护的各个方面。下面是对图中内容的文字整理&#xff1a; 文件定义 文件是具有文件名的一组相关信息的集合。 文件分类 按用途分类&#xff1a;系统文件、用户文件、库文件。按存取控制属性分…

1月9日星期四今日早报简报微语报早读

1月9日星期四&#xff0c;农历腊月初十&#xff0c;早报#微语早读。 1、上海排查47家“俄罗斯商品馆”&#xff1a;个别店铺被责令停业&#xff0c;立案调查&#xff1b; 2、西藏定日县已转移受灾群众4.65万人&#xff0c;检测到余震646次&#xff1b; 3、国家发改委&#x…

1.8-9号Python猛刷动态规划

今日宽恕:总结不是纠结过去&#xff0c;表达不是“见斑知豹”&#xff0c;还要更多信息整合后去回答。 题目一 3297.统计重新排列后包含另一个字符串| 示例 1&#xff1a; 输入&#xff1a;word1 "abcabc", word2 "abc" 输出&#xff1a;10 解释&#…