基于Java的俄羅斯方塊游戲的設計與實現

關于俄羅斯方塊項目源碼.zip資源-CSDN文庫icon-default.png?t=N7T8https://download.csdn.net/download/JW_559/89300281

基于Java的俄羅斯方塊游戲的設計與實現

摘 ?要

????俄羅斯方塊是一款風靡全球,從一開始到現在都一直經久不衰的電腦、手機、掌上游戲機產品,是一款游戲規則簡單,但又不缺乏樂趣的簡單經典小游戲,上手容易,適用范圍廣泛,人所共知。俄羅斯方塊游戲簡單的基本規則是有小方塊組成的7種不同的規則圖形陸續從屏幕上落下,玩家操作移動使其下落拼出一條完整的橫條,隨即會消失,玩家得分,游戲等級提高,當沒有被消除的圖形堆積到屏幕頂端時,游戲結束。

????俄羅斯方塊游戲最初是由俄羅斯人阿列克謝·帕基特諾夫在1984年開發的休閑小游戲,曾幾何時它創造了無可匹敵的商業價值,影響了一代休閑小游戲的開發與產業鏈。隨著信息時代科技時代的不斷發展和變化,計算機已經普及到每一個人的生活中,在繁忙的工作生活中,這一類休閑小游戲給人們帶來了些許的放松。

????這篇論文詳細的描述分析了經典傳統的俄羅斯方塊實現的基本思路和一些基本游戲規則,在此基礎之上,更進一步地開發出俄羅斯方塊的創新創意模式,在經典游戲基礎上開發出隨著分數增高而等級增高難度加大的模式,并且創意性的開發出可操控方塊顏色變換的模塊,并且增添了游戲聲音和音樂模塊。本論文對上述功能給出了具體實現流程、詳細描述、和一些源代碼。

? ? 本論文闡述了俄羅斯方塊游戲的開發和發展歷史、開發此游戲的意義以及開發環境并根據軟件工程開發軟件和java編寫程序的相關知識,對程序的需求分析、概要設計、詳細設計與實現、調試運行進行了一系列描述。

????此次程序設計是在Microsoft Windows 7系統下,以Java為開發語言,在Eclipse開發平臺上進行游戲的設計與實現。

關鍵詞:游戲設計;俄羅斯方塊;軟件工程;Java;Eclipse。

Based on the design and implementation of Java game Tetris

Abstract

Tetris is a popular all over the world, from the beginning to now has been enduring the computer, mobile phone, handheld game machine products, is a game with simple rules, but not the lack of fun, simple classic game, easy to use, wide application scope, basic rules of simple Tetris game evident to anyone. There is 7 different to the regular pattern of the composition of the small box on the screen in succession from the fall, the operation of the mobile game player to spell out the whereabouts of a complete bar, then disappear, game player score, game level, when the accumulation is not eliminated graphics to the top of the screen, the game is over.
??????Tetris game is the first by the Russians in 1984 Alexei Pazhitnov developed a casual game, only a short while ago it creates unmatched business value, affect the development of a generation of casual games and industrial chain. With the information age era of science and technology continuous development and change, the computer has spread to every person's life, in the busy working life, this kind of casual games brought some people to relax.
???????This paper gives a detailed description of the basic ideas of the traditional analysis of classic Tetris and some basic rules of the game, on this basis, further develop the creative mode in Tetris, the classic game developed with the scores increased and the higher rank of difficulty of the model, and develop creative control box color transform the module of the game, and add music and sound module. In this thesis the function given the specific implementation process, described in detail, and some of the source code.
???????This paper describes the development history and development of Tetris game, developed this game meaning as well as the development environment and according to the related knowledge of software engineering and software development of Java programming, analysis, outline design of program requirements, detailed design and implementation, debugging and running a series of description.


??????The program is designed in Microsoft Windows 7 system, with Java as the development language, Eclipse development platform for the design and implementation of the game

Key Words:?Game design; Tetris, Software engineering, Java;Eclipse。

1 緒論

????緒論從程序的開發背景、開發意義以及所需要開發技術和目前國內外對俄羅斯方塊游戲的研究現狀進行了簡要的敘述。

1.1程序開發背景及意義

????俄羅斯方塊游戲是一款流行于全世界并且經久不衰的游戲,是一款在計算機,手機,電視游戲機,掌上游戲機等一系列產品上都能玩的休閑小游戲,它曾經創造了幾乎任何游戲都無可匹敵的轟動和無數的商業價值,是游戲史,軟件開發史上的一件重要的大事。

????在1984年6月的一天,俄羅斯莫斯科的數學家阿列克謝·帕基特諾夫(Alex Pajitnov)在工作地點莫斯科科學計算機中心玩過一個拼圖游戲后突然受到啟發,而設計出這款游戲,剛開始他只是在Electronica 60(一種計算機)上進行開發,后來經由瓦丁·格拉西莫夫(Vadim Gerasimov)移植到PC端,并且在莫斯科的計算機界廣泛傳播,俄羅斯方塊開始大火,成為了有史以來最為暢銷的經典休閑小游戲,至今還一如既往保持魅力。俄羅斯方塊簡單的基本游戲規則是在一個用于擺放小正方形的標準虛擬游戲場地,基本單位為小型正方形;由四個小型正方形組成7中不同的規則圖形(田字形,Z字形,反Z字形,7字形,反7字形,T字形,長條形)通過玩家操作上鍵以90度,180度,270度,360度旋轉方塊一共有28種圖形方案,通過左鍵右鍵左右移動,下鍵加速下落調整位置,是方塊在屏幕底部拼出完整的一條或幾條,然后消除,給新落下的方塊騰出位置,每消除一條完整橫條,玩家等級提高一級,當等級提高到一定等級時剛快下落速度加快,一旦沒被消除的方塊到達屏幕頂端,游戲結束。

????隨著計算機技術的日益更新和不斷發展,俄羅斯方塊游戲也不斷地推出各式各樣的模式,也有許多不同的版本供大家玩耍,因為游戲本身有簡單,有復雜,能夠很好地鍛煉游戲玩家的腦力反應能力,和邏輯思維能力,還能給玩家帶來無窮的游戲樂趣,所以深受廣大玩家的喜歡。對于開發游戲軟件,大多數人都感到觸摸不到,很神奇,隨著開發方法和工具的不斷推陳出新,自己動手開發一些小游戲也并非遙不可及。俄羅斯方塊游戲在游戲史上的地位無可匹敵,并且游戲的界面簡約,代碼并不是很復雜,互聯網上也有很多關于俄羅斯方塊游戲實現的一些算法和設計,難度并非特別大。

????俄羅斯方塊游戲簡單,益智,以其獨特簡潔的界面和極具玩耍樂趣的模式讓眾多的游戲愛好者深陷其中,無法自拔,并且老少皆宜。在如今快節奏的生活當中,學生和工作黨的學習工作壓力也隨之越來越大,每個人的任務逐漸繁重,越來越少的自由支配休息時間讓人們更加迫切的需要有一些既簡單又節省時間的休閑游戲供大家娛樂。毫無疑問,俄羅斯方塊是一款簡單益智有趣的休閑小游戲,并且可以移植到電腦、手機、平板電腦、電視游戲機、掌上游戲機、電子詞典、Mp4等一系列便攜設備上。本次課題研究,無論從技術開發上,還是社會意義上,都是很有價值的,是本人對游戲開發的一次膽大嘗試。

1.2開發技術概述

軟件工程是一門研究用工程化方法構建和維護有效的,實用的和高質量的軟件的學科;設計包括程序設計語言,數據庫,算法,軟件開發工具,系統平臺,設計模式等很多方面;在現代社會中,軟件應用于電子郵件,嵌入式系統,人機交互界面,辦公套件,操作系統,編輯器,數據庫,游戲等多個典型方面;同時,在如今社會的各式各樣的行業中都有計算機軟件的應用,包括工業,農業,銀行,航空,政府部門等等,能有效的促進經濟和社會的發展,提高人們的工作效率和生活效率。

俄羅斯方塊游戲開發代碼相對來說不是特別復雜,本論文基于Java編程語言,采用Java語言中常用的Swing組件。Swing是Java中的圖形用戶界面(GUI)工具包,是Java基礎類的一部分,包括了文本框,分隔窗格,按鈕,表等GUI器件,使用純Java寫成,開發人員可以用少量的代碼就可以寫出Swing各式各樣的靈活豐富的功能和模塊化組件來創建漂亮優美的用戶界面。Java Swing組件中包括以下幾個常用的類:JFrame?是屏幕上的圖形對象,可以有最大化、最小化、關閉等基本操作,是Java的GUI程序設計的基本思路;JPanel?能夠用來嵌套,對窗體中有相同邏輯功能的組件進行組合,能夠加到JFrame窗體中,是Swing中的面板容器類。 JLabel?對象是用來顯示文本、圖像或同時顯示二者并且可以設置其中的一些屬性;JTextField是一個用來編輯單行文本的運行組件;JButton是一個用來創建按鈕的類。除此之外,Java中的Swing組件中還包含有許多功能的類,可以簡單的來創建一些優美漂亮的圖形界面。

1.3俄羅斯方塊游戲的研究現狀

1.3.1 國內外研究現狀

進入二十一世紀以來,計算機不斷地發展,電競行業也在不斷進入上升階段,游戲軟件的開發越來越火,游戲軟件就如同戲劇、電影一樣,是一種越來越火的新型的綜合型藝術產品。跟一般的網頁開發,軟件開發不同,計算機游戲軟件的開發不僅需要設計開發人員掌握專業的程序設計技巧和軟件工程的方法,還需要專業的游戲領域的知識,專業的游戲開發知識,才能有效的開發和實現游戲的生動界面,音效處理,并且跟玩家達成完美的交互等。

前蘇聯科學家阿列克謝·帕基特諾夫(Alex Pajitnov)原本開發的《俄羅斯方塊》游戲是作為一種教育用軟件的,之后開始提供授權給各個游戲公司,至此以后,各大平臺上就出現了各種不同版本的游戲。

