uni app 钓鱼小游戏

最近姑娘喜欢玩那个餐厅游戏里的钓鱼  ,经常让看广告,然后就点点点...

自己写个吧。小鱼的图片自己搞。 有问题自己改,不要私信我

<template>
	<view class="page_main">

		<view class="top_linear">
			<view class="top_mean_left">
				<text>以钓到 </text>
				<text class="top_mean_tv">{{ydlist.length}} </text>
			</view>
			<view class="top_mean_center">
				<text> </text>
				<text class="top_mean_tv"></text>
			</view>
			<view class="top_mean_right">
				<text> </text>
				<text class="top_mean_tv"></text>
			</view>

			<view class="top_mean_right">
				<text> </text>
				<text class="top_mean_tv"> </text>
			</view>

		</view>
		<view class="contentone">
			<canvas class="canvas_cla" canvas-id="myCanvas" id="myCanvas"></canvas>

		</view>
		<view class="contenttwo">
			<canvas class="canvas_cla" canvas-id="myCanvass" @touchstart="touchstart" @touchend="touchend"
				id="myCanvass" @touchmove="touchmove"></canvas>

		</view>







	</view>
</template>

<script>
	export default {
		data() {
			return {
				canvasWidth: 0,
				canvasHeight: 0,
				shuishen: 0,
				ydlist: [],
				dyl: {
					dylimg: '../static/ship.png',
					dylx: 0,
					dyly: 0,
					dylsize: 50,
					dqjl: 100,
					speedx: 2,
					yg: {
						image: "../static/yg.png",
						size: 15,
						sxspeedy: 5
					}

				},
				ydtimerX: '',
				ytimerX: '',
				ylist: [],
				yimages: ['../static/yu1.png', '../static/yu2.png', '../static/yu3.png',
					'../static/yu4.png', '../static/yu5.png', '../static/yu6.png',
					'../static/yu7.png', '../static/yu8.png', '../static/yu9.png',
					'../static/yu10.png', '../static/yu11.png', '../static/yu12.png', '../static/yu13.png',
					'../static/yu14.png', '../static/yu15.png', '../static/yu16.png', '../static/yu17.png',
					'../static/yu18.png'
				],
				ygy: 100,
				istddyl: false,
				isxg: false,
				iswddl: false,






			};
		},
		onLoad() {


			this.dyl.yxstartx = this.dyl.dylx + this.dyl.dylsize
			this.dyl.dyly = this.canvasHeight - this.shuishen - this.dyl.dylsize
			this.dyl.yxstarty = this.dyl.dyly + this.dyl.dylsize - 10
			console.log(JSON.stringify(this.ylist))
		},

		onReady() {
			const ctx = uni.createCanvasContext('myCanvas');
			const ctxtwo = uni.createCanvasContext('myCanvass');
			this.ctx = ctx
			this.ctxtwo = ctxtwo
			const canvas = uni.createSelectorQuery().select('#myCanvas');
			canvas.boundingClientRect(rect => {

				this.canvasWidth = rect.width
				this.canvasHeight = rect.height
				this.shuishen = rect.height - 100
				this.addy()
			}).exec();


			this.drawyu()
			this.drawdyl()
			this.yddyl()
			this.ydy()
		},

		/**
		 * 生命周期函数--监听页面卸载
		 */
		onUnload: function() {

		},
		methods: {

			/**
			 * 触摸屏幕开始 记录开始坐标
			 */
			touchstart: function(e) {

				let startx = e.touches[0].x
				let starty = e.touches[0].y
				console.log(startx, starty)
				if (starty < this.canvasHeight - this.shuishen) {
					if (!this.isxg) {
						console.log("拖动钓鱼老")
						this.istddyl = true
						clearInterval(this.ydtimerX);
						this.dyl.dylx = startx


						this.drawdyl();
					}
				} else {
					if (!this.isxg) {
						this.ygy = starty
						this.isxg = true
						this.dyl.dqjl = this.getRandomInt(40, 100)
					}

				}



			},
			/**
			 * 触摸屏幕结束 计算
			 */
			touchend: function(e) {
				let x = e.changedTouches[0].x
				let y = e.changedTouches[0].y
				if (!this.isxg) {
					if (this.istddyl) {
						this.istddyl = false
						this.yddyl()
					}
				} else {

				}
			},
			/**
			 * 触摸屏幕移动  画框
			 */
			touchmove: function(e) {
				let x = e.touches[0].x
				let y = e.touches[0].y
				if (!this.isxg) {
					if (this.istddyl) {
						this.dyl.dylx = x
						this.drawdyl();
					}
				}

			},
			addy: function() {
				console.log("添加" + this.ylist.length)
				let count = 10 - this.ylist.length
				console.log("添加" + count)
				console.log(this.canvasHeight, this.shuishen, this.canvasHeight)
				// console.log(this.canvasHeight - this.shuishen + 50, this.canvasHeight - 50)
				for (var i = 0; i <= count; i++) {
					let bean = {}
					bean.size = this.getRandomInt(20, 40)
					bean.x = [0, this.canvasWidth - bean.size][this.getRandomInt(0, 1)]

					bean.y = this.getRandomInt(this.canvasHeight - this.shuishen + 50, this.canvasHeight - 80)
					bean.image = this.yimages[this.getRandomInt(0, this.yimages.length - 1)]
					bean.dqjl = this.getRandomInt(0, 100)
					bean.speedx = this.getRandomInt(1, 3)
					bean.isbdd = false




					this.ylist.push(bean)
				}
			},

			getRandomInt: function(min, max) {
				min = Math.ceil(min);
				max = Math.floor(max);
				return Math.floor(Math.random() * (max - min + 1)) + min;
			},




			drawdyl: function() {
				this.ctxtwo.drawImage("../static/shanshui.png", 0,
					0, this.canvasWidth, this.canvasHeight - this.shuishen);
				var dyly = this.canvasHeight - this.shuishen - this.dyl.dylsize
				this.ctxtwo.drawImage(this.dyl.dylimg, this.dyl.dylx, dyly, this
					.dyl.dylsize, this.dyl.dylsize);
				this.ctxtwo.draw(); // 绘制到 canvas 上

				// 绘制鱼线(假设是简单的直线)  
				this.ctxtwo.beginPath();
				this.ctxtwo.moveTo(this.dyl.dylx + this.dyl.dylsize, dyly + this.dyl.dylsize - 10); // 起点位置  
				this.ctxtwo.lineTo(this.dyl.dylx + this.dyl.dylsize, this.ygy); // 终点位置  
				this.ctxtwo.setStrokeStyle('#000000'); // 设置线条颜色  
				this.ctxtwo.setLineWidth(2); // 设置线条宽度  
				this.ctxtwo.stroke(); // 绘制线条  

				this.ctxtwo.drawImage(this.dyl.yg.image, this.dyl.dylx + this.dyl.dylsize - this.dyl.yg.size / 3,
					this.ygy, this.dyl.yg.size,
					this.dyl.yg.size);

				// 将绘图上下文的内容绘制到 canvas 中  
				this.ctxtwo.draw(true);


			},
			drawyu: function() {
				// 设置填充颜色
				this.ctx.setFillStyle('#1E90FF');

				// 绘制一个填充的长方形,参数分别为:x坐标,y坐标,宽度,高度  
				this.ctx.fillRect(0, this.canvasHeight - this.shuishen, this.canvasWidth, this.shuishen);

				// 将绘制内容绘制到画布上  

				for (var i = 0; i < this.ylist.length; i++) {
					var bean = this.ylist[i]

					this.ctx.drawImage(bean.image, bean.x, bean.y, bean.size, bean.size);

				}
				this.ctx.draw(); // 绘制到 canvas 上
			},
			ydy: function() {



				let that = this;
				let pzcount = 0
				// 在x轴上反弹  
				this.ytimerX = setInterval(() => {

					for (var i = 0; i < this.ylist.length; i++) {
						var bean = this.ylist[i]
						if (bean.isbdd) {
							if (bean.y > 100) {
								bean.y = this.ygy - this.dyl.yg.sxspeedy

							} else {
								this.ydlist.push(JSON.parse(JSON.stringify(bean)))

								console.log("收线完成", this.ydlist.length)
								this.dyl.yg.sxspeedy = 5
								this.iswddl = false
								this.ylist.splice(i, 1)
								this.addy()
							}
						} else {
							bean.x = bean.x + bean.speedx
							if (bean.x < 0 || bean.x + bean.size > that.canvasWidth) {
								bean.speedx = -bean.speedx;
								// bean.isReversed = !bean.isReversed
							}
						}

					}




					that.drawyu();
				}, 100); // 每100毫秒更新一次位置 

			},
			yddyl: function() {

				let that = this;
				let pzcount = 0
				// 在x轴上反弹  
				this.ydtimerX = setInterval(() => {

					if (!that.isxg) {
						that.dyl.dylx = that.dyl.dylx + that.dyl.speedx;


						if (that.dyl.dylx < 0 || that.dyl.dylx + that.dyl.dylsize > that.canvasWidth) {
							that.dyl.speedx = -that.dyl.speedx;
						}
					} else {
						if (that.ygy > 100) {
							that.ygy = that.ygy - that.dyl.yg.sxspeedy

							if (!that.iswddl) {
								console.log("没调到")
								that.iswddl = that.isColliding()

							} else {
								console.log("调到")
							}
						} else {
							that.isxg = false
							that.ygy = 100
							that.iswddl = false

						}
					}






					that.drawdyl();
				}, 100); // 每100毫秒更新一次位置  


			},

			isColliding: function() {
				let ygx = this.dyl.dylx + this.dyl.dylsize
				let ygy = this.ygy
				let ygsize = this.dyl.yg.size

				for (var i = 0; i < this.ylist.length; i++) {
					let bean = this.ylist[i]

					if (ygx < bean.x + bean.size && ygx + ygsize > bean.x && ygy < bean.y + bean
						.size && ygy + ygsize > bean.y) {

						if (this.dyl.dqjl + bean.dqjl >= 100) {
							bean.isbdd = true
							this.dyl.yg.sxspeedy = 45 - bean.size
							return true
						}

					}

				}


				return false
			},



		}
	};
