主頁 >  其他 > HTML5 + Canvas + 廣度優先搜索(BFS) 撰寫lol連連看

HTML5 + Canvas + 廣度優先搜索(BFS) 撰寫lol連連看

2021-04-21 12:59:07 其他

HTML5 + Canvas + 廣度優先搜索(BFS) 撰寫lol連連看

HTML5 + Canvas + 廣度優先搜索(BFS) 撰寫lol連連看


提示:寫完文章后,目錄可以自動生成,如何生成可參考右邊的幫助檔案

文章目錄

  • HTML5 + Canvas + 廣度優先搜索(BFS) 撰寫lol連連看
  • 前言
  • 二、html代碼
  • 二、js
    • hero.js
    • game.js
  • 三、效果


前言

使用 BFS 廣度優先搜索撰寫 連連看,

image-20210420111955474

起點是b,終點是e

檢查b的上下左右(當前位置加 x:0,1,0,-1|y:-1,0,1,0) ,如果不為h(沒有連對的英雄障礙物)則放到佇列中,回圈讀取佇列直到找到終點e


# 一、準備資料 1.使用python 爬取lol官網獲取頭像圖片
# -*- coding: utf-8 -*

import requests
import json
import os
from tqdm import tqdm

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'
}
url = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js'

html_data = requests.get(url, headers=headers)
img_out_path = os.path.join(os.path.join(os.getcwd(), ".."), "hero_img")
if not os.path.exists(img_out_path):os.makedirs(img_out_path)
heros = json.loads(html_data.text)
for h in tqdm(heros["hero"]):
    img_url = "https://game.gtimg.cn/images/lol/act/img/champion/" + h["alias"] + '.png'
    img = requests.get(img_url,headers=headers)
    if img.status_code == 200:
        img_name = os.path.join(img_out_path, h["alias"]+".png")
        with open(img_name,'wb') as f:
            f.write(img.content)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-vpFgvgrj-1618969654673)(D:\markdown\6W3JtrF1bAEnIhT.png)]

得到頭像圖片

二、html代碼

創建兩個畫布,main-canvas 用來顯示圖片,main-canvas2 用來顯示選中狀態還有連線

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="utf-8">
		<title>Simple Canvas Game</title>
		<!--style="position:relative; z-index:-1"-->
		<div>
			<div style="position:relative; z-index:-1"  >
				<canvas id="main-canvas"></canvas>
			</div>
			<canvas style="position:absolute;top:0;left:0; z-index:9999" id="main-canvas2"></canvas>
		</div>
		

		<div id="container"></div>
	</head>
	<body>
		<script src="js/heros.js"></script>
		<script src="js/game.js"></script>	
	</body>
</html>

二、js

hero.js

#字串的拼接 可以用python print(os.listdir("../hero_img"))

