[{"content":"","date":"4 March 2026","externalUrl":null,"permalink":"/tags/blog/","section":"Tags","summary":"","title":"Blog","type":"tags"},{"content":"","date":"4 March 2026","externalUrl":null,"permalink":"/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":"目標是完成教學並試著編寫簡單的多人連線IDLE遊戲\n最近在學習Golang，並且想嘗試編寫一個簡單的多人連線IDLE遊戲。 雖然手上有原神千星奇域的項目，但是我還是決定回去Godot嘗試編寫客戶端和網絡連線項目。\n現在，正在根據一篇不錯的教學 Godot 4 + Golang MMO Tutorial Series。\n要注意的是有些版本號可能會有差異，但是基本的教學仍然是有效的。 像是Visual Studio Code的部分Extension版本可能換了人更新。\n希望這個月內我能完成教學，並且能夠編寫一個屬於自己的連線遊戲。\n","date":"4 March 2026","externalUrl":null,"permalink":"/posts/%E6%97%A5%E8%AA%8C004/","section":"Posts","summary":"","title":"最近正在學習Golang","type":"posts"},{"content":" 如何獲得Gitea # Gitea是一個開源的自架Git服務\n官方獲取鏈接：https://about.gitea.com/products/gitea/\n架设流程 # 剛開始建議照著預設的資料填寫即可\n注意: 需要在事後手動更改.\\custom\\conf\\app.ini中的User的資料為git，或者連線端將User改為啟動的主機名稱；否則，使用ssh驗證的時候，會無法正常連線。 如何建立客戶端的ssh密鑰 # 使用以下方式能生成一個密鑰\nssh-keygen -t ed25519 -C \u0026#34;your_email@example.com\u0026#34; 通常，會需要你決定使用預設的檔案路徑 或自定義的路徑和檔案名\n你可以直接Enter跳過該階段\n命令的輸出大致如下所示：\nGenerating public/private ed25519 key pair. Enter file in which to save the key (C:\\Users\\username/.ssh/id_ed25519): 接下來會需要你設定密碼加密你的檔案，這邊會留空作為例子，\nEnter passphrase (empty for no passphrase): Enter same passphrase again: 總之，你應該就會獲得一個類似這樣的兩個東西\nC:\\Users\\username/.ssh/id_ed25519和C:\\Users\\username/.ssh/id_ed25519.pub\n如何設置ssh權限 # 打開C:\\Users\\username/.ssh/id_ed25519.pub\n應該會獲得很長的一串\nssh-ed25519 AAA... 將它貼到下圖所示的位置（在賬號-\u0026gt;設置的地方） 接下來，你需要把臨時的Token拿去給你的ssh做驗證： 指令大概如下：\necho -n \u0026#39;它的token\u0026#39; | ssh-keygen -Y sign -n gitea -f C:\\Users\\username/.ssh/id_ed25519.pub 提示: 如果你有設定密碼，則需要輸入密碼才可以產生簽名資料 你會獲得如下所示的資料\n-----BEGIN SSH SIGNATURE----- ... -----END SSH SIGNATURE----- 把資料複製貼上到 最後，你就能夠使用ssh服務連到你的repo了 例如：\ngit clone ssh://你Gitea的User@你的域名:你的ssh端口/你的Gitea賬戶名/你的repo.git 尾聲 # 這東西是如此簡單，卻卡了我超級久\u0026hellip;\n主要是Gitea的User並非絕對為git，\n你可以強制更改為git（如果更改後仍能夠正常執行）。\n當然，如果使用本文以外，也就是http格式也能使用；\n只需要透過瀏覽器之類的臨時授權即可。\n","date":"4 September 2025","externalUrl":null,"permalink":"/posts/gitea-setup-ssh-tutorial-ep1/","section":"Posts","summary":"","title":"EP.1 Gitea架設方式與設定ssh連線的方式","type":"posts"},{"content":"","date":"4 September 2025","externalUrl":null,"permalink":"/tags/gitea/","section":"Tags","summary":"","title":"Gitea","type":"tags"},{"content":"","date":"4 September 2025","externalUrl":null,"permalink":"/series/giteasetuptutorial/","section":"Series","summary":"","title":"GiteaSetupTutorial","type":"series"},{"content":"","date":"4 September 2025","externalUrl":null,"permalink":"/tags/giteasetuptutorial/","section":"Tags","summary":"","title":"GiteaSetupTutorial","type":"tags"},{"content":"","date":"4 September 2025","externalUrl":null,"permalink":"/tags/ssh/","section":"Tags","summary":"","title":"SSH","type":"tags"},{"content":"","date":"8 April 2025","externalUrl":null,"permalink":"/tags/cardgame/","section":"Tags","summary":"","title":"CardGame","type":"tags"},{"content":"既然有了框架，那接下來就要給框架變得可根據資料切換顯示。\n而以下就是我完成基礎的調試用+顯示用框架。 在這個時間段，我還沒有完成能力詞條判定；\n因為能力詞條需要一個實例化的環境，而相關的觸發方式都和回合中的機制有關，\n像是發動時機，進行特定的動作等等。\n因此我決定延後到基本的數值運算功能，再做能力值疊加判定。\n所以，我往顯示方面開始做功夫了。\n確定遊戲的表現形式 # 那這個專案，我決定以3D的表現形式去實現表現。\n在簡略的配置了框架後，發現表現手法不太行，\n主要是遊戲內的機制擁有\u0026quot;出牌\u0026quot;，這個出牌會影響整個場地的大小和上限。\n於是乎，我就想到了玩過的某個技能型手機遊戲。\n它會用透明的方框作為卡牌放置區，那我就想弄個差不多的東西。\n效果如下：\n測試遊戲性能和方案的可行性 # 在完成了基本的規劃後，我想先去試著理解Godot對遊戲的性能需求。\n因此我簡單製作了下方的卡片節點：\n並且使用panku console這個插件協助我Debug遊戲。\n而實際運行了一段時間，卡牌張數很多也不太會影響遊戲效能表現。\n下集預告 # 讓卡牌能夠在場地中放置、使用能力、進行攻擊計算、卡牌放置到傷害區 等基本規則操作 下下集才開始對能力進行製作，設定更多的卡牌時機。\n","date":"8 April 2025","externalUrl":null,"permalink":"/posts/godot-card-game-ep3/","section":"Posts","summary":"","title":"EP.3 確立基本的卡牌資訊框架 feat.《星界英雄》","type":"posts"},{"content":"","date":"8 April 2025","externalUrl":null,"permalink":"/tags/godot/","section":"Tags","summary":"","title":"Godot","type":"tags"},{"content":"","date":"8 April 2025","externalUrl":null,"permalink":"/series/zodiacchampion/","section":"Series","summary":"","title":"ZodiacChampion","type":"series"},{"content":"","date":"8 April 2025","externalUrl":null,"permalink":"/tags/zodiacchampion/","section":"Tags","summary":"","title":"ZodiacChampion","type":"tags"},{"content":"今天，就來製作對應的卡牌資產；目前是以還原原本遊戲卡牌顯示的相關資訊為目的去製作相關素材。\n首先，確定畫面有的基本資訊。\n今天，就來試著先製作星使牌有的相關內容。\n經過兩小時的奮戰，我成功生出了以下的素材，並調整好以後會用到的卡牌UI框架。\n參考了新版UI，加入了傷害屬性框和部分卡牌資訊的放置位置。\n但整體風格還是想以手上能參考的舊版UI進行還原。\n不過今天時間不多了，之後，我也會去把星術牌和星神牌的卡牌資訊欄也做進去。\n另外，雖然我很想搞搞看卡牌稀有度的雷射鍍閃，但那不是優先級的任務，因此會放到較後的階段才嘗試製作相關Shader。\n下集預告 # 應該會把基本的卡牌資訊設置腳本給寫出來，把相關顯示功能給做基本的規範化。 之後就是把遊戲中的所有卡牌嘗試逐一還原進去，以還原原本的卡牌作為主要目標去製作對應的卡牌數據庫。\n","date":"6 April 2025","externalUrl":null,"permalink":"/posts/godot-card-game-ep2/","section":"Posts","summary":"","title":"EP.2 繪製基本的遊戲資產 feat.《星界英雄》","type":"posts"},{"content":"很高興獲得了來自《星界英雄》設計者帥狗的許可， 我可以使用Godot來將相關遊戲玩法電子化，並能使用遊戲框架和玩法使用在項目中。 我獲得的許可如下：\n對相關學習專案寫日誌並發佈到個人網站 我承諾只能部分公開，因此局限於我認識的朋友。 條件如下：\n禁止商用 禁止直接使用原發售卡牌的插畫。 同時，設計者帥狗也表示了希望能試玩，我也會很樂意分享給他（在完成該學習項目後）。\n開始理清相關遊戲規則 # 既然是要做一個卡牌遊戲，那我第一件事就是先把關鍵的核心，卡牌給還原出來。\n而還原一個卡牌，那我必須要定義一張卡牌上面有的資訊。\n在遊戲內雖然有三種不同的卡牌，但他們身上的資訊是差不多的。\n卡牌資訊 # 分為 星使牌、星術牌、星神牌 而它們都可以作為星術牌來使用，這代表它們的設計有一定程度的相似。\n那一張卡牌有什麼資訊呢？\n卡牌名稱 卡牌資訊：繪師、系列編號、種類（背景顏色）、星座圖標（或特定圖標） 卡牌屬性：（太陽/月亮） 卡牌效果 星使牌和星神牌是差不多的東西，它們共通點為\n代價需求：激活該卡需要特定的代價 及其 數字 而星使牌更是多出了三個屬性\n力量：攻擊判定時，若超出對方護盾則視為攻擊成功。 護盾：攻擊判定時，若受擊方該數值多於攻擊方的力量，則視為攻擊失敗（不計算傷害，但計算*攻擊事件） 傷害：用來決定該卡攻擊成功後的基礎傷害 基於卡牌資訊進行遊戲資產的製作 # 理解了以上的資訊後，接下來就輪到繪製卡牌資訊的動作了。\n我選擇對目前官網FB釋出的所有圖片進行二次創作，也就是 透過與原本卡牌完全不同的卡面、故事、卡牌名來還原原本的卡牌設計，既能還原原本的框架，也避免了使用版權圖造成的問題。\n接下來的規劃會是繪製卡牌屬性、十二星座、代價需求等等的資訊相關圖標或者是卡牌的排版。\n同時，我會希望將星術牌和星神牌的下方能力欄，像星使牌一樣貼上左上角的屬性，方便識別。\n剩下的遊戲系統以及遊戲規則將會在繪製完成後，在下一篇的日誌進行補全。\n下集預告 # 預計會將目前的玩法視為 常規玩法，預計會先往製作常規玩法的場地佈置、組牌需求開始做起。\n未來將會有更多的像是回合判定、傷害計算、卡牌連鎖對應、卡牌資料、卡牌實例等各種坑要填。\n","date":"5 April 2025","externalUrl":null,"permalink":"/posts/godot-card-game-ep1/","section":"Posts","summary":"","title":"EP.1 開始製作卡牌遊戲框架復刻的日誌記錄 feat.《星界英雄》","type":"posts"},{"content":"","date":"29 March 2025","externalUrl":null,"permalink":"/en/","section":"ALOWHIT","summary":"","title":"ALOWHIT","type":"page"},{"content":"","date":"29 March 2025","externalUrl":null,"permalink":"/en/tags/blowfish/","section":"Tags","summary":"","title":"Blowfish","type":"tags"},{"content":"If you haven\u0026rsquo;t used Hugo before, you need to understand how to install Hugo on your local machine. You can check Hugo is installed by running the command hugo version.\nIf you haven\u0026rsquo;t used Go and Git before, you\u0026rsquo;ll need to know about installing Git on your local machine, and then install Go on your local machine from the official Go website. The version should be 1.23.0 or above.\nCreate a Git Project # Create a git project for your website link. The repo name should be in the format \u0026lt;username\u0026gt;.github.io, which will also serve as the entry point for your website domain. Then, in your project folder, enter git init -b main to initialize your git repo.\nTips: if you want to make more repo\u0026rsquo;s website, use \u0026lt;username\u0026gt;.github.io/\u0026lt;repo_name\u0026gt; to load your website.\nDeploy Git and Prepare for Github Pages Service # This article won\u0026rsquo;t delve too much into the related usage of synchronizing Git and Github. After the above steps, your default branch will be main. (with git init -b main) Next, we\u0026rsquo;ll need a branch called gh-pages; This branch will be used for future workflows, which is the Action service provided by Github.\nbranch : main gh-pages\n.gitignore File # Files to ignore:\n#others node_modules .hugo_build.lock # Hugo public Create a Workflow # Create an empty folder named .github/workflows in your directory, then name this filegh-pages.yml. You can see in the code below:\n# .github/workflows/gh-pages.yml name: GitHub Pages on: push: branches: - main jobs: build-deploy: runs-on: ubuntu-20.04 concurrency: group: ${{ github.workflow }}-${{ github.ref }} steps: - name: Checkout uses: actions/checkout@v3 with: submodules: true fetch-depth: 0 - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: hugo-version: \u0026#34;latest\u0026#34; - name: Build run: hugo --minify - name: Deploy uses: peaceiris/actions-gh-pages@v3 if: ${{ github.ref == \u0026#39;refs/heads/main\u0026#39; }} with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_branch: gh-pages publish_dir: ./public After you push the relevant data tomain, the workflow will automatically create build-deploy, and finally set up the web content on gh-pages.\n!!Note: You need to enable read and write permissions for automation in your repo and choose the branch for displaying Pages externally to set up the website.\nHow to Adjust Action Write Permissions # First, enable write permissions for Actions:\nSettings-\u0026gt;Code and automation-\u0026gt;Actions-\u0026gt;General-\u0026gt; [Side page]-\u0026gt;Workflow permissions-\u0026gt; Select the radio button \u0026ldquo;Read and write permissions\u0026rdquo;-\u0026gt;Click \u0026ldquo;Save\u0026rdquo; to store changes\nNext, select your branch which using for Github Page：\nSettings-\u0026gt;Code and automation-\u0026gt;Pages-\u0026gt;[Side page]-\u0026gt; Build and deployment-\u0026gt; Branch-\u0026gt;Drop down to change \u0026ldquo;main\u0026rdquo; to \u0026ldquo;gh-pages\u0026rdquo;-\u0026gt;Click \u0026ldquo;Save\u0026rdquo; to store changes\nCreate a New Site # If you plan to create website data in an already created empty folder, use hugo new site . to create a basic Hugo project. (If the folder already has content, you can use --force to force initialization: hugo new site . --force)\nIf you don\u0026rsquo;t have an empty website project folder yet, you can use the hugo new site mywebsite command to create a new Hugo site in a new mywebsite directory.\nNext, download the blowfish theme and choose the channel you want to use. The author used manual file copying, which means directly downloading the latest version of the source code and extracting it to ./theme/blowfish.\nSet Up the Theme Configuration Files # In your website\u0026rsquo;s root directory, delete the hugo.toml file automatically generated by Hugo. Instead, we\u0026rsquo;ll use the *.toml files that exist in the theme. Move the relevant suffix files from ./theme/blowfish/config/_default to the ./config/_default/ directory in the web root directory. This will ensure your theme settings are accurate and allow you to easily customize the related theme.\n‼Note: If a module.toml file already exists in the project, do not overwrite it!\nAfter you\u0026rsquo;ve copied these files, your config directory should look like this:\nconfig/_default/ ├─ hugo.toml ├─ languages.en.toml ├─ markup.toml ├─ menus.en.toml ├─ module.toml # Installed via Hugo modules └─ params.toml ‼Important: If you didn\u0026rsquo;t install Blowfish using Hugo modules, you must add theme = \u0026quot;blowfish\u0026quot; to the hugo.toml file. (Or you should see # theme = \u0026quot;blowfish\u0026quot; # UNCOMMENT THIS LINE in the hugo.toml file, just remove the comment to apply the related theme)\nNext Steps # The basic Blowfish installation is now complete. Please continue reading the original tutorial\u0026rsquo;s Getting Started Guide to learn more about theme configuration. I will also write more articles in the future to introduce simple website settings.\n","date":"29 March 2025","externalUrl":null,"permalink":"/en/posts/setup-hugo-with-blowfish-to-github-page/","section":"","summary":"","title":"How to Deploy Hugo on Github (with Blowfish Theme)","type":"posts"},{"content":"","date":"29 March 2025","externalUrl":null,"permalink":"/en/tags/hugo/","section":"Tags","summary":"","title":"Hugo","type":"tags"},{"content":"","date":"29 March 2025","externalUrl":null,"permalink":"/en/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":"","date":"29 March 2025","externalUrl":null,"permalink":"/en/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"29 March 2025","externalUrl":null,"permalink":"/en/series/tutorial-for-hugo/","section":"Series","summary":"","title":"Tutorial for Hugo","type":"series"},{"content":"","date":"29 March 2025","externalUrl":null,"permalink":"/en/tags/website/","section":"Tags","summary":"","title":"Website","type":"tags"},{"content":"","externalUrl":null,"permalink":"/en/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/en/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"}]