</script>

<style scoped>
	.contentone {
		width: 100vw;
		height: 100vh;
		position: absolute;
		top: 80rpx;
		display: flex;
		justify-content: center;
	}

	.contenttwo {
		width: 100vw;
		height: 100vh;
		position: absolute;
		top: 80rpx;
		display: flex;
		justify-content: center;
	}

	.canvas_cla {
		width: 100vw;
		height: 100vh;
	}


	.top_linear {
		display: flex;
		flex-direction: row;
		justify-content: space-between;
		display: flex;
		flex-direction: row;
		height: 80rpx;

	}

	.top_mean_left {
		margin-left: 32rpx;

	}

	.top_mean_right {
		margin-right: 32rpx;

	}

	.top_mean_tv {
		color: #07a5a6;
	}


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

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

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

相关文章

【四 (3)数据可视化之 Seaborn 常用图表及代码实现 】

目录 文章导航一、介绍二、安装Seaborn三、导入Seaborn四、设置可以中文显示五、占比类图表1、饼图2、环形图 六、比较排序类1、条形图2、箱线图3、小提琴图 七、趋势类图表1、折线图 八、频率分布类1、直方图 九、关系类图表1、散点图2、成对关系图3、热力图 文章导航 【一 简…

C语言-strstr(字符串里查找字符串)

