uni app 打肉肉(打飞机)小游戏

都给老婆和孩子写了 合十  钓鱼了,给自己写个打飞机吧。没找飞机怪兽的图片。就用馒头和肉肉代替了。有问题不要私信我。自己改哈

<template>
	<view class="page_main">


		<view class="contentone">
			<canvas class="canvas_cla" style="z-index: 1;" canvas-id="myCanvas" id="myCanvas"></canvas>

		</view>
		<view class="contentone">
			<canvas class="canvas_cla" style="z-index: 2;" canvas-id="myCanvasb" id="myCanvasb"></canvas>

		</view>

		<view class="contenttwo">
			<canvas class="canvas_cla" style="z-index: 9;" canvas-id="myCanvasa" id="myCanvasa" @touchstart="touchstart"
				@touchend="touchend" @touchmove="touchmove"></canvas>

		</view>


		<view class="zhezhao" v-if="isshowstart">
			<view class="dialog_back">
				<cover-view class="add_button_ef" style=" color: #07a5a6;" @tap.stop.prevent="start_zhezhao">
					开始
				</cover-view>
				<cover-view class="add_button_ef" style="color: #07a5a6;" @tap.stop.prevent="back_zhezhao">
					返回
				</cover-view>
			</view>
		</view>







	</view>
</template>

