Blazor版俄羅斯方塊遊戲部署成功

Blazor版俄羅斯方塊遊戲部署成功

上線了Blazor版俄羅斯方塊遊戲,並且把線上工具和線上遊戲元件提取到Razor共用庫,可以被Dotnet9網站和Dotnet工具箱網站複用。

最後更新 2023/6/27 下午11:40
沙漠尽头的狼
預計閱讀 6 分鐘
分類
Blazor
標籤
.NET C# Blazor Blazor WebAssembly Client

大家好,我是沙漠盡頭的狼。

抄了國外大神的一個俄羅斯方塊遊戲,也將線上工具和線上遊戲元件提取到Razor共享庫,可以被 Dotnet9 網站和 Dotnet工具箱 網站重用,這篇分享遊戲的搬運及Razor共享庫的遷移過程,以及這幾天開發、部署遇到的一些問題與解決方案記錄分享下。

行文目錄:

  1. 新增俄羅斯方塊遊戲
  2. 元件重用
  3. 遇到的問題及解決方案
  4. 總結

1. 新增俄羅斯方塊遊戲

1.1. 遊戲參考:BlazorGames

BlazorGames專案資訊

  • GitHub:https://github.com/exceptionnotfound/BlazorGames
  • 線上訪問位址:https://blazorgames.net/

倉庫截圖如下:

網站截圖:

該網站有系列文章教你怎麼用Blazor開發7、8個線上小遊戲,課程算比較詳細,如上圖,遊戲有單人紙牌遊戲(Solitaire)、俄羅斯方塊(Tetris)、踩地雷(Minesweeper)等,其中俄羅斯方塊的系列文章截圖如下:

課程列表位址:https://blazorgames.net/tetris

1.2. 新增到自己的專案

首先請先Clone倉庫:https://github.com/exceptionnotfound/BlazorGames

作者程式碼組織結構很清晰,先理解程式碼結構:

  • 1.2.1. /Pages下的razor檔案

為各個遊戲頁面,比如Tetris.razor,這個檔案我們可以直接複製到自己的專案,去掉頁面下方的文章連結即可。

  • 1.2.2. /Pages/Partials下的razor檔案

為各個遊戲的子元件,如/Pages/Partials/TetrisGridCell.razor為俄羅斯方塊背景的儲存格元件。

  • 1.2.3. /Models為各個遊戲使用的Model類別

/Models/Tetris/下有俄羅斯方塊的背景表格(Grid.cs)、儲存格(Cell.cs)、方塊(Block.cs)等定義類別。

  • 1.2.4. wwwroot目錄為專案資源目錄

使用到的Js庫、Css樣式、圖片、聲音檔案等都放在這裡,透過除錯程式、閱讀程式碼,知道如果要在自己的專案正常執行俄羅斯遊戲需要這些檔案:

應用樣式(css/app.cs)、遊戲部分樣式(css/games.css)、俄羅斯方塊圖片(images/tetrix)、遊戲音樂播放和遊戲分數的Cookie讀寫Js庫(js/utilities.js)、遊戲背景音樂檔案(sounds/tetris-theme.ogg)等。

以上檔案在熟悉後,就可以一邊拷貝到自己的專案一邊除錯了,下面是前面提到的檔案部分截圖

俄羅斯方塊背景的儲存格元件:

俄羅斯方塊的Model類別等定義:

資源檔案截圖:

2. 元件重用

原先Dotnet9網站和Dotnet工具箱網站的線上工具和線上遊戲程式碼是複製了兩份,分別維護的,但其中90%程式碼一樣,這是無法容忍的程式碼冗餘。

站長考慮將原先的Dotnet工具箱倉庫刪掉,程式碼合併到Dotnet9倉庫,將共用的元件提取到Razor共享庫內,現改造後的共享庫目錄結構:

3個主專案:1是Razor共享庫,2是Dotnet9網站主專案,3是Dotnet工具箱主專案,2和3都將1新增為專案參考。

Razor共享庫程式碼組織結構,目前已有的線上工具和線上遊戲元件:

