制作一款打飛機游戲54:子彈編輯UI

今天,我們將繼續工作在我們的子彈模式系統上,創建一些簡單的子彈,并為其設計用戶界面(UI)。

自動保存功能的重要性

首先,我想提一下自動保存功能。這個功能在編輯器中非常重要,因為我們經常犯錯,需要頻繁地保存進度。我計劃在不久的將來實現這個功能,但目前先擱置一下。

編輯器滾動問題

另外,我注意到一個編輯器中的問題:當編輯列表末尾的精靈時,退出編輯模式后,滾動條會停留在列表末尾,這不是我想要的。我想記住退出前的滾動位置,并在返回時恢復它。這個問題我會在未來的某一集中解決。

子彈模式編輯器UI設計

現在,讓我們回到子彈模式編輯器。我們可以創建子彈模式,但還需要一個UI來編輯這些模式。

  • ?選擇模式?:首先,我們需要一個界面來顯示當前選擇的模式。當我們點擊時,可以更新并射擊選定的模式。
  • ?創建按鈕?:接下來,我將創建一個按鈕,用于顯示當前選定模式的編號。
編輯模式屬性
  • ?基礎按鈕?:首先,我創建了一個基礎按鈕,用于顯示當前選定模式的編號。
  • ?模式類型按鈕?:然后,我添加了一個按鈕來顯示模式的類型(例如,“Sal Pat 1”)。
  • ?循環顯示屬性?:對于每個模式,我們都有一些屬性,如角度、速度、動畫等。我創建了一個循環來顯示這些屬性的值,并為它們添加了標簽。
編輯屬性值

接下來,我們需要能夠編輯這些屬性值。

  • ?光標導航?:我實現了光標導航功能,使用戶可以通過上下鍵在屬性之間移動。
  • ?編輯屬性?:當用戶按下回車鍵時,會彈出一個菜單,允許用戶編輯當前選定屬性的值。
創建和刪除模式
  • ?創建新模式?:我還添加了創建新模式的功能。當用戶選擇了一個不存在的模式編號時,會自動創建一個新的模式。
  • ?刪除模式?:同樣,我也實現了刪除模式的功能。當用戶點擊刪除按鈕時,會刪除當前選定的模式。
  • ?靜態與瞄準射擊?:目前所有的射擊都是靜態的,但未來我們計劃實現瞄準射擊功能。這將是一個挑戰,因為我們需要考慮如何將這些系統整合在一起。
  • ?模式修飾符?:我還提出了一個想法,即創建模式修飾符。例如,一個模式有時不會發射子彈,或者連續發射多次子彈。這些都需要我們進一步思考和實現。