Game Boy版的俄羅斯方塊游戲在日本本土賣出了424萬套,成為了Game Boy游戲史上賣的最火的游戲。在海灣戰爭期間,俄羅斯方塊游戲成為了前線美軍最適合的消磨時間的游戲之一。

俄羅斯方塊游戲的基本原理對于大多數程序員來說是相對比較簡單的,并且俄羅斯方塊游戲具有數學性,動態性和很強的知名度。也經常拿來作為游戲程序設計的練習題材。

1.3.2 文獻綜述

文獻[1]和文獻[2]以零基礎講解為宗旨,用實例引導讀者深入學習,采染基礎知識→核心技術→高級應用→項目實戰的講解模式,深入淺出地講解Java的各項技術及實戰技能。從初學者角度出發,通過通俗易懂的語言、豐富多彩的實例,詳細介紹了使用Java語言進行程序開發應該掌握的各方面技術。包括:熟悉Eclipse開發工具,Java 語言基礎,類和對象,包裝類,數字處理類,接口、繼承與多態,類的高級特性,異常處理,Swing程序設計,集合類,I/O輸入輸出,反射,枚舉類型與泛型,多線程,網絡通信,數據庫操作,Swing表格組件,Swing樹組件,Swing其他高級組件,高級布局管理器,高級事件處理,AWT繪圖與音頻播放等。這兩本文獻覆蓋了“夠用”得Java語言和技術,實例豐富,內容詳盡,對于初學者和有一定的Java基礎的學生來說,可以快速的提高學生的開發技術和技能。本課題設計中有關圖形界面設計的內容、用戶界面構件及設計、事件處理與窗口構造構件以及Swing的基礎知識及其系列組件等方面的內容都參考了這兩本文獻,給予了我很大的幫助。

文獻[3]主要講解了包括2D繪圖;游戲動畫的制作;網絡程序基礎;強化游戲界面;人工智能與2.5D游戲;掃雷、迷宮、俄羅斯方塊等游戲實例;碰撞、粒子系統、5D立體坐標等繪圖算法;多人聯機游戲制作。收集了一系列的算法公式,讓讀者能更方便的利用。以由淺入深的方式,逐步分析游戲設計的過程,帶領讀者解決游戲開發階段可能遇到的問題,并總結了Java游戲制作的實戰經驗。本課程設計中游戲的原理、動畫的實現、音效的處理、鼠標和鍵盤事件處理、人工智能等知識都參考了該文獻。

文獻[4]探討了經典的電腦游戲-俄羅斯方塊的程序原理及其實現技術,從軟件工程的角度描述了程序的功能要求、數據結構以及圖形旋轉、坐標變換等關鍵技術。通過這本文獻讓我了解了更多的關于俄羅斯方塊游戲開發的專業領域的知識。

文獻[5]屬于進階性書籍,更加側重于講解如何使用Java來思考解決問題。這本文獻本次課程設計中,給予了我很多關于Java在編程時編程思想和技巧上很多的幫助。

2相關技術

2.1?JAVA簡介

????Java是由Sun Microsystems公司推出的Java面向對象程序設計語言和Java平臺的總稱。是一種能夠編寫跨平臺應用軟件的面向對象的程序設計語言。Java 技術具有良好的通用性、高效性、跨平臺性和安全性,廣泛應用于PC、數據中心、游戲控制臺、科學超級計算機、移動電話和互聯網,同時擁有全球最大的開發者專業社群。

Java語言歷時近二十年,已發展成為人類計算機史上影響力最深遠的編程語言之一,從某種程度上看,它甚至超出了編程語言的范疇,成為了一種開發平臺,一種開發規范模式。更甚至于:Java已經成為了一種信仰,Java語言所崇尚的開源,自由,等精神,吸引了全世界無數的優秀的程序員。事實上,從人類有記載歷史以來,從來沒有一種編程語言可以吸引這么多優秀的程序員使用,也沒有一種編程語言能衍生出這么多的開源框架。

Java語言是一門非常純粹的面向對象的編程語言,它吸引了C語言和C++語言的各種優點,又摒棄了C++語言里難以理解的多繼承,指針等概念,因此Java語言具有功能強大和簡單易用兩個非常良好的特征。Java語言作為靜態面向對象編程語言的代表,極好地表現了面向對象理論,允許程序員以一種更加優雅的思維方式進行更加復雜的編程開發。

不僅如此,Java語言中相關的Java EE規范中包含了當今時下最流行的各種軟件工程理念,各種先進的設計思想,都可以在Java EE規范、平臺以及相關的框架中找見相應的實現原理。從某種程度上來看,學精通了Java語言相關的各種方面的知識,相當于系統的學習了軟件開發的相關知識,而不是僅僅學完了一門編程語言。

時至今日,大部分銀行,電信,證券,電子商務,電子政務等各種系統或者已經采用Java EE平臺構建,或者正在逐漸過渡到采用Java EE平臺來構建,Java EE 規范是目前最成熟的,也是應用最廣泛的企業級應用開發規范。

2.2 Swing組件簡介

????Swing API 是一組可擴展的 GUI 組件,用來創建基于 JAVA 的前端/ GUI 應用程序。它是建立在 AWT API 之上,并且作為 AWT API 的替代者,因為它的幾乎每一個控件都對應 AWT 控件。 Swing 組件遵循模型 - 視圖 - 控制器架構來滿足下面的準則。一個單一的 API 足夠支持多種外觀和風格;API 是模擬驅動的,這樣最高層級的 API 不需要有數據;API 是使用 Java Bean 模式的,這樣 Builder Tools 和 IDE 可以為開發者提供更好的服務來使用它。

????Swing API 架構用下列的方式來遵循基于松散的 MVC 架構。模型表示組件的數據。視圖表示組件數據的可視化表示形式。控制器接受用戶在視圖上的輸入,并且在組件的數據上反映變化。Swing 組件把模型作為一個單獨的元素,并且把視圖和控制器部分組合成用戶界面的元素。使用這種方式,Swing 具有可插拔的外觀與風格架構。Swing特點主要有:

????輕量級 ——?Swing 組件是獨立的本地操作系統的 API,因為 Swing API 控件通常采用純 JAVA 代碼而不是采用底層的操作系統調用來呈現。

????豐富的控件 ——?Swing 提供了一組豐富的先進的控件,如樹,頁簽窗體,滑動條,顏色選擇器,表格控件。

????高級自定義 ——?Swing 控件可以用非常簡單的方法來自定義,因為可視化外觀是獨立于內部表示的。

????可插拔的外觀和風格 ——?基于 Swing 的 GUI 應用程序的外觀和風格可以在運行時根據有效的值改變。

2.3?Eclipse開發平臺簡介

Eclipse 是一個開放源代碼的、基于 Java 的可擴展開發平臺,專注于為高度集成的工具開發提供一個全功能的、具有商業品質的工業平臺。Eclipse只是一個框架和一組服務,用于通過插件組件構建開發環境。Eclipse 附帶了一個標準的插件集,包括 Java 開發工具(Java Development Tools,JDT)。
Eclipse起始于1999年4月,最初是由IBM公司開發的替代商業軟件Visual Age for Java的下一代IDE開發環境,IBM提供了最初的Eclipse代碼基礎,包括Platform、JDT 和PDE,2001年11月貢獻給開源社區,目前由IBM牽頭,圍繞著Eclipse項目已經發展成一個龐大的Eclipse聯盟,有150多家軟件公司參與到Eclipse項目中,其中包括Borland、Rational Software、Red Hat及Sybase等,現在由非營利軟件供應商聯盟Eclipse基金會(Eclipse Foundation)管理。 2003年,Eclipse 3.0選擇OSGi服務平臺規范為運行時架構。 2007年6月,穩定版3.3發布。2008年6月發布代號為Ganymede的3.4版。
Eclipse是著名的跨平臺的自由集成開發環境(IDE),最初主要用來Java語言開發,但是目前亦有人通過插件使其作為其他計算機語言比如C++和Python的開發工具。Eclipse原本只是一個框架平臺,提供插件開發環境(Plug-in Development Environment,PDE),這個組件主要針對希望擴展 Eclipse 的軟件開發人員,允許構建與 Eclipse 環境無縫集成的工具,眾多插件的支持使得Eclipse擁有其他功能相對固定的IDE軟件很難具有的靈活性。由于 Eclipse 中的每樣東西都是插件,給 Eclipse 提供插件,為用戶提供一致和統一的集成開發環境,使所有工具開發人員都具有同等的發揮場所。

Eclipse的優勢:

目前全球有上百萬人在使用Eclipse進行開發。為什么Eclipse擁有如此眾多的擁躉?這與Eclipse集眾多特性于一身有很大關系。

????Eclipse 是開放源代碼的軟件。這意味著Eclipse不僅可以免費使用,還可以通過研究源代碼學習世界上頂尖開發人員的編程技術,并可以共享遍布全球的開發人員所貢獻的公共開放源代碼庫。

????Eclipse是真正可擴展并可配置的。Eclipse采用插件機制,猶如一個花瓶,你可以隨時向花瓶里面插花,也可以很容易將不再需要的花取出。目前,互聯網上免費的、收費的插件遍地開花,插件開發工作在國內外也如火如荼。

Eclipse支持眾多的開發語言而不僅僅是Java。Eclipse只是給開發人員提供了一個能夠擴展系統功能的最小核心,基于擴展點的插件體系結構使得Eclipse支持多種語言成為可能。只要安裝相應語言的插件,Eclipse就可以支持該種語言的開發。目前,Eclipse已經可以支持C/C++、 COBOL、PHP、Perl、Python等多種語言。(盡管 Eclipse 主要是一個 Java 開發環境,但其體系結構確保了對其它編程語言的支持)。

