写了几天,搞定了贪吃蛇自动寻路……目前在20*20的格子上面可以稳定跑到100+分,200+的话……看运气吧o(╯□╰)o,总之算法还有很多可以修改的地方,而且UI部分还有部分没写的……
总结下:这次写的话主要算法用的是BFS,没有用A*算法,因为太复杂了,用JS实现感觉好难,所以暂时没有写……然后有两种策略,一种是吃到食物还能找到自己尾巴的话就直接去吃食物,如果发现找不到吃食物的路径OR吃了就会死那么就在头部附近找一个格子,格子满足两个条件:一个是到了这个格子之后可以找到去尾巴的路,第二个是这个格子离食物最远……其实策略主要是看了别人写的贪吃蛇算法搞出来的,可惜的是目前还是不能铺满整个格子orz……算法还得改啊哈哈哈o(╯□╰)o
代码如下【只放JS了】:

(function () {/*全局变量*/var g = {//获得or设置盒子的attributeattr : function (x, y, att, name) {var d = document.getElementById("box_" + x + "_" + y);if (d && name)d.setAttribute(att, name);else if (d)return d.getAttribute(att);},//随机创建点create : function (start, end) {return Math.floor(Math.random() * (end - start) + start);},addHandler: function (ele, type, handler) {if (ele.length === undefined) {if (ele.addEventListener) {ele.addEventListener(type, handler, false);}else if (ele.attachEvent) {ele.attachEvent("on" + type, handler);}else {ele['on' + type] = handler;}}else if (ele.length === 0) {console.log("The element is null!");return false;}else {for (var i = 0; i < ele.length; i ++) {if (ele[i].addEventListener) {ele[i].addEventListener(type, handler, false);}else if (ele[i].attachEvent) {ele[i].attachEvent("on" + type, handler);}else {ele[i]['on' + type] = handler;}}}},removeHandler: function(element, type, handler) {if (ele.length === undefined) {if (ele.removeEventListener)ele.removeEventListener(type, handler, false);else if (ele.detachEvent)ele.detachEvent("on" + type, handler);elseele['on' + type] = null;}else if (ele.length === 0) {return (console.log("the element is null"));}else {for (var i = 0; i < ele.length; i ++) {if (ele[i].removeEventListener)ele[i].removeEventListener(type, handler, false);else if (ele[i].detachEvent)ele[i].detachEvent("on" + type, handler);elseele[i]['on' + type] = null;}}},//运动方向direction : {left : 37,up : 38,right : 39,down : 40},//游戏设定setting : {size : 20,speed : 500,len : 3,func : null,direct : null}}/*Game构造器*/function Game (food) {this.snake = new Snake(food);this.food = food;var that = this;/*Snake构造器*/function Snake (food) {this.headX = 0;this.headY = 0;this.lastX = 0;this.lastY = 0;this.pos = [];this.f = 0;this.h = 0;this.food = food;};Snake.prototype.init = function () {this.headX = this.headY = this.lastX = this.lastY = 0;this.pos = [];}/*创建蛇*/Snake.prototype.create = function () {var x = g.create(g.setting.len, g.setting.size / 2),y = g.create(g.setting.len, g.setting.size / 2);//获得蛇的坐标for (var i = 0; i < g.setting.len; i ++) {y --;this.pos.push([x, y]);if (i === 0) {g.attr(x, y, "class", "snake head");g.attr(x, y, "touchable", "0");}else if (i === g.setting.len - 1){g.attr(x, y, "class", "snake tail")g.attr(x, y, "touchable", "1");}else {g.attr(x, y, "class", "snake");g.attr(x, y, "touchable", "0");}}this.headX = this.pos[0][0];this.headY = this.pos[0][1];this.lastX = this.pos[this.pos.length - 1][0];this.lastY = this.pos[this.pos.length - 1][1];};/*移动*/Snake.prototype.move = function () {this.headX = this.pos[0][0];this.headY = this.pos[0][1];this.lastX = this.pos[this.pos.length - 1][0];this.lastY = this.pos[this.pos.length - 1][1];g.attr(this.lastX, this.lastY, "class", " ");for (var i = this.pos.length - 1; i > 0; i --) {this.pos[i][0] = this.pos[i - 1][0];this.pos[i][1] = this.pos[i - 1][1];}if (command.length == 0)command.push(g.setting.direct);g.setting.direct = command.shift();command = [];switch (g.setting.direct) {case g.direction.up : this.headY    -= 1; break;case g.direction.down : this.headY  += 1; break;case g.direction.left : this.headX  -= 1; break;case g.direction.right : this.headX += 1; break;}this.pos[0][0] = this.headX;this.pos[0][1] = this.headY;this.lastX = this.pos[this.pos.length - 1][0];this.lastY = this.pos[this.pos.length - 1][1];for (var i = 0; i < this.pos.length; i ++) {g.attr(this.pos[i][0], this.pos[i][1], "class", "snake");g.attr(this.pos[i][0], this.pos[i][1], "touchable", "0");}g.attr(this.headX, this.headY, "class", "snake head");g.attr(this.lastX, this.lastY, "class", "snake tail");g.attr(this.lastX, this.lastY, "touchable", "1");var inside = g.attr(this.headX, this.headY, "inside");if (inside == "food") {this.lastX = this.pos[this.pos.length - 1][0];this.lastY = this.pos[this.pos.length - 1][1];if (this.lastX == this.pos[this.pos.length - 2][0]) {if (this.lastY - this.pos[this.pos.length - 2][1] == 1)this.pos.push([this.lastX, this.lastY + 1]);else if (this.pos[this.pos.length - 2][1] - this.lastY == 1)this.pos.push([this.lastX, this.lastY - 1]);}else if (this.lastY == this.pos[this.pos.length - 2][1]) {if (this.lastX - this.pos[this.pos.length - 2][0] == 1)this.pos.push([this.lastX + 1, this.lastY])else if (this.pos[this.pos.length - 2][0] - this.lastX == 1)this.pos.push([this.lastX - 1, this.lastY]);}g.attr(this.lastX, this.lastY, "class", "snake");g.attr(this.lastX, this.lastY, "touchable", "0");this.lastX = this.pos[this.pos.length - 1][0];this.lastY = this.pos[this.pos.length - 1][1];g.attr(this.lastX, this.lastY, "class", "snake tail");g.attr(this.lastX, this.lastY, "touchable", "1");score ++;this.food.create();document.getElementById("score").innerHTML = score;g.attr(this.headX, this.headY, "inside", " ");};//撞到自己或者墙,游戏结束for (var i = 1; i < this.pos.length; i ++) {if (this.headX == this.pos[i][0] && this.headY == this.pos[i][1]) {that.over();}else {continue;}}if (this.headX > (g.setting.size - 1) || this.headX < 0 || this.headY > (g.setting.size - 1) || this.headY < 0) {that.over();}};Snake.prototype.AIMode = function() {var head = [this.headX, this.headY],tail = [this.lastX, this.lastY],foodPos = this.food.pos,headPath = this.existPath(head, foodPos);if (headPath.length) {var test = this.fakemove(this.pos, headPath);if (test.length) {this.path(head, foodPos);}else {var fathest = this.farthest(head, foodPos, tail);if (fathest.length) {if (fathest[0] - head[0] > 0) {g.setting.direct = g.direction.right;}else if (fathest[0] - head[0] < 0) {g.setting.direct = g.direction.left;}else if (fathest[1] - head[1] > 0) {g.setting.direct = g.direction.down;}else if (fathest[1] - head[1] < 0) {g.setting.direct = g.direction.up;}}else {if (this.existPath(head, tail)) {this.path(head, tail);}else {this.path(head, foodPos);}}}}else {var fathest = this.farthest(head, foodPos, tail);if (fathest.length) {if (fathest[0] - head[0] > 0) {g.setting.direct = g.direction.right;}else if (fathest[0] - head[0] < 0) {g.setting.direct = g.direction.left;}else if (fathest[1] - head[1] > 0) {g.setting.direct = g.direction.down;}else if (fathest[1] - head[1] < 0) {g.setting.direct = g.direction.up;};}else {if (this.existPath(head, tail).length) {this.path(head, tail);}else {this.struggle(head);}}}};/* 算法JS实现 */Snake.prototype.path = function(sta, end) {var startX = sta[0], startY = sta[1], distance = this.existPath(sta, end);if (distance.length > 1) {if (distance[1][0] - startX > 0) {g.setting.direct = g.direction.right;}else if (distance[1][0] - startX < 0) {g.setting.direct = g.direction.left;}else if (distance[1][1] - startY > 0) {g.setting.direct = g.direction.down;}else if (distance[1][1] - startY < 0) {g.setting.direct = g.direction.up;}}}/* 贪吃蛇头部附近找个距离食物最远的有效点 */Snake.prototype.farthest = function(start, end, tail) {var startX = start[0], startY = start[1], endX = end[0], endY = end[1], que = [], distance = [];for (var i = -1; i <= 1; i ++) {if (i === 0) {continue;}else {if (startX + i < g.setting.size&& startX + i >= 0&& g.attr(startX + i, startY, "touchable") === '1'&& this.existPath([startX + i, startY], tail).length) {que.push([startX + i, startY])}if (startY + i < g.setting.size&& startY + i >= 0&& g.attr(startX, startY + i, "touchable") === '1'&& this.existPath([startX, startY + i], tail).length) {que.push([startX, startY + i])}}}for (var i = 0; i < que.length; i ++) {var dis = Math.sqrt(Math.pow(endX - que[i][0], 2) + Math.pow(endY - que[i][1], 2));distance.push([dis, que[i]]);}distance.sort(function(a, b) {return b[0] - a[0];})if (distance.length) {return distance[0][1];}else {return distance;}}/* 移动一条假蛇去吃食物以检查路径是否安全 */Snake.prototype.fakemove = function(pos, path) {var temp = [];if (path.length >= pos.length) {for (var i = path.length - 1; i >= path.length - pos.length; i --) {if (i === path.length - pos.length) {g.attr(path[i][0], path[i][1], "touchable", '1');}else {g.attr(path[i][0], path[i][1], "touchable", '0');}}for (var i = 0; i < pos.length; i ++) {g.attr(pos[i][0], pos[i][1], "touchable", "1");}temp = this.existPath(path[path.length - 1], path[path.length - pos.length]);}else {if (path.length > 2) {for (var i = pos.length - 1; i >= pos.length - path.length; i --) {g.attr(pos[i][0], pos[i][1], "touchable", "1");}for (var i = 0; i < path.length; i ++) {g.attr(path[i][0], path[i][1], "touchable", "0");}temp = this.existPath(path[path.length - 1], pos[pos.length - path.length]);}else {g.attr(pos[pos.length - 1][0], pos[pos.length - 1][1], "touchable", "1");for (var i = 0; i < path.length; i ++) {g.attr(path[i][0], path[i][1], "touchable", "0");}temp = this.existPath(path[path.length - 1], pos[pos.length - 1]);}}for (var i = path.length - 1; i >= 0; i --) {g.attr(path[i][0], path[i][1], "touchable", "1");}for (var i = pos.length - 2; i >= 0; i --) {g.attr(pos[i][0], pos[i][1], "touchable", "0");}g.attr(pos[pos.length - 1][0], pos[pos.length - 1][1], "touchable", "1");return temp;}/* BFS算法实现寻找路径 */Snake.prototype.existPath = function(start, end) {var visited = [], que = [], parent = [];var sta = start;for (var i = 0; i < g.setting.size; i ++) {visited[i] = [];parent[i] = [];for (var j = 0; j < g.setting.size; j ++) {visited[i][j] = false;parent[i][j] = [-1, -1];}}var tempque = [];tempque.push(start);if (start) {if (visited[start[0]])visited[start[0]][start[1]] = true;}while (tempque.length) {start = tempque.shift();var x = start[0], y = start[1];for (var i = -1; i <= 1; i ++) {if (i === 0) {continue;}else {if (x + i < g.setting.size&& x + i >= 0&& (g.attr(x + i, y, "touchable") === '1')&& !visited[x + i][y]) {tempque.push([x + i, y]);visited[x + i][y] = true;parent[x + i][y] = [x, y];if (x + i === end[0] && y === end[1]) {var temp = end;while (temp && temp[0] != -1) {que.unshift(temp);temp = parent[temp[0]][temp[1]];}}}if (y + i < g.setting.size&& y + i >= 0&& (g.attr(x, y + i, "touchable") === '1')&& !visited[x][y + i]) {tempque.push([x, y + i]);visited[x][y + i] = true;parent[x][y + i] = [x, y];if (x === end[0] && y + i === end[1]) {var temp = end;while (temp && temp[0] != -1) {que.unshift(temp);temp = parent[temp[0]][temp[1]];}}}}}}return que;}/* 实在没辙就只能就近做S形运动苟延残喘 */Snake.prototype.struggle = function(head) {var t = [-1, 1], x = head[0], y = head[1], que = [], die = 0;switch(g.setting.direct) {case g.direction.up:if (y - 1 < 0 || g.attr(x, y - 1, "class").indexOf("snake") != -1) {die = 1;}break;case g.direction.down:if (y + 1 >= g.setting.size || g.attr(x, y + 1, "class").indexOf("snake") != -1) {die = 1;}break;case g.direction.left:if (x - 1 < 0 || g.attr(x - 1, y, "class").indexOf("snake") != -1) {die = 1;}break;case g.direction.right:if (x + 1 >= g.setting.size || g.attr(x + 1, y, "class").indexOf("snake") != -1) {die = 1;}break;}if (die) {for (var i = 0; i < 2; i ++) {if (x + t[i] < g.setting.size&& x + t[i] >= 0&& g.attr(x + t[i], y, "class")&& g.attr(x + t[i], y, "class").indexOf("snake") == -1) {que.push([x + t[i], y]);}if (y + t[i] < g.setting.size&& y + t[i] >= 0&& g.attr(x, y + t[i], "class")&& g.attr(x, y + t[i], "class").indexOf("snake") == -1) {que.push([x, y + t[i]]);}}if (que.length) {if (que[0][0] - head[0] > 0) {g.setting.direct = g.direction.right;}else if (que[0][0] - head[0] < 0) {g.setting.direct = g.direction.left;}else if (que[0][1] - head[1] > 0) {g.setting.direct = g.direction.down;}else if (que[0][1] - head[1] < 0) {g.setting.direct = g.direction.up;}}}}};/*创建格子*/Game.prototype.pannel = function () {var t = [];t.push("<table>");for (var i = 0; i < g.setting.size; i ++) {t.push("<tr class = 'row' y = " + i + ">");for (var j = 0; j < g.setting.size; j ++) {t.push("<td id = 'box_" + j + "_" + i + "' inside = ' ' x = '" + j + "' y = '" + i + "' touchable=1></td>");}t.push("</tr>");}t.push("</table>");document.getElementById("pannel").innerHTML = t.join("");};/*初始化游戏*/Game.prototype.init = function () {score = 0;document.getElementById("score").innerHTML = score;this.snake.init();speed.disabled = start.disabled = false;if (g.setting.func) {window.clearInterval(g.setting.func);}for (var x = 0; x < g.setting.size; x ++) {for (var y = 0; y < g.setting.size; y ++) {g.attr(x, y, "class", " ");g.attr(x, y, "inside", " ");}}}/*游戏开始*/Game.prototype.start = function () {this.food.create();this.snake.create();g.setting.direct = g.direction.down;var that = this;g.setting.func = window.setInterval(function() {that.snake.AIMode();that.snake.move();}, g.setting.speed)//蛇移动//g.setting.func = window.setInterval(function() {//  snake.move();//}, g.setting.speed);}/*监听键盘*/Game.prototype.listen = function (e) {e = e || event;command.push(Math.abs(e.keyCode - g.setting.direct) != 2 && e.keyCode > 36 && e.keyCode < 41 ? e.keyCode : g.setting.direct);}/*游戏结束*/Game.prototype.over = function () {alert("game over XD!");this.init();};/*Food构造器*/function Food () {this.pos = [];};/*创建食物*/Food.prototype.create = function () {var that = this;var x = g.create(0, g.setting.size),y = g.create(0, g.setting.size);//检查是否与蛇的位置重合var c = g.attr(x, y, "class");if (c.indexOf("snake") != -1)return this.create();else {g.attr(x, y, "class", "food");g.attr(x, y, "inside", "food");}this.pos = [x, y];};var command = [], gameAi, foodAi, speed = document.getElementById("gameSpeed"), start = document.getElementById("start"), score = 0;foodAi = new Food();gameAi = new Game(foodAi);gameAi.pannel();gameAi.init();function gameStart() {this.disabled = true;g.setting.speed = speed.options[speed.selectedIndex].value;speed.disabled = true;gameAi.start();//window.onkeydown = game.listen;};function switchChange() {var cla = this.firstChild.className.split(" ");for (var i = 0; i < cla.length; i ++) {if (cla[i] == "switch-animate") {cla.splice(i, 1);break;}}cla = cla.join(" ");this.firstChild.className = cla;}function switchAnimate() {var cla = this.firstChild.className.split(" ");for (var i = 0; i < cla.length; i ++) {if (cla[i] == "switch-off") {cla.splice(i, 1, "switch-on");break;}else if (cla[i] == "switch-on") {cla[i] = "switch-off";break;}}cla.push("switch-animate");cla = cla.join(" ");this.firstChild.className = cla;}g.addHandler(start, "click", gameStart);g.addHandler(document.getElementsByClassName("switch"), 'mousedown', switchChange);g.addHandler(document.getElementsByClassName("switch"), 'mouseup', switchAnimate);
})()
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 迈尔斯差分算法

    文章目录说点什么算法简介算法名词解释将字符串转换用图表示出来算法中的几个定义1. Snake(蛇形线)2. d contours(d步轮廓线)3. K线解释看不懂,一看图就明白了:算法的原理ZERO:怎样才能解决问题第一步:如何走(迭代)第二步:每一步如何走第三步:每条K线上如何走到最远…...

    2024/4/16 9:47:29
  2. ***防线***必备工具包(vip专用的)

    ***防线***必备工具包(vip专用的)下载地址:[url]http://vipsoft1.hacker.com.cn/vip1-down/gongju/ruqinbao.rar[/url] NO.1***抓肉鸡————1.[啊D网络工具包]DTools[免杀版] 一款经过免杀处理的啊D网络工具包。2.ssport1.高速扫描:扫描的速度只跟你的CPU的速度有关。现在…...

    2024/4/20 2:45:02
  3. Java实现 蓝桥杯VIP 算法训练 ALGO-16进制转换

    算法训练 进制转换 时间限制:1.0s 内存限制:256.0MB 问题描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式。例如:123可表示为 1*102+2*101+3*100这样的形式…...

    2024/4/14 22:01:36
  4. win10换win7系统步骤操作详解分享

    win10如何换装win7系统呢?win7系统是特别用户一直追求的,尽管微软大力推荐win10系统,所以那些升级了win10,亦或是新买的电脑自带win10,他们都想更换为win7系统,但作为电脑小白不懂操作又无可奈何,今天快启动小编就为大家解惑,分享详细自带win10改装win7图文操作教程哦。…...

    2024/4/14 22:01:36
  5. 《跟我学Shiro》系列教程PDF完结版下载

    2019独角兽企业重金招聘Python工程师标准>>> Shiro目录 第一章 Shiro简介 第二章 身份验证 第三章 授权 第四章 INI配置 第五章 编码/加密 第六章 Realm及相关对象 第七章 与Web集成 第八章 拦截器机制 第九章 JSP标签 第十章 会话管理 第十一章…...

    2024/4/14 22:01:34
  6. NTP(网络时间协议)

    NTP(网络时间协议) 网络时间协议(英语:Network Time Protocol,简称NTP)是在数据网络潜伏时间可变的计算机系统之间通过分组交换进行时钟同步的一个网络协议之一。NTP由特拉华大学David.Mills设计。 NTP意图将所有参与计算机的协调世界时(UTC)时间同步到几毫秒误差内。它…...

    2024/4/18 14:42:48
  7. win7(已安装)win10双系统安装教程

    win7(已安装)win10双系统安装教程win7(已安装)win10双系统纯净版安装步骤(注:此安装方式为BIOS+MBR启动方式非UEFI+GPT模式,本文为IT技术资料网原创,转载请注明出处)准备工作:1.U盘一个(带有winPE系统,如果没有,先做一个,网上都有相关教程。winPE系统都可以,只要…...

    2024/5/5 8:40:39
  8. 如何防止135端口入侵

    新学期到了,许多学生都要配机,新电脑的安全防卫做好了吗?能不能拒绝成为黑客的肉鸡?令人遗憾的是,很多新手都不知道或者忽视了对敏感端口的屏蔽。例如135端口,一旦黑客利用135端口进入你的电脑,就能成功地控制你的机子。我们应该如何防范通过135端口入侵呢?下面我们就为…...

    2024/4/20 9:21:27
  9. Windows下安装NTP服务器

    软件推荐 这里推荐一个批量远程桌面软件:IIS7远程桌面管理工具,它可以批量连接n台服务器vps,并且支持群控功能。 IIS7远程桌面管理工具(3389、vps、服务器批量管理、批量远程工具)简介: 1、批量管理WIN系列服务器,VPS,电脑 2、批量导入服务器的IP,端口,账号和密码 3、批…...

    2024/5/5 9:32:05
  10. java 16进制转换8进制

    1.问题描述给定n个十六进制正整数,输出它们对应的八进制数。 2.输入格式输入的第一行为一个正整数n (1<=n<=10)。 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。 3.输出格式输出n行,每行为输入…...

    2024/4/20 5:01:38
  11. shiro教程(3):shiro授权

    1 shiro授权 1.1 授权流程 1.2 授权方式Shiro 支持三种方式的授权:1、编程式:通过写if/else 授权代码块完成:Subject subject = SecurityUtils.getSubject();if(subject.hasRole(“admin”)) {//有权限} else {//无权限}2、注解式:通过在执行的Java方法上放置相应的注解完成…...

    2024/5/5 5:24:12
  12. BUUCTF snake(实验吧Snake)

    题目表面上给的是一张jpg图片,但是binwalk一下,里面有压缩包,binwalk snake.jpg -e解压一下,里面有两个文件,一个key,一个cipher,打开key,有一串base64字符, V2hhdCBpcyBOaWNraSBNaW5haidzIGZhdm9yaXRlIHNvbmcgdGhhdCByZWZlcnMgdG8gc25ha2VzPwo=解码之后,得到: What…...

    2024/5/5 9:15:33
  13. 目标跟踪算法的分类(一)

    运动目标跟踪主流算法大致分类 主要基于两种思路: a)不依赖于先验知识,直接从图像序列中检测到运动目标,并进行目标识别,最终跟踪感兴趣的运动目标; b)依赖于目标的先验知识,首先为运动目标建模,然后在图像序列中实时找到相匹配的运动目标。一.运动目标检测 对于不依赖…...

    2024/4/14 22:39:26
  14. 用windows搭建ntp时间服务器(从上级获取时间,并为客户机提供时间)

    原文链接:https://blog.csdn.net/dsg333/article/details/44854221. 将服务器类型更改为 NTP。为此,请按照下列步骤操作:a. 单击“开始”,单击“运行”,键入 regedit,然后单击“确定”。 b. 找到并单击下面的注册表子项: HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet…...

    2024/5/5 9:52:17
  15. 信息收集

    1前言 信息收集在渗透测试中是第一步,也是至关重要的一步。信息收集可以让我们对目标整体有一个基本的了解,从而选择出较为薄弱的方向进行渗透。信息收集分为:主动信息收集和被动信息收集主动信息收集:主动信息收集会直接与目标服务器直接进行交互,从而得到一些相关的情报…...

    2024/4/14 22:39:25
  16. 【2018-8月】win7 32位旗舰纯净+装机版系统(每月更新)

    系统之家win7 32位纯净旗舰版Ghost系统下载v1808集成最常用的装机软件以及最全的万能硬件驱动,具有更加安全、稳定及人性化等特点,加上精心挑选的系统维护工具和独有人性化设计,致力于提供最好最快的操作体验。推荐win7系统:win7纯净版下载地址:win7 32位纯净版:win7 32位…...

    2024/4/14 22:39:23
  17. 进制转换方法总结——摘自百度

    今天朋友去面试,面试官问他八进制转换二进制方式原理,他突然间蒙逼了,在常见的计算机知识当中,这种最基础的知识,常常会被人给忘记,所以今天我来写一篇进制转换的总结,来复习巩固一下。 本文参考百度经验(https://jingyan.baidu.com/article/495ba84109665338b30ede98.h…...

    2024/4/14 22:39:22
  18. 2017.2.16 开涛shiro教程-第十七章-OAuth2集成(二)客户端

    原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习。开涛shiro教程-第十七章-OAuth2集成 3.客户端 客户端流程可以参照如很多网站的新浪微博登录功能,或其他的第三方帐号登录功能。1 客户端进行登录操作 2 跳到oauth2服务端,进行登录授权。成…...

    2024/4/14 22:39:21
  19. Shiro教程之注解式&jsp标签授权

    @RequiresAuthentication:要求当前Subject已经在当前的session中被验证通过才能被访问或调用。 @RequiresGuest:要求当前的Subject是一个“guest”,也就是说,他们必须是在之前的session中没有被验证或被记住才能被访问或调用。 @RequiresPermissions(“account:create”…...

    2024/4/26 8:01:13
  20. AAM算法简介

    History 1.Snake (Active Contour Models) --1989 2.ASM (Active Shape Models) --1995 3.Combined Appearance Models 4.AAM (Active Appearance Models)[1] --19981.Snake (Active Contour Models) (1)从对象附近的曲线开始拟合 Discrete snake:离散的控制n个控制点 (2)…...

    2024/4/16 20:59:52

最新文章

  1. VISO流程图之子流程的使用

    子流程的作用 整个流程图的框图多而且大&#xff0c;进行分块&#xff1b;让流程图简洁对于重复使用的流程&#xff0c;可以归结为一个子流程图&#xff0c;方便使用&#xff0c;避免大量的重复性工作&#xff1b; 新建子流程 方法1&#xff1a; 随便布局 框选3 和4 &#…...

    2024/5/5 9:59:44
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 8卡微调Grok-1实战教程

    本文是根据魔搭社区推出的轻量级训练推理工具SWIFT微调实战教程。SWIFT&#xff08;Scalable lightWeight Infrastructure for Fine-Tuning&#xff09;是一套基于PyTorch的轻量级、开箱即用的模型微调、推理框架&#xff0c;让AI爱好者能够轻松地在消费级显卡上运行大模型和AI…...

    2024/5/5 1:29:39
  4. 手机无线投屏到windows11电脑

    1 安装无线投影组件 2 电脑端打开允许其他设备投影的开关 3 手机找到投屏选项 4 手机搜索可用设备连接即可 这里的官方文档给的不太好,给了一些让人眼花撩乱的信息,以下是经过整合的有效信息...

    2024/5/1 13:21:41
  5. Verilog基础【二】

    3.1 Verilog 连续赋值 关键词&#xff1a;assign&#xff0c; 全加器 连续赋值语句是 Verilog 数据流建模的基本语句&#xff0c;用于对 wire 型变量进行赋值。&#xff1a; assign LHS_target RHS_expression &#xff1b;LHS&#xff08;left hand side&#xff09;…...

    2024/5/4 12:27:40
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/4 23:54:56
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/4 23:54:56
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/4 23:55:17
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/4 18:20:48
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/4 23:55:06
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/4 23:55:01
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57