pico-8 cartridge // http://www.pico-8.com
version 41
__lua__
--todo
-- autosave
-- prevent scrolling after exiting to list
-- copy?
-- nudge values
-- direct spritemap selectionfunction _init()--- customize here ---#include shmup_myspr.txt#include shmup_myspr_meta.txtfile="shmup_myspr.txt"filem="shmup_myspr_meta.txt"arrname="myspr"data=mysprreload(0x0,0x0,0x2000,"cowshmup.p8")------------------------[[meta={}for x=1,#data domobj={}mobj[1]="spr "..xmobj[2]=0meta[x]=mobjend]]--debug={}msg={}_drw=draw_list_upd=update_listmenuitem(1,"export",export)curx=1cury=1scrolly=0scrollx=0poke(0x5f2d, 1)
endfunction _draw()_drw()if #msg>0 thenbgprint(msg[1].txt,64-#msg[1].txt*2,80,14)msg[1].t-=1if msg[1].t<=0 thendeli(msg,1)end  end-- debug --cursor(4,4)color(8)for txt in all(debug) doprint(txt)end
endfunction _update60()dokeys()mscroll=stat(36)_upd()
endfunction dokeys()if stat(30) thenkey=stat(31)if key=="p" thenpoke(0x5f30,1)endelsekey=nilendend
-->8
--draw
function draw_edit()-- backgroundfillp(0b11001100001100111100110000110011)rectfill(0,0,127,127,33)fillp(?)line(63,0,63,127,13)line(0,63,127,63,13)fillp()draw_menu()-- draw spriteif selspr thenif meta[selspr][2]>0 thenwrapmspr(meta[selspr][2],63,63)msprc(selspr,63,63)elsewrapmspr(selspr,63,63)endend-- blinking dotif (time()*2)%1<0.5 thenpset(63,63,rnd({8,13,7,15}))end
endfunction draw_list()fillp(0b11001100001100111100110000110011)rectfill(0,0,127,127,33)fillp(?)line(63,0,63,127,13)line(0,63,127,63,13)fillp()draw_menu()-- draw spritelocal mymnu=menu[cury][curx]if mymnu and mymnu.cmdy thenif meta[mymnu.cmdy][2]>0 thenwrapmspr(meta[mymnu.cmdy][2],63,63)msprc(mymnu.cmdy,63,63)elsewrapmspr(mymnu.cmdy,63,63)endendif (time()*2)%1<0.5 thenpset(63,63,rnd({8,13,7,15}))end
endfunction draw_table()cls(2)draw_menu()
endfunction draw_menu()--spr(0,0,0,16,16)if menu thenfor i=1,#menu dofor j=1,#menu[i] dolocal mymnu=menu[i][j]local c=mymnu.c or 13if i==cury and j==curx thenc=7if _upd==upd_type thenc=0endendbgprint(mymnu.w,mymnu.x+scrollx,mymnu.y+scrolly,13)   bgprint(mymnu.txt,mymnu.x+scrollx,mymnu.y+scrolly,c) endendendif _upd==upd_type thenlocal mymnu=menu[cury][curx]local txt_bef=sub(typetxt,1,typecur-1)local txt_cur=sub(typetxt,typecur,typecur)local txt_aft=sub(typetxt,typecur+1)txt_cur=txt_cur=="" and " " or txt_cur if (time()*2)%1<0.5 thentxt_cur="\^i"..txt_cur.."\^-i"endlocal txt=txt_bef..txt_cur..txt_aftbgprint(txt,mymnu.x+scrollx,mymnu.y+scrolly,7)endend-->8
--update
function update_edit()refresh_edit()if btnp(??) thencury-=1endif btnp(??) thencury+=1endcury=(cury-1)%#menu+1cury-=mscrollcury=mid(1,cury,#menu)if cury==1 thencurx=1if btnp(??) thenselspr-=1elseif btnp(??) thenselspr+=1endselspr=mid(1,selspr,#data)	elseif cury==11 thencurx=1elsecurx=2endif btnp(🅾?) then_drw=draw_list_upd=update_listrefresh_list()cury=selsprcurx=1scrolly=0scrollx=0returnendif btnp(?) thenlocal mymnu=menu[cury][curx]if mymnu.cmd=="editval" then_upd=upd_typelocal s=tostr(data[mymnu.cmdy][mymnu.cmdx])if s=="[nil]" or s==nil thens=""endtypetxt=stypecur=#typetxt+1typecall=enter_editelseif mymnu.cmd=="editcol" then_upd=upd_typelocal s=tostr(meta[selspr][2])typetxt=stypecur=#typetxt+1typecall=enter_editcolelseif mymnu.cmd=="sprhead" then_upd=upd_typelocal s=tostr(meta[selspr][1])typetxt=stypecur=#typetxt+1typecall=enter_editname elseif mymnu.cmd=="delspr" thendeli(data,selspr)deli(meta,selspr)selspr-=1if selspr==0 thenselspr=1end_drw=draw_list_upd=update_listrefresh_list()cury=selsprcurx=1scrolly=0scrollx=0return   endend
endfunction update_list()refresh_list()if btnp(??) thencury-=1endif btnp(??) thencury+=1endcury=(cury-1)%#menu+1cury-=mscrollcury=mid(1,cury,#menu)curx=1local mymnu=menu[cury][curx]if mymnu.y+scrolly>110 thenscrolly-=4endif mymnu.y+scrolly<10 thenscrolly+=4endscrolly=min(0,scrolly)if mymnu.x+scrollx>110 thenscrollx-=2endif mymnu.x+scrollx<20 thenscrollx+=2endscrollx=min(0,scrollx)if btnp(?) thenlocal mymnu=menu[cury][curx]if mymnu.cmd=="newline" thenadd(data,{0,0,0,0,0,0})add(meta,{"new",0})elseif mymnu.cmd=="editspr" thenselspr=mymnu.cmdy_upd=update_edit_drw=draw_editscrolly=0scrollx=0refresh_edit()cury=1endend
endfunction update_table()refresh_table()if btnp(??) thencury-=1endif btnp(??) thencury+=1endcury=(cury-1)%#menu+1cury-=mscrollcury=mid(1,cury,#menu)if btnp(??) thencurx-=1endif btnp(??) thencurx+=1endif cury<#menu thencurx=(curx-2)%(#menu[cury]-1)+2elsecurx=1endlocal mymnu=menu[cury][curx]if mymnu.y+scrolly>110 thenscrolly-=4endif mymnu.y+scrolly<10 thenscrolly+=4endscrolly=min(0,scrolly)if mymnu.x+scrollx>110 thenscrollx-=2endif mymnu.x+scrollx<20 thenscrollx+=2endscrollx=min(0,scrollx)if btnp(?) thenlocal mymnu=menu[cury][curx]if mymnu.cmd=="edit" then_upd=upd_typetypetxt=tostr(mymnu.txt)typecur=#typetxt+1typecall=enter_tableelseif mymnu.cmd=="newline" thenadd(data,{0})  elseif mymnu.cmd=="newcell" thenadd(data[mymnu.cmdy],0)endend
endfunction upd_type()if key thenif key=="\r" then-- enter   poke(0x5f30,1)typecall()returnelseif key=="\b" then--backspaceif typecur>1 thenif typecur>#typetxt thentypetxt=sub(typetxt,1,#typetxt-1)elselocal txt_bef=sub(typetxt,1,typecur-2)local txt_aft=sub(typetxt,typecur)typetxt=txt_bef..txt_aftendtypecur-=1endelseif typecur>#typetxt thentypetxt..=keyelselocal txt_bef=sub(typetxt,1,typecur-1)local txt_aft=sub(typetxt,typecur)typetxt=txt_bef..key..txt_aftendtypecur+=1endendif btnp(??) thentypecur-=1endif btnp(??) thentypecur+=1endtypecur=mid(1,typecur,#typetxt+1)
end
-->8
--toolsfunction bgprint(txt,x,y,c)print("\#0"..txt,x,y,c)
endfunction split2d(s)local arr=split(s,"|",false)for k, v in pairs(arr) doarr[k] = split(v)endreturn arr
endfunction wrapmspr(si,sx,sy)if si==nil thenbgprint("[nil]",sx-5*2+1,sy-2,14)returnendif myspr[si]==nil thenbgprint("["..si.."]",sx-5*2+1,sy-2,14)returnendlocal ms=myspr[si]if ms[8] then--check for loopsif ms[8]==si thenbgprint("[loop]",sx-6*2+1,sy-2,14)returnelseif checkloop(ms,10) thenbgprint("[loop]",sx-6*2+1,sy-2,14)return   endendendmspr(si,sx,sy)
endfunction checkloop(ms,depth)depth-=1if depth<=0 thenreturn trueendif ms==nil thenreturn trueendif ms[8] thenreturn checkloop(myspr[ms[8]],depth)elsereturn falseend
endfunction mspr(si,sx,sy)local ms=myspr[si]sspr(ms[1],ms[2],ms[3],ms[4],sx-ms[5],sy-ms[6],ms[3],ms[4],ms[7]==1)if ms[7]==2 thensspr(ms[1],ms[2],ms[3],ms[4],sx-ms[5]+ms[3],sy-ms[6],ms[3],ms[4],true)endif ms[8] thenmspr(ms[8],sx,sy)end
endfunction msprc(si,sx,sy)local _x,_y,_w,_h,_ox,_oy,_fx,_nx=unpack(myspr[si])if _fx==2 then_w*=2end--sspr(_x,_y,_w,_h,sx-_ox,sy-_oy,_w,_h,_fx==1)rect(sx-_ox,sy-_oy,sx-_ox+_w-1,sy-_oy+_h-1,rnd({8,14,15}))
endfunction spacejam(n)local ret=""for i=1,n doret..=" "endreturn ret
end
-->8
--i/o
function export()local s=arrname.."=split2d\""for i=1,#data doif i>1 thens..="|"endfor j=1,#data[i] doif j>1 thens..=","ends..=data[i][j]endends..="\""printh(s,file,true)local s="meta=split2d\""for i=1,#meta doif i>1 thens..="|"endfor j=1,#meta[i] doif j>1 thens..=","ends..=meta[i][j]endends..="\""printh(s,filem,true)add(msg,{txt="exported!",t=120})--debug[1]="exported!"
end
-->8
--ui
function refresh_edit()menu={}add(menu,{{txt="< "..selspr.." "..meta[selspr][1].." >",w="",cmd="sprhead",x=2,y=2}})local lab={"  x:","  y:","wid:","hgt:"," ox:"," oy:"," fx:","nxt:"}for i=1,8 dolocal s=tostr(data[selspr][i])if s==nil thens="[nil]"endadd(menu,{{txt=lab[i],w="    ",x=2,y=3+i*7},{txt=s,w=spacejam(#s),cmd="editval",cmdy=selspr,cmdx=i,x=2+16,y=3+i*7}}) endlocal coltxt=meta[selspr][2]==0 and "off" or tostr(meta[selspr][2])add(menu,{{txt="col:",w=spacejam(4),x=2,y=4+9*7},{txt=coltxt,w=spacejam(#coltxt),cmd="editcol",cmdy=selspr,x=19,y=4+9*7}})add(menu,{{txt="delete",w="",cmd="delspr",x=2,y=5+10*7}})
endfunction refresh_list()menu={}for i=1,#data dolocal lne={}local linemax=#data[i]if i==cury thenlinemax+=1  endadd(lne,{txt=i.." "..meta[i][1],w="",cmd="editspr",cmdy=i,x=2,y=-4+6*i})add(menu,lne)endadd(menu,{{txt=" + ",w="   ",cmd="newline",x=2,y=-4+6*(#data+1)+2, }})
endfunction refresh_table()menu={}for i=1,#data dolocal lne={}local linemax=#data[i]if i==cury thenlinemax+=1  endadd(lne,{txt=i,w="   ",cmd="",x=4,y=-4+8*i,c=2  })for j=1,linemax doif j==#data[i]+1 thenadd(lne,{txt="+",w=" ",cmd="newcell",cmdy=i,x=-10+14*(j+1),y=-4+8*i, })elseadd(lne,{txt=data[i][j],cmd="edit",cmdx=j,cmdy=i,x=-10+14*(j+1),y=-4+8*i,w="   "})endendadd(menu,lne)endadd(menu,{{txt=" + ",w="   ",cmd="newline",x=4,y=-4+8*(#data+1), }})
endfunction enter_table()local mymnu=menu[cury][curx]local typeval=tonum(typetxt)if typeval==nil thenif mymnu.cmdx==#data[mymnu.cmdy] and typetxt=="" then--delete celldeli(data[mymnu.cmdy],mymnu.cmdx)if mymnu.cmdx==1 thendeli(data,mymnu.cmdy)end_upd=update_tablereturnend  typeval=0enddata[mymnu.cmdy][mymnu.cmdx]=typeval_upd=update_tablerefresh_table()
endfunction enter_edit()local mymnu=menu[cury][curx]local typeval=tonum(typetxt)if mymnu.cmdx==8 thenif typeval!=nil thenif data[mymnu.cmdy][7]==nil thendata[mymnu.cmdy][7]=0endendendif typeval==nil thenif mymnu.cmdx>=7 and mymnu.cmdx==#data[mymnu.cmdy] thendeli(data[mymnu.cmdy],mymnu.cmdx)elsedata[mymnu.cmdy][mymnu.cmdx]=0endelsedata[mymnu.cmdy][mymnu.cmdx]=typevalend _upd=update_editrefresh_edit()
endfunction enter_editcol()local mymnu=menu[cury][curx]local typeval=tonum(typetxt)if typeval==nil or typeval<1 thenmeta[selspr][2]=0elsemeta[selspr][2]=typevalend_upd=update_editrefresh_edit()
endfunction enter_editname()local mymnu=menu[cury][curx]local typeval=filter(tostr(typetxt))if typeval!="" thenmeta[selspr][1]=typevalend_upd=update_editrefresh_edit()
endfunction filter(s)local s2=""for i=1,#s dolocal c=s[i]if c=="," thenc="."elseif c=="|" thenc="/"ends2..=cendreturn s2
end
__gfx__
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00700700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00077000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00077000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00700700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
__map__
0000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/81402.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81402.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81402.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

線程封裝與互斥

目錄 線程互斥 進程線程間的互斥相關背景概念 互斥量mutex 互斥量的接口 初始化互斥量有兩種方法&#xff1a; 銷毀互斥量 互斥量加鎖和解鎖 改進售票系統 互斥量實現原理探究 互斥量的封裝 線程互斥 進程線程間的互斥相關背景概念 臨界資源&#xff1a;多線程執行流共…

【系統設計】2WTPS生產級數據處理系統設計Review

歡迎來到啾啾的博客&#x1f431;。 記錄學習點滴。分享工作思考和實用技巧&#xff0c;偶爾也分享一些雜談&#x1f4ac;。 有很多很多不足的地方&#xff0c;歡迎評論交流&#xff0c;感謝您的閱讀與評論&#x1f604;。 目錄 反正能用的系統問題分析方案一&#xff1a;簡單多…

歷年北京理工大學保研上機真題

2025北京理工大學保研上機真題 2024北京理工大學保研上機真題 2023北京理工大學保研上機真題 在線測評鏈接&#xff1a;https://pgcode.cn/problem?classification1 判斷身份證校驗位是否正確 題目描述 給定一個身份證號碼&#xff0c;判斷其最后一位校驗位是否正確。 如果…

uni-app學習筆記十--vu3綜合練習

鞏固提升前面學習的知識點,主要涉及下面這方面的運用&#xff1a; 1.v-for運用; 2.v-model雙向綁定&#xff1b; 3.confirm確認事件&#xff1b; 4.click點擊事件&#xff1b; 5.控制按鈕的可點擊和不可點擊&#xff1b; 6.集合刪除和追加元素&#xff0c;獲取集合元素的…

AI時代新詞-AI芯片(AI - Specific Chip)

一、什么是AI芯片&#xff1f; AI芯片&#xff08;AI - Specific Chip&#xff09;是指專為人工智能&#xff08;AI&#xff09;計算任務設計的芯片。與傳統的通用處理器&#xff08;如CPU&#xff09;相比&#xff0c;AI芯片針對深度學習、機器學習等AI應用進行了優化&#x…

華為云Astro前端頁面數據模型選型及綁定IoTDA物聯網數據實施指南

目錄 1. 選擇合適的數據模型類型及推薦理由 自定義模型: 對象模型: 服務模型: 事件模型: 推薦方案: 2. 數據模型之間的邏輯關系說明 服務模型獲取數據: 對象模型承接數據: 前端組件綁定顯示: 數據保存與反饋(可選): (可選)事件模型實時更新: 小結 …

因重新安裝python新版本,pycharm提示找不到python.exe(No Python at“c:\python.exe“)問題解決方法

1、安裝新版本python后提示錯誤如下&#xff1a; 2、打開設置 3、添加Interpreter 4、配置程序的安裝路徑 5、問題完美解決。

一文帶你徹底理清C 語言核心知識 與 面試高頻考點:從棧溢出到指針 全面解析 附帶筆者手寫2.4k行代碼加注釋

引言&#xff1a;C 語言的魅力與挑戰 從操作系統內核到嵌入式系統&#xff0c;從高性能計算到網絡編程&#xff0c;C 語言高效、靈活和貼近硬件的特性&#xff0c;始終占據著不可替代的地位。然而&#xff0c;C 語言的強大也伴隨著較高的學習曲線&#xff0c;尤其是指針、內存管…

GitHub 趨勢日報 (2025年05月22日)

本日報由 TrendForge 系統生成 https://trendforge.devlive.org/ &#x1f310; 本日報中的項目描述已自動翻譯為中文 &#x1f4c8; 今日整體趨勢 Top 10 排名項目名稱項目描述今日獲星總星數語言1microsoft/WSLLinux的Windows子系統? 2524? 26627C2HeyPuter/puter&#x1…

AI智能混剪核心技術解析(一):字幕與標題生成的三大支柱-字幕與標題生成-優雅草卓伊凡

AI智能混剪核心技術解析&#xff08;一&#xff09;&#xff1a;字幕與標題生成的三大支柱-字幕與標題生成-優雅草卓伊凡 引言&#xff1a;文字到畫面的橋梁工程 在AI視頻混剪系統中&#xff0c;字幕與標題生成是連接語言表達與視覺呈現的核心樞紐。優雅草卓伊凡團隊將該功能拆…

如何通過PHPMyadmin對MYSQL數據庫進行管理?

管理MySQL數據庫時&#xff0c;使用PHPMyAdmin是一種常見且方便的方式。PHPMyAdmin是一個基于Web的數據庫管理工具&#xff0c;提供了許多功能&#xff0c;如數據庫創建、表管理、數據查詢、用戶權限設置等。本文將介紹如何通過PHPMyAdmin對MySQL數據庫進行管理&#xff0c;包括…

如何解決大模型返回的JSON數據前后加上```的情況

環境說明 springboot 應用使用dashscope-sdk-java對接阿里百練 deepseek v3模型 問題表現 已經指定了輸出json格式&#xff0c;但指令不明確&#xff0c;輸出JSON格式的寫法如下 注&#xff1a;提示詞一開始是能正常功能的&#xff0c;但過了幾天就出現了異常&#xff0c;原…

uniapp實現H5、APP、微信小程序播放.m3u8監控視頻

目錄 1.APP播放.m3u8監控視頻 2.H5播放.m3u8監控視頻 3.微信小程序播放.m3u8監控視頻 最近在寫一個uniapp實現h5、app、微信小程序兼容三端的播放監控視頻功能&#xff0c;我原本以為一套代碼多處運行&#xff0c;但事實并非如此&#xff0c;h5可以運行&#xff0c;微信小程…

螢石云實際視頻實時接入(生產環境)

螢石云視頻接入 本示例可用于實際接入螢石云開放平臺視頻&#xff0c;同時支持音頻輸入和輸出。 實際優化內容 1.動態獲取token 2.切換各公司和車間時&#xff0c;自動重新初始化播放器 let EZUIKit null; // 第三方庫引用 let EZUIKitPlayers []; // 播放器實例數組 le…

【Dify平臺】使用Dify API 實現網頁內嵌式AI助手

使用 Dify API 實現網頁內嵌式 AI 助手 一. 引言二. Dify API 概述三. 實現網頁內嵌式 AI 助手的技術架構四. 前端實現五. 后端實現六. 功能擴展與優化七. 測試與部署一. 引言 隨著 AI 技術的不斷發展,越來越多的企業希望將智能助手集成到自己的網頁中,實現用戶自動接待、問…

mysql8配置文件my.ini講解,原汁原味直接拷貝再講解

文章目錄 一、原英文版本&#xff0c;不帶注釋二、由原版逐字翻譯成的中文版&#xff08;行行對應&#xff09;三、最常用的配置 一、原英文版本&#xff0c;不帶注釋 # Other default tuning values # MySQL Server Instance Configuration File # -------------------------…

Go語言中內存釋放 ≠ 資源釋放

// QueryUserFileMetas : 批量獲取用戶文件信息 func QueryUserFileMetas(username string, limit int) ([]UserFile, error) {stmt, err : mydb.DBConn().Prepare("select file_sha1,file_name,file_size,upload_at," "last_update from tbl_user_file where u…

win11+vs2022 安裝opencv 4.11.0圖解教程

1. 下載opencv opencv官網下載地址&#xff1a;Releases - OpenCV 2. 雙擊運行該exe&#xff0c;即可進行安裝&#xff0c;安裝文件夾可自行選擇 安裝后目錄如下&#xff1a; 3. 配置環境變量 使用win鍵搜索環境變量&#xff0c;選中系統變量中的Path&#xff0c;然后點擊編輯…

【Linux】進程 信號的產生

&#x1f33b;個人主頁&#xff1a;路飛雪吖~ &#x1f320;專欄&#xff1a;Linux 目錄 一、掌握Linux信號的基本概念 &#x1f320;前臺進程 VS 后臺進程 &#x1f320; 小貼士&#xff1a; &#x1fa84;?個系統函數 --- signal() &#x1fa84;查看信號 --- man 7 sign…

Python 網絡編程入門

目錄 一、前言 二、網絡通信基礎12&#xff1a;TCP 與 UDP 協議解析 2.1 TCP 協議&#xff1a;可靠的面向連接通信 2.2 UDP 協7議&#xff1a;無連接的快速通信 2.3 Sock12et&#xff1a;網絡通信的基石 三、TCP 編程實15戰&#xff1a;從單工通信到雙向聊天 3.1 TCP 客…