???Eclipse提供了對多重平臺特性的支持。開發者可以使用他們感覺最舒適、最熟悉的平臺,例如Windows、Linux、MacOS等。Eclipse對每個平臺都有其單獨的圖形工具包,這使得應用程序具有接近本地操作系統的外觀和更好的性能。

?基于業界領先的OSGi規范。OSGi規范最早由Sun Microsystems、IBM、愛立信等于1999年推出,其服務平臺包括:服務網關、汽車、移動電話、工業自動化、建筑物自動化、PDA網格計算、 娛樂(如iPronto)和 IDE等。基于OSGi的系統以微內核形式運行,因而能夠輕松實現軟件業界夢寐以求的可熱插拔、動態改變行為、穩定高效的系統。Eclipse從3.1開 始,毅然拋棄了其原有的已經獲得業界認可的框架,采用OSGi作為其架構。從Eclipse3.2版本開始,Eclipse提供了基于OSGi開發的支 持,開發者可以利用其開發基于OSGi的系統了。

???Eclipse美輪美奐的人機界面受到廣泛贊譽。Eclipse提供了全新的SWT/JFace API(而不是AWT/Swing),一改SWT/Swing單調、沉悶的界面風格,使得開發基于本地的具有豐富圖形界面的應用程序成為可能,猶如一股春 風吹進Java的桌面開發領域,給人耳目一新的感覺。

???Eclipse由業界領先者推出,具有強大的行業力量。Eclipse基金會吸收了大量學術研究機構、商業組織,領導Eclipse的長遠規劃和發展,并確保Eclipse處于軟件工具行業的領先地位。

2.4系統平臺環境

2.4.1 硬件平臺:

???本程序開發計算機硬件如下:

內存:4G

硬盤:500G

CPU:Intel(R)Core(TM)i5—3230M CPU ?@2.60GHz

交互工具:鍵盤、鼠標

顯示器:LCD顯示器

2.4.2 軟件平臺:

本系統的開發環境如下q

操作系統:Microsoft Windows 7 Ultumate

JDK版本:jdk-8u121-windows-x64

Eclipse版本: Neon.2 Release (4.6.2),eclipse-inst-win64

3 ?系統分析

系統分析是軟件開發過程中我們所要做的第一步,包括系統的需求分析和可行性分析。系統的需求分析,主要是用來說明本系統是一個什么系統,必須用來做什么,就這個問題上達到開發人員和主要用戶之間的共識。系統的可行性分析,主要就是對系統的所有的一切資源實施進行分析,用來說明系統的開發和投入的合理性,可行性和必然性,并對其中可能會出現的不可預見性的問題進行合理的分析。軟件開發中最具有挑戰性的環節莫過于對系統的需求分析,花費在需求分析上的時間無疑是非常有價值的,如果時常發生需求變更,會給軟件開發在預定計劃內完成的任務帶來非常嚴重的不利影響。做好系統的需求分析和可行性分析,這樣有利于提高軟件開發過程中的便利性,能對軟件開發過程進行實時監控和管理,更方便的按計劃進行,從而達到提高軟件的質量的目的,為程序開發人員,用戶等提供更便攜的交流合作。作為工作成果的原始依據,系統的需求分析和可行性分析也間接的可以向潛在用戶表達自己系統的功能,讓用戶來判斷系統的功能等是否符合所要達到的需求。

3.1可行性分析

可行性分析基于技術,經濟,工程,技術等方面的項目主要內容和配套條件,如市場需求,資源供應,施工規模,工藝路線,設備選型,環境影響,資金籌集,盈利能力等。 其他方面研究分析比較,項目完成后可能取得的財務,經濟和社會環境影響的預測,該項目是否值得投資,以及如何對項目決策進行咨詢建設,為全面的系統分析方法提供依據。 可行性分析應具有遠見,公正,可靠,科學的特點。

為了保證可行性研究工作的科學性、客觀性和公正性,有效地防止錯誤和遺漏,在可行性研究中,首先必須站在客觀公正的立場進行調查研究,做好基礎資料的收集工作。對于收集的基礎資料,要按照客觀實際情況進行論證評價,如實地反映客觀經濟規律,從客觀數據出發,通過科學分析,得出項目是否可行的結論。

可行性研究報告的內容深度必須達到國家規定的標準,基本內容要完整,應盡可能多地占有數據資料,避免粗制濫造,搞形式主義。

在做法上要掌握好以下幾個要點:先論證,后決策;處理好項目建議書、可行性研究、評估這三個階段的關系,哪一個階段發現不可行都應當停止研究;要將調查研究貫徹始終。一定要掌握切實可靠的資料,以保證資料選取的全面性、重要性、客觀性和連續性;多方案比較,擇優選取。對于涉外項目,或者在加入WTO等外在因素的壓力下必須與國外接軌的項目,可行性研究的內容及深度還應盡可能與國際接軌。

為保證可行性研究的工作質量,應保證咨詢設計單位足夠的工作周期,防止因各種原因的不負責任草率行事。

可行性分析的目的是確定是否可以在最短時間之內用最低的成本解決這個問題。可行性分析最主要的不是解決問題,而是要研究這些問題是否值得去花費人力和財力去研究和解決。如果有簡單易行的方法則予以肯定。

3.1.1經濟可行性分析

????系統的經濟可行性分析的目的是,核算系統從開發建設到系統運行期間所需的資金投入,以及新系統的市場需求及經濟效益,將投入預算與預計收益進行對比,核算經濟方面的成本的可行性。

本游戲系統主要是用于大學生軟件工程畢業課程設計,不需要考慮其所能產生的經濟效益和游戲日后的發展狀態。對游戲系統的本身的經濟要求并不高,只是通過本游戲系統的開發來提升學生自身的知識和能力水平。只需要有一臺裝有JDK運行環境和Java開發工具Eclipse軟件的電腦就可以,所以經濟問題可不用考慮。

3.1.2技術可行性分析

可用于編寫俄羅斯方塊游戲的編程語言有很多,本次課題主要是在基于Java的環境下進行游戲系統的開發,所以本系統主要利用的是Java中的Swing組件進行開發,需要對變量定義,初始化,界面設計,游戲初始化,進入游戲,退出游戲,處理游戲過程中的各種操作進行相應功能的代碼要求,技術方面要求并非特別困難,技術可行。

3.1.3社會可行性分析

本游戲系統的開發主要是用于畢業課程設計與論文,用以鞏固大學四年學習的知識,主要以個人和學校為單位,僅供個人娛樂和學校的課程設計與畢業論文檢查入檔案,不會對社會造成任何的影響,所以無需考慮到任何法律,版權等一系列社會因素,在這方面完全可行。

3.2需求分析

????所謂的“需求分析”是指對待解決的問題的詳細分析,澄清問題的要求,包括需要輸入什么數據,得到什么結果,最后應該輸出什么。可以說,在軟件工程中“需求分析”是確定電腦“做什么”,達到什么樣的效果。可以說,需求分析是在系統完成之前完成的。

????在軟件工程中,需求分析是指在創建新的或更改現有計算機系統時描述新系統的目的,范圍,定義和功能所需的所有工作。需求分析是軟件工程中的關鍵過程。在這個過程中,系統分析師和軟件工程師決定了客戶的需求。只有在確定了這些需求之后,才能分析和尋求新系統的解決方案。需求分析階段的任務是確定軟件系統功能。

????在軟件工程的歷史上,人們一直認為需求分析是軟件工程中最簡單的一步。但是在過去十年中,越來越多的人意識到需求分析是最重要的過程。如果分析師在需求分析時無法正確地了解客戶的需求,則最終軟件無法真正達到客戶的需求,或軟件項目在指定時間內無法完成。

3.2.1 功能性需求

????整個游戲系統會隨機產生7種由四個小方塊組成的不同形狀的方塊,經過旋轉后得到28種狀態,如果增加游戲難度,會增加六種不同形狀的方塊形狀,同樣經過旋轉后增加24種狀態。方塊按一定的速度自由下落,玩家通過鍵盤上的上下左右按鍵控制方塊的左右移動和旋轉,將方塊落下后放在合適的位置。當方塊落下后,如果方塊落下后有一整行被方塊填滿,那么該一整行消去。當一行被消去時,玩家得分增加10分,當得分達到100分后,玩家等級增加一級,速度加快一級,難度加大。如果當方塊落下后整個游戲畫布界面被占滿,則方塊不再下落,游戲宣告失敗。游戲具體的功能需求有如下幾個:

????? 游戲界面需求:游戲的良好的界面會讓玩家眼前一亮,更加能充分的感受到游戲帶來的娛樂性,放松性。本游戲的默認背景色是深綠色,游戲主界面畫面自定義為自己的所喜歡的圖片,并可以更改,主界面方塊默認用橘黃色,預顯方塊顏色默認為淡紫色。背景色、前景色對比鮮明,以達到讓玩家眼前一亮的感覺,并能在游戲達到高等級狀態,方塊下落速度漸高的情況下使玩家能夠清楚的分辨出下落方塊的形狀,增加游戲的刺激性。

????? 游戲形狀需求:用數組作為存儲方塊52種狀態的數據結構,即初級等級長條形、Z字形、反Z形、田字形、7字形、反7形、T字型一共7種形狀的向4個方向的旋轉變形,和中級等級的三種方塊12種不同的狀態,高級等級的三種方塊12種不同的狀態。各個方塊可以實現按逆時針的旋轉方式旋轉,并且方塊能否旋轉需要用條件加以判斷,如果旋轉后可能發生越界,則不能旋轉,需要調整位置來保證他可以旋轉。

????? 鍵盤處理事件需求:當方塊下落時,玩家可以通過鍵盤上的方向鍵:上鍵實現旋轉,下鍵實現加速下落,左鍵實現左移,右鍵實現右移,和空格鍵實現一鍵下落,字母P鍵實現暫停,字母C鍵實現繼續等一系列的操作。