元件程式碼在前面幾篇文章都貼過,這裡略過,但遊戲頁面的路由這裡提一下:Dotnet9網站和Dotnet工具箱的網頁佈局是不同的,相同的是裡面的內容,所以每個工具和遊戲在兩個專案裡都新增了對應的頁面路由,比如下面的俄羅斯方塊頁面在兩個專案中的位置:

Dotnet9中的俄羅斯方塊頁面:

Dotnet工具箱的俄羅斯方塊頁面:

兩個頁面內容幾乎完全相同,不同的可能就是頁面標題了,相信還可以再最佳化。

最佳化不好幾百字說清楚,有興趣的看 Dotnet9原始碼 吧。

3. 遇到的問題及解決方案

開發Dotnet9網站和Dotnet工具箱過程中,包括部署有遇到一些問題,透過查閱資料、問技術群的一些大神幾乎都得到了解決,這裡列出一些大家也可能遇到的問題,分享總結下。

3.1. Server存取連結過多

上篇站長對Server存取連結過多做了截圖,覺得是Server的問題,技術群群友立馬做了反駁,是站長nginx設定有問題,沒有對Socket有效設定才導致的頻繁連線,原文截圖如下:

解決Nginx參考設定如下:

主要關注的節點設定是proxy_http_version 1.1,但站長原來是設定過的,昨晚只把proxy_set_header Connection keep-alive改為了proxy_set_header Connection "upgrade",請群友驗證,目前上面截圖的問題貌似解決了,大家也可以打開Dotnet9網站驗證下。

3.2. Wasm直接打開子頁面404

透過Dotnet工具箱網站首頁,再存取其他子頁面是正常的,然而打開瀏覽器網址列,直接貼上子頁面存取,網站會回應404,解決方案也是修改nginx設定:

location / {
    try_files $uri $uri/ @router;
    index  index.html index.htm;
}
location @router {
        rewrite ^.*$ /index.html last;
}

主要是其中的try_files,至於什麼意思請百度。

3.3. 專案正常編譯,介面顯示黑塊

本來昨天站長已經發布了Dotnet工具箱關於俄羅斯方塊的功能,但遊戲的背景介面(黑色背景)老是顯示不出來,搞了半天是元件內的元件沒有正常載入,即沒有將子元件命名空間加上@using Dotnetools.Share.Components.Partials

原始程式碼如下:

問題是透過F12除錯網頁原始碼發現的,發現子元件對應的html程式碼並沒有編譯為html原生程式碼,還是元件程式碼,被直接編譯為字串了,即顯示如下:

加上命名空間引用後,原始碼顯示正常了,黑色背景也顯示出來了:

這個問題屬於不細心,共享庫提取後,沒有檢視html中razor元件的引用是否正常,這個問題VS是不會給出異常提示的。。。

4. 總結

今天分享到這,有什麼工具需求請在下方issue連結中留言,十分感謝您的閱讀。

  • 網站位址:Blazor Server版本網站=》https://dotonet9.com/, Blazor Wasm版本網站=》https://dotnetools.com/
  • 網站原始碼:https://github.com/dotnet9/Dotnet9,Issue=》https://github.com/dotnet9/Dotnet9/issues
  • .NET版本: .NET 8.0.0-preview.5.23280.8
  • 微信技術群:新增站長微信(codewf),一定要備註【入群】2個字
  • QQ技術群:771992300
繼續探索

延伸閱讀

更多文章
同分類 / 同標籤 2024/2/29

Winform中也可以這樣做資料展示

在做winform開發的過程中,經常需要做資料展示的功能,之前一直使用的是gridcontrol控制項,今天想透過一個範例,跟大家介紹一下如何在winform blazor hybrid中使用ant design blazor中的table元件做資料展示。

繼續閱讀
同分類 / 同標籤 2024/2/29

Winform的介面也可以變好看?

前幾天跟大家介紹了在winform中使用blazor hybrid,而且還說配上blazor的UI可以讓我們的winform程式設計的更加好看,接下來我想以一個在winform blazor hybrid中繪圖的範例來進行說明,希望對你有所幫助。

繼續閱讀