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

基于枚舉算法設計“俄羅斯方塊”游戲

2009-04-29 00:00:00邱菊,唐凱軍,徐立希,牛小梅
電腦知識與技術 2009年14期

摘要: 該文繞開了晦澀難懂、比較復雜的“矩陣算法”,提出了另一種“枚舉算法”來實現這個經典游戲。“枚舉算法”沒有復雜的數學理論,避免了在程序中大量使用矩陣運算公式,設計思路清晰、明了,非常適合游戲設計的初學者理解和實現,最后用Flash Active Script設計實現“俄羅斯方塊”游戲

關鍵詞:俄羅斯方塊游戲;基本型方塊;旋轉型方塊;枚舉;算法

中圖分類號:TP312文獻標識碼:A文章編號:1009-3044(2009)14-3710-03

Designing Russian Grid Game by Using Enumerative Algorithm

QIU Ju, TANG Kai-jun, XU Li-xi, NIU Xiao-mei

(No.2 Public Course Teaching and Research Department, Zigong Health School, Zigong Renji Medical Center of Sichuan Province, Zigong 643000, China)

Abstract: This thesis keeps away from the elusive and complicated Matrix Algorithm and put forward the Enumerative Algorithm to realize the classical Russian Grid Game. The Enumerative Algorithm without complicated mathematical theory can avert large number of matrix operational formulas so that the consideration of design is clear and obvious. This is a suitable way for the beginners of computer game designers to understand, design and realize the Russian Grid Game by using Flash Active Script.

Key words: the Russian Grid Game; basic-form grid; rotating grid; enumerate; algorithm

1 “枚舉算法”概述

本文則提出了所謂枚舉算法,就是直接枚舉出游戲中方塊的基本形狀和它們的旋轉形狀,然后控制每一種不同形狀的方塊在游戲中的產生、移動、旋轉、落下、清除填滿行等游戲過程。

1.1 方塊基本形狀和種類

根據分析,“俄羅斯方塊游戲”中的方塊,共有七種基本形狀,它們分別是“I型”、“L型”、“反L型”、“Z型”、“反Z型”、“口型”、“T型”,如圖1。

1.2 方塊的旋轉形狀

游戲過程中,每一種基本方塊都要做旋轉控制,于是就產生了旋轉后的方塊形狀,本文將其稱為“旋轉型”。

基本型中的“I型”、只有一種旋轉型,即由豎直旋轉90°后成為水平。因此,基本型加上一種旋轉型,共有兩種形狀。

基本型中的“L型”和“反L型”有三種旋轉型,將它按順時針每旋轉一個90°就產生一種旋轉型,它可以旋轉三次,得到三種不同的旋轉型,因此,它的三種旋轉型加上其基本型,“L型”和“反L型”方塊分別有四種形狀。

基本型中的“Z型”和“反Z型”可以順時針旋轉一次90°,加上他們的基本型分別有兩種形狀。

基本型中的“T型”有三種旋轉型,將他按順時針旋轉一個90°就產生一種旋轉型,它可以旋轉三次,得到三種不同的旋轉型,因此,它的三種旋轉型加上其基本型,“T型”方塊共有四種形狀。

基本型中的“口型”方塊沒有旋轉型,在游戲中只有一種形狀。

經前面的分析得知,七種基本型方塊,因旋轉產生了不同的旋轉型,這些旋轉型加上他們的基本型,整個游戲中,共有19種不同的方塊形狀。

2 基本型方塊的構成和控制

每一種基本型方塊都由4個正方形小方塊構成,利用小方塊不同擺的放位置,產生19種旋轉型。利用隨機函數在一個預覽窗中提前展示形狀供用戶參考,然后將展示的形狀復制到游戲主窗口中進行擺放,在游戲主窗口中用戶就可以使用鍵盤的方向鍵來控制方塊的運動。然后對每一行進行判斷,如果有某行的方塊是滿的,則消除這行的方塊,并且使上面的方塊自由下落,其中,方塊向下的速度是有時鐘控件控制的,在游戲中,用戶也可以使用“向下光標鍵”加快下落速度,定義一個變量,對消除的函數進行記錄,最后就可以得出用戶的分數,用if 語句對分數判斷,達到一定的積分就可以升級到下一個檔次。