????? 鼠標處理事件需求:通過鼠標,可以點擊控制面板中的菜單按鈕和幫助按鈕,選擇菜單欄的菜單項,可以實現游戲的開局,選擇游戲等級,更改游戲中方塊的顏色顯示,游戲主界面背景色和前景色的顯示,更改游戲背景圖片,方塊下落速度,是否播放游戲中的聲音等一系列的功能。

? 顯示需求:本游戲程序的顯示需求是要求當方塊落下后填滿一整行,則該行消除,其余剩下的未填滿的行自動逐次向下移動,消去一行右界面得分增加十分,當分數增加到100分時,等級增加一等級。當方塊落下疊加到主界面的全部所有行時,方塊不再下落,游戲結束,主界面提示“Game Over”字樣。

3.2.2 非功能性需求

非功能性需求:俄羅斯方塊游戲系統的非功能性需求包括游戲主界面左上角圖標顯示,調整窗口尺寸最大化最小化(但不包括主界面的尺寸大小),游戲運行時彈出窗口的位置居中等一系列非功能性需求。

3.2.3 ?接口控制

本俄羅斯游戲系統在Windows操作系統下,主要是通過鍵盤進行游戲的操

作,通過鼠標進行開局,退出,設置等一系列操作。首先,游戲利用鍵盤的按鍵進行游戲的操作,所以需要使用鍵盤的接口事件。其次,在游戲進行的全過程中,需要使用鼠標進行游戲的控制,包括開始,選擇等級,改變設置,改變顏色,查看版本信息,退出等,所以要對鼠標的單擊,按鍵添加接口監聽事件,編寫相應的代碼來實現鼠標和鍵盤的相應功能。

4 ?系統的概要設計

4.1 ?系統的功能設計

4.1.1 ?手動處理業務的基本流程

????本游戲的設計以娛樂為初衷,以益智為目的,在綜合研究以往俄羅斯方塊經典游戲功能的基礎上推陳出新,加之新的功能,賦以新的生機和活力。以下具體闡述游戲的基本流程。

???運行說明:

???1>運行程序,點擊右側控制面板內的“開始”或“控制”菜單內的“開始”按鈕開始游戲。

???2>使用上、下、左、右鍵和空格鍵,P鍵,C鍵控制方塊的變形、下落、向左和向右移動和一鍵迅速下落,暫停,繼續。

???3>方塊滿行消除,分數自動增加,等級自動增加一級。

???4>等級增加、方塊下落速度增加,按右側控制面板或“游戲”菜單內的“初級”“中級”,“高級”按鈕來手動改變游戲難易程度。也可點擊“方塊顏色”菜單內的選項,更改方塊顏色等,也可以通過“自定義”菜單內的選項,來更改游戲的一些屬性。

???5>按鍵盤鍵字母P鍵可以控制游戲暫停,然后按子母鍵C鍵可以控制游戲繼續上次游戲。按“結束游戲”按鈕,游戲會徹底停止正在進行的當局游戲,再按“開始”或“控制”菜單內的“重新開始”會開始新游戲。

???6>當方塊占滿整個窗口,不能再有新方塊下落時,游戲會彈出“Game Over”的對話框提示游戲結束。

游戲的基本流程圖如圖4—1所示:

圖4-1游戲的基本流程圖

4.1.2 ?基本流程的功能模塊

本系統基于游戲的各項功能來設計游戲的各個功能模塊。圖4-2為本游戲的系統功能模塊示意圖,如圖所示,本游戲主要有兩大模塊:游戲界面區,游戲控制區。游戲界面區分顯示玩家可選操作、顯示玩家操作結果兩個部分。游戲控制區分更改顏色、開始、更改游戲等級為初級、更改游戲等級為中級、更改游戲等級為高級、自定義下落速度、更改背景、退出以及其他等一些功能模塊。

圖4-2系統功能模塊示意圖

????圖4-3為游戲界面區模塊設計示意圖,如圖所示,游戲界面區模塊可細分為闖進新游戲界面、處理玩家操作、顯示玩家操作結果三個功能模塊。

圖4-3界面模塊示意圖

????圖3-4為游戲控制區設計示意圖,如圖所示,游戲控制區模塊分為開始、自定義操作設置、初始游戲級別設置、初始顏色設置、退出等功能模塊。

圖4-4控制區模塊示意圖

5 ?系統的詳細設計與實現

????Java是一種純面向對象(Object-Oriented)的程序語言,它的諸多優點在此就不作詳細論述了。從面向對象的觀念出發,本程序主要可分為以下幾個模塊:

????●游戲主界面顯示模塊

????●方塊及數據顯示模塊

????●方塊移動控制模塊

????●游戲界面顏色控制模塊

????●游戲進度、等級控制模塊

????分析對象的技巧在于它的功能的擴展性及維護效率。試想,如果因為外部環境或者用戶需求的變化需要對程序進行功能擴展或者維護,就要對代碼作大幅度的更動甚至重寫,這樣就失去了面向對象的優勢,所以在本程序分析時將獨立性高的模塊作為一個對象,以提高程序的可擴展性和可維護性。以下該游戲中類的設計:

????MyFrame類:繼承自JFrame類,作為游戲的主類,負責對游戲的主體全局進行控制,連接與指揮各個類的樞紐。

????PreView類:繼承自JPanel類,作為操作面板類,負責安放主游戲窗口,積分板,級別控制按鈕等窗口用以控制游戲進程。

????GameCanvas類:繼承自JPanel類,ChangeBlockColor線程類動態改變畫布類的方格顏色,畫布類通過檢查方格顏色來體現ChangeBlockColor方塊的移動情況與消去狀況。

????Box類:方格類,組成方塊的基本元素,主要表達方式為顏色。

????Block類:作為操控方塊的類,控制方塊的移動,下落以及變形。

5.1 ?游戲主界面顯示模塊

????一個優秀的軟件系統不僅體現在核心的功能的多樣性和強大上,如果使用者所面對的是枯燥的、陳舊的界面的話,那么這個的軟件系統是不成功的,所以好的、精美的界面設計是極為重要的環節。為玩家設計制作布局合理、視覺效果良好的界面的重要性就不言而喻了。

游戲主界面采用Swing組件開發,并且向其注冊監聽器,以實現各種控制功能,綜合游戲窗體的設計,其上至少需要注冊三個監聽器,分別是動作監聽器(ActionListener)、鍵盤監聽器(KeyListener)、選項監聽器(ItemListener)。

????根據初步設計,可以確定客戶端上所要用到的Swing組件對象有JFrame對象、JPanel對象,JLabel對象、JButton對象、JMenuBar對象、JMenu對象、JMenuItem對象、JTextField對象、JTextArea對象、JDialog對象等,至少十個Swing組件對象。下圖5-1為游戲主界面截圖。

圖5-1游戲主界面截圖

本游戲主界面設計的初始顏色搭配基于對比鮮明的原則,默認背景色為深綠色,左上角設置俄羅斯方塊圖標,得分初始值為0,等級初始值為1,最高分記錄初始值為0。游戲主窗體尺寸設置為(520,580),方塊移動范圍窗格由一個20行、12列的二維數組控制,且左上角圖標設置為方塊圖案,起標識作用。

5.2 ?畫布、方塊顯示模塊

本游戲中將畫布設計為自定義圖片,可以根據自己的需求來自己動手更改背景圖片,在方塊下落過程中,根據顏色的變化識別下落的方塊。

5.2.1 ?背景畫布模塊設計

該游戲的主背景畫布是一個20行、12列的二維數組,方塊顯示是由相應顏色變化來標識,主窗體用顏色填充后可形成呈現出來背景樣式和方塊。本游戲用繼承自JPanel的GameCanvas類控制背景畫布的顯示,用rows代表畫布的行數,cols代表畫布的列數,行數和列數決定著畫布擁有方格的數目。背景畫布主要實現代碼如下:

首先,用一個畫布類的構造函數來表示整個主界面的行數、列數以及主界

中的相對位置:

/**

?* 畫布類的構造函數

?* @param rows int, 畫布的行數

?* @param cols int, 畫布的列數

?* 行數和列數決定著畫布擁有方格的數目

?*/

public GameCanvas(int rows, int cols) {

this.rows = rows;

this.cols = cols;

this.setOpaque(false);

boxes = new Box[rows][cols];

for (int i = 0; i < boxes.length; i++) {

for (int j = 0; j < boxes[i].length; j++) {

boxes[i][j] = new Box(false);

}

}

setBounds(0, 0, 300, 500);//設置相對位置坐標

setBorder(new EtchedBorder(

????????EtchedBorder.RAISED, Color.white, new Color(148, 145, 140)));

}

/**

?* 取得畫布中方格的行數

?* @return int, 方格的行數

?*/

public int getRows() {

return rows;

}

/**

?* 取得畫布中方格的列數

?* @return int, 方格的列數

?*/

public int getCols() {

return cols;

}

????其次,在設置一個畫布類的構造函數來表示整個主界面的前景色,背景色并獲取其前景色和背景色:

/**

?* 畫布類的構造函數

?* @param rows 與public GameCanvas(int rows, int cols)同

?* @param cols 與public GameCanvas(int rows, int cols)同

?* @param backColor Color, 背景色

?* @param frontColor Color, 前景色

?*/

public GameCanvas(int rows, int cols,

??????????????????Color backColor, Color frontColor) {

this(rows, cols);

this.backColor = backColor;

this.frontColor = frontColor;

}

/**

?* 設置游戲背景色彩

? ?* @param backColor Color, 背景色彩

?*/

public void setBackgroundColor(Color backColor) {

this.backColor = backColor;

}

/**

?* 取得游戲背景色彩

? ?* @return Color, 背景色彩

?*/

public Color getBackgroundColor() {

return backColor;

}

5.2.2 ?預覽方塊模塊設計

