999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

用C#實現單機版俄羅斯方塊

2016-02-05 08:05:34韋立梅張淑榮
電腦與電信 2016年10期
關鍵詞:游戲方法

韋立梅 張淑榮

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

用C#實現單機版俄羅斯方塊

韋立梅 張淑榮

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

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

俄羅斯方塊;C#;類

1 引言

C#是微軟公司發布的一種面向對象的、運行于.NET Framework之上的高級程序設計語言,它是由C和C++衍生出來的,具有安全、簡單、執行效率高等特點。Microsoft Visual Studio(簡稱VS)是美國微軟公司的開發工具包系列產品,是目前最流行的Windows平臺應用程序的集成開發環境。本文將說明使用C#語言實現俄羅斯方塊游戲的主要類代碼,開發平臺使用Visual Studio 2013。

2 設計分析

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

用戶界面的右側,會顯示下一個即將出現的形狀、所得分數、等級、形狀下落速度等信息。

圖1 游戲開始界面

圖2 游戲結束界面

3 游戲主要類

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

3.1 游戲幫助類

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

3.2 形狀父類

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

類設計:

{public ShapeUnit[]units=new ShapeUnit[4];//聲明ShapeU-nit數組,對應每個形狀中的4個小方格

public ShapeDirection shapeDirection=ShapeDirection.Up; //形狀方向,默認是向上的

protected CellPosition shapeCenter;//形狀中心點

public Shape(){……}//構造函數用于初始化units數組,調用SetUnitsPositon()方法。

{for(int i=0;i

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

this.SetUnitsPositon();}

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

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

{lock(CommonHelper.lockKey)

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

u.DrawMe(g);}}

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

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);}//根據新的位置重新繪制形狀

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

bool isAive=true;//形狀存活的標志

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

{this.shapeMoveListener=shapeMoveListener;

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

shapeMoveThread.IsBackground=true;//設置線程為后臺線程

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

{while(isAive)

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

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

{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){……}//向右移動

//可參照向左移動方法,編寫向右移動代碼,注意向右移動時行坐標不變,列坐標增加

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

//可參照向左移動方法,編寫向下移動代碼,注意向下移動時列坐標不變,行坐標增加

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

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

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

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

左L形狀子類實現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形狀子類實現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 游戲引擎類

游戲引擎類就如一個汽車發動機一樣,可以讓游戲反復地運行。它的主要功能是:當用戶單擊“開始游戲”按鈕后,重新畫出游戲背景、初始障礙物、隨機產生形狀;形狀以一定的速度下落的過程中,對鍵盤事件做出響應,實現左右移動、向下加速、旋轉。當形狀到達邊界時,結束形狀的移動,并將形狀變成新的障礙物。

4 結束語

在Visual Studio 2013環境下實現的俄羅斯方塊游戲,可以讓廣大編程愛好者更好地學習C#語言的應用,提高實戰能力的同時,也激發了學習興趣,對自己動手編寫應用程序的能力會有很大的幫助。

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

[2]付強,丁寧,等編著.C#編程實戰寶典[M].北京:清華大學出版社,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-),女,遼寧凌源人,碩士,講師,研究方向為圖形圖象處理、數據庫系統開發。

猜你喜歡
游戲方法
學習方法
游戲
數獨游戲
瘋狂的游戲
飛碟探索(2016年11期)2016-11-14 19:34:47
爆笑游戲
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
第八章直接逃出游戲
小學科學(2015年7期)2015-07-29 22:29:00
第八章 直接逃出游戲
小學科學(2015年6期)2015-07-01 14:30:14
主站蜘蛛池模板: 情侣午夜国产在线一区无码| 毛片网站在线看| 日本亚洲欧美在线| 国产欧美专区在线观看| 欧美一区中文字幕| av在线人妻熟妇| 看国产毛片| 日韩在线视频网站| 欧洲av毛片| 国产一级二级在线观看| 国产日本欧美在线观看| 99在线视频免费| 草逼视频国产| 精品视频在线观看你懂的一区 | 午夜毛片免费观看视频 | 沈阳少妇高潮在线| 91香蕉视频下载网站| 在线毛片网站| 高清码无在线看| 四虎国产成人免费观看| 成人伊人色一区二区三区| 国产精品手机在线播放| 老司机aⅴ在线精品导航| 92精品国产自产在线观看| 国产成人免费| 高潮毛片免费观看| 欧美福利在线观看| 在线国产资源| 久久综合干| 免费无遮挡AV| 国产色伊人| 国产日韩欧美精品区性色| 国产91精品最新在线播放| 中国一级特黄视频| 91国内外精品自在线播放| 国产喷水视频| 亚洲国产日韩欧美在线| 欧美特黄一免在线观看| 色综合天天娱乐综合网| 国产丝袜第一页| 国产91无码福利在线| 色播五月婷婷| 在线观看网站国产| 日本不卡在线视频| 毛片网站免费在线观看| 国产精品久久自在自2021| 2021最新国产精品网站| 亚洲V日韩V无码一区二区 | 日韩色图区| 国产精品成人观看视频国产| 色悠久久久| 欧美va亚洲va香蕉在线| 欧美爱爱网| 91在线播放国产| 免费久久一级欧美特大黄| 狠狠亚洲婷婷综合色香| 亚洲精品另类| 国产精品久线在线观看| 日韩欧美国产中文| 在线观看欧美国产| 福利在线不卡| 国产理论一区| 亚洲人成影院在线观看| 国产精品片在线观看手机版| 无码福利视频| 一级黄色片网| 国产www网站| 国产主播在线观看| 国产女人综合久久精品视| 亚洲无码久久久久| 伊人久久大香线蕉影院| 九色在线观看视频| 国产91无毒不卡在线观看| 欧美一区福利| 欧美日韩一区二区三区四区在线观看| 亚洲日韩精品无码专区97| 青青青草国产| 成人夜夜嗨| 久久久久亚洲AV成人人电影软件| 亚洲第一成人在线| 久久精品一卡日本电影| 日本不卡在线视频|