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观看| 玖玖免费视频在线观看 | 国产无码精品在线播放| 国产一级α片| 国产在线观看一区二区三区| 国产精品久久久久鬼色| 国产91小视频在线观看| 亚洲色图综合在线| 欧美有码在线| 免费毛片在线| 国产99在线| 国产亚洲精品精品精品| 国内精品九九久久久精品| 国产精品久久久久久久久久98| 国产理论精品| 亚洲精品在线影院| 麻豆精品在线播放| 一级一毛片a级毛片| 日本国产精品一区久久久| 天天婬欲婬香婬色婬视频播放| 中文字幕免费播放| 丁香六月综合网| 国产69囗曝护士吞精在线视频| 天天爽免费视频| 美女黄网十八禁免费看| 国产伦片中文免费观看| 91成人精品视频| 国产亚洲精久久久久久无码AV| 国产香蕉国产精品偷在线观看| 国产精品毛片一区| 久久99国产乱子伦精品免| 无码网站免费观看| 人妻少妇乱子伦精品无码专区毛片| 国产av一码二码三码无码| 国产人成乱码视频免费观看| 国产你懂得| 国产三级视频网站| 在线不卡免费视频| 免费久久一级欧美特大黄| 男女男免费视频网站国产| 无码又爽又刺激的高潮视频| 国产香蕉在线视频| 国产美女自慰在线观看| 婷婷综合亚洲| 欧美亚洲国产精品久久蜜芽| 99久久免费精品特色大片| 免费不卡视频| 日本国产精品| 综合色婷婷| 久久国产精品麻豆系列| 午夜丁香婷婷| 亚洲美女高潮久久久久久久| 欧美激情福利| 国语少妇高潮| 国产91久久久久久| 国产女人在线视频| 亚洲男人的天堂网| 欧美成人综合在线| a色毛片免费视频| 国产清纯在线一区二区WWW| 丁香六月综合网| 热99re99首页精品亚洲五月天| 日韩成人在线视频| 亚洲视频影院| 伊人色天堂| 乱人伦99久久| 国产精品高清国产三级囯产AV| 99久视频| 美女被操91视频| 青青热久免费精品视频6| 中文字幕在线免费看| 综合色区亚洲熟妇在线| 成人精品亚洲| 国产精品妖精视频| 国产区精品高清在线观看| 国产精品香蕉在线观看不卡| 国产精选小视频在线观看| 在线播放国产一区| 亚洲综合香蕉| 亚洲精品高清视频|