方塊和數據信息是游戲中最基本的功能模塊。Box這個類方格類,是組成塊的基本元素,用自己的顏色來表示塊的外觀 ,MyTask繼承TimerTask類用來定時下落,用計數方式來實現速度的改變,MyListener類繼承KeyAdapter類用來實現按鍵監聽,控制方塊的上下左右。定義一個4x4方陣,共16個小格。用“0”和“1”來表示每個方格是繪制新顏色還是保留底色。

每得到一個新方塊,都是隨機從七種形態的方塊中選取一種。游戲定義了一個變量,代表新方塊的模型。比如定義int型數組STYLE代表28中方塊類型,7行4列,每個元素代表其中一種方塊。即0<=blockkindnum<=6,0=<blockstatusnum<=3

那么,當方塊落下需要得到新方塊時,只需隨機得到一對blockkindnum,blockstatusnum值,然后再根據這個STYLE的值構畫相應的方塊。剩下的問題就是應該怎么隨機到一對STYLE行列值。

Java語言包中的Math類提供了一個生成隨機數的方法random(),調用這個方法會產生一個在0-1之間的雙精度浮點數。所以每次要得到新方塊時,只需調用一次這個方法,得到一個0-1的雙精度浮點數,然后用該數乘以7,之后強轉成整型,即可得到1—7的整數,用來控制行。用該數乘以4,之后強轉成整型,即可得到1—4的整數,用來控制列。

由此可以組合出多種圖形定義然后用代碼實現下列功能:

1>每次執行首先為隨機數產生不同的初值。

int col = (int) (Math.random() * (gc.getCols() - 3));//隨即位置生成列

int style = Constant.STYLES[(int) (Math.random() * Block.get_addl())][(int) (Math.random() * 4)];

圖5-2隨機產生方塊流程圖

????2>隨機選取一個圖形,圖5-2隨機產生方塊圖具體描述用生成的隨機數控

產生的圖形。

3>當前圖形在其4*4網格中的位置信息。

????繪制4行4列的方塊預顯方格,隨機生成預顯示的方塊樣式。本游戲用二維數組存儲方塊的28種樣式。

值得注意的是:在傳統的俄羅斯方塊游戲的基礎上,本游戲系統為了體現出創新的思維,本著為了學習的原則,在傳統游戲的基礎上增加了中級三種其他的方塊樣式和高級三種其他的方塊樣式。一共有52種方塊樣式,具體的存儲方式主要實現代碼如下:

/**

?* 分別對應對13種模型的52種狀態

?*/

public final static int[][] STYLES = {// 共28種狀態

{0xf000, 0x8888, 0xf000, 0x8888}, // 長條型的四種狀態

{0x4e00, 0x4640, 0xe400, 0x4c40}, // 'T'型的四種狀態

{0x4620, 0x6c00, 0x4620, 0x6c00}, // 反'Z'型的四種狀態

{0x2640, 0xc600, 0x2640, 0xc600}, // 'Z'型的四種狀態

{0x6220, 0x1700, 0x2230, 0x7400}, // '7'型的四種狀態

{0x6440, 0xe200, 0x44c0, 0x8e00}, // 反'7'型的四種狀態

{0x6600, 0x6600, 0x6600, 0x6600}, // 方塊的四種狀態

{0x8c88,0xf200,0x44c4,0x4f00},//增加的中級樣式方塊3個

{0xea00,0xc4c0,0xae00,0xc8c0},

{0x8c00,0xc800,0xc400,0x4c00},

{0xac00,0xcc40,0x6e00,0x8cc0},//增加的高級樣式方塊3個

{0x4e40,0x4e40,0x4e40,0x4e40},

{0x8480,0xa400,0x4840,0x4a00},

};

???傳統俄羅斯方塊游戲的7種方塊樣式,相信很多人都知道,在這里就不一一截圖展示常見的方塊樣式。以下是在傳統游戲的模式下增加的三種中級難度和三種高級難度的方塊模型:

????●增加的三種中級難度方塊模型(經過90度、180度、270度、360度旋得到四種轉狀態)

????圖5-10增加的三種中級難度方塊模型

????●增加的三種高級難度方塊模型(經過90度、180度、270度、360度旋得到四種轉狀態)

??

??

5.2.3 ?方塊移動、旋轉模塊設計

方塊的翻轉與移動比較容易實現,方塊移動只需要改變方塊的橫坐標或縱坐標,然后重新繪制方塊即可。方塊翻轉也只需要改變背景數組的值,重新繪制方塊即可。

本游戲方塊下落時,進行動態繪制,實現Cloneable接口, 以指示 Object.clone()?方法可以合法地對該類實例進行按字段復制。方塊的操作類BlockOperation繼承Thread類,重寫run()方法,以實現方塊的動態正確下落。當然,在線程中要判定方塊是處于moving狀態還是pausing狀態。

publicvoid?run()

{

//moving判定方塊是否在動態下落

while?(moving)

{

try

{

//betweenleveltime指示相鄰等級之間相差時間

sleep(betweenleveltime

????????* (ControlMainGame.maxlevel?- level + flatgene));

} catch?(InterruptedException ie)

{

ie.printStackTrace();

}

//pausing判定游戲是否處于暫停狀態

if?(!pausing)

moving = (moveTo(y + 1, x) && moving);

//moving是在等待的100毫秒間,moving沒被改變

}}

當然,在游戲中還要判定方塊移動的邊界問題, 比如,一個方塊在它左邊正好差一個格子的空間才能夠翻轉,但是它的右邊恰好有一個格子的空間,這種情況,如果方塊不能夠翻轉,就不方便用戶操作,如果能夠翻轉,就會發生越界,將已經存在的方塊擠占掉。要想實現翻轉又不發生越界,那么,就應該在方塊翻轉后把它往右邊移動一個格子,然后再繪制方塊,這樣,方塊就不會擠占掉其它已經固定住的方塊了,以下解決越界問題。

1>方塊翻轉判定

在兩種情況可能發生越界,一種是方塊落下去固定住以后,第二種是周圍的空間不允許它進行翻轉。

第一種情況只需要參考方塊落下去后不能夠再移動的判定即可。

對于第二種情況,在每次方塊翻轉前,必須首先計算出方塊周圍的空間,如果空間允許則翻轉。否則,不能翻轉。

因為七種方塊是不規則的,每種方塊要求的翻轉空間都是不一樣的,甚至是在它的不同翻轉狀態下,所要求的翻轉空間也是不一樣的,首先想到的自然就是為每一種方塊,方塊的每一種狀態都寫一個判定條件,但是這樣做未免過于麻煩。

根據觀察,不難發現,七種形態的方塊,長條形的方塊如果以橫條的形態下落,則只要能夠下落,就能翻轉,如果以豎條的形態下落,那么它翻轉后所處的位置必須要有4x1個格子的空間才能夠翻轉。對于田字形的方塊,只有能夠繼續下墜,就一定能夠翻轉,所以田字型的方塊只要沒有落下,就一直能夠翻轉。而其它五種形態的方塊,又有一個共同點,就是它們都有兩種翻轉狀態橫向占三個格子的空間,豎直方向占兩個空間,另外兩種翻轉狀態橫向占兩個格子的空間,豎直方向占三個格子空間,如果他們是以橫向占三個格子的狀態下落,那么只要能下落,就一定能夠翻轉,如果是以橫向兩個格子的狀態下落,那么在翻轉后,周圍必須要有3x2個格子的空間。

所以,方塊翻轉的判定,要分三種情況,第一種情況是方塊落下去后不能翻轉;第二種情況是對豎直狀態出現的長條形的方塊進行翻轉判定;第三種情況是對除長條形和田字形之外的其它五種以橫向占兩個格子的狀態出現的方塊進行翻轉判定。

何種情況下方塊能夠翻轉的問題解決了,接下來,我們就應該解決方塊翻轉后所處的位置的問題了,因為只有事先知道方塊翻轉后所處的位置,才能夠對那個位置的空間范圍進行判定,判定它是否能夠容納方塊。

可以確定的是,無論方塊怎么翻轉,都處在方塊數組中,也就是說方塊必定是在游戲地圖中某一4x4個格子的空間范圍內。

方塊數組在游戲主界面中的坐標是確定的,不確定的是方塊翻轉后到底處在方塊數組的哪個位置,為了解決這個問題,我們可以限定方塊在方塊數組中的存儲原則是靠左、靠上,這樣,無論翻轉怎么翻轉,方塊數組中第一行和第一列都是有方塊的,這樣也就確定了方塊在方塊數組中的位置,也就可以得知方塊翻轉后在游戲地圖中的位置了。

假定方塊數組的橫縱坐標是x和y,那么,這個位置就是,長條形的方塊翻轉后所處的那一行是游戲地圖的第y行,所占的列是第x到x+3列,長條形和田字形以外的五種方塊翻轉后的所占的行數是游戲地圖的第y和第y+1行,所占的列是第x到x+2列。

所以,如果以上空間有空格子,方塊就能夠翻轉。

2>翻轉越界糾正

只要方塊翻轉后所處的空間足夠,方塊就能夠翻轉,但是,如果方塊翻轉后所處的空間不足夠,而在它的另一邊卻有足夠的空間呢?

方塊在邊界處時,翻轉后不僅可能翻出地圖外,還可能發生數組越界,當然,只需要將地圖數組定義得大一些,就能夠避免數組越界錯誤,對于方塊越界,如果在它的另一邊有足夠空間,那么,就應該把方塊往另一個方向移動適當的單位,糾正方塊越界錯誤。如圖5-12方塊翻轉流程圖所示,方塊翻轉需要經三次判定:是否已經下落到底部、翻轉后是否有足夠空間、翻轉后是否越界。

圖5-12 方塊翻轉處理流程圖