<script>
	export default {
		data() {
			return {
				isshowstart: true,
				canvaswidth: 0,
				canvasheight: 0,

				ctx: null, // canvas 上下文  
				ctxtwo: null, // canvas 上下文  
				ctxthree: null, // canvas 上下文  

				background: {
					images: ['../static/fangzi1.png', '../static/fangzi1.png'], // 图片资源数组

					speed: 2, // 滚动速度  
					position: 0, // 图片当前位置 
				},

				zhujue: {
					x: 0,
					y: 0,
					image: '../static/addpeople.png',
					size: 50,
					speed: 2,
					ismoveing: false,
					value: 200,
					zdvalue: 20,
					fstime: 120,
					zdsize: 10,
					lives: 5,
					wdtime: 0,
					isdie: false,



				},
				zhujpz: false,
				zjzdlist: [],
				gslist: [],
				bosslist: [],

				guankadefen: 0,
				defen: 0,
				guanka: 1,
				isboos: false,



				ytimerX: null, // requestAnimationFrame 的 ID 
				zjfszdtimer: '',

				jspztimer: '',


			};
		},
		onLoad() {


		},

		onReady() {


			this.init()
		},

		/**
		 * 生命周期函数--监听页面卸载
		 */
		onUnload: function() {
			this.game_stop()
		},
		methods: {
			start_zhezhao: function() {
				this.isshowstart = false

				this.game_start(); // 开始滚动  

			},
			back_zhezhao: function() {
				uni.navigateBack({
					delta: 1
				})
			},
			init: function() {

				this.ctx = uni.createCanvasContext('myCanvas');
				this.ctxtwo = uni.createCanvasContext('myCanvasa');
				this.ctxthree = uni.createCanvasContext('myCanvasb');
				let canvas = uni.createSelectorQuery().select('#myCanvas');
				canvas.boundingClientRect(rect => {
					this.canvaswidth = rect.width
					this.canvasheight = rect.height
					this.zhujue.x = (rect.width - this.zhujue.size) / 2
					this.zhujue.y = rect.height - this.zhujue.size - 50
					this.drawzj()
				}).exec();
				this.drawbackg();


			},

			drawzj: function() {

				if (this.zhujue.x < 0) {
					this.zhujue.x = 0
				}
				if (this.zhujue.x > this.canvaswidth - this.zhujue.size) {
					this.zhujue.x = this.canvaswidth - this.zhujue.size
				}

				if (this.zhujue.y < 0) {
					this.zhujue.y = 0
				}
				if (this.zhujue.y > this.canvasheight - this.zhujue.size) {
					this.zhujue.y = this.canvasheight - this.zhujue.size
				}
				if (this.zhujpz) {
					this.ctxtwo.drawImage('../static/mantou.png', this.zhujue.x, this.zhujue.y - 30, this.zhujue.size -
						20, this.zhujue.size - 20); // 绘制图片  
					this.zjdrawbaopo()
				}
				this.ctxtwo.drawImage(this.zhujue.image, this.zhujue.x, this.zhujue.y, this.zhujue.size, this.zhujue
					.size); // 绘制图片  

				this.ctxtwo.draw();

			},
			drawzjzd: function() {



				for (var i = 0; i < this.zjzdlist.length; i++) {

					if (this.zjzdlist[i].isuse) {
						this.zjzdlist.splice(i, 1)
						i--
					} else {
						this.ctxthree.drawImage(this.zjzdlist[i].image, this.zjzdlist[i].x, this.zjzdlist[i].y,
							this.zhujue.zdsize, this.zhujue.zdsize); // 绘制图片  
					}


				}
				if (this.isboos) {
					this.drawboos()
				} else {
					this.drawgs()
				}

				this.ctxthree.draw();
			},

			zjfszd: function() {
				this.zjfszdtimer = setInterval(() => {
					var zd = {
						x: this.zhujue.x + this.zhujue.size / 2 - this.zhujue.zdsize / 2,
						y: this.zhujue.y,
						image: '../static/mantou.png',
						speed: 3,
						isuse: false
					}
					this.zjzdlist.push(zd)
				}, this.zhujue.fstime);
			},

			scgs: function() {


				let gs = {
					x: this.getRandomInt(50, this.canvaswidth - 50),
					y: -45,
					size: 20 + this.guanka * 3,
					image: "../static/rou.png",
					value: 100 * this.guanka * 0.8,
					speed: 0.5 * this.guanka * 0.8,
					isfszd: this.getRandomInt(0, 1),
					isdj: this.getRandomInt(0, 2), // 怪兽携带道具 0 不带 1 子弹威力+0.1   2 发射速度-0.5
					zdspeed: 5 * this.guanka * 0.5,
					isover: false
				}
				this.gslist.push(gs)

			},
			drawgs: function() {
				for (var i = 0; i < this.gslist.length; i++) {
					if (this.gslist[i].isover) {
						this.drawbaopo(this.gslist[i])
						this.gslist.splice(i, 1)
						i--
					} else {
						this.gslist[i].y += this.gslist[i].speed
						this.ctxthree.drawImage(this.gslist[i].image, this.gslist[i].x, this.gslist[i].y, this
							.gslist[i].size, this.gslist[i].size); // 绘制图片  	
					}

				}

			},
			drawboos: function() {
				var that = this
				// 计算物体A需要移动的距离和方向
				const dx = that.bosslist[0].x + that.bosslist[0].size / 2 - that.bosslist[0].mbx; // 水平移动距离  
				const dy = that.bosslist[0].y + that.bosslist[0].size / 2 - that.bosslist[0]
					.mby // 垂直移动距离为0,因为我们只想在水平方向上移动  


				if (dx > 10) {
					that.bosslist[0].x = that.bosslist[0].x - that.bosslist[0].speed
				} else if (dx < -10) {
					that.bosslist[0].x = that.bosslist[0].x + that.bosslist[0].speed
				}
				if (dy > 10) {
					that.bosslist[0].y = that.bosslist[0].y - that.bosslist[0].speed
				} else if (dy < -10) {
					that.bosslist[0].y = that.bosslist[0].y + that.bosslist[0].speed
				}


				that.ctxthree.drawImage(that.bosslist[0].image, that.bosslist[0].x, that.bosslist[0].y,
					that.bosslist[0].size, that.bosslist[0].size); // 绘制图片

				if (dy <= 10 && dy >= -10 && dx <= 10 && dx >= -10) {

					if (!that.bosslist[0].isover) {
						that.bosslist[0].mbx = that.getRandomInt(50, that.canvaswidth - 50)
						that.bosslist[0].mby = that.getRandomInt(50, that.canvasheight - 50)
						that.bosslist[0].speed = that.getRandomInt(1, 5)

					}

				}



			},
			drawbaopo: function(bean) {
				var that = this
				let counter = 0; // 计数器,记录执行次数  
				const intervalId = setInterval(function() {
					// 这里是你的操作代码  
					that.ctxthree.drawImage("../static/mantou.png", bean.x, bean.y, bean.size, bean
						.size); // 绘制图片  

					counter++; // 每次执行,计数器加1  

					// 检查是否达到了执行三次的条件  
					if (counter >= 10) {
						clearInterval(intervalId); // 清除定时器  

					}
				}, 100); // 每秒执行一次(1000毫秒)


			},
			zjdrawbaopo: function() {
				var that = this
				let counter = 0; // 计数器,记录执行次数  
				const intervalId = setInterval(function() {
					// 这里是你的操作代码  

					counter++; // 每次执行,计数器加1  

					// 检查是否达到了执行三次的条件  
					if (counter >= 10) {
						that.zhujpz = false
						clearInterval(intervalId); // 清除定时器  

					}
				}, 100); // 每秒执行一次(1000毫秒)


			},


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

				let startx = e.touches[0].x
				let starty = e.touches[0].y

				if (startx > this.zhujue.x && startx < this.zhujue.x + this.zhujue.size && starty > this.zhujue.y &&
					starty < this.zhujue.y + this.zhujue.size) {

					this.zhujue.x = startx - this.zhujue.size / 2
					this.zhujue.y = starty - this.zhujue.size / 2
					this.zhujue.ismoveing = true

					this.drawzj()
				}



			},
			/**
			 * 触摸屏幕结束 计算
			 */
			touchend: function(e) {
				let x = e.changedTouches[0].x
				let y = e.changedTouches[0].y
				this.zhujue.ismoveing = false
			},
			/**
			 * 触摸屏幕移动  画框
			 */
			touchmove: function(e) {
				let x = e.touches[0].x
				let y = e.touches[0].y
				if (this.zhujue.ismoveing) {
					this.zhujue.x = x - this.zhujue.size / 2
					this.zhujue.y = y - this.zhujue.size / 2


					this.drawzj()
				}

			},

			drawbackg: function() {




				this.background.position += this.background.speed; // 更新图片位置
				if (this.background.position > this.canvasheight) { // 如果图片完全移出视口  
					this.background.position = 0; // 将图片重新放置在视口的另一端  
				}
				this.ctx.clearRect(0, 0, this.canvaswidth, this.canvaswidth); // 清除画布  
				this.ctx.drawImage(this.background.images[0], 0, this.background.position, this.canvaswidth, this
					.canvasheight); // 绘制图片  
				this.ctx.drawImage(this.background.images[1], 0, this.background.position - this.canvasheight, this
					.canvaswidth, this
					.canvasheight); // 绘制图片 

				this.ctx.setFontSize(14); // 设置字体大小  
				this.ctx.setFillStyle('white'); // 设置填充颜色为白色  
				this.ctx.setTextAlign('center'); // 设置文本水平对齐方式为居中  
				this.ctx.setTextBaseline('middle'); // 设置文本垂直对齐方式为中间  
				this.ctx.fillText('剩余' + this.zhujue.lives, 40, 30); // 在圆心位置绘制文本“按钮” 

				this.ctx.setFontSize(14); // 设置字体大小  
				this.ctx.setFillStyle('white'); // 设置填充颜色为白色  
				this.ctx.setTextAlign('center'); // 设置文本水平对齐方式为居中  
				this.ctx.setTextBaseline('middle'); // 设置文本垂直对齐方式为中间  
				this.ctx.fillText('总得分' + this.defen, 120, 30); // 在圆心位置绘制文本“按钮” 

				this.ctx.setFontSize(14); // 设置字体大小
				this.ctx.setFillStyle('white'); // 设置填充颜色为白色  
				this.ctx.setTextAlign('center'); // 设置文本水平对齐方式为居中  
				this.ctx.setTextBaseline('middle'); // 设置文本垂直对齐方式为中间  
				this.ctx.fillText('关卡' + this.guanka, 200, 30); // 在圆心位置绘制文本“按钮” 

				this.ctx.setFontSize(14); // 设置字体大小
				this.ctx.setFillStyle('white'); // 设置填充颜色为白色  
				this.ctx.setTextAlign('center'); // 设置文本水平对齐方式为居中  
				this.ctx.setTextBaseline('middle'); // 设置文本垂直对齐方式为中间  
				this.ctx.fillText('关卡得分' + this.guankadefen, 280, 30); // 在圆心位置绘制文本“按钮” 

				this.ctx.draw();
			},



			game_start: function() {

				this.zjfszd()

				this.jisuanpz()

				this.ytimerX = setInterval(() => {

					for (var i = 0; i < this.zjzdlist.length; i++) {
						this.zjzdlist[i].y -= this.zjzdlist[i].speed
						if (this.zjzdlist[i].y < 0) {
							this.zjzdlist.splice(i, 1)
						}
					}
					if (this.isboos) {
						if (this.bosslist.length == 0) {
							this.bosslist = [{
								x: this.canvaswidth / 2,
								y: 0,
								size: 30 + this.guanka * 8,
								image: "../static/rou.png",
								value: 1000 * this.guanka * 0.8,
								speed: this.getRandomInt(1, 5),
								isfszd: this.getRandomInt(0, 1),
								zdspeed: 5,
								isover: false,
								mbx: this.getRandomInt(50, this.canvaswidth - 50),
								mby: this.getRandomInt(50, this.canvasheight - 50),

							}]
						}

					} else {
						if (this.gslist.length == 0) {
							this.scgs()
						}
						for (var i = 0; i < this.gslist.length; i++) {
							this.gslist[i].y += this.gslist[i].speed
							if (this.gslist.length < 12 && this.gslist[this.gslist.length - 1].y > 80) {
								this.scgs()
							}
							if (this.gslist[i].y > this.canvasheight) {

								this.gslist[i].y = -45
							}
						}
					}



					this.drawbackg();
					this.drawzjzd()

				}, 16); // 每100毫秒更新一次位置 
			},


			jisuanpz: function() {



				this.jspztimer = setInterval(() => {


					if (this.zhujue.wdtime > 0) {
						this.zhujue.wdtime -= 1
					}
					this.isCollidingbyzjzdAndGS()
					this.isCollidingbyzjAndGS()

				}, 16); // 每100毫秒更新一次位置 
			},


			game_stop: function() {

				clearInterval(this.ytimerX); // 停止动画  
				clearInterval(this.zjfszdtimer);

				clearInterval(this.jspztimer);

				this.isshowstart = true

			},

			/**
			 * 生成min 到 max 的随机数
			 */
			getRandomInt: function(min, max) {
				min = Math.ceil(min);
				max = Math.floor(max);
				return Math.floor(Math.random() * (max - min + 1)) + min;
			},
			isCollidingbyzjzdAndGS: function() {
				var arr
				if (this.isboos) {
					arr = this.bosslist

				} else {
					arr = this.gslist
				}


				for (var j = 0; j < arr.length; j++) {
					let gsbean = arr[j]
					if (!gsbean.isover && gsbean.y > 0) {
						for (var i = 0; i < this.zjzdlist.length; i++) {
							let zjzdbean = this.zjzdlist[i]
							if (!zjzdbean.isuse) {
								let zdx = zjzdbean.x + this.zhujue.zdsize / 2
								let zdy = zjzdbean.y + this.zhujue.zdsize / 2
								if (zdx > gsbean.x && zdx < gsbean.x + gsbean.size && zdy > gsbean.y && zdy < gsbean
									.y + gsbean.size) {
									this.zjzdlist[i].isuse = true
									if (this.isboos) {
										this.defen += 10
										this.guankadefen += 10
										gsbean.value = gsbean.value - this.zhujue.zdvalue
										if (gsbean.value <= 0) {
											//消灭怪兽
											console.log(JSON.stringify(gsbean))
											if (gsbean.isdj == 1) {
												this.zhujue.zdvalue += 0.1
											}
											if (gsbean.isdj == 2) {
												this.zhujue.fstime -= 0.5
											}
											this.bosslist[j].isover = true
											this.defen += 100
											this.bosslist = []
											this.isboos = false
											this.guanka += 1
											this.guankadefen = 0
											this.zhujue.zdvalue += 5
											this.zhujue.fstime -= 1
											if (this.guanka % 2 == 0) {
												this.zhujue.lives += 1
											}
										}

									} else {
										//产生碰撞

										this.defen += 5
										this.guankadefen += 5
										gsbean.value = gsbean.value - this.zhujue.zdvalue
										if (gsbean.value <= 0) {
											//消灭怪兽
											console.log(JSON.stringify(gsbean))
											if (gsbean.isdj == 1) {
												this.zhujue.zdvalue += 0.1
											}
											if (gsbean.isdj == 2) {
												this.zhujue.fstime -= 0.5
											}
											this.gslist[j].isover = true
											this.defen += 5
											this.guankadefen += 5
										}

									}
									if (this.guankadefen >= 1000 * this.guanka * 1) {
										this.isboos = true
										this.gslist = []
									}
								}
							}
						}
					}
				}
			},
			isCollidingbyzjAndGS: function() {



				let zjx = this.zhujue.x + this.zhujue.size / 2
				let zjy = this.zhujue.y + this.zhujue.size / 2

				var arr
				if (this.isboos) {
					arr = this.bosslist
				} else {
					arr = this.gslist
				}


				for (var j = 0; j < arr.length; j++) {
					let gsbean = arr[j]

					if (!gsbean.isover) {
						let gsx = gsbean.x
						let gsy = gsbean.y
						let gssize = gsbean.size

						if (zjx < gsx + gssize && zjx > gsx && zjy < gsy + gssize && zjy > gsy) {
							console.log("11111")
							console.log("主角发生碰撞", this.zhujue.wdtime)
							if (this.zhujue.wdtime <= 0) {
								if (this.isboos) {

									this.zhujue.value -= gsbean.value

								} else {
									this.gslist[j].isover = true
									this.zhujue.value -= gsbean.value
									this.zhujpz = true
								}
							}



							if (this.zhujue.value <= 0) {
								console.log("主角死了。结束")
								this.zhujue.lives -= 1
								this.zhujue.wdtime = 300
								if (this.zhujue.lives < 0) {
									this.game_stop()
								} else {
									this.zhujue.value = 200
								}

							}

						}


					}

				}
			},

		}
	};
