亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        用C#實(shí)現(xiàn)單機(jī)版俄羅斯方塊

        2016-02-05 08:05:34韋立梅張淑榮
        電腦與電信 2016年10期
        關(guān)鍵詞:子類方塊方格

        韋立梅 張淑榮

        (廣東白云學(xué)院,廣東 廣州 510450)

        用C#實(shí)現(xiàn)單機(jī)版俄羅斯方塊

        韋立梅 張淑榮

        (廣東白云學(xué)院,廣東 廣州 510450)

        俄羅斯方塊是一款非常受歡迎的益智游戲。本文介紹了利用C#來實(shí)現(xiàn)此游戲的分析設(shè)計(jì)、主要類及其代碼等知識(shí)。

        俄羅斯方塊;C#;類

        1 引言

        C#是微軟公司發(fā)布的一種面向?qū)ο蟮摹⑦\(yùn)行于.NET Framework之上的高級(jí)程序設(shè)計(jì)語言,它是由C和C++衍生出來的,具有安全、簡(jiǎn)單、執(zhí)行效率高等特點(diǎn)。Microsoft Visual Studio(簡(jiǎn)稱VS)是美國(guó)微軟公司的開發(fā)工具包系列產(chǎn)品,是目前最流行的Windows平臺(tái)應(yīng)用程序的集成開發(fā)環(huán)境。本文將說明使用C#語言實(shí)現(xiàn)俄羅斯方塊游戲的主要類代碼,開發(fā)平臺(tái)使用Visual Studio 2013。

        2 設(shè)計(jì)分析

        當(dāng)用戶單擊開始游戲命令按鈕后,在程序界面的左側(cè)出現(xiàn)游戲面板區(qū)域,是由18行、11列方格組成的長(zhǎng)方形區(qū)域,并設(shè)置兩個(gè)障礙物方格,然后隨機(jī)給出不同的形狀,從正中間一列開始下落,當(dāng)碰到障礙物后,該形狀也變成新的障礙物,若沒有,則下落并填充到相應(yīng)的區(qū)域,在下落的過程中可通過鍵盤上的“↑”按鍵對(duì)形狀進(jìn)行翻轉(zhuǎn)變形,鍵盤上的“↓”按鍵控制形狀加速下落,鍵盤上的“←”、“→”按鍵控制形狀進(jìn)行左右移動(dòng),若填滿游戲面板中的某一行,便消除該行,剩余的方塊向下移動(dòng),并記分。當(dāng)形狀填滿游戲面板首行時(shí),游戲視為結(jié)束。

        用戶界面的右側(cè),會(huì)顯示下一個(gè)即將出現(xiàn)的形狀、所得分?jǐn)?shù)、等級(jí)、形狀下落速度等信息。

        圖1 游戲開始界面

        圖2 游戲結(jié)束界面

        3 游戲主要類

        游戲主要有三個(gè)類:游戲幫助類,形狀父類,背游戲控制器類。由于篇幅所限,這里只重點(diǎn)介紹形狀父類及其代碼。

        3.1 游戲幫助類

        提供整個(gè)程序運(yùn)行過程中經(jīng)常要使用的公共變量:游戲面板的行數(shù)、列數(shù),默認(rèn)是18行,11列,小方格的邊長(zhǎng),游戲環(huán)境的初始化,中間列索引,障礙物的顏色,普通背景方格的顏色,游戲速度的設(shè)置,線程鎖(玩家分?jǐn)?shù),玩家等級(jí))。

        3.2 形狀父類

        這個(gè)抽象類描述的對(duì)象是俄羅斯方塊的七種不同的形狀,是一個(gè)父類,它共有七個(gè)子類(ShapeLine、ShapeLLeft、ShapeLRight、ShapeSquare、ShapeT、ShapeZLeft、ShapeZRight)。每個(gè)子類的形狀都是由四個(gè)小正方形組成。這個(gè)抽象類需要實(shí)現(xiàn)不同形狀實(shí)體所有的屬性和動(dòng)作。包括:形狀的組成,位置,形狀左移,右移,下移,旋轉(zhuǎn)等。

        類設(shè)計(jì):

        {public ShapeUnit[]units=new ShapeUnit[4];//聲明ShapeU-nit數(shù)組,對(duì)應(yīng)每個(gè)形狀中的4個(gè)小方格

        public ShapeDirection shapeDirection=ShapeDirection.Up; //形狀方向,默認(rèn)是向上的

        protected CellPosition shapeCenter;//形狀中心點(diǎn)

        public Shape(){……}//構(gòu)造函數(shù)用于初始化units數(shù)組,調(diào)用SetUnitsPositon()方法。

        {for(int i=0;i

        {units[i]=new ShapeUnit();}

        this.SetUnitsPositon();}

        protected abstract void SetUnitsPositon();//雖然每個(gè)形狀子類對(duì)象都是由4個(gè)小方格組成,但是每個(gè)子類4個(gè)小方格(元素)的位置不同,所以定義一個(gè)抽象方法,而在每個(gè)子類中會(huì)重寫該方法,設(shè)置每個(gè)小方格的位置

        public void DrawMe(Graphics g)//畫出形狀的方法

        {lock(CommonHelper.lockKey)

        {foreach(ShapeUnit u in this.units)//遍歷數(shù)組中的每一個(gè)元素,調(diào)用每一個(gè)元素的DrawMe方法

        u.DrawMe(g);}}

        public void WipeMe(Graphics g){……}//擦除形狀的方法,與畫出形狀的方法類似,實(shí)際上就是調(diào)用每個(gè)小方格的WipeMe(g)方法,將小方格自己擦除,可參照上面的DrawMe方法,編寫相應(yīng)代碼,在此省略。

        public void MoveDown(Graphics g)//形狀下落的方法

        {this.WipeMe(g);//擦除形狀.

        for(int i=0;i

        {units[i].Position=new CellPosition(){RowIndex=units[i].

        Position.RowIndex+1,ColIndex=units[i].Posi

        tion.ColIndex};}

        shapeCenter.RowIndex++;

        this.DrawMe(g);}//根據(jù)新的位置重新繪制形狀

        Interface.IShapeMoveable shapeMoveListener;//形狀下落的線程開始

        bool isAive=true;//形狀存活的標(biāo)志

        public void StartShapeMoveThread(Interface.IShapeMoveable shapeMoveListener)//開啟形狀移動(dòng)線程

        {this.shapeMoveListener=shapeMoveListener;

        Thread shapeMoveThread=new Thread(MoveDownAuto);//聲明1個(gè)線程對(duì)象,并為這個(gè)線程指定執(zhí)行的方法

        shapeMoveThread.IsBackground=true;//設(shè)置線程為后臺(tái)線程

        shapeMoveThread.Start();//開啟線程 } private void MoveDownAuto()//線程執(zhí)行方法

        {while(isAive)

        {Thread.Sleep(CommonHelper.GameSpeed);//暫停線程

        shapeMoveListener.ShapeMove(this);//移動(dòng)形狀}} public void KillMe(){this.isAive=false;}//結(jié)束線程public void MoveToLeft(Graphics g)//向左移動(dòng)

        {this.WipeMe(g);//擦除形狀本身

        for(int i=0;i

        {units[i].Position=new CellPosition(){RowIndex=

        units[i].Position.RowIndex,ColIndex=units

        [i].Position.ColIndex-1};}

        shapeCenter.ColIndex--;

        this.DrawMe(g);//重新繪制}形狀

        public void MoveToRight(Graphics g){……}//向右移動(dòng)

        //可參照向左移動(dòng)方法,編寫向右移動(dòng)代碼,注意向右移動(dòng)時(shí)行坐標(biāo)不變,列坐標(biāo)增加

        public void MoveToDown(Graphics g){……}//向下移動(dòng)

        //可參照向左移動(dòng)方法,編寫向下移動(dòng)代碼,注意向下移動(dòng)時(shí)列坐標(biāo)不變,行坐標(biāo)增加

        public abstract void TurnToRight();//形狀右旋轉(zhuǎn),在每個(gè)形狀子類中,重寫該方法

        public abstract void TurnToDown();//形狀下旋轉(zhuǎn),在每個(gè)形狀子類中,重寫該方法

        public abstract void TurnToLeft();//形狀左旋轉(zhuǎn),在每個(gè)形狀子類中,重寫該方法

        public abstract void TurnToUp();//形狀上旋轉(zhuǎn),在每個(gè)形狀子類中,重寫該方法}

        左L形狀子類實(shí)現(xiàn)SetUnitsPositon方法的重寫代碼如下:

        class ShapeLeftL:Shape

        {protected override void SetUnitsPositon()

        {base.shapeCenter=new CellPosition(1,CommonHelper.MidCol);

        base.units[0].Position=new CellPosition(base.shape-Center.RowIndex-1,base.shapeCenter.ColIndex);

        base.units[1].Position=new CellPosition(base.shape-Center.RowIndex,base.shapeCenter.ColIndex);

        base.units[2].Position=new CellPosition(base.shape-Center.RowIndex+1,base.shapeCenter.ColIndex);

        base.units[3].Position=new CellPosition(base.shape-Center.RowIndex+1,base.shapeCenter.ColIndex-1);}

        左L形狀子類實(shí)現(xiàn)TurnToRight方法的重寫代碼如下:

        public override void TurnToRight()

        {base.units[0].Position=new CellPosition(base.shapeCenter.RowIndex+1,base.shapeCenter.ColIndex+1);

        base.units[1].Position=new CellPosition(base.shapeCenter.RowIndex+1,base.shapeCenter.ColIndex);

        base.units[2].Position=new CellPosition(base.shapeCenter.RowIndex+1,base.shapeCenter.ColIndex-1);

        base.units[3].Position=new CellPosition(base.shapeCenter.RowIndex,base.shapeCenter.ColIndex-1);}

        3.3 游戲引擎類

        游戲引擎類就如一個(gè)汽車發(fā)動(dòng)機(jī)一樣,可以讓游戲反復(fù)地運(yùn)行。它的主要功能是:當(dāng)用戶單擊“開始游戲”按鈕后,重新畫出游戲背景、初始障礙物、隨機(jī)產(chǎn)生形狀;形狀以一定的速度下落的過程中,對(duì)鍵盤事件做出響應(yīng),實(shí)現(xiàn)左右移動(dòng)、向下加速、旋轉(zhuǎn)。當(dāng)形狀到達(dá)邊界時(shí),結(jié)束形狀的移動(dòng),并將形狀變成新的障礙物。

        4 結(jié)束語

        在Visual Studio 2013環(huán)境下實(shí)現(xiàn)的俄羅斯方塊游戲,可以讓廣大編程愛好者更好地學(xué)習(xí)C#語言的應(yīng)用,提高實(shí)戰(zhàn)能力的同時(shí),也激發(fā)了學(xué)習(xí)興趣,對(duì)自己動(dòng)手編寫應(yīng)用程序的能力會(huì)有很大的幫助。

        [1]王文舉.C#語言開發(fā)俄羅斯方塊游戲[J].電腦編程與維護(hù),2013(3):7 3-7 9.

        [2]付強(qiáng),丁寧,等編著.C#編程實(shí)戰(zhàn)寶典[M].北京:清華大學(xué)出版社,2014.

        【Abstract】Tetris is a very popular puzzle game.This paper describes the design of using C#to achieve the game,the main types of knowledge and code.

        class Shape

        Using C#to Achieve a Single version of Tetris

        Wei Limei Zhang Shurong
        (Guangdong Baiyun University,Guangzhou 510450,Guangdong)

        Tetris;C#;class

        TP311.52

        A

        1008-6609(2016)10-0055-03

        韋立梅(19 77-),女,遼寧凌源人,碩士,講師,研究方向?yàn)閳D形圖象處理、數(shù)據(jù)庫(kù)系統(tǒng)開發(fā)。

        猜你喜歡
        子類方塊方格
        方塊村(1)
        旋轉(zhuǎn)吧!方塊!
        有多少個(gè)方塊
        方格里填數(shù)
        不一樣的方塊橋
        卷入Hohlov算子的某解析雙單葉函數(shù)子類的系數(shù)估計(jì)
        方格里填數(shù)
        分方格
        關(guān)于對(duì)稱共軛點(diǎn)的倒星象函數(shù)某些子類的系數(shù)估計(jì)
        分方格
        国产高清在线视频一区二区三区| 国产高清精品自在线看| 亚洲AV秘 无码一区二区在线 | 国产成人亚洲综合无码DVD| 成人免费毛片在线播放| 日本一区二区在线高清观看| 国产人与zoxxxx另类| 98bb国产精品视频| 国产精东一区二区三区| 亚洲精一区二区三av| 熟女少妇在线视频播放| 亚洲成AⅤ人在线观看无码| 91精品啪在线观看国产色| 无码伊人66久久大杳蕉网站谷歌| 亚洲伊人成综合网| av无码天堂一区二区三区| 偷拍视频十八岁一区二区三区| 厨房人妻hd中文字幕| 2019最新国产不卡a| 狠狠综合亚洲综合亚色| 青青草视频是针对华人| 一区二区三区av波多野结衣| 亚洲成人电影在线观看精品国产 | 日韩成人极品在线内射3p蜜臀| 亚洲国产精品500在线观看| 亚洲一区免费视频看看| 日本天堂免费观看| 亚洲精品无码av片| 免费观看成人稀缺视频在线播放| 美女在线一区二区三区视频| 幻女bbwxxxx在线视频| 一区二区韩国福利网站| 国产专区亚洲专区久久| 正在播放强揉爆乳女教师| 青草福利在线| 日韩性感av一区二区三区| 午夜熟女插插xx免费视频| 4444亚洲人成无码网在线观看| 国产精品狼人久久久影院| 久久精品色福利熟妇丰满人妻91 | 欧美伦费免费全部午夜最新|