玩家操作鍵盤實現方塊的移動、旋轉,代碼引進ControlKeyListener類繼承KeyAdapter類進行鍵盤監聽功能的實現。KeyAdapter類繼承自Object類,實現KeyListener接口,用來接收鍵盤事件的抽象適配器類。此類中的方法為空。此類存在的目的是方便創建偵聽器對象。擴展此類即可創建 KeyEvent 偵聽器并重寫所需事件的方法,即是 ControlKeyListener類。使用ControlKeyListener可創建偵聽器對象,然后使用組件的 addKeyListener 方法向該組件注冊此偵聽器對象。當按下、釋放或鍵入某個鍵時,將調用該偵聽器對象中的相應方法,并將 KeyEvent 傳遞給相應的方法。實現代碼如下:

privateclass?ControlKeyListener extends?KeyAdapter

{

publicvoid?keyPressed(KeyEvent ke)

{

if?(!game.isPlaying())

return;

BlockOperation blockope = game.getCurBlock();

switch?(ke.getKeyCode())

{

case?KeyEvent.VK_DOWN:

blockope.moveDown();

break;

case?KeyEvent.VK_LEFT:

blockope.moveLeft();

break;

case?KeyEvent.VK_RIGHT:

blockope.moveRight();

break;

case?KeyEvent.VK_UP:

blockope.turnNext();

break;

default:

break;}}}

5.3 ?控制面版模塊

5.3.1 ?菜單欄模塊設計

?????菜單欄中有“游戲”、“幫助”四個菜單選項。“游戲”選項又分“開局”、“初級”、“中級”、“高級”、“自定義”、“方塊顏色”、“退出”等七個選項。“幫助”選項中有“關于”選項,用于顯示游戲版本等信息。

????1>“開局”的按鈕功能為實現游戲畫布的重新繪制,類似reset的功能。該按鈕的監聽實現代碼如下:

/**

?* 重置畫布

?*/

public void reset() {

for (int i = 0; i < boxes.length; i++) {

for (int j = 0; j < boxes[i].length; j++)

boxes[i][j].setColor(false);

}

repaint();

}

????2>“初級”、“中級”、“高級”按鈕用來手動調節游戲的等級,從而改變游戲的等級難度。 “退出”按鈕控制游戲隨時退出,終止游戲。

3>“幫助”按鈕中點擊“關于”按鈕顯示與游戲軟件本身相關信息,具體信息如圖所示:

圖4—19 “關于”選項截圖

5.3.2 ?控制面板按鈕設計

本游戲控制面板中包含得分統計、等級統計等字段。

其中的TextField控件均由游戲本身統計給出,玩家不能私自編輯。本游戲的游戲規則為每消一行得10分,每增加100分上升一個等級,初始得分為0,初始等級為1。

以下給出得分、等級更新等功能實現的主要代碼:

/**

?* 判斷是否滿行,滿行則調用消行方法。

?*/

private void isFullLine() {

// TODO Auto-generated method stub

for (int i = 0; i < 20; i++) {

int row = 0;

boolean flag = true;

for (int j = 0; j < 12; j++) {

if (!gc.getBox(i, j).isColorBox()) {

flag = false;

break;

}

}

if (flag == true) {

row = i;

gc.delete(row);//刪除行

if(isMusic==true)

{mp.playEraseSound();}

addScor();//增加分數

if(scor%100==0)//設置為100分增加一個等級

upspeed=true;//將速度增加標志位至為true

if(upspeed==true)

upLevel();

}

}

}

/**

?* 得分的計算方法

?*/

private void addScor() {

scor=scor+10;

jt9.setText("得分:"+MyFrame.scor);

}

}

private void reset() {

scor=0;

rank=0;

jt10.setText("等級:"+rank);

jt9.setText("得分:"+scor);

upspeed=false;

playing=true;

runstop=false;

gc.setGameOver(false);

gc.repaint();

gc.reset();

}

控制面板中按鈕的功能在4.3.1中已給出代碼,在此不再贅述。

6?系統的測試運行

6.1 測試概述

系統測試,是將軟件,計算機硬件,外圍設備,網絡等元素確認在一起進行各種信息系統的組裝測試和確認測試,系統測試是為整個產品系統進行測試,目的是驗證是否 系統滿足需求規格的定義,找出與需求規格不一致或矛盾的地方,以提出更全面的方案。系統測試發現問題后,嘗試找出錯誤的原因和位置,然后進行更正。 是基于黑盒子類測試的整體系統要求,應該覆蓋系統的所有組件。 對象不僅包括要測試的軟件,還包括軟件依賴的硬件,外圍設備甚至包括某些數據,一些支持軟件及其接口。

系統測試是一個集成測試軟件,作為計算機系統的一部分,結合系統的其他部分,在計算機系統的實際操作環境中進行一系列嚴格有效的測試,以找出軟件潛在的問題,確保系統的正常運行。

系統測試的目的是驗證最終軟件系統是否符合用戶要求。

主要內容包括:

(1)功能測試。也就是說,測試軟件系統的功能是正確的,根據文檔的要求,如《產品需求規格說明書》。 因為正確性是軟件最重要的品質因素,因此功能測試至關重要。

(2)健壯性測試。也就是說,在異常情況下測試軟件系統的能力是否正常運行。健壯性有兩個含義:一個是容錯,另一個是恢復能力。

6.1.1 ?測試原則

?軟件測試的基本原則,齊全的檢測的產品用戶的角度,盡可能多發現系統使用的問題過程中的問題和漏洞、研究和分析、在產品中,有缺陷的方面提出問題與改進建議。詳細的測試原理如下:

(1)軟件測試計劃是軟件測試的行動導向,實際的測試應該細心嚴格執行,高可行性的嚴格執行測試計劃,特別是確定測試方法和測試目的。

(2)測試標準,建立基于用戶需求,軟件測試,主要目的是為了確保產品的一致性和驗證產品能夠滿足客戶的需求,所以在測試過程中應該在用戶的角度始終站在看問題,并發現軟件缺陷和不足所帶來的影響,系統中最嚴重的錯誤無法滿足用戶需求的程序以及功能缺陷。

(3)不能隨意對待測試。

尤其是對系統的測試,反復測試,如果不嚴格執行測試計劃,很有可能會因為疏忽導致的新BUG的產生。因此,反復測試階段也應給予充分重視,早期檢測中有很多錯誤,大多是因為疏忽而沒被發現。

目的:

(1)確保系統測試的活動正常進行;

(2)驗證軟件產品和系統要求不匹配或矛盾的情況;

(3)建立完善的系統測試缺陷跟蹤數據庫;

(4)確保軟件系統的測試活動和結果及時通知相關團體和個人。

6.1.2 ?測試方法

為了全方位的測試系統,找出系統中存在的問題和故障,使用多種測試方法一起測試,可以更加全面的總結出系統設計的優缺點。采用的測試方法有以下幾個:

功能測試:測試系統中各個功能模塊下的功能點是否可以正常使用;

手動測試:主要測試輸入、點擊等各項功能;

黑盒測試:輸入后查看得出的結果是否正確。

恢復測試:恢復測試作為系統測試,主要關注導致軟件運行失敗的各種條件,并驗證恢復過程可以正常實施。 在某些情況下,系統需要具有容錯能力。 此外,系統故障必須在規定的時間內更正,否則將導致嚴重的經濟損失。恢復測試主要檢查系統的容錯能力。當系統出錯時,能否在指定時間間隔內修正錯誤并重新啟動系統。恢復測試首先要采用各種辦法強迫系統失敗,然后驗證系統是否能盡快恢復。對于自動恢復需驗證重新初始化(reinitialization)、檢查點(checkpointing?mechanisms)、數據恢復(data?recovery)和重新啟動?(restart)等機制的正確性;對于人工干預的恢復系統,還需估測平均修復時間,確定其是否在可接受的范圍內。

安全測試:安全測試用于驗證系統內的保護機制,防止非法入侵。 在安全測試中,測試人員扮演著試圖入侵系統的角色,采用多種方式試圖突破防線。 所以系統安全設計的標準是找出使入侵系統成本更高的方法。安全測試檢查系統對非法侵入的防范能力。安全測試期間,測試人員假扮非法入侵者,采用各種辦法試圖突破防線。例如,①想方設法截取或破譯口令;②專門定做軟件破壞系統的保護機制;③故意導致系統失敗,企圖趁恢復之機非法進入;④試圖通過瀏覽非保密數據,推導所需信息,等等。理論上講,只要有足夠的時間和資源,沒有不可進入的系統。因此系統安全設計的準則是,使非法侵入的代價超過被保護信息的價值。此時非法侵入者已無利可圖。

壓力測試:壓力測試是指在正常資源下使用異常流量,頻率或數據量來實施系統。 以下試驗可以在壓力試驗中進行:

①如果平均中斷次數是每秒一到兩次,那么特殊測試用例的設計每秒產生10次中斷。

②將輸入數據量增加一個數量級,以確定輸入函數如何響應。

③在虛擬操作系統中,需要產生最大量的內存或其他資源的測試用例,或產生過多的磁盤存儲數據。

一般的情況下,系統都要反復測試,因為在系統時間和功能的限制,所以系統不可能完美無缺。因此,有必要對各種測試方法一起檢測。

強度測試

強度測試檢查程序對異常情況的抵抗能力。強度測試總是迫使系統在異常的資源配置下運行。例如,①當中斷的正常頻率為每秒一至兩個時,運行每秒產生十個中斷的測試用例;②定量地增長數據輸入率,檢查輸入子功能的反映能力;③運行需要最大存儲空間(或其他資源)的測試用例;④運行可能導致虛存操作系統崩潰或磁盤數據劇烈抖動的測試用例,等等。

性能測試

????對于那些實時和嵌入式系統,軟件部分即使滿足功能要求,也未必能夠滿足性能要求,雖然從單元測試起,每一測試步驟都包含性能測試,領測認為只有當系統真正集成之后,在真實環境中才能全面、可靠地測試運行性能系統性能測試是為了完成這一任務。性能測試有時與強度測試相結合,經常需要其他軟硬件的配套支持。

6.1.3 ?測試意義及注意事項