var heros = ['Aatrox.png', 'Ahri.png', 'Akali.png', 'Alistar.png', 'Amumu.png', 'Anivia.png', 'Annie.png', 'Aphelios.png', 'Ashe.png', 'AurelionSol.png', 'Azir.png', 'Bard.png', 'Blitzcrank.png', 'Brand.png', 'Braum.png', 'Caitlyn.png', 'Camille.png', 'Cassiopeia.png', 'Chogath.png', 'Corki.png', 'Darius.png', 'Diana.png', 'Draven.png', 'DrMundo.png', 'Ekko.png', 'Elise.png', 'Evelynn.png', 'Ezreal.png', 'FiddleSticks.png', 'Fiora.png', 'Fizz.png', 'Galio.png', 'Gangplank.png', 'Garen.png', 'Gnar.png', 'Gragas.png', 'Graves.png', 'Hecarim.png', 'Heimerdinger.png', 'Illaoi.png', 'Irelia.png', 'Ivern.png', 'Janna.png', 'JarvanIV.png', 'Jax.png', 'Jayce.png', 'Jhin.png', 'Jinx.png', 'Kaisa.png', 'Kalista.png', 'Karma.png', 'Karthus.png', 'Kassadin.png', 'Katarina.png', 'Kayle.png', 'Kayn.png', 'Kennen.png', 'Khazix.png', 'Kindred.png', 'Kled.png', 'KogMaw.png', 'Leblanc.png', 'LeeSin.png', 'Leona.png', 'Lillia.png', 'Lissandra.png', 'Lucian.png', 'Lulu.png', 'Lux.png', 'Malphite.png', 'Malzahar.png', 'Maokai.png', 'MasterYi.png', 'MissFortune.png', 'MonkeyKing.png', 'Mordekaiser.png', 'Morgana.png', 'Nami.png', 'Nasus.png', 'Nautilus.png', 'Neeko.png', 'Nidalee.png', 'Nocturne.png', 'Nunu.png', 'Olaf.png', 'Orianna.png', 'Ornn.png', 'Pantheon.png', 'Poppy.png', 'Pyke.png', 'Qiyana.png', 'Quinn.png', 'Rakan.png', 'Rammus.png', 'RekSai.png', 'Rell.png', 'Renekton.png', 'Rengar.png', 'Riven.png', 'Rumble.png', 'Ryze.png', 'Samira.png', 'Sejuani.png', 'Senna.png', 'Seraphine.png', 'Sett.png', 'Shaco.png', 'Shen.png', 'Shyvana.png', 'Singed.png', 'Sion.png', 'Sivir.png', 'Skarner.png', 'Sona.png', 'Soraka.png', 'Swain.png', 'Sylas.png', 'Syndra.png', 'TahmKench.png', 'Taliyah.png', 'Talon.png', 'Taric.png', 'Teemo.png', 'Thresh.png', 'Tristana.png', 'Trundle.png', 'Tryndamere.png', 'TwistedFate.png', 'Twitch.png', 'Udyr.png', 'Urgot.png', 'Varus.png', 'Vayne.png', 'Veigar.png', 'Velkoz.png', 'Vi.png', 'Viego.png', 'Viktor.png', 'Vladimir.png', 'Volibear.png', 'Warwick.png', 'Xayah.png', 'Xerath.png', 'XinZhao.png', 'Yasuo.png', 'Yone.png', 'Yorick.png', 'Yuumi.png', 'Zac.png', 'Zed.png', 'Ziggs.png', 'Zilean.png', 'Zoe.png', 'Zyra.png']

game.js

1 hero

? 英雄類,控制是否顯示,是否選中,當前坐標位置和二維陣列的index ,copy方法是復制當前物件

2.Queue

? 佇列,先進先出

3.point

? 點位物件,入參 英雄物件,獲取英雄物件的 坐標位置 和陣列下標

4.parent

? 畫地圖時存的物件,存的上一個點位的坐標和下標

5.game

? 5.1 init

? 初始化畫布,初始化英雄串列,初始化點擊方法

? 5.2 plant_rect

? 根據 xy 寬高 畫遮罩層

? 5.3 erase

? 清除畫線畫布 的線和 遮罩

? 5.4 hero_click

? 點擊方法,根據坐標獲取選中的英雄,畫遮罩層,判斷當前是否有兩個選中 ,如果是 是否相同,相同的話調取畫線方法,畫線方法回傳布林值 代表畫線是否 成功,成功后清除畫布

? 5.5 plant_line

? 畫線方法,判斷兩個英雄中間是否有 英雄,使用廣度優先搜索

? 5.6 getRandomHeros

? 隨機獲取heros物件里的英雄 并復制一份

? 5.7 random_sort

? 隨機英雄串列

/**英雄*/
class hero{
    constructor(src,name,xy,pos,show=true,selected=false){
        this.image = new Image()
        this.image.src = src
        this.name = name;    //名稱
        this.show  = show; //默認顯示
        // this.selected = selected; //默認沒有選中
        this.xy = xy;  //元素位置
        this.pos = pos; //陣列坐標
    }

    copy(){
        let src = this.image.src;
        let name = this.name;
        let xy = this.xy;
        let pos = this.pos;
        let h2 = new hero(src,name,xy,pos)
        return h2;
    }

    toString(){
        return JSON.stringify(this)
    }
}
/**佇列*/
class Queue{
    constructor(){
        this.items=[];
    }
    //入隊
    enqueue() {
        var len = arguments.length;
        if (len == 0) {
            return;
        }
        for (var i = 0; i < len; i++) {
            this.items.push(arguments[i])
        }
    }
    //出隊
    dequeue() {
        var result = this.items.shift();
        return typeof result != 'undefined' ? result : false;
    }

    //出隊
    rdequeue() {
        var result = this.items.pop();
        return typeof result != 'undefined' ? result : false;
    }