strstr&#xff08;字符串里查找字符串&#xff09; 语法格式 库函数实现的逻辑 1&#xff0c;返回一个指向str2在str1中第一次出现的位置&#xff0c;如果str2不是p&#xff0c;则返回一个空指针&#xff0c;函数返回字符串str2在字符串str1中第一次出现的位置) 2&#xf…

bootstrap3 -入门简学

1.前期准备工作 1.1 https://www.bootcss.com/ 1.2 点击下载 1.3解压下载好得东西 2. 版本介绍 Bootstrap 版本 目前市面上使用的最多的是 3.x.x 版本。各个版本的介绍&#xff1a; 2.3.2版本&#xff1a; 2013年之后&#xff0c;停止维护&#xff1b; 支持更广泛的浏览…

CIDR网络地址、广播地址、网段区间计算说明与计算工具

文章目录 开始问题参考答案 答案解析计算工具测试 开始 好久没有看计算网络&#xff0c;感觉已经完全返给老师了。 最近&#xff0c;有同事遇到个问题&#xff0c;网络一直不对&#xff0c;又开始重新看一下。 相信很多朋友长时间不看也忘了&#xff0c;所以&#xff0c;这里…

UG NX二次开发(C#)-单选对话框UF_UI_select_with_single_dialog的使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、UF_UI_select_with_single_dialog函数3、实现代码3.1 利用委托创建一个方法3.2 直接调用1、前言 对于单选对话框,采用C++/C写的时候比较容易,也在帮助文档中有示例,但是对于C#开发采…

STL库中的string

文章目录 一、STL的六大组件二、string类2.1string中的size()方法2.2隐式类型的转换2.3string的多种构造2.4string中size与length是否有差异&#xff1f;2.4string中的capacity2.5string中的push_back和append2.6string中运算符重载operator2.7string中的reserve扩容2.8string中…

DJI RONIN 4D变0字节恢复案例

RONIN 4D这个产品听起来比较陌生&#xff0c;还是DJI大疆出品。没错&#xff0c;这是大疆进军影视级的重点明星机型。前阵子刚处理过大疆RONIN 4D的修复案例&#xff0c;下边这个案例是和exfat有关的老问题:文件长度变成0字节。 故障存储:希捷18T /MS Exfat文件系统。 故障现…

Mac上使用M1或M2芯片的设备安装Node.js时遇到一些问题,比如卡顿或性能问题

对于Mac上使用M1或M2芯片的设备可能会遇到在安装Node.js时遇到一些问题&#xff0c;比如卡顿或性能问题。这可能是因为某些软件包或工具在M1或M2芯片上的兼容性不佳。为了解决这个问题&#xff0c;您可以尝试以下方法&#xff1a; 1. 使用Rosetta模式 对于一些尚未适配M1或M2…

vscode 运行 java 项目之解决“Build failed, do you want to continue”的问题

Visual Studio Code运行 java 起来似乎比 IDEA 更轻量、比 eclipse 更友好&#xff0c;是不可多得的现代编译法宝。 安装好官方推荐的 java 扩展包后&#xff0c;就可以运行 java 代码了。功能 比 code runner 强&#xff0c;支持 gradle、maven、普通java项目&#xff0c;运行…

第五十九回 公孙胜芒砀山降魔 晁天王曾头市中箭-飞桨自然语言处理套件PaddleNLP初探

公孙胜献出八卦阵&#xff0c;宋江用八员大将守阵。项充李衮进入阵里&#xff0c;被抓住了。宋江说久闻大名&#xff0c;来梁山吧。两人说誓当效力到死&#xff0c;希望能先放我们两个回去把樊瑞带来一起。见到樊瑞后把宋江讲义气一说&#xff0c;樊瑞说不可逆天&#xff0c;于…

python flask报错OSError: [WinError 10038] 在一个非套接字上尝试了一个操作。

根本原因&#xff1a; 在执行到某个代码的时候&#xff0c;出错了&#xff0c;这个服务器的连接崩了&#xff0c;导致连接提前关闭。 针对的情况&#xff1a; 检查一下这个中文的报错的下面有没有这行 “ * Restarting with watchdog (windowsapi)” 上面某个地方应该还有这行…

HTML_CSS练习:HTML注释

一、代码示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>HTML注释</title> </head> <body><marquee loop"1">马龙强<!--下面的输入框是可以滚动的&#x…

黑马微服务p30踩坑

报错详情 : orderservice开不起来 : 发生报错 : 然后检查了以下端口啥的 &#xff0c;配置啥的都是没有问题的 ; 解决办法 : 1 . 修改nacos1,2,3中的端口&#xff0c;将conf 中 cluster.conf中 的 127.0.0.1 全部改成自己本机的真实ipv4地址; 本机真实ipv4地址查看 :…

云原生(二)、Docker基础

Docker Docker 是一种开源的容器化平台&#xff0c;用于开发、部署和运行应用程序。它允许开发者将应用程序及其所有依赖项打包到一个可移植的容器中&#xff0c;这个容器可以在任何支持 Docker 的环境中运行&#xff0c;无论是开发人员的个人笔记本电脑、测试环境、生产服务器…

Docker使用(三)Docker底层分析

Docker使用(三)Docker底层分析 四、底层分析 1、Docker镜像原理 1.1 commit镜像 docker commit 提交容器成为一个新的副本 # 命令和git原理类似 docker commit -m“提交的描述信息” -a“作者” 容器id 目标镜像名:[TAG] 实操&#xff1a; # 1、启动一个默认tomcat # …

【目标检测-数据集准备】DIOR转为yolo训练所需格式

【目标检测】DIOR遥感影像数据集&#xff0c;转为yolo系列模型训练所需格式。 标签文件位于Annotations下&#xff0c;格式为xml&#xff0c;yolo系列模型训练所需格式为txt&#xff0c;格式为 class_id x_center,y_center,w,h其中&#xff0c;train&#xff0c;text&#xff…

数据结构 之 队列(Queue)

​​​​​​​ &#x1f389;欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨ &#x1f389;感谢各位读者在百忙之中抽出时间来垂阅我的文章&#xff0c;我会尽我所能向的大家分享我的知识和经验&#x1f4d6; &#x1f389;希望我们在一篇篇的文章中能够共同进步&#xff0…

数据结构知识点汇总(持续更新版)

数据结构 一、绪论 检测知识&#xff1a; 1.1基本概念 以前的计算机 弹道计算机 现如今 主要运用于非数值的计算 基本概念和术语 数据&#xff1a;是信息的载体&#xff0c;描述客观事物属性的值&#xff0c;字符以及所有能输入到计算机中并被计算机程序识别和处理的符号的…

vite打包流程和原理

文章目录 打包原理Vite比Webpack快&#xff1f;在生产环境下的表现启动项目后&#xff0c;完成加载比较慢&#xff1f;Esbuild & Rollup热更新 打包原理 vite利用了ES module这个特性&#xff0c;使用vite运行项目时&#xff0c;首先会用esbuild进行预构建&#xff0c;将所…

Java 根据IP获取IP地址信息(离线)

<!-- https://mvnrepository.com/artifact/org.lionsoul/ip2region --><dependency><groupId>org.lionsoul</groupId><artifactId>ip2region</artifactId><version>2.7.0</version></dependency> 地址&#xff1a;http…
最新文章