????軟件測試是軟件設計過程中極其重要的一個環節,是保證軟件的質量的重要保障。測試的方法的好壞會直接影響到軟件的好壞,進行軟件測試可以找出其中的錯誤、不足并加以改進,從而得到一個高效、可靠的系統。

????軟件應從多角度進行測試和分析,這樣才能找出其中錯誤的地方。測試的時間最好找一些與設計系統無關的人員,或者分析人員。因為在開發軟件的時候,開發人員已經形成了自己的思維定勢,在測試的時候始終受到這種思想的束縛,很難找出其中的錯誤而與設計無關的人員和那些分析人員很容易找出錯誤所在。

在程序調試過程中一定要耐心仔細,一個細微的錯誤將會導致整個功能不能實現導致浪費很多的時間去修改。應在以下幾方面加以注意:

????1>語法錯誤

????語法錯誤是經常碰到的錯誤。例如,命令拼寫錯誤或傳遞給函數的參數不正確都將產生錯誤。語法錯誤可能導致不能繼續編寫代碼。

????2>邏輯錯誤

????邏輯錯誤通常可能是潛在和難以檢測的。當有因鍵入錯誤或程序邏輯流程引起的邏輯錯誤,可能會成功運行,但產生的結果卻是錯的。例如,當本應使用小于符號比較數值,但卻使用了大于符號時,那么將返回不正確的結果。

????3>運行時錯誤

????運行時錯誤是在執行過程中指令試圖執行不可能的動作而導致的,必須糾正運行時產生的錯誤,這樣才能保證軟件運行的可靠性。

????本游戲在開發過程中采用了多種有效措施進行測試以保證軟件質量,對本游戲進行了邊界處旋轉、方塊翻轉越界等方面的測試,極大的保證了軟件質量和出錯幾率。但是系統中可能還存在著一些其他的錯誤和缺陷,因此,游戲必須要經過反復的運行測試,盡最大量將bug減到最少。

6.2 游戲代碼、算法的測試

????1>寫get()方法時需要有返回值,但是程序中沒有寫return語句,使程序在編譯時出現錯誤。解決方法是,在方法中加入return語句,返回相應的內容即可。

????2>使用隨機函數產生方塊時沒有給各個方塊傳入參數,編譯不能通過。解決方法是,根據各個方塊的構造傳入相應的參數。

????3>寫T字形方塊各方格的默認位置時,將控制方塊位置的變量i,初始化為0,運行的結果是丁字形方塊默認成了豎形方塊。解決方法是,將變量i的初始化數值改為1,即可達到設計的效果。

????4>運行程序時,統計的分數只是每一次消除滿行后的分數,而以前的分數就會被覆蓋,沒有累計。解決方法是,將程序中的“score=”改為“score+=”,就可以使分數累加。

????5>算法流程的錯誤主要集中在如何檢測及消去方塊,還有如何在通關之后對分數的累加進行處理,是否升級的判定這些方面,經過與同學的討論以及參考資料,都最終得到了解決。

6.3 游戲界面菜單選項的功能測試

1>“游戲”菜單測試

表6.1游戲菜單測試用例

測試用例編號

測試項目名稱

測試執行步驟

輸出

測試結果

01

“開局”按鈕測試

點擊“游戲”→“開局”

游戲重置

成功

02

“結束游戲”按鈕測試

點擊“游戲”→“結束游戲”

游戲結束

成功

03

“初級”按鈕測試

點擊“游戲”→“初級”

游戲等級選擇為初級

成功

04

“中級”按鈕測試

點擊“游戲”→“中級”

游戲等級選擇為中級

成功

05

“高級”按鈕測試

點擊“游戲”→“高級”

游戲等級選擇為高級

成功

06

“自定義”按鈕測試

“自定義”按鈕測試

彈出對話框,可以更改自定義信息

成功

07

“下落速度”滑塊測試

點擊“游戲”→“自定義”→“下落速度”

拖動滑塊可更改方塊下落速度

成功

08

“方塊形狀”單選框按鈕測試

點擊“游戲”→“自定義”→“方塊形狀”單選框

可選擇方塊形狀初級、中級、高級、來改變方塊的形狀

成功

09

“方塊是否自動上漲”選擇框測試

點擊“游戲”→“自定義”→“方塊是否自動上漲”選擇框

可勾選小方格,選中則方塊自動上漲,不選中則方塊不自動上漲

成功

10

“游戲過程是否播放聲音”選擇框測試

點擊“游戲”→“自定義”→“游戲過程是否播放聲音”選擇框

可勾選小方格,選中則游戲過程中播放聲音,不選中則游戲過程中不播放聲音。

成功

11

“更換背景”選擇框

點擊“游戲”→“自定義”→“游戲過程是否播放聲音”選擇框

可勾選小方格,選中則更換游戲背景圖片,不選中則不更換游戲背景圖片

成功

12

“確定”和“取消”按鈕測試

點擊“游戲”→“自定義”→“確定”或“取消”按鈕

點擊確定保存更改設置退出對話框,點擊取消則不更改設置退出對話框

成功

13

“方塊顏色”按鈕測試

點擊“游戲”→“方塊顏色”

彈出對話框,可以更改方塊顏色,HSB,RGB等自定義信息

成功

14

“退出”按鈕測試

?點擊“游戲”→“退出”

退出游戲并關閉主界面窗口

成功

2>“幫助”菜單測試

表6.2 “幫助”菜單測試用例

測試用例編號

測試項目名稱

測試執行步驟

輸出

測試結果

15

“關于”按鈕測試

點擊“幫助”→“關于”

彈出對話框,提示游戲版本等信息

成功

6.4 按鍵事件的功能測試

表6.3按鍵事件功能測試用例

測試用例編號

測試項目名稱

測試執行步驟

輸出

測試結果

16

方塊移動測試

游戲過程中,點擊“左、右、下”

方塊正常移動,不會移出邊界

成功

17

方塊旋轉測試

游戲過程中,點擊“上”方向鍵

方塊無邊界和障礙物阻擋的情況下可反轉

成功

6.5 方塊的堆砌與消行功能測試

表6.4 方塊的堆砌與消行功能測試用例

測試用例編號

測試項目名稱

測試執行步驟

輸出

測試結果

18

方塊堆砌測試

當方塊下落到最底面或與障礙物接觸時

方塊成功堆砌在底部

成功

19

方塊消行測試

當出現滿行現象時

所有滿行被消除,方塊依次下移

成功

20

游戲結束測試

當出現滿屏現象時

彈出會話窗口,提示“Game Over”

成功

6.6 ?測試結果

經過多種測試方法對系統各個方面、功能的測試多次測試,測試結果表明系統基本符合的整體設計要求,預期功能基本完成。系統基本可滿足設計開發之初的要求,測試結束。不過整體功能還不夠強大,創新方面做的稍微遜色,作為開發的第一個版本,游戲在功能、界面設計等很多方面還需要進一步完善。

結 ?論

在做畢業設計之前,我對Java相關的開發只是停留在理論知識的水平上,此次畢業設計讓我明白“紙上得來終覺淺,絕知此事要躬行”的道理。缺乏實際的軟件開發經驗,是我給自己下的定論。通過這次畢業設計,我完成了俄羅斯方塊游戲的全部開發任務。在整個開發過程中遇到了很多問題,如方塊的繪制和變形、線程的創建問題、同步的控制、滿行判斷、消行的處理以及最高分數記錄的功能實現,但最終都被我一一解決,對其中比較主要的幾點體會總結如下:

第一,為了熟悉俄羅斯方塊的相關功能和設計,我時常從各大游戲下載網站下載單機版俄羅斯方塊游戲,并研究其中功能的實現和界面的設計,思考和查閱資料進行分析,經過逐步的設計與反復的修改論證,才完成了整個游戲的開發。

第二,在游戲設計過程中,我采用從粗到精的設計模式,從小到大測試的原則。先設計游戲框架,并逐層測試,而后再添加具體實現代碼并逐步進行更細化的測試。設計過程中,經常會遇到難題,我會通過反復思考和測試,然后找出自己的錯誤并加以改正,再進行下一個步驟,確保萬無一失,盡力減輕最后的調試工作量。

第三,畢業設計業可以作為一個不斷學習新鮮事物的過程,從設計初的不懂到最后能夠圓滿完成,我體會到在實踐中不斷學習的重要性,這對于將來我走上工作崗位具有重要的教育意義。通過畢業設計的創作,我對Java這門課程有了更深一步的了解,也對我今后的就業之路打下了一定的基礎。

畢業設計是我們作為學生學習階段的最后一步,是基礎知識和專業知識的綜合應用,是一個全面的重新學習,然后改進過程,學生學習能力的過程和獨立思考和工作能力也是一個培訓,而畢業設計水平也反映了大學教育的綜合水平,所以學校非常重視畢業設計這一環節,加強畢業設計工作和動員教育的指導。在大學學習過程中,畢業設計是我們社會參與實際工作的重要組成部分,也是為了我們學習和解決生活問題的能力,是學校生活和社會生活的轉型。畢業設計完成后,我嘗試研究設計和實踐工作的有機結合。這更有利于我們增強自己的能力。

經過一段時間的努力,在一些同學和老師的幫助下,我終于完成畢業項目,這是一項重要任務。回想一下我們設計的過程,可以說是困難和容易共存的。其中,把大學學習的知識被納入內部,其實對我來說,也是一個不小的挑戰,而且也是一次大學的知識的考試。?

在畢業設計的過程中遇到了很多困難,而且很多都是沒有遇到過的問題,如果不是親自做,可能很難在某種程度上找到自己所缺乏的知識,對我們來說,找到問題,到解決問題,這是最實際的。面對自身難以解決的問題,在獲取一些信息的同時,在老師和學生的幫助下,這些問題可以解決,所以畢業設計順利完成。據了解,該項目的知識依然非常深奧,所以我們不僅現在,在未來更是要繼續探索。