    //佇列是否為空
    isEmpty() {
        return this.items.length == 0;
    }
    //回傳佇列長度
    size() {
        return this.items.length;
    }
    //清空佇列
    clear() {
        this.items = [];
    }
    //回傳佇列
    show() {
        return this.items;
    }
}

class point{
    constructor(hero) {
        let xy = hero.xy.split(",");
        let pos = hero.pos.split(",");
        this.x = parseInt(xy[0]);
        this.y = parseInt(xy[1]);
        this.pos_y = parseInt(pos[0]);
        this.pos_x = parseInt(pos[1]);

    }
}

class parent{
    constructor() {
        this.px = 0;
        this.py = 0;
        this.step = 0;
    }
}
var game = {
    canvas: document.getElementById("main-canvas"),
    plant_canvas: document.getElementById("main-canvas2"), //畫線
    ctx: null,
    plant_ctx: null,
    then: null,
    requestAnimationFrame: null,
    lol_arr: new Array(),
    lol_arr_map: new Array(),
    score: 0,
    selected_hero: {},
    /**初始化*/
    init: function(){
        this.ctx = game.canvas.getContext('2d');
        this.plant_ctx = game.plant_canvas.getContext('2d');
        w = window;
        this.requestAnimationFrame = w.requestAnimationFrame || w.webkitRequestAnimationFrame || w.msRequestAnimationFrame || w.mozRequestAnimationFrame;
        this.canvas.width = 1920,this.canvas.height = 1080;
        this.plant_canvas.width = 1920,this.plant_canvas.height = 1080;
        this.lol_arr = this.getRandomHeros()
        this.lol_arr_map = JSON.parse(JSON.stringify(this.lol_arr));
        this.plant_canvas.addEventListener('click', this.hero_click, false);
    },
    /**選中遮罩*/
    plant_rect:function (x,y,w,h){
        this.plant_ctx.fillStyle = "rgba(192, 80, 77, 0.7)";
        this.plant_ctx.fillRect(x,y,w,h);
    },
    /**清除畫線和遮罩*/
	erase:function(){
        let _this = game;
        setTimeout(function(line){
            //獲取當前時間
            _this.plant_ctx.clearRect(0,0,1920,1080);
            _this.ctx.clearRect(0,0,1920,1080);
        },1000);
    },
    /**點擊*/
    hero_click: function(e){
        let _this = game;
        let x = Math.floor(e.clientX/120);
        let y = Math.floor(e.clientY/120);
        let h = _this.lol_arr[y][x];
        if(h == undefined || h.constructor != hero){
            _this.selected_hero = {};
            _this.erase();
            return;
        }
        let xy = h.xy.split(",");
        _this.plant_rect(xy[0],xy[1],120,120);

        if(JSON.stringify(_this.selected_hero) == "{}"){
            _this.selected_hero = h;
        }else{
            if(_this.selected_hero.toString() != h.toString() && _this.selected_hero.name == h.name){
                console.log("一致")
                console.log(new point(_this.selected_hero),new point(h))
                let flag = _this.plant_line(new point(_this.selected_hero),new point(h));
                if(flag){
                    _this.selected_hero.show = false;
                    h.show = false;
                }
            }else{
                console.log("不一致")
            }
            _this.selected_hero = {};
            _this.erase();
        }

        console.log("選中了",h);
    },
    /**4方位*/
    plant_line: function(begin,end){
        let _this = game;
        let q = new Queue();
        q.enqueue(begin)
        let dx = [0,1,0,-1];  //x方向
        let dy = [-1,0,1,0];  //y方向

        let map = new Array();
        for(var i = 0; i<8; i++) {
            for (var i2 = 0; i2 < 11; i2++) {
                if(map[i] == undefined){
                    map[i] = new Array();
                }
                map[i][i2] = new parent();
            }
        }
        /**BFS*/
        while(!q.isEmpty()){
            let p = q.dequeue();

            if(p.pos_x == end.pos_x && p.pos_y == end.pos_y) {
                let x = p.pos_x;
                let y = p.pos_y;
                let tmpx = 0;
                let tmpy = 0;
                _this.plant_ctx.beginPath();
                _this.plant_ctx.lineWidth = 15;
                _this.plant_ctx.strokeStyle = "#005500";
                _this.plant_ctx.moveTo(end.x+60,end.y+60);
                //列印
                while(x != begin.pos_x || y != begin.pos_y) {
                    tmpx = map[y][x].px;
                    tmpy = map[y][x].py;
                    x = tmpx;
                    y = tmpy;
                    _this.plant_ctx.lineTo(x*120+60,y*120+60);
                    _this.plant_ctx.stroke();
                }
                _this.plant_ctx.closePath();
                _this.lol_arr_map[begin.pos_y][begin.pos_x] = begin.toString();
                _this.lol_arr_map[end.pos_y][end.pos_x] = begin.toString();
                return true;
            }else{
                for(var i = 0;i < 4; i++){
                    let nx = p.pos_x + dx[i];
                    let ny = p.pos_y + dy[i];
                    if(nx >= 0 && nx < 11 && ny >= 0 && ny < 8) {
                        if(_this.lol_arr_map[ny][nx].constructor == String){
                            if(map[ny][nx].step == 0){
                                let p2 = new point(new hero("","",[ny,nx].toString(),[ny,nx].toString()));
                                q.enqueue(p2);
                                map[ny][nx].step = map[p.pos_y][p.pos_x].step + 10;
                                map[ny][nx].px = p.pos_x;
                                map[ny][nx].py = p.pos_y;
                            }
                        }else if(nx == end.pos_x && ny == end.pos_y){
                            q.clear();
                            let p3 = new point(new hero("","",[ny,nx].toString(),[ny,nx].toString()));
                            q.enqueue(p3);
                            map[ny][nx].step = map[p.pos_y][p.pos_x].step + 10;
                            map[ny][nx].px = p.pos_x;
                            map[ny][nx].py = p.pos_y;
                            break;
                        }

                    }
                }
            }
        }
        return false;
    },
    /**生成隨機陣列*/
    getRandomHeros: function(){
        var arr = new Array();
        // var i = 0,i2 = 0;
        let last_hero = new hero();
        let num = 1;
        for(var i = 0; i<8; i++){
            for(var i2 = 0; i2<11; i2++){
                if(arr[i] == undefined){
                    arr[i] = new Array()
                }
                //四周加上默認值
                if(i==0 || i == 7 || i2 == 0 || i2 ==10){
                    arr[i][i2] = [i,i2].toString()
                }else{
                    let h;
                    if(num%2 == 0){
                        last_hero.xy = [i2*120,i*120].toString();
                        last_hero.pos = [i,i2].toString();
                        h = last_hero.copy();
                    }else{
                        let xy= [i2*120,i*120];
                        let r = Math.ceil(Math.random() * heros.length-1) //從英雄池里隨機獲取
                        let h_n = heros[r]; //英雄名
                        h = new hero(src="../hero_img/"+h_n,name=h_n.split(".")[0],xy=xy.toString(),pos=[i,i2].toString()) //英雄
                        last_hero = h.copy();
                    }
                    arr[i][i2] = h
                }
                num++;
            }
        }
        arr = game.random_sort(arr)
        //打亂順序
        return arr;
    },
    /**陣列隨機*/
    random_sort: function(dic){
        let ylen = dic.length;
        let xlen = dic[0].length;
        for(var i = 0; i<ylen; i++) {
            for (var i2 = 0; i2 < xlen; i2++) {
                let yr = Math.ceil(Math.random() * (ylen-2))
                let xr = Math.ceil(Math.random() * (xlen-2));
                let h = dic[yr][xr];
                if (h.constructor === hero && dic[i][i2].constructor === hero){
                    let lsh = dic[yr][xr].copy();
                    let lsh2 = dic[i][i2].copy();
                    dic[yr][xr].name = lsh2.name;
                    dic[i][i2].name = lsh.name;
                    dic[yr][xr].image = lsh2.image;
                    dic[i][i2].image = lsh.image;
                }
            }
        }
        return dic;
    },
    render: function(){
        for(var i = 0; i<8; i++){
            for(var i2 = 0; i2<11; i2++){
                let h = game.lol_arr[i][i2];
                if (h.constructor === hero){
                    if(h.show){
                        let xy_arr = h.xy.split(",")
                        game.ctx.drawImage(h.image,xy_arr[0],xy_arr[1]);
                    }
                }
            }
        }
    },
    main: function(){
        game.render();
        requestAnimationFrame(game.main)
    },

}
game.init()
game.main()

三、效果

my_animation


# 總結

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/278547.html

標籤:其他

上一篇:C1任務01資訊編碼

下一篇:2021.4.10CAS月賽H題題解

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more