Unity 環保垃圾回收遊戲
此為元智大學 1112 互動視訊遊戲設計課程的期末專案,與組員 Daniel 透過 Unity 一同開發而成。
Unity Hub 3.4.2Editor Version: 2021.3.24f1
開啟方式
原始碼: clone 本專案或下載並解壓縮後使用 Unity Hub 開啟
僅遊玩: 下載並解壓縮後執行 “Unity-Recycle-Game.exe”
遊戲介紹垃圾分類對於環境保護至關重要。通過正確分類和回收,我們可以減少資源浪費、降低污染、延長資源的使用壽命。垃圾分類還能促進循環經濟,創造就業機會,並培養人們的環保意識和責任感。
然而垃圾分類並非是一件簡單的事情,發展至今垃圾擁有非常多的種類,常發生某個垃圾不知道該分到什麼類的情況,因此我們開發了這款遊戲 咦!這不是垃圾是什麼,希望讓玩家透過這款遊戲了解一些不常見的垃圾應該分到什麼類。
在遊戲中玩家扮演一位探險使者,需要到草地、冰原、沙漠等地方收集垃圾並分類,遊玩過程中能夠學習到不常見的垃圾該分什麼類,探索垃圾的同時還要躲避怪物的追擊,真是十分刺激,搭配非常好聽的背景音樂和音效,彷彿有身歷其境的臨場感,非常喝勝。
遊戲玩法玩 ...
Lightsplit 最少轉帳次數研究實作
最近和朋友使用 Lightsplit 分帳覺得很方便,其中一個功能是使用者只須在裡面以筆為單位新增所有帳務,程式就會自動計算出每個人的結餘以及最少的轉帳次數及轉帳方式。一開始覺得這個功能並沒有很難,但仔細想想後發現其實不容易,閒著沒事嘗試自己研究一下並記錄此篇文章。
實作時偷懶只想了一些簡單測資,不保證功能完全正確
思路
無論有多少筆帳,每個人最後的結餘只會有一個數字
綜觀來看,每個人都會有一個付出的金額(先付的金額總和),以及得到的金額價值(讓別人先幫自己付),相減即是結餘,為正表應該收到別人的轉帳,為負則應該轉帳給別人
使用 Minimum Cost Maximum Flow (MCMF) 找出最小轉帳次數及方式
想到之前上課學過 MCMF 演算法,利用結餘建立 edge,每個 edge 之 cost 表轉帳次數,感覺可以解決這個問題,便建立 MCMF 資料模型嘗試得出正確結果
資料轉換以使用 Lightsplit 時做的設定可得到的資料模擬測資
123441 1000 1 2 3 42 500 1 23 70 2 3
第一個數字 4 表群組中共有 4 人 (編號 ...
Data Mining with Kaggle YouTube Videos and Channels Metadata
Github LinkData-Mining-with-Kaggle-YouTube-Videos-and-Channels-Metadata
DatasetYouTube Videos and Channels Metadata
Usage1. Create Enviroments
Windows
1234python -m venv venvvenv\Scripts\activatepip install -r requirements.txtjupyter lab
2. Download Dataset
Download dataset from YouTube Videos and Channels Metadata
Put YouTubeDataset_withChannelElapsed.csv under source folder
3. Open data-mining.ipynb On JupyterProcessing1. Data Preprocessing
Unique: Set videoID to index and Drop duplicate d ...
YOLOv7 on Windows (四) 引用模型與自瞄實現代碼
要將訓練好的模型實現自瞄我分為以下步驟
引入模型
擷取螢幕截圖
預測物體位置並取得中心座標
取得鼠標移動 offset
微調 offset
移動鼠標並射擊
以下將以 Aimlab Gridshot 為例實作
前置準備想要引入模型須先準備一些依賴
hubconf.py 引入模型的依賴文件,可於這裡下載,似乎也可直接在線調用
models、utils 直接複製 YOLOv7 目錄中的 models、utils 兩個資料夾即可
訓練好的模型
所有檔案放入同一目錄
best.pt 為訓練好的模型,以下將解釋實現步驟
import 與設定參數根據自己的配置設定參數,延遲根據電腦配置設定,可實際執行不斷調整至合適的延遲
123456789101112131415161718192021import sysimport timeimport torchimport win32apiimport win32confrom PyQt5.QtWidgets import QApplication# data settingGAME_WIDTH = 1920GAME_HEIGHT = 1 ...
PyInstaller -D 檔案雜亂
在專案完成後為了方便部屬有時會有將專案打包的需求,以 Python 來說目前常用的工具為 PyInstaller。
PyInstaller 主要會有兩個問題,一是它會將該環境所有套件打包,造成體積龐大,這點可透過創建新的虛擬環境解決。
另一點,為了簡潔,一般會帶參數 -F 使其打包後僅為一個執行檔,但由於它會將所有套件打包在一起,造成該執行檔體積龐大,執行緩慢,所以有時會改用 -D 這個參數使其打包後為一個目錄,又由於它會將所有套件打包在一起,所以檔案看起來會很雜亂。
以目前的小專案為例,打包成一個執行檔後會長這樣
不到千行的專案卻有 60MB
若打包為一個目錄的話會長這樣
執行檔本身雖然縮小為 5MB,但整個目錄略顯雜亂,要透過設定檔調整程式時也不易直接看出。
解決方法從 Shell Script 得到靈感,在原本的目錄加一層上級目錄,用 bat 執行原本打包好的程式,使其執行時加入變數的目錄為上級目錄,如此便可將設定檔與一些產出檔案和原程式區隔開,最後將 bat 轉為 exe 檔案即可。
最終看起來會像這樣,app 內放的為打包成目錄的程式
PUPC 2022 心得
PUPC 全名是全國私立大專校院程式競賽,英文名常常換來換去比賽三人一組,每組一台電腦,入場可攜帶十張 A4 紙,可提前在單面作筆記
一組只有一台電腦,所以分工勢必為一人打 Code,另外兩人看題目,因為我英文能力極差,看題目效率很低,因此我們這組由我負責打 Code,但我前一天失眠,教室又很熱,整個人昏昏沉沉的,我也不知道我在寫什麼,想到什麼寫什麼
比賽過程和 CPE 差不多,難度我覺得比 CPE 簡單一些,可能是有隊友協助看題目,考 CPE 都得看 IO 猜題意,這次隊友把題目看得很仔細,寫起來感覺簡單不少,但有些題目還得用猜的,猜對了超開心
如果想增加一些個人經歷的話還蠻推薦參加這個比賽的,難度不會太高,我們沒有特別準備,拿到不錯的成績,若是有準備甚至有特別練習解題的人參加應該可以取得很厲害的成績
這次的台中之旅很愉快,前一天吃燒肉,一起聊天耍廢到凌晨,但我們住的旅館熱到睡不著,我們前一天只睡了兩小時左右,進了主辦學校也超熱,比賽時又熱又累不知道自己在幹嘛,結束比賽後也十分狼狽,突然下暴雨,我們都沒帶傘,又得淋雨坐車,整個人都快沒了
整體來說,很慶幸當時沒有嫌麻煩不參加,和朋友一 ...
YOLOv7 on Windows (三) AI 自瞄實現原理與危害
隨著硬體計算能力和演算法的進步,AI 自瞄漸漸浮現出來,我第一次聽到這個詞是在去年,正好前幾天看到 YOLOv7 推出的消息,就很好奇像我這種沒有自己訓練過模型,對於深度學習也沒什麼概念的人,多久時間能做出來。雖然製作過程中踩了不少坑,成果還是很令我滿意的。
外掛原理在繼續今天的主題前,先解釋一下大部分遊戲外掛運作的原理
程式在執行時都會被載入到記憶體中,遊戲也不例外,當遊戲執行時,遊戲中出現的各種數據都以二進制的方式儲存在記憶體中,包含程式碼也是因此,讀取記憶體並修改內容是大部分遊戲外掛的原理,通常會有幾個 base address,將其值加上不同的偏移量便可得到各種數據,當然,程式每次被載入時在記憶體中的位置是不固定的,但目前都是採用虛擬記憶體的技術,使得 base address 是固定的,如果遊戲沒有更新的話,基本上找到的 base address 都不會變
手法上來說,一般會挑選一些較固定可控的數據,透過其 address 往上找 base address,大部分 address 都是 base address 的值經過好幾次偏移得到的,這非常考驗能力和經驗,對於組合語言也要 ...
YOLOv7 on Windows (二) 訓練自己的資料集
準備資料集將標註好的資料集放在一個資料夾內並取名為 all,資料集需為 YOLO 的格式,YOLO 格式為一張圖片搭配一個 txt 檔,如果是用 labelImg 標註應該還會有一個 classes.txt 的檔案,裡面放的就是你標註的 class 名稱,我準備了 60 張圖片,只有一個 class,整個看起來會像這樣
在 yolov7 的資料夾內建立一個資料夾取名為 mydataset,並將資料集放到裡面,由於將資料分割的步驟比較繁雜,我寫了一隻程式來分割,下載這隻程式並放到 mydataset 的資料夾內做完這一步看起來會像這樣
需要注意的是資料夾的名稱必須為 all,並且裡面要有 classes.txt,若沒有請自行新增,並打上自己標註的 class 名稱之後直接執行並帶入要作為 validation set 的圖片數量,程式會隨機取出
以我來說我想要 10 張圖片作為 validation set
python splitFile.py 10
執行完後會像這樣
到這裡就完成資料集的準備了 (我這邊沒有準備 test set,如果想要的話按照格式新增即可)
建立配置檔我們已 ...
YOLOv7 on Windows (一) 建立環境與執行
建立環境先用 Anaconda 建立一個乾淨的新環境
conda create --name torch python=3.9
名稱及版本都可以更改,我這邊是用 3.9
接著進入環境安裝 GPU 版本的 PyTorch,也可以用 CPU 版本的,但速度慢非常多
安裝前先檢查 GPU 的驅動版本,可以在終端中使用 nvidia-smi 指令來查看驅動版本
之後到這個網站查看符合的 CUDA 版本YOLOv7 支持的 PyTorch 版本為 1.7.0 ~ 1.11.0 所以到這個網站挑選適合的安裝我安裝的是 1.11.0 + CUDA 11.3
安裝 1.12.0 也可以執行,但是在引入模型時會有問題PyTorch 比較大,需要一點時間下載安裝完後在終端直接執行 Python 檢查有沒有安裝成功
有看到自己的 GPU 就是成功了
安裝完後就可以 clone YOLOv7git clone https://github.com/WongKinYiu/yolov7.gitclone 完後進入資料夾,因為我們已經裝好 PyTorch 了,所以修改一下 requirements.txt ...
英雄聯盟自動輸入邀請碼程式
我認為被鎖的機率非常非常低,但是使用這類工具還是會有一定的風險,任何後果請自行承擔,若真的很擔心建議不要使用。
這次的英雄聯盟 8.8 週年慶活動,有輸入邀請碼可以獲得氣球兌換獎勵的活動,逛巴哈的時候看到有大神做自動輸入的程式,就也嘗試做了一個順便學習一下沒用過的套件。程式會比較大是因為用 Python 寫的,用 pyinstaller 打包。
補充程式一開始設計時為了效率所以只從集中串的最後一頁開始爬邀請碼,執行完第一輪後其實都是在等新貼的邀請碼,一有人貼就會馬上搶,若這個資源有比較多人在搶就會導致效率變很差,如果有更好的資源來源,可以自行修改一下爬蟲的網址,由於是用正則表達式來取出邀請碼,所以只要直接抓網頁的原始碼即可,也可以不爬蟲,直接全選複製 Garena 的新聞,用一個變數儲存,取代掉第 65 行的 req.text 即可。
2021/08/02 更新:
由於一些朋友有自己貼上邀請碼的需求,所以更新了一下,新的檔案為 v3.1.zip,新增了選擇自己貼上邀請碼或爬蟲的選項,若要自己貼邀請碼只要在 “invitations.txt” 貼上任意包含邀請碼的文字即可。沒有號了所 ...