(河北大學(xué) 河北 保定 071000)
有關(guān)俄羅斯方塊的設(shè)計(jì)
齊子歡
(河北大學(xué)河北保定071000)
俄羅斯方塊是一個(gè)很經(jīng)典的小游戲,簡單有趣。本次實(shí)驗(yàn)主要是設(shè)計(jì)一個(gè)易操作且界面美觀的一款俄羅斯方塊游戲。俄羅斯方塊的設(shè)計(jì)工作對(duì)我這樣的初學(xué)者來說有很大的挑戰(zhàn)性,整個(gè)過程種包含的內(nèi)容多,涉及的知識(shí)廣泛,在設(shè)計(jì)的過程中也實(shí)現(xiàn)了知識(shí)的應(yīng)用,有利于學(xué)習(xí)框架的建立。
本次設(shè)計(jì)可分為游戲設(shè)置、控制、幫助、場(chǎng)景、界面設(shè)計(jì)幾大模塊來描述
游戲設(shè)置模塊:游戲設(shè)置主要實(shí)現(xiàn)的功能有速度設(shè)置、背景顏色設(shè)置、方塊顏色設(shè)置、恢復(fù)默認(rèn)設(shè)置以及退出游戲的設(shè)置。速度設(shè)置分為了慢、中、快三個(gè)等級(jí),從而來改變游戲的難易程度;背景顏色設(shè)置主要指的是場(chǎng)景的背景設(shè)置,通過添加了colordialog這個(gè)控件來進(jìn)行顏色的修改;方塊顏色設(shè)置可以對(duì)7種組合方式進(jìn)行顏色的自由搭配,選中該組合即可進(jìn)行前景色和背景色的改變從而實(shí)現(xiàn)一種美觀的漸變效果。
控制模塊:主要對(duì)游戲過程進(jìn)行控制,包括開始、暫停、重新開始、結(jié)束等操作功能的實(shí)現(xiàn)。
幫助模塊:涉及到鍵盤操作的一些指示性的指令。向下、向左、向右、向下加速對(duì)應(yīng)的按鍵。
場(chǎng)景模塊:主要包括正在運(yùn)行的俄羅斯方塊和隨機(jī)出現(xiàn)的下一個(gè)方塊,正在運(yùn)行的俄羅斯方塊可以通過控制模塊和鍵盤的按鍵來進(jìn)行一系列的操作。
界面設(shè)計(jì):整個(gè)界面顏色的主要以同類色為主,使整個(gè)畫面感更和諧。界面設(shè)計(jì)的風(fēng)格以活潑為主,符合游戲本身的特點(diǎn),簡單有趣。
游戲主要由四部分組成:square類,block類,gamefield類,游戲引擎
Square類 描述的對(duì)象是組成大方塊中的每個(gè)小正方形實(shí)體;
定義square類之后在這個(gè)cs中創(chuàng)建Graphics類的對(duì)象g 并進(jìn)行實(shí)例化,以及進(jìn)行毛刷類GraphicsPath、矩形類Rectangle、顏色類Color、漸變類PathGradientBrush等對(duì)象的定義和實(shí)例化。從而來實(shí)現(xiàn)畫方塊(主要起作用的類有Graphics、GraphicsPath、Rectangle)的操作,并對(duì)其進(jìn)行漸變式顏色的填充。之后進(jìn)行擦出方塊,主要利用的原理是有場(chǎng)景的背景色對(duì)方塊進(jìn)行填充。
block類描述的對(duì)象是某一個(gè)大方塊的實(shí)體。每個(gè)大方塊由四個(gè)小正方形組成,一共有7中組合方式。這個(gè)類需要實(shí)現(xiàn)一個(gè)大方塊實(shí)體所有的屬性和動(dòng)作,包括:方塊的形狀、位置、方塊左移、右移、下移、旋轉(zhuǎn)等。
class Block
{ public Square square1;?//組成block的四個(gè)小方塊public Square square2;public Square square3;public Square square4;private const int squareSize = GameField.SquareSize;?//小方塊的邊長
方塊的形狀:public enum BlockTypes//一共有7種形狀{ undefined = 0,square = 1,line = 2,J = 3,L = 4,T = 5,Z = 6,S = 7};
移動(dòng)的代碼:(左移、下移同理)
public bool right()//檢測(cè)是否可以右
{ if(GameField.isEmpty(square1.location.X / squareSize +1,square1.location.Y / squareSize)&& GameField.isEmpty(square2.location.X / squareSize +1,square2.location.Y / squareSize)&& GameField.isEmpty(square3.location.X / squareSize +1,square3.location.Y / squareSize)&& GameField.isEmpty(square4.location.X / squareSize +1,square4.location.Y / squareSize))
{ Erase(GameField.winHandle);
square1.location = new Point(square1.location.X + squareSize,square1.location.Y);
square2.location = new Point(square2.location.X + squareSize,square2.location.Y);
square3.location = new Point(square3.location.X + squareSize,square3.location.Y);
square4.location = new Point(square4.location.X + squareSize,square4.location.Y);Draw(GameField.winHandle);return true;} else //如果不能右移了{(lán) return false;}
gamefield類所描述的對(duì)象是游戲場(chǎng)景實(shí)體,在其中進(jìn)行了場(chǎng)景的背景色,大小,方塊是否還可以移動(dòng)等的設(shè)置。
游戲引擎,就像一個(gè)發(fā)動(dòng)機(jī)一樣讓游戲不間斷運(yùn)行。本游戲中就是讓方塊以一定的速度下落,并響應(yīng)鍵盤事件,實(shí)現(xiàn)左右移動(dòng),和向下加速的一些功能。
聲音播放:使用一個(gè)using System.Media來定義一個(gè)播放聲音的命名空間,然后創(chuàng)建一個(gè)soundplayer的對(duì)象,用soundlocation屬性設(shè)置聲音文件的地址,然后調(diào)用play()方法即可進(jìn)行播放。
/*播放聲音*/ public static void PlaySound(string soundstr)
{switch(soundstr){ case "FinishOneLine"://消除一行的聲音 if(!File.Exists("FinishOneLine.wav"))return;sound.SoundLocation = "FinishOneLine.wav";break;case "CanNotDo"://當(dāng)無法操作時(shí)if(!File.Exists("CanNotDo.wav"))return;sound.SoundLocation = "CanNotDo.wav" break;} sound.Play();}
(一)首先要定義一個(gè)類來描述組成每一個(gè)大方塊的小正方形實(shí)體;
(二)進(jìn)行Graphics類、毛刷類GraphicsPath、矩形類Rectangle、顏色類Color、漸變類PathGradientBrush從而進(jìn)行小方塊的顏色的填充,完成一個(gè)小正方形實(shí)體的構(gòu)造;
(三)進(jìn)行大方塊進(jìn)行定義,每四個(gè)小正方形組成一個(gè)大方塊,并通過調(diào)節(jié)小正方形在位置來形成7中大方塊的組合形式,大方塊便是出現(xiàn)在主頁面場(chǎng)景中的一個(gè)個(gè)組合;
(四)進(jìn)行按鍵方面的指定和一些操作上的限制,例如是否還可以右移、左移、下移,當(dāng)不能移動(dòng)時(shí)出現(xiàn)聲音提示;暫停、重新開始分別用鍵盤上的空格和回車進(jìn)行實(shí)現(xiàn);
齊子歡(1995-),女,漢族,河北邯鄲人,學(xué)生,本科,河北大學(xué)教育學(xué)院教育技術(shù)學(xué)專業(yè),研究方向:教育技術(shù)學(xué)。