理論與實踐的結合不僅包括課堂參與的知識,還包括技能培訓的結合,以及指導學生如何去理解并接觸與社會相關的東西。學生畢業設計,在專業理論知識的指導下,可以通過多種方式解決一些實際問題。在設計過程中,學生可以運用理論知識進行實踐,不僅要加深對專業理論知識的理解,而且要豐富和發展本書的理論知識,使之變成更高層次的經驗、技能。由于現有的教學模式,理論知識和技能與生產實踐有著嚴重的分離,學生無法學習課堂以外的知識,實際生產問題常常與學習無關,無法有效得到應用。通過合理選擇課題,引導學生有意識地運用知識和技能體系進行分析思考,為有機地整合理論知識和實踐做出貢獻。

社會不斷變化,目前社會正在轉型發展,人才的要求也越來越高,利用眼光看待問題,學習創新,學習適應社會發展要求。在校外,進入社會,抓住今天的機遇,創造未來。老師的影響力和教授的知識,讓我了解很多道理,以一定的創新精神去面對將來的挑戰。?

????總之,對于這一次畢業設計,我感覺個人不但比以前更加熟悉了一些專業方面的知識,還鍛煉了自己的動手能力,覺得收獲頗豐。同時也會有一種小小的成就感,因為自己在這項任務進行的過程中努力過了。而在以后的實際工作中,我們也應該同樣努力,不求最好、只求更好!?還有就是,想在此對于我的指導老師和同學們表示忠心的感謝,感謝他們在這畢業設計過程中給我的幫助!

程序無論是從技術還是功能上都基本地滿足了用戶的需求。但由于初次設計,功能不夠完善,細節方面的設計還有不足。

這次的畢業設計,我受益匪淺,讓我的思維方式更加縝密,能多個角度的看待、處理問題;知道遇到問題該如何去分析問題、解決問題。相信這些都會讓我在以后的工作中受益無窮的。

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

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

相關文章

物聯網設計競賽_1_邊緣人工智能云計算

邊緣人工智能&#xff1a; 本質上邊緣人工智能&#xff0c;直接會在邊緣設備上運行機器學習算法&#xff0c;例如物聯網設備或邊緣服務器上&#xff0c;這樣可以減少數據傳輸延遲&#xff0c;提高響應速度。 云計算&#xff1a; 云計算模型中&#xff0c;數據通常被發送到遠…

在React中利用Postman測試代碼獲取數據

文章目錄 概要名詞解釋1、Postman2、axios 使用Postman測試API在React中獲取并展示數據小結 概要 在Web開發中&#xff0c;通過API獲取數據是一項常見任務。Postman是一個功能強大的工具&#xff0c;可以幫助開發者測試API&#xff0c;并查看API的響應數據。在本篇博客中&…

【C語言】—— 動態內存管理

【C語言】——動態內存管理 一、動態內存管理概述1.1、動態內存的概念1.2、動態內存的必要性 二、 m a l l o c malloc malloc 函數2.1、函數介紹2.2、應用舉例 三、 c a l l o c calloc calloc 函數四、 f r e e free free 函數4.1、函數介紹4.2、應用舉例 五、 r e a l l o …

無列名注入

在進行sql注入時&#xff0c;一般都是使用 information_schema 庫來獲取表名與列名&#xff0c;因此有一種場景是傳入參數時會將 information_schema 過濾 在這種情況下&#xff0c;由于 information_schema 無法使用&#xff0c;我們無法獲取表名與列名。 表名獲取方式 Inn…

Redis——Redis集群腦裂問題

Redis集群的腦裂問題&#xff08;Split-Brain&#xff09;是一個在分布式系統中可能發生的嚴重問題&#xff0c;特別是在基于主從復制和哨兵&#xff08;Sentinel&#xff09;機制的Redis集群環境中。以下是對Redis集群腦裂問題的詳細闡述&#xff1a; 定義 Redis集群腦裂問題…

FullCalendar日歷組件集成實戰(3)

背景 有一些應用系統或應用功能&#xff0c;如日程管理、任務管理需要使用到日歷組件。雖然Element Plus也提供了日歷組件&#xff0c;但功能比較簡單&#xff0c;用來做數據展現勉強可用。但如果需要進行復雜的數據展示&#xff0c;以及互動操作如通過點擊添加事件&#xff0…

SwiftUI中的常用圖形(Shapes)

概述 在SwiftUI中&#xff0c;常用的圖形&#xff08;Shape&#xff09;主要有&#xff1a; Circle&#xff1a;圓形 Ellipse&#xff1a;橢圓形 Capsule&#xff1a;膠囊形 Rectangle&#xff1a;矩形 RoundedRectangle&#xff1a;圓角矩形 上面的這些圖形都繼承了Shape協議…

DFA算法 敏感詞過濾方案匯總以及高效工具sensitive-word

敏感詞過濾方案匯總以及高效工具sensitive-word 導入pom文件 <dependency><groupId>com.github.houbb</groupId><artifactId>sensitive-word</artifactId><version>0.12.0</version> </dependency>接下來我們編寫相關測試類…

解四層負載和七層負載:Nginx 的應用示范

在網絡架構中&#xff0c;負載均衡是分配網絡或應用程序流量到多個服務器的技術&#xff0c;以優化資源使用、最大化吞吐量、最小化響應時間和避免任何單一資源的過載。Nginx&#xff0c;作為一款強大的HTTP和反向代理服務器&#xff0c;能夠處理七層&#xff08;應用層&#x…

深入剖析JVM、JDK和JRE的區別與聯系

在Java開發和運行過程中&#xff0c;JVM、JRE和JDK是三個核心組件。理解它們的區別和聯系是每個Java開發者的基礎技能。本文將深入探討這三個組件的作用、組成及其在實際應用中的重要性。 一、Java虛擬機&#xff08;JVM&#xff09; **JVM&#xff08;Java Virtual Machine&…

Hive讀寫文件機制

Hive讀寫文件機制 1.SerDe是什么&#xff1f; SerDe是Hive中的一個概念&#xff0c;代表著“序列化/反序列化” &#xff08;Serializer/Deserializer&#xff09;。 SerDe在Hive中是用來處理數據如何在Hive與底層存儲系統&#xff08;例如HDFS&#xff09;之間進行轉換的機制…

ceph糾刪碼精簡配置ec4+2:1與ec4+2的切換

概述 近期遇到項目&#xff0c;由于靈活配置&#xff0c;前期只有部分機器&#xff0c;后續擴容&#xff0c;想用ec42的糾刪碼&#xff0c;但前期只有3臺機器&#xff0c;需要做精簡ec。 erasure-code-profile 首先按照ceph創建糾刪碼池步驟進行操作。 創建ec42的rule cep…

2024國考行測、申論資料大全,做好備考真的很重要!

1. 國考是什么? 國考,全稱國家公務員考試,是選拔國家公務員的重要途徑。通過國考,你將有機會進入政府部門,為國家建設貢獻力量。 2. 國考難在哪里? 國考之所以難,主要體現在以下幾個方面: (1) 競爭激烈 每年國考報名人數都在百萬以上,而錄取率卻不足2%。千軍萬馬過獨木橋…

前端環境準備的一些注意事項

1. 安裝 node-sass4.x 需要python 2 和visual studio 2017&#xff0c;visual 2019版本不行。 2. python版本更新問題 python重新配置環境變量時&#xff0c;不會立馬生效&#xff0c;重啟可生效。 3. node版本問題 接觸一個新的項目&#xff0c;搞清楚node版本再開始準備…

node和npm版本太高導致項目無法正常安裝依賴以及正常運行的解決辦法:如何使用nvm對node和npm版本進行切換和管理

1&#xff0c;點擊下載 nvm 并且安裝 進入nvm的github&#xff1a; GitHub - coreybutler/nvm-windows: A node.js version management utility for Windows. Ironically written in Go. 這里下載發行版&#xff0c;Releases coreybutler/nvm-windows GitHub 找到 這個 nv…

洗地機哪款好用?希亦、追覓、順造、米家等高品質洗地機推薦

家用洗地機已經成為家庭清潔的重要利器&#xff0c;其多功能性能幫助您輕松應對各種清潔任務&#xff0c;從而保持家居環境的清潔整潔。然而&#xff0c;市場上品牌繁多、功能各異的洗地機讓人眼花繚亂。為了幫助大家做出明智的選擇&#xff0c;我們將在本文中提供全面的選購指…

4.3 將AX寄存器中的16位數分成4組,每組4位,然后把這四組數分別放在AL,BL,CL和DL中

思路&#xff1a; 主要是通過SHR指令對AX寄存器進行移位&#xff0c;有個容易出錯的地方就是&#xff0c;當移位數超過1時&#xff0c;不能直接用指令SHR&#xff0c;而應該先將移位數存入CL&#xff0c;再使用指令SHR AH,CL。舉個例子&#xff1a; SHR AX,1 ;是可以的 SHR A…

選擇法(數值排序)(C語言)

一、運行結果&#xff1b; 二、源代碼&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//聲明排序函數sort; void sort(int a[], int n);int main() {//初始化變量值&#xff1b;int i, a[10];//填充數組&#xff1b;printf("請輸入10個整數\n&…

win的開發環境配置(Java開發必備)

文章目錄 日常app工具類app開發類app環境類app 由于每次換新工作、用一臺臨時或者新的電腦時總是要想著要下載什么軟件&#xff0c;這次就一次性全部記錄下來&#xff0c;將必須下載的內容做個記錄。 日常app 百度網盤、微信、網易云、搜狗 工具類app office、bandizip&…

現代 c++ 一:c++11 ~ c++23 新特性匯總

所謂現代 c&#xff0c;指的是從 c11 開始的 c&#xff0c;從 c11 開始&#xff0c;加入一些比較現代的語言特性和改進了的庫實現&#xff0c;使得用 c 開發少了很多心智負擔&#xff0c;程序也更加健壯&#xff0c;“看起來像一門新語言”。 從 c11 開始&#xff0c;每 3 年發…