</script>

<style scoped>
	.contentone {
		width: 100vw;
		height: 100vh;
		position: absolute;

		display: flex;
		justify-content: center;

	}

	.contenttwo {
		width: 100vw;
		height: 100vh;
		position: absolute;

		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 {
		position: fixed;
		overflow: hidden;
		width: 100vw;
		height: 100vh;
		background-color: #efefef;
	}

	.zhezhao {
		position: fixed;
		top: 0;
		bottom: 0;
		width: 100vw;
		height: 100vh;
		display: flex;
		justify-content: center;
		align-items: center;
		background-color: rgba(0, 0, 0, 0.4);
		z-index: 9999;
	}

	.dialog_back {
		position: fixed;
		z-index: 12;
		top: 0;
		right: 0;
		left: 0;
		bottom: 0;
		background: rgba(0, 0, 0, 0.3);
		justify-content: center;
		align-items: center;
		display: flex;
	}

	.add_button_ef {
		margin-left: 32rpx;
		margin-right: 32rpx;
		padding-top: 30rpx;
		padding-bottom: 30rpx;
		width: 300rpx;

		border: solid 2rpx #efefef;
		color: #999;
		background: #efefef;
		font-size: 32rpx;
		border-radius: 10rpx;
		display: flex;
		align-items: center;
		justify-content: center;
		text-align: center;
		vertical-align: center;


	}
</style>

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

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

相关文章

【Session】Tomcat Session 集群

设备 nginx&#xff1a;192.168.67.11 tomcat1&#xff1a;192.168.67.12 tomcat2&#xff1a;192.168.67.13安装nginx &#xff08;192.168.67.11&#xff09; #关闭防火墙和安全机制 [roottest1 ~]# systemctl stop firewalld [roottest1 ~]# setenforce 0#安装epel源 [ro…

iOS面试题锦集

1. 问&#xff1a;一张图片所占内存大小跟什么有关&#xff1f; 图片所占内存大小&#xff0c;与图片的宽高有关 我们平时看到的png、jpg、webp这些图片格式&#xff0c;其实都是图片压缩格式。通过对应的算法来优化了大小以节省网络传输与本地保存所需的资源。 但是当我们加…

【四 (1)数据可视化之如何选用正确的图表】

目录 文章导航一、数据分析中可视化的作用1、揭示数据关联和模式2、支持数据分析和决策3、提升沟通和共享效果4、强调关键信息和发现5、增强故事叙述和记忆效果6、有效增强数据交互性数据7、复杂信息易理解8、数据多维度显示 二、如何选用合适的图表1、简洁性避免使用过于复杂或…

【PTA】​L1-034 点赞(C++)

题目链接&#xff1a; L1-034 点赞 - 团体程序设计天梯赛-练习集 (pintia.cn) 目录&#xff1a; 目录&#xff1a; 题目要求&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 思路&#xff1a; 代码&#xff1a; 测试结果…

git下载及基础

git学习教程&#xff1a;【【GeekHour】一小时Git教程】 https://www.bilibili.com/video/BV1HM411377j/?share_sourcecopy_web&vd_source1a32dd27a726236a74603cf06b7302aa 1. 下载 官网&#xff1a;https://git-scm.com/ 终端输入 git -v 能看到版本信息表示安装成功…

最新开源解密版TwoNav网址导航系统源码

源码简介 2024最新开源解密版TwoNav网址导航系统源码去授权破解版 内置二十多套主题模板。 已去授权&#xff0c;最新开源解密版。TwoNav 是一款开源的书签&#xff08;导航&#xff09;管理程序&#xff0c;使用PHP SQLite 3开发&#xff0c;界面简洁&#xff0c;安装简单&…

【MySQL】4. 表的操作

表的操作 1. 创建表 语法&#xff1a; CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;说明&#xff1a; field 表示列名 datatype 表示列的类型 character set 字符集&#xff0c…

springcloud:4.1 GateWay

概述 Gateway 简介 Spring Cloud Gateway基于Spring 5.0、SpringBoot 2.0和Project Reactor等技术开发 旨在为微服务架构提供一种简单有效的、统一的API路由管理方式&#xff0c;并为微服务架构提供安全、监控、指标和弹性等功能 其目标是替代Zuul特点 易于编写谓词和过滤器&…

1.2 课程架构介绍:STM32H5 芯片生命周期管理与安全调试

1.2 课程架构介绍&#xff1a;STM32H5 芯片生命周期管理与安全调试 下面开始学习课程的第二节&#xff0c;简单介绍下STM32H5芯片的生命周期和安全调试&#xff0c;具体课程大家可以观看STM32官方录制的课程&#xff0c;链接&#xff1a;1.2. 课程架构介绍&#xff1a;STM32H5…

免费阅读篇 | 芒果YOLOv8改进109:注意力机制SimAM:用于卷积神经网络的简单、无参数注意力模块

免费阅读篇|芒果YOLOv8改进109&#xff1a;注意力机制篇SimAM&#xff1a;用于卷积神经网络的简单、无参数注意力模块 &#x1f4a1;&#x1f680;&#x1f680;&#x1f680;本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 该专栏完整目录链接&#x…

【AIGC调研系列】通义灵码与copilot的对比

通义灵码与GitHub Copilot的对比主要集中在几个方面&#xff1a;代码编写能力、免费性、操作界面和适配性。 首先&#xff0c;在代码编写能力上&#xff0c;虽然GitHub Copilot在整体上要强于通义灵码&#xff0c;但通义灵码的能力也不算弱&#xff0c;并且在某些特定的小类任…

外卖平台订餐流程架构的实践

当我们想要在外卖平台上订餐时&#xff0c;背后其实涉及到复杂的技术架构和流程设计。本文将就外卖平台订餐流程的架构进行介绍&#xff0c;并探讨其中涉及的关键技术和流程。 ## 第一步&#xff1a;用户端体验 用户通过手机应用或网页访问外卖平台&#xff0c;浏览菜单、选择…

服务器遭遇挖矿病毒syst3md及其伪装者rcu-sched:原因、症状与解决方案

01 什么是挖矿病毒 挖矿病毒通常是恶意软件的一种&#xff0c;它会在受感染的系统上无授权地挖掘加密货币。关于"syst3md"&#xff0c;是一种特定的挖矿病毒&#xff0c;它通过在受感染的Linux系统中执行一系列复杂操作来达到其目的。这些操作包括使用curl从网络下载…

stm32-定时器输出比较PWM

目录 一、输出比较简介 二、PWM简介 三、输出比较模式实现 1.输出比较框图(以通用定时器为例) 2.PWM基本结构 四、固件库实现 1.程序1&#xff1a;PWM呼吸灯 2.程序2&#xff1a;PWM驱动直流电机 3.程序3&#xff1a;控制舵机 一、输出比较简介 死区生成和互补输出一般…

计算机网络——物理层(奈氏准则和香农定理)

计算机网络——物理层&#xff08;奈氏准则和香农定理&#xff09; 失真码间串扰奈氏准则&#xff08;奈奎斯特定理&#xff09;极限数据率 噪声信噪比香农定理奈氏准则和香农定理的区别 前面我们已经了解一些数据通信的基本知识&#xff0c;没有看过上一篇得小伙伴可以点击这里…

2024最新小狐狸AI 免授权源码

后台安装步骤&#xff1a; 1、在宝塔新建个站点&#xff0c;php版本使用7.2 、 7.3 或 7.4&#xff0c;把压缩包上传到站点根目录&#xff0c;运行目录设置为/public 2、导入数据库文件&#xff0c;数据库文件是 /db.sql 3、修改数据库连接配置&#xff0c;配置文件是/.env 4、…

每日一题——LeetCode1684.统计一致字符串的数目

方法一 Set()双层for循环遍历 将allowd放入Set集合中&#xff0c;遍历words每一项的每一个字符看是否有allowd不含有的字符 var countConsistentStrings function(allowed, words) {let set new Set(allowed),count0for(let word of words){for(let char of word){if(!set.…

redis 入门01

1.安装与配置 在官网下压缩包并传送给自己的虚拟机或者使用wget直接下载都可以 注意:redis是运行在linux下的基于内存的kv键值对数据库 安装与配置参考 2.经典Hello World 注意设置redis在后台运行,默认是前台进行的 我们配置完成之后首先启动服务器 redis-server 配置文件 这里…

从混沌到秩序——90年代中国数据库的激烈角逐

引言 在数字化浪潮的推动下&#xff0c;数据库技术已成为支撑数字经济的坚实基石。腾讯云TVP《技术指针》联合《明说三人行》特别策划的直播系列——【中国数据库前世今生】&#xff0c;我们将通过五期直播&#xff0c;带您穿越五个十年&#xff0c;深入探讨每个时代的数据库演…

uniapp 跳转返回携带参数(超好用)

天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 1.返回界面 uni.$emit(enterPeople, this.entryList)uni.navigateBack({delta: 1}) 2.返回到的界面&#xff08;接收数据界面&#xff09; onShow() {let that thisuni.$on(enterPeople,function(enterPeopledata){console.…