基于.NET的俄罗斯方块课程设计
前言??
隨著我國物質生活的巨大提高,人們的精神文化需求也不斷提升,從溫飽中解放出來的人們將會更多地關注娛樂活動。俄羅斯方塊游戲就能夠很好地滿足人們日常簡單的娛樂需求。俄羅斯方塊游戲風靡于90年代,是現在青年人的美好回憶。因為俄羅斯方塊游戲的規則簡單,而且簡單的幾條規則就足夠使得游戲過程變化多端,因此一直以來都被認為是益智游戲而廣泛流行于人民群眾中。Windows自帶的游戲功能一直缺少俄羅斯方塊這一個最流行最原始的游戲,因此基于C#和.NET平臺開發一個俄羅斯方塊游戲是很有必要的。?
我們將設計實現一款基于C#和.NET的俄羅斯方塊游戲,用戶可以在安裝了.NET Framework 的windows平臺上進行游戲。俄羅斯方塊游戲將使用Visual Studio 2015 Community IDE進行開發。開發完成的游戲可以導出為.exe文件,然后用戶可以對游戲進行下載并且點擊運行。本論文先對開發北京進行介紹,然后對游戲的開發技術進行分析和簡介,最后進行了代碼的實現以及測試。?
1??緒論?
1.1??研究背景?
電腦游戲是一種新興的文化現象,也是一個新型的朝陽行業。游戲開發至今已經有30多年,在這個短暫的時期里,隨著硬件水平的提高,游戲開發新技術層出不窮,經典游戲比比皆是。俄羅斯方塊是一個非常復雜但是比較有趣并且耐玩的,也是大家比較熟悉的單擊小游戲。游戲中共有7種方塊,每種方塊由4個方格組成。這7種方塊可以旋轉90度、180度、270度,因此每種方塊有4種狀態,7種方塊總共有28種狀態。28種狀態的方塊隨機產生,自由下落,落下時可由玩家用上、下、左、右控制鍵控制翻轉和移動,以便以玩家所需要的形態和位置落下。如果落下時,方塊的方格能填滿某一行,則這一行可消去。消去一行后,游戲可給玩家加分,若由存在空格的方塊填滿整個窗口,則游戲失敗。?
1.2? 研究意義?
隨著我國物質生活的巨大提高,人們的精神文化需求也不斷提升,從溫飽中解放出來的人們將會更多地關注娛樂活動。俄羅斯方塊游戲就能夠很好地滿足人們日常簡單的娛樂需求。俄羅斯方塊游戲風靡于90年代,是現在青年人的美好回憶。因為俄羅斯方塊游戲的規則簡單,而且簡單的幾條規則就足夠使得游戲過程變化多端,因此一直以來都被認為是益智游戲而廣泛流行于人民群眾中。在現金電子信息高速發展的時代,電子游戲已深入人們的日常生活,由于經典有趣,因而得到了廣泛的流行,成為老少皆宜的娛樂方式。俄羅斯方塊是一款風靡全球的游戲,最初是由蘇聯人制作的,規則簡單,容易上手且游戲全過程變化無窮,可以讓玩家充分感受游戲中的樂趣。在游戲設計方面,俄羅斯方塊游戲的設計工作既復雜又富有挑戰性,它包含的內容多,涉及的知識廣泛,與圖形界面聯系比較大。在設計過程中必將涉及到各個方面的知識。?
1.3??論文構成及研究內容?
第一章?介紹了該課題的背景、目的及國內外研究狀況。?
第二章?介紹了該設計實現過程中所使用到的技術原理,這些是此課題實現的基本理論。?
第三章?粗略的描述了課題的設計,這其中描述了課題的功能以及對這些功能的分析等。?
第四章?詳細描述了課題各個功能的具體設計思想與具體實現的過程。?
第五章?對游戲進行了測試和驗證。?
2??俄羅斯方塊游戲開發技術介紹?
2.1??.NET平臺?
.NET就是微軟用來實現XML,Web Services,SOA(面向服務的體系結構service-oriented architecture)和敏捷性的技術。對技術人員,想真正了解什么是.NET,必須先了解.NET技術出現的原因和它想解決的問題,必須先了解為什么他們需要XML,Web?Services 和 SOA。技術人員一般將微軟看成一個平臺廠商。微軟搭建技術平臺,而技術人員在這個技術平臺之上創建應用系統。從這個角度,.NET也可以如下來定義:.NET是微軟的新一代技術平臺,為敏捷商務構建互聯互通的應用系統,這些系統是基于標準的,聯通的,適應變化的,穩定的和高性能的。從技術的角度,一個.NET應用是一個運行于.NET Framework之上的應用程序。(更精確的說,一個.NET應用是一個使用.NET Framework類庫來編寫,并運行于公共語言運行時Common Language Runtime之上的應用程序。)如果一個應用程序跟.NET Framework無關,它就不能叫做.NET程序。比如,僅僅使用了XML并不就是.NET應用,僅僅使用SOAP SDK調用一個Web Service也不是.NET應用。.NET是基于Windows操作系統運行的操作平臺,應用于互聯網的分布式。?
2.2??編程語言?
C#是一種編程語言,它是為生成在 .NET Framework 上運行的多種應用程序而設計的。C# 簡單、功能強大、類型安全,而且是面向對象的。C# 憑借它的許多創新,在保持 C 樣式語言的表示形式和優美的同時,實現了應用程序的快速開發。?
2.3??.NET Framework?
.net Framework是一個可以用來快速開發、部署網站服務及應用程序的開發平臺。這個架構是兩個項目的結果:第一個項目的目的是用來改善Windows 作業平臺上的程序開發,特別是改善COM(Component Object Model,組件對象模塊。一種微軟所制定的軟件技術;讓對象的功能可以被其它軟件所叫用,可以讓組件重復使用、容易更新及維護);第二個項目則是制作一個以發展服務(Service)軟件為目標的開發平臺。這兩個項目團隊三年多前就已經在一起工作,他們希望可以發展出一種可以快速開發出以因特網為基礎,而且易學易用的開發平臺。?
.net Framework 具有兩個主要組件:公共語言運行庫和.net Framework 類庫。?
公共語言運行庫是.net Framework 的基礎。您可以將公共語言運行庫看作一個在執行時管理代碼的代理,它提供內存管理、線程管理和遠程處理等核心服務,并且還強制實施嚴格的類型安全以及可提高安全性和可靠性的其他形式的代碼準確性。這類似于Java的虛擬機。事實上,代碼管理的概念是公共語言運行庫的基本原則。以公共語言運行庫為目標的代碼稱為托管代碼,而不以公共語言運行庫為目標的代碼稱為非托管代碼。?
.net Framework 的另一個主要組件是類庫,它是一個綜合性的面向對象的可重用類型集合,您可以使用它開發多種應用程序,這些應用程序包括傳統的命令行或圖形用戶界面 (GUI) 應用程序,也包括基于 ASP.net 所提供的最新創新的應用程序(如 Web 窗體和 XML Web services)。?
.net Framework 旨在實現下列目標:?
提供一個一致的面向對象的編程環境,而無論對象代碼是在本地存儲和執行,還是在本地執行但在 Internet 上分布,或者是在遠程執行的。?
提供一個將軟件部署和版本控制沖突最小化的代碼執行環境。?
提供一個可提高代碼(包括由未知的或不完全受信任的第三方創建的代碼)執行安全性的代碼執行環境。?
提供一個可消除腳本環境或解釋環境的性能問題的代碼執行環境。?
使開發人員的經驗在面對類型大不相同的應用程序(如基于 Windows 的應用程序和基于 Web 的應用程序)時保持一致。?
按照工業標準生成所有通信,以確保基于.net Framework 的代碼可與任何其他代碼集成。?
.NET Framework 具有兩個主要組件:公共語言運行庫和 .NET Framework 類庫。公共語言運行庫是 .NET Framework 的基礎。您可以將運行庫看作一個在執行時管理代碼的代理,它提供內存管理、線程管理和遠程處理等核心服務,并且還強制實施嚴格的類型安全以及可提高安全性和可靠性的其他形式的代碼準確性。事實上,代碼管理的概念是運行庫的基本原則。以運行庫為目標的代碼稱為托管代碼,而不以運行庫為目標的代碼稱為非托管代碼。.NET Framework 的另一個主要組件是類庫,它是一個綜合性的面向對象的可重用類型集合,您可以使用它開發多種應用程序,這些應用程序包括傳統的命令行或圖形用戶界面(GUI) 應用程序,也包括基于所提供的最新創新的應用程序(如 Web 窗體和 XML Web services)。?
.NET Framework安全解決方案基于管理代碼的概念,以及由通用語言運行時(CLR)加強的安全規則。大部分管理代碼需要進行驗證以確保類型安全及預先定義好的其它屬性的行為的安全。例如,在驗證的代碼中,聲明為接收4字節值的訪問將拒絕提供8字節參數的調用,因為不是類型安全的。驗證過程還確保了執行流只傳送到已知的位置,如方法入口點–這個過程去除了跳轉到任意位置執行的能力。?
驗證將阻止不是類型安全的代碼執行,在它們引起破壞前捕獲很多常見的編程錯誤。通常的弱點–如緩存溢出,對任意內存或沒有初始化的內存的讀取,對控件的隨意傳送–都不再可能出現。這將使最終用戶受益,因為在他們執行代碼前對其進行檢查。這也有益于開發人員,他們會發現很多常見錯誤(過去一直在困擾前開發)現在可以查明,并能阻止它們引起破壞。?
CLR也能使非管理代碼運行,但非管理代碼不能從這些安全措施中受益。特殊的許可與對非管理代碼的調用能力相關,一個強大的安全策略能確保這些許可被恰當地給予。經過很長時間后,非管理代碼到管理代碼的移植將減少對非管理代碼的調用頻率。?
2.5??開發工具的選擇?
2.5.1??MonoDevelop?
MonoDevelop?是個Linux平臺上的開放源代碼集成開發環境,主要用來開發Mono與.NET Framework軟件。MonoDevelop?整合了很多Eclipse與Microsoft Visual Studio的特性,像是?Intellisense、版本控制還有 GUI 與 Web 設計工具。另外還整合了GTK# GUI設計工具(叫做Stetic)。目前支援的語言有C#、Java、BOO、Nemerle、Visual Basic .NET、CIL、C與C++ 。?
MonoDevelop支持使用C#和其他.NET語言進行開發,它使得開發者可以在Linux和Mac OS X上非常迅速的開發出桌面軟件和ASP NET Web應用。除此之外,MonoDevelop還允許開發者非常簡單的將Visual Studio開發的.NET應用程序移植到Linux和Mac OS X下,這樣開發者只需要維護一套代碼即可──因為GTK#是跨平臺的。?
2.5.2??Visual Studio?
Microsoft Visual Studio(簡稱VS)是美國微軟公司的開發工具包系列產品。VS是一個基本完整的開發工具集,它包括了整個軟件生命周期中所需要的大部分工具,如UML工具、代碼管控工具、集成開發環境(IDE)等等。所寫的目標代碼適用于微軟支持的所有平臺,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和Microsoft Silverlight 及Windows Phone。?
Visual Studio是目前最流行的Windows平臺應用程序的集成開發環境。?
Visual Studio 是一套基于組件的軟件開發工具和其他技術,可用于構建功能強大、性能出眾的應用程序。Visual Studio 2015內部代號為Visual Studio “14” ;Visual Studio “14” Community Technology Previews (CTP) 是 Visual Studio 下一主要版本的早期預發布版本,于2014年11月13日開放下載。?
Visual Studio能夠創建跨平臺運行的ASP.NET 5網站(包括Windows、Linux和Mac);集成了對構建跨設備運行的應用的支持(通過整合Visual Studio Tools for Apache Cordova、以及用于跨平臺庫開發的全新Visual C++工具);連接服務(Connected Services)體驗更加輕松(可方便地在app中集成Office 365、SalesForce和Azure平臺服務);智能單元測試(Smart Unit Testing,原名為PEX):Visual Studio 2015已整合來自微軟研究院的單元測試技術;Visual Studio代碼編輯器已經替換成“Roslyn”,將會給你帶來不一樣的代碼編輯體驗。當你要修復代碼的時候,將會出現一個小燈泡,它會向你提供一系列修復代碼的方案,你只需選擇即可。?
3??俄羅斯方塊游戲具體設計?
3.1??俄羅斯方塊游戲的需求分析?
在設計中在一個圖片框中構造了一個30*30(像素)的小塊,由這些小塊組合成新的形狀,每四個小塊連接在一起就可以構造出一種造型,總共設計了7中造型,每種造型又可以通過旋轉而變化出2到4種形狀,在游戲窗體中用戶就可以使用鍵盤的方向鍵來控制方塊的運動,然后對每一行進行判斷,如果有某行的方塊是滿的,則消除這行的方塊,并且使上面的方塊自由下落,其中,方塊向下的速度是有時鐘控件控制的,在游戲中,用戶也可以使用向下鍵加快下落速度,定義一個變量,對消除的函數進行記錄,最后就可以得出用戶的分數。?
游戲界面需求:設計良好的游戲界面可以讓玩家充分感受到游戲帶來的娛樂性,游戲在一定的區域內運動和變形。?
游戲形狀需求:用數組作為存儲方塊28種狀態的數據結構,即長條形、Z字形、反Z形、田字形、7字形、反7形、T字型,各個方塊要能實現它的變形,可設為順時針或逆時針變形,一般為逆時針。?
處理事件需求:方塊下落時,可通過鍵盤方向鍵(上、下、左、右鍵)對該方塊進行向上(變形),向下(加速)、向左、向右移動。?
顯示需求:當不同的方塊填滿一行時可以消行,剩余方塊向下移動并統計分數。當達到一定分數的時候,會增加相應的等級。?
3.2? 俄羅斯方塊游戲的功能設計?
俄羅斯方塊游戲設計主要包括以下9個方面:?
1. 游戲界面的設計。?
2. 俄羅斯方塊的實現。?
3. 鍵盤輸入信息的獲取。?
4. 俄羅斯方塊的移動(向左,向右和向下)。?
5. 俄羅斯方塊的變換。?
6. 方塊自動下落與速度的選擇。?
7. 滿行的判斷與消行。??
8. 游戲得分的計算。??
9. 游戲結束判斷。?
俄羅斯方塊游戲的游戲流程圖如圖所示:?
:?
圖3.2-1??游戲工作流程圖?
3.3? 俄羅斯方塊游戲的開發環境?
俄羅斯方塊游戲開發環境如下表所示:?
表3.3-1?? 游戲的硬件開發環境?
| CPU? | inter core i3 2330M及以上? |
| 內存? | 6GB?DDR3 1333MHZ 及其以上? |
| 硬盤? | 120GB以及以上? |
表3.3-2?? 游戲的軟件開發環境?
| 系統的操作環境? | windows server 2008 R2? |
| 系統開發平臺? | 6GB DDR3 1333MHZ 及其以上? |
| 系統開發語言? | C#? |
4? 俄羅斯方塊游戲具體實現?
4.1? 俄羅斯方塊游戲的磚塊實現類?
在設計中在一個圖片框中構造了一個30*30(像素)的小塊,由這些小塊組合成新的形狀,每四個小塊連接在一起就可以構造出一種造型,總共設計了7中造型,每種造型又可以通過旋轉而變化出2到4種形狀所以我們可以設置一個磚塊的抽象類,把磚塊共同事件的內容抽象出來。具體代碼如下所示?
public abstract class Brick?
??? {?
??????? protected?int?m_curTransforIndex;? //當前變形次序??
??????? public?int?m_needfulRows;?????? //必要的行數?
??????? public?int?m_needfulColumns;??? //必要的列數?
??????? public?int[,]?m_range;???? //變形范圍?
??????? public Point?m_center;?????? //中心點(相對于必要區域)?
??????? public Point?m_Pos;????? //中心點的位置(相對于畫布)?
??????? /// <summary>?
??????? /// 能否變形(能變形的條件為在磚塊的變形范圍內不能有其他磚塊)?
??????? /// </summary>?
??????? /// <param?name=”arr”>畫布模型</param>?
??????? /// <param?name=”rows”>畫布行數</param>?
??????? /// <param?name=”columns”>畫布列數</param>?
??????? /// <returns></returns>?
??????? public abstract?bool?CanTransform(int[,]?arr,?int?rows,?int?columns);?
??????? /// <summary>?
??????? /// 變形?
??????? /// </summary>?
??????? public abstract void Transform();?
??????? /// <summary>?
??????? /// 能否左移?
??????? /// </summary>?
??????? /// <param?name=”arr”>畫布模型</param>?
??????? /// <param?name=”rows”>畫布行數</param>?
??????? /// <param?name=”columns”>畫布列數</param>?
??????? /// <returns></returns>?
??????? public abstract?bool?CanLeftMove(int[,]?arr,?int?rows,?int?columns);?
??????? /// <summary>?
??????? /// 左移?
??????? /// </summary>?
??????? public void?LeftMove()?
??????? {?
????????????m_Pos.Y?-= 1;?
??????? }?
??????? /// <summary>?
??????? /// 能否右移?
??????? /// </summary>?
??????? /// <param?name=”arr”>畫布模型</param>?
??????? /// <param?name=”rows”>畫布行數</param>?
??????? /// <param?name=”columns”>畫布列數</param>?
??????? /// <returns></returns>?
??????? public abstract?bool?CanRightMove(int[,]?arr,?int?rows,?int?columns);?
??????? /// <summary>?
??????? /// 右移?
??????? /// </summary>?
??????? public void?RightMove()?
??????? {?
????????????m_Pos.Y?+= 1;?
??????? }?
??????? /// <summary>?
??????? /// 能否下移?
??????? /// </summary>?
??????? /// <param?name=”arr”></param>?
??????? /// <param?name=”rows”></param>?
??????? /// <param?name=”columns”></param>?
??????? /// <returns></returns>?
??????? public abstract?bool?CanDropMove(int[,]?arr,?int?rows,?int?columns);?
??????? /// <summary>?
??????? /// 下移?
??????? /// </summary>?
??????? public void?DropMove()?
??????? {?
????????????m_Pos.X?+= 1;?
??????? }?
??????? /// <summary>?
??????? /// 隨機生成一個可以通過變形得到的形狀?
??????? /// </summary>?
??????? public void?RandomShape()?
??????? {?
??????????? Random?random?= new Random();?
????????????this.m_curTransforIndex?=?random.Next(4);?
????????????this.Transform();?
??????? }?
??????? /// <summary>?
??????? /// 設置中心點相對于畫布的位置?
??????? /// </summary>?
??????? /// <param?name=”x”>橫向位置</param>?
??????? /// <param?name=”y”>縱向位置</param>?
??????? public void?SetCenterPos(int?x,?int?y)?
??????? {?
????????????this.m_Pos?= new Point(x, y);?
??????? }?
??????? /// <summary>?
??????? /// 獲取磚塊出現時中心點的Y軸坐標?
??????? /// </summary>?
??????? /// <returns></returns>?
??????? public abstract?int?Appear();?
??? }?
}?
5? 俄羅斯方塊游戲的測試?
5.1? 俄羅斯方塊游戲的界面測試?
右下角下有四個菜單項,分別有開始、暫停、繼續、停止。按開始時,可以使暫停的游戲接著上回的地方繼續游戲。如下圖:?
5.2?功能測試?
5.2.1?游戲的變形功能?
點擊開始按鈕時游戲立即開始,方塊自動下落且形狀隨機。界面如下圖:?
為了使方塊下落到適當的位置,我們需左右移動方塊,此操作在鍵盤上實現,下面的兩個界面就是方塊從左邊移到右邊的界面:?
5.2.2?游戲的暫停功能?
當點擊停止時,游戲則停止,方塊停止下落,此時的界面為:?
5.2.3?游戲的其他功能?
若由存在空格的方塊填滿整個窗口,則游戲失敗,此時會立即彈出游戲結束的對話框。此時的游戲界面為:?
5.3?測試總結?
??本游戲操作簡單,界面清晰,讓玩家容易上手操作,但是由于技術有限,本游戲所實現的功能不夠完善,不夠強大,表現在不能建立連接,因此游戲只供單人玩,界面也不夠美觀,以后可對本游戲進行改善,從而增強游戲的功能。在系統分析過程的階段,通過俄羅斯方塊的游戲,首先是制定要實現的功能,將整一個游戲分成幾個部分,然后逐一解決在分析過程中遇到的每一個問題,最終實現自己預期想要實現的效果。俄羅斯方塊游戲的一些基礎控制操作該程序的用戶界面基本上是實現了,可是因為能力以及時間上的不足,程序還是存在了很多不足之處,許多功能都沒有完全實現和達到預期的效果。如果想要設計出更佳具有可玩性和創新性的俄羅斯方塊游戲,這個只有通過以后的不斷學習,探索和對程序的進一步完善來實現對游戲的拓展了。實際作出的系統還是存在了一些邏輯錯誤和系統不是很穩定的現象,但是系統基本實現了預期的功能,假如可以投入更多的精力和時間在判斷和處理和簡化語言上面,在算法中更深入和多方面的考慮,應該可以消除因為考慮不全面而出現的邏輯錯誤。?
小結?
在這次的畢業設計中,并不是一帆風順,期間我有遇到很多困難,也有香放棄的時候,但是我沒有選擇放棄,這當然離不開導師的鼓勵和幫助,也離不開自己的努力。回顧整個過程,真的讓我受益匪線,讓我更加清楚的的認清了自己所處的位置,不在像以前一樣迷茫,不知所措,讓我重拾信心,有了奮斗的目標。?
這次課程的設計經歷,讓我感受最深和收益最多的是設計過程中的分塊處理思想這一塊,并且讓我發現了自身在設計過程中存在很多不足之處和不良習慣。也讓我明白了在以后的學習還有探索的過程,無論設計什么都要有步驟有條理的去做,一步一個腳印,做好每一個步驟,不要過于心切,這樣只會欲速不達。還有以后不管是遇到什么困難都要冷靜處理,做事要有毅力和恒心。?
此次的畢業設計論文的撰寫經歷讓我受益匪線,我深刻的體會到只有全身心的投入去做一件事,才能把一件事做好。此次的畢業設計論文是在對我們大學四年中所學知識的和靈活運用,也是在考驗自己的能力,同時是個不斷學習的過程以及探索的過程,也讓我深刻的體會到了只有不斷學習才能更好的研究,只有不斷的研究才會有進步。正是因為此次的畢業設計,讓我學習了很多新的技能和新的知識,使我更加深入的去理解了以前學到的知識,也得到了鞏固。?
致謝?
在這次的畢業設計過程中,讓我學到了很多東西,也非常感謝我們的指導老師耐心的教導,是老師認真負責的工作態度以及嚴謹的教學精神和深厚的理論水平教會了我很多東西,讓我受益匪淺,感謝他耐心的輔導。另外,在游戲開發過程中許多同學也給于我們很大的幫助,幫助解決了不少的難點,使得游戲能及時開發完成,在此謝謝各位對此次設計的幫助。?
從定題目到初稿到定稿到最后完成,老師一直都持有認真負責地態度,傾注了老師大量的心血。老師對我的熱切的關懷和耐心的幫助,也是我能順利完成這篇論文的源動力。每次遇到難題,我最先做的就是向劉老師尋求幫助,而每次不管劉老師忙還是休息,總會抽空來找我面談,然后一起商量解決的辦法。劉老師平日里工作繁多,但我做畢業設計的每個階段,從選題到查閱資料,論文提綱的確定,中期論文的修改,后期論文的格式調整,各個環節中都給與了我足夠的指導,這一個月來,劉老師不僅在學業上給我以精心的指導,同時還在思想上給我以無微不至的關懷。他的淵博的知識讓我認識到自己需要學的還有很多,他的嚴謹治學、一絲不茍、精益求精的工作態度和作風更是讓我欽佩不已,在論文的寫作和措辭方面他總是會以“專業標準”嚴格要求你,他將是我以后無論學習還是工作上的學習的好榜樣。他的崇高風尚、樸實無華、平易近人的人格魅力對我影響深遠。不僅使我樹立了遠大的學術目標、常握了基本的研究方法,還是我明白了許多待人接物與為人處事的道理。更重要的是他寬以待人,為了幫助我們寫好論文而抽出了自己寶貴的時間,讓我十分感動。在此我要向劉老師致以崇高的敬意和衷心的感謝,祝您身體健康,萬事如意,工作上蒸蒸日上。?
我還要感謝我的父母,每個父母都是世界上最偉大的人,因此我們不僅要懷著感恩的心,更要以實際的行動讓他們為有我們這樣的子女而感到驕傲。作為他們的孩子,我秉承了他們樸實堅韌的性格,也因此我有足夠的信心和能力戰勝前進的路上的艱難險阻。也因為他們的日夜辛勞,我才有機會如愿完成自己的大學學業,進而取得進一步的發展機會。?
最后,我必須感謝我的朋友,正是因為他們在電腦技術上的無私指引,我才能得以順利完成該論文。?
轉載于:https://www.cnblogs.com/Losers-AFC/p/10843682.html
總結
以上是生活随笔為你收集整理的基于.NET的俄罗斯方块课程设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: yy怎么调高音质模式(语音下载2022年
- 下一篇: 方舟手游墓碑怎么捡包 方舟生存进化