2.1 基本型方塊的夠成

所謂“基本型方塊”是指每新產生的,沒有經過旋轉的方塊形狀(如圖1),基本型方塊是有4個正方形的小方塊拼接而成。在程序實現過程中,可以使用4個正方形控件來構成每一種基本型方塊。

2.2 主游戲界面與數據結構設計

為了能實現控制方塊的旋轉、平移、下落等操作。需要構造一個游戲主窗口和一個二維矩陣數據結構。

2.2.1 主游戲界面

在主窗口中按照9X15,將小方塊(控件)進行排列,每一個控件的Visible屬性設置成“False——不可見”,表示在開始游戲之前,主界面中沒有任何方塊。左上角作為坐標起始點,為了在程序中,對主窗口中的每一個小方塊(正方形控件)進行遍歷,用數字字符給控件按照一定的規則進行命名如圖2。

正方形控件的名稱=行坐標*每行控件的數量+列坐標=行坐標*9+列坐標

2.2.2 構造一個大小為9X15的二維數組

用來保存對應主界面中的每一個方塊位置是否被填充,已經被填充的為“1”,未填入的為“0”。通過這樣的方法,即可簡單地將數據結構映射到由小方塊(正方形控件)組成的圖形界面上。

2.2.3 小方塊的初始化顯示

在游戲開始或者前一個方塊已經不能繼續下落的時候,需要在主界面的第一行(行坐標為0)、第五列(列坐標為4)的位置顯示某一個基本型方塊。這個功能由計算機產生一個1~7隨機數,表示7中基本型方塊的某一種,然后枚舉出基本型方塊初始時,在主界面中的位置,并把主界面中,對應的小方塊(正方形控件)的Visible的值修改成“True(可見)”。例如:隨機數為2,對應“L型”方塊,它對應坐標為(0,4),(1,4),(2,4),(2,5),根據控件命名規則,可以計算出主界面中需要修改的控件名稱分別為“4”、“13”、“22”、“23”。如圖3。

小方塊初始化算法:

Function Init(int Shape){

Switch(Shape)

Case 1:

設置主界面中相對應的控件Visible=true;

產生1型方塊;

Break

Case 2;

設置主界面中相對應的控件Visible=true;

產生2型方塊;

Break

Case 3:

設置主界面中相對應的控件Visible=true;

產生3型方塊;

Break

Case 4:

設置主界面中相對應的控件Visible=true;

產生4型方塊;

Break

Case 5:

設置主界面中相對應的控件Visible=true;

產生5型方塊;

Break

Case 6:

設置主界面中相對應的控件Visible=true;

產生6型方塊;

Break

Case 7:

設置主界面中相對應的控件Visible值=true;

產生7型方塊;

Break

Return;

}

3 方塊的下移、平移、旋轉

基本型方塊初始化產生后,還需要用變量保存它的形狀代碼shape、旋轉型rot和在主界面中的起始行坐標row和列坐標column,例如圖3中的“L型”方塊:

shape=2;rot=1(旋轉三個90°,分別為2,3,4);

row=0;column=4;

3.1 方塊的下移

1) 下移的合法性判斷:方塊下移的前提是,方塊沒有到達最底部,這可以通過行坐標row<14來判斷,方塊下移時要通過的位置沒有被前面的方塊填充,這個需要通過與主界面一一映射的二維數組相對應的單元是否為“1”來判斷,如果以上條件合法,則,方塊下移。

2) 下移的實現:方塊下移也是通過修改主界面上的小方塊(控件)的Visible屬性來實現的。例如圖3中的“L型”方塊下移一格,需要修改控件:

控件4.visible=1;控件23.visible=1;

控件31.visible=true;控件32.visible=true;如圖4。

3.2 方塊平移

方塊的平移包括左移和右移兩種情況,無論那種情況都要首先進行合法性判斷。

1) 合法判斷,平移的合法性判斷比較簡單,只需判斷它旁邊相鄰位置是否被填充為,可以通過對映射二維數組中相對應的單元是否為“1”來實現,同時也要判斷是否已經到了左右邊界。

2) 平移實現,方塊平移也是通過修改主界面上的小方塊(控件)的Visible屬性來實現的。例如圖4中的方塊左移一格,需要將“13”、“22”、“32”控件的visible=1;“12”、“21”、“30”控件的visible=true即可。

3.3 方塊旋轉

1) 合法性判斷,在游戲中,方塊做順時針旋轉,每次旋轉90°,方塊旋轉前的合法性檢查稍微要復雜一些,主要涉及到它旋轉所要經過的位置不能有已經填充的方塊。

例如圖4中的“L型”方塊旋轉前(順時針90°),必須檢查“21”、“30”、“14”、“23”處沒有被填充方塊,這個檢查也是通過對二維數組中相對應的單元是否為“1”。來判斷。

2) 旋轉的實現,當合法性檢查后,就可以通過修改相關位置的控件visible值來實現旋轉。方法和平移、下落一樣。

3.4 算法實現

從前述所知,游戲中7種基本型方塊加上他們的旋轉型方塊總共有19種類型,程序算法只需要根據他們的形狀代碼shape、旋轉型rot,在主界面中的行坐標row和列坐標column,每做一次平移、下落、旋轉,要跟蹤修改他的shape、rot、row,column等值,為下一次操作提供枚舉依據,然后用代碼對每一種情況進行處理即可。

由于篇幅有限,這兒沒有給出全部源代碼,有興趣的讀者可以與本文作者聯系索取完全編譯通過的源代碼

參考文獻:

[1] 唐凱軍,湯惠莉.80例上手VB6編程[M].濟南:山東電子音像出版社,2004.

[2] 韋綱.FlashMX2004多媒體課件制作教程[M].北京:海洋出版社,2005.

[3] 王燕.面向對象的理論與C++實踐[M].北京:清華大學出版社,1997.

主站蜘蛛池模板: 国产精品污视频| 亚洲一级毛片| 日韩专区第一页| 亚洲精品爱草草视频在线| 久久人与动人物A级毛片| 97在线碰| 久久毛片网| 91久久夜色精品国产网站| 伊人欧美在线| 99re在线视频观看| 免费在线国产一区二区三区精品| 无码福利日韩神码福利片| 无码精品一区二区久久久| 亚洲欧美一区二区三区麻豆| 91美女在线| 欧美激情视频一区二区三区免费| av一区二区人妻无码| 国产成人91精品免费网址在线| 无码中文字幕加勒比高清| 亚洲永久精品ww47国产| 亚洲一区二区无码视频| 欧美无专区| 国产精品精品视频| 99这里只有精品在线| 91麻豆久久久| 亚洲午夜国产精品无卡| 国产成人精品一区二区不卡| 精品国产香蕉在线播出| 国产成人精品综合| 日韩不卡免费视频| 日韩无码一二三区| 精品欧美一区二区三区在线| 91丝袜乱伦| 日韩午夜片| 91精品久久久久久无码人妻| 日韩成人免费网站| 亚洲一级毛片在线播放| 国模视频一区二区| 免费在线观看av| 在线不卡免费视频| 免费看的一级毛片| 婷婷六月天激情| 久久人妻xunleige无码| 亚洲人成在线精品| 热热久久狠狠偷偷色男同 | 91精品国产情侣高潮露脸| 亚洲无线观看| 99久久精品免费观看国产| 中国一级特黄视频| 国产91透明丝袜美腿在线| 九色免费视频| 国产一区二区影院| 亚洲欧美国产五月天综合| 欧美日韩成人在线观看| 亚洲天堂精品在线观看| 国产成年无码AⅤ片在线| 国产欧美视频在线观看| 无码日韩人妻精品久久蜜桃| 热99精品视频| 少妇露出福利视频| 久草中文网| 亚洲人成亚洲精品| 成人在线不卡| 99久久精品美女高潮喷水| 久久午夜影院| 免费国产高清视频| 黄片一区二区三区| 亚洲av中文无码乱人伦在线r| 亚洲国产综合精品一区| 欧美国产日韩在线播放| 精品少妇人妻无码久久| 精品视频一区在线观看| 日韩天堂网| 色婷婷亚洲综合五月| 国产激情无码一区二区免费| 制服丝袜一区二区三区在线| 91国内外精品自在线播放| 成年A级毛片| 在线日本国产成人免费的| 老司机精品一区在线视频 | 精品免费在线视频| 久久久久免费精品国产|