面向?qū)ο蟪绦蛟O(shè)計(jì)(c )大作業(yè)_第1頁
面向?qū)ο蟪绦蛟O(shè)計(jì)(c )大作業(yè)_第2頁
面向?qū)ο蟪绦蛟O(shè)計(jì)(c )大作業(yè)_第3頁
面向?qū)ο蟪绦蛟O(shè)計(jì)(c )大作業(yè)_第4頁
面向?qū)ο蟪绦蛟O(shè)計(jì)(c )大作業(yè)_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

ANYANGINSTITUTEOFTECHNOLOGY

面向?qū)ο蟪绦蛟O(shè)計(jì)(C++)課程大作業(yè)

2015年1月

目錄

一、成員分工....................................................1

二、需求分析.....................................................2

三、總體設(shè)計(jì).....................................................3

四、詳細(xì)設(shè)計(jì).....................................................8

五、系統(tǒng)測試....................................................24

六、總結(jié)........................................................30

七、參考文獻(xiàn)....................................................31

一成員分工

我們小組成員共有三名,分別是劉國松、呂秀錦、高婉婉,為了能按時(shí)圓滿的完成這次VC++課程

設(shè)計(jì),我們小組進(jìn)行了詳細(xì)的分工,以確保設(shè)計(jì)能按時(shí)完成。經(jīng)過周密的考慮和詳細(xì)的調(diào)查最終確定該

俄羅斯方塊游戲需要以下幾個(gè)功能模塊:

(1)需求分析

(2)界面的設(shè)計(jì)

(3)背景色的選擇模塊

(4)游戲隨機(jī)選擇方塊模塊

(5)游戲預(yù)覽功能模塊

(6)收埋功能模塊

(7)記分功能模塊

(8)鼠標(biāo)控制功能模塊

(9)模塊聯(lián)結(jié)

(10)系統(tǒng)測試

經(jīng)過小組成員的討論,并根據(jù)個(gè)人的特長和具體愛好做如下具體分工:

劉國松具體完成以下模塊的設(shè)計(jì)與實(shí)現(xiàn):

(1)需求分析

(2)界面的設(shè)計(jì)

(3)背景色的選擇模塊

呂秀錦具體完成以下模塊的設(shè)計(jì)與實(shí)現(xiàn):

(1)游戲隨機(jī)選擇方塊模塊

(2)游戲預(yù)覽功能模塊

(3)收埋功能模塊

(4)記分功能模塊

高婉婉主要具體完成以下模塊的設(shè)計(jì)與實(shí)現(xiàn):

(1)鼠標(biāo)控制功能模塊

(2)模塊聯(lián)結(jié)

(3)系統(tǒng)測試

二需求分析

1.系統(tǒng)概述

該游戲軟件在Windows系統(tǒng)為玩家提供傳統(tǒng)俄羅斯方塊游戲的基本功能,玩家可以通過鍵盤控制

在游戲區(qū)中堆積軟件隨機(jī)提供的由四個(gè)小方塊不同組合的7種類型不同顏色的方塊,每個(gè)小方格的顏色

也是隨機(jī)的,并且在整個(gè)下落的過程中,其顏色也呈動(dòng)態(tài)變化。游戲過程中,每在游戲區(qū)堆滿一行后,

自動(dòng)消除并記分。同時(shí)消去的行數(shù)越多,那一次性所加的分?jǐn)?shù)也就越多。一行是100,兩行是300,三

行是600,四行是1000分。為了得到更多的分,那么我們游戲者就要想辦法一次盡可能多的消去方塊。

當(dāng)游戲區(qū)不能再堆積新來的方塊時(shí),游戲結(jié)束。游戲設(shè)定3個(gè)級(jí)別,初級(jí),中級(jí)和高級(jí),級(jí)別越高,方

塊下降的速度越快、難度越大,玩家可以根據(jù)自己的需要自由設(shè)定初始游戲級(jí)別,達(dá)到最高級(jí)別時(shí)不再

增加。游戲以最終玩家獲得的分?jǐn)?shù)來判斷玩家水平的高低。游戲?yàn)閷?duì)戰(zhàn)型俄羅斯方塊,玩家依靠自己消

層和使用道具來打擊對(duì)手。當(dāng)玩家游戲池中的磚塊累積到頂端時(shí)游戲失敗。

2.系統(tǒng)運(yùn)行環(huán)境

(1)硬件環(huán)境。本系統(tǒng)適用于那種Inter386以上計(jì)算機(jī),內(nèi)存容量為128M,應(yīng)配備,鍵盤,鼠標(biāo),

顯示器等外部設(shè)備。

(2)軟件環(huán)境。本系統(tǒng)的設(shè)計(jì)采用VisualC++6.0編寫。在WindowsXPSP2環(huán)境下測試通過

(3)本游戲軟件在Windows平臺(tái)下都可以運(yùn)行。

3.功能需求描述

這是一次嘗試,一個(gè)比較成功的設(shè)計(jì),其精彩的算法與漂亮的程序結(jié)構(gòu)足以讓人興奮了。

這個(gè)游戲,不僅可以滿足游戲愛好者對(duì)游戲的要求,同時(shí)我們增加了美觀因素,讓游戲有一個(gè)比

較美觀的界面,滿足我們游戲愛好者的視覺要求。

這有別于常規(guī)的俄羅斯方塊算法,游戲中,玩家依靠自己消層來得分。當(dāng)玩家游戲池中的磚塊累

積到頂端時(shí)游戲失敗。

2

三總體設(shè)計(jì)

1.屏幕的組成

一個(gè)游戲一定要有一個(gè)界面供游戲者對(duì)游戲控制。

這個(gè)界面中要包含讓游戲者更加清楚游戲狀態(tài)的信息,比如,一個(gè)方塊在下落過程中,它的位置

如何,形狀是怎么樣的,要如何放置這個(gè)方塊,以及下一個(gè)方塊是什么形狀,這樣關(guān)系著游戲者要如何

放置方塊,讓整體有個(gè)更加的布局,有利于游戲的進(jìn)行。屏幕由20行13列的網(wǎng)格組成;其中0?2行:

初始的形狀將在這里形成然后下落,這三行用戶不可見;3?19區(qū)域;20,其標(biāo)記已到屏幕底部。在界

面的右邊就是相關(guān)的游戲信息,級(jí)別控制,開始游戲控制,背景色的選擇,當(dāng)前方塊的坐標(biāo),組型,顏

色及類型(ZZ表示)以及目前的得分情況,下一個(gè)預(yù)覽方塊,鼠標(biāo)控制信息(變形,左移,右移和加

速下落),

收埋信息(分別向上,下,左和右收埋,及結(jié)束游戲收埋,這時(shí)將顯示版權(quán)信息)。

2.形狀的組成

每一種形狀都是由四個(gè)方塊組成,比如■■■■由四個(gè)方塊橫向排列而成

3.形狀的統(tǒng)一

■■■■等共19種形狀(旋轉(zhuǎn)前后的形狀歸為不同的形狀),雖然在玩游戲時(shí)我們會(huì)去將各種不

同的形狀有個(gè)不同的命名(比如“條子”,“方塊”等),但在設(shè)計(jì)游戲是它們卻是統(tǒng)一的,它們都是“形

狀”。這一點(diǎn)是游戲成功的基礎(chǔ)。

為了使各種不同的形狀達(dá)到統(tǒng)一的設(shè)計(jì),我設(shè)計(jì)了如下解決方案:將形狀始終放在4X4的格子中,

以該4X4格子的第一個(gè)格子為“基礎(chǔ)點(diǎn)”,只要給出組成形狀的四個(gè)塊相對(duì)于該基礎(chǔ)點(diǎn)的相對(duì)坐標(biāo)。

★□□□★為基礎(chǔ)點(diǎn),形狀各塊的相對(duì)坐標(biāo)是相對(duì)于這個(gè)基礎(chǔ)點(diǎn)的

□□□□

□□□□

□□□□

那么■■■■在其中就如圖:其四個(gè)方塊相對(duì)于基礎(chǔ)點(diǎn)的網(wǎng)格坐標(biāo)就為

(0,2)(1,2)(2,2)(3,2)

□□□□

□□□□

■■■■02122232

□□□□

我們將用一個(gè)int[8]記錄下這四個(gè)相對(duì)坐標(biāo)值

3

同理:

□□□□

□□□□

■02120313

這樣,我們只要知道某個(gè)形狀的相對(duì)坐標(biāo)值數(shù)組,就可以輕松地求出它的各方塊的排列方式,也

就是其形狀(樣子)。

4.移動(dòng)與旋轉(zhuǎn)的統(tǒng)一

從上面我們可以看出形狀的移動(dòng)可以這樣來實(shí)現(xiàn):移動(dòng)基礎(chǔ)點(diǎn)的網(wǎng)格坐標(biāo),然后組成形狀的四個(gè)

方塊按照其與基礎(chǔ)點(diǎn)坐標(biāo)的相對(duì)值而改變網(wǎng)格坐標(biāo),則表現(xiàn)為移動(dòng)。

旋轉(zhuǎn)與移動(dòng)的原理一樣:設(shè)旋轉(zhuǎn)前的形狀為ZZ=0,旋轉(zhuǎn)后的形狀為ZZ=1,組成形狀A(yù)的四

個(gè)方塊按照B(而不是按照A)的相對(duì)于基礎(chǔ)點(diǎn)坐標(biāo)的相對(duì)值而改變網(wǎng)格坐標(biāo),則表現(xiàn)為旋轉(zhuǎn)。

比如,

□□□□

□□□□

■■■■02122232

□□□□

移動(dòng):設(shè)其基礎(chǔ)點(diǎn)網(wǎng)格坐標(biāo)為(gX,gY),其各方塊當(dāng)前坐標(biāo)(gX+0,gY+2),(gX+l,gY+2),

(gX+3,gY+2),(gX+3,gY+2)o如果其向左移動(dòng)一格,那么它的基礎(chǔ)了坐標(biāo)gX-=l;gY=gY;其各方塊

移動(dòng)后坐標(biāo)(gX+0,gY+2),(gX+l,gY+2),(gX+3,gY+2),(gX+3,gY+2)o

旋轉(zhuǎn):設(shè)其基礎(chǔ)點(diǎn)網(wǎng)格坐標(biāo)為(gX,gY),其各方塊當(dāng)前坐標(biāo)(gX+0,gY+2),(gX+l,gY+2),

(gX+3,gY+2),(gX+3,gY+2)。如果其旋轉(zhuǎn)一次,旋轉(zhuǎn)后的形狀如圖

□10111213

那么其旋轉(zhuǎn)后的各方塊坐標(biāo)(gX+l,gY+0),(gX+l,gY+l),(gX+l,gY+2),(gX+l,gY+3)

如果我們將各形狀編號(hào),比如■■■■編號(hào)0,其旋轉(zhuǎn)90度以后的形狀為編號(hào)1

那么0旋轉(zhuǎn)目標(biāo)為1,1的旋轉(zhuǎn)目標(biāo)為0

所以所有形狀便得到了統(tǒng)一,如圖形狀

□□□□

□□□□

4

□□□□

□□□□

■□□□

■□□□

□□□□

□□□□

■■■□

■□□□

□□□□

□□□□

■■■□

□□□□

□□□□

□□□□

□□□□

5

■□□□

□□□□

□□□□

□□□□

□□□□

■□□□

■■■□

□□□□

□□□□

□□□□

□□□□

■■■□

□□□□

■□□□

□□□□

□□□□

6

□□□□

■■■□

□□□□

□□□□

□□□□

□□□□

■■■□

□□□□

■□□□

7

四詳細(xì)設(shè)計(jì)

1.程序流程圖

(1)數(shù)據(jù)流圖

數(shù)據(jù)流圖是對(duì)系統(tǒng)數(shù)據(jù)流向的一種描述,并從本質(zhì)上讓程序的使用者,大致了解系統(tǒng)的使用方法。

本俄羅斯游戲的大致流程圖如下

資源文件

數(shù)

據(jù)

圖4-1數(shù)據(jù)流圖

(2)系統(tǒng)功能模塊

8

(3)系統(tǒng)流程圖

系統(tǒng)流程圖是對(duì)系統(tǒng)的大致流程進(jìn)行描述,本游戲的系統(tǒng)流程圖如下:

2程序模塊詳細(xì)設(shè)計(jì)

根據(jù)上面所介紹的本系統(tǒng)的各個(gè)模塊及其需要實(shí)現(xiàn)的功能,下面詳細(xì)設(shè)計(jì)如下:

(1)界面的設(shè)計(jì)

程序界面程序在啟動(dòng)運(yùn)行時(shí),系統(tǒng)會(huì)通過調(diào)用視圖類中的重繪圖函數(shù)對(duì)界面進(jìn)行界面的初始化。使

程序界面更加友好,在使用上給用戶一種清新怡然的感覺。其界面如圖所示:

9

***game2<J

Type:20.

i:6.j:10.

groups:5.

分?jǐn)?shù):0.

(2)背景色的選擇模塊

實(shí)現(xiàn)此功能代碼如下:

voidCGameDlg::OnBackcolor()〃背景色

{

CColorDialogdlg(BackColor);//

if(dig.DoModal()==IDOK)

BackColor=dlg.GetColor();

Back=l;

}

10

(3)游戲隨機(jī)選擇方塊模塊

在游戲中,每一個(gè)下落的方塊都是隨機(jī)的,包括顏色,形狀。

實(shí)現(xiàn)此功能相關(guān)代碼如下:

voidCGameDlg::Shape()〃外部框架

{

intline=18;

intrr=4;

CDC*pDC=GetDC();

ASSERT(pDC!=NULL);

CPenpen;

pen.CreatePen(PS_SOLID,1,RGB(0,0,0));

CBrushbrushl,brush2,brush3;

brushl.CreateSolidBrush(RGB(60,60,60));

brush3.CreateSolidBrush(RGB(0,170,0));

brush2.CreateSolidBrush(BackColor);

pDC->Select0bject(pen);

pDC->Select0bject(brushl);

pDC->Rectangle(X-line,Y-line,X+M*r+line,Y+N*r+line);

intb=line*2/3,c=b-rr;

pDC->Select0bject(brush3);

pDC->Rectangle(X-b,Y-b,X+M*r+b,Y+N*r+b);

pDC->Select0bject(brushl);

pDC->Rectangle(X-c,Y-c,X+M*r+c,Y+N*r+c);

pDC->Select0bject(brush2);

pDC->Rectangle(X-2,Y-2,X+M*r+2,Y+N*r+2);

DeleteObject(pen);DeleteObject(brushl);

DeleteObject(brush2);DeleteObject(brush3);

ReleaseDC(pDC);

11

voidCGameDlg::one(intType,inti,intj)〃某元格顏色位置

if(Runing=0)

(

OnDestroy();

return;

}

CDC*pDC二GetDC();

ASSERT(pDC!=NULL);

COLORREFcolor,L_color=RGB(0,0,0);

switch(Type)

{

case0:color=L_color=BackColor;break;

case1:color=RGB(131,129,222);break;

case2:color=RGB(250,90,130);break;

case3:color=RGB(40,220,250);break;

case4:color=RGB(40,120,50);break;

case5:color二RGB(0,250,0);break;

case6:color=RGB(131,19,222);break;

case7:color=RGB(120,190,30);break;

case8:color=RGB(140,20,150);break;

case9:color=RGB(40,120,150);break;

case10:color=RGB(23,62,180);break;

case11:color=RGB(131,129,22);break;

case12:color=RGB(20,190,130);break;

case13:color二RGB(40,234,220);break;

case14:color=RGB(140,70,150);break;

case15:color=RGB(30,150,40);break;

case16:color=RGB(78,203,30);break;

case17:color=RGB(120,100,30);break;

case18:color=RGB(240,70,20);break;

case19:color=RGB(40,180,90);break;

case20:color=RGB(123,62,180);break;

12

case21:color=RGB(120,0,20);break;

case22:color=RGB(0,0,250);break;

case23:color=RGB(0,250,0);break;

case24:color=RGB(0,250,250);break;

case25:color=RGB(250,0,0);break;

case26:color二RGB(250,0,250);break;

case27:color=RGB(250,250,0);break;

case28:color=RGB(250,250,250);break;

case29:color=RGB(rand()%250,rand()%250,rand()%250);break;

case30:color=RGB(rand()%250,rand()%250,rand()%250);break;

case31:color=RGB(rand()%250,rand()%250,rand()%250);break;

case32:color=RGB(rand()%250,rand()%250,rand()%250);break;

case33:color=RGB(rand()%250,rand()%250,rand()%250);break;

case34:color=RGB(rand()%250,rand()%250,rand()%250);break;

}

CPenpen;

CBrushbrush;

pen.CreatePen(PS_SOLID,1,L_color);

brush.CreateSolidBrush(color);

pDC->SelectObject(pen);

pDC->SelectObject(brush);

pDC->Rectangle(X+i*r,Y+j*r,X+(i+l)*r,Y+(j+1)*r);

DeleteObject(pen);

DeleteObject(brush);

ReleaseDC(pDC);

}

(4)游戲預(yù)覽功能模塊

此模塊用來為游戲愛好者提供下一個(gè)方塊的信息,

實(shí)現(xiàn)此功能相關(guān)代碼如下:

voidCGameDlg::PreView()〃預(yù)先顯示組

if(Runing==0)

13

OnDestroy();

return;

)

CTimetm=CTime::GetCurrentTime();

object2.Type=(rand()+tm.GetMinute()+tm.GetSecond())%V+1;

object2.x=M/2;object2.y=0;

object2.group=(tm.GetMinute()*tm.GetSecond()+rand())%7+l;

ZZ2二(rand()+tm.GetDay()*tm.GetHour())%97;

bO二bl=b2=b3=b4=b5=b6=b7=0;

switch(object2.group)

(

case1:b2=0;b3=l;b4=l;b5=0;b6=l;b7=l;break;

case2:b2=0;b3=l;b4=0;b5=~l;b6=l;b7=-l;break;

case3:b2=0;b3=l;b4=0;b5=-l;b6=l;b7=l;break;

case4:b2=0;b3=l;b4=0;b5=2;b6=0;b7=-l;break;

case5:b2=0;b3=-l;b4=l;b5=0;b6=l;b7=l;break;

case6:b2=0;b3=l;b4=l;b5=0;b6=l;b7=-l;break;

case7:b2=0;b3=l;b4=0;b5=2;b6=l;b7=l;break;

}

for(inti=0;i<ZZ2;i++)

ChangeShape(object2);

if(object2.y+b3<0||object2.y+b5<01|object2.y+b7<0||object2.y<0)

object2.y=object2.y+1;

if(object2.y+b3>0&&object2.y+b5>0&&object2.y+b7>0&&object2.y>0)

object2.y=0;

}

voidCGameDlg::0nButtonl()

{

CDC*pDC=GetDC();

ASSERT(pDC!=NULL);

OnDraw(pDC);

ReleaseDC(pDC);

}

14

voidCGameD1g::OnDown()

if(!Runing)

return;

MoveOn(3);

ObjectGroup(object);

KillTimer(11);

SetTimer(ll,10,NULL);

}

voidCGameDlg::0nLeft0

{

if(!Runing)

return;

MoveOn(4);

)

voidCGameDlg::0nRight()

{

if(!Runing)

return;

MoveOn(2);

)

voidCGameDlg::0nUp()

(

if(!Runing)

return;

MoveOn(1);

)

voidCGameDlg::MoveOn(intn)

{

//TODO:Addyourmessagehandlercodehereand/orcalldefault

CDC*pDC=GetDC();ASSERT(pDC!=NULL);

DeleteGroup(object);intb_x=object.x,b_y=object.y;

switch(n)

15

case1:

ChangeShape(object);

ObjectGroup(object);

break;

case2:

object,x=object,x<M-1?object,x+1:M-1;

if(checkl())

object.x=b_x;

ObjectGroup(object);

break;

case3:

object.y=object.y<N-l?object.y+1:N-1;

if(check2())object,y=b_y;

ObjectGroup(object);

break;

case4:

object.x=object.x>l?object.x-l:0;

if(checkl())object,x=b_x;ObjectGroup(object);

break;

case5:

object.y=object.y>l?object.y-1:0;

if(check2())object.y=b_y;

ObjectGroup(object);

break;

}

Show(object);

ReleaseDC(pDC);

}

voidCGameDlg::ClearUp()〃清空預(yù)備顯示地方

{

CDC*pDC=GetDC();

ASSERT(pDC!=NULL);

COLORREFcolor=RGB(233,230,214);

CPenpen;

16

CBrushbrush;

pen.CreatePen(PS_SOLID,1,color);

brush.CreateSolidBrush(color);

pDC->SelectObject(pen);

pDC->SelectObject(brush);

pDC->Rectangle(J_x,J_y,J_x+118,J_y+155);

DeleteObject(brush);

DeleteObject(pen);

ReleaseDC(pDC);

)

(5)收埋功能模塊

此模塊用來收藏游戲界面。

實(shí)現(xiàn)此功能相關(guān)代碼如下:

voidCGameDlg::0nTimer(UINTnIDEvent)〃處理往下運(yùn)動(dòng)過程

{

//===========================2往右收埋

if(nIDEvent=2)

(

MoveWindow(pl.x,pl.y,m_W,m_H);

pl.x+=10;

if(pl.x>desktopRect.Width())

(

KillTimer(2);

Set=2;

Si.left=LW-T;

Si.top=Sj.top;

Si.right=LW;

Si.bottom=Sj.bottom;

)

)

if(nIDEvent==6)

17

MoveWindow(pl.x,pl.y,m_W,m_H);

pl.x-=10;

if(pl.x<=pp.x)

KillTimer(6);

}

〃===============3往上收埋

if(nIDEvent=3)

(

MoveWindow(pl.x,pl.y,m_W,m_H);

pl.y+=10;

if(pl.y>desktopRect.Height())

(

KillTimer(3);

Set=3;

Si.left=Sj.left;

Si.top=LH-T;

Si.right=Sj.right;

Si.bottom=LH;

)

}

if(nIDEvent=7)

{

MoveWindow(pl.x,pl.y,m_W,m_H);

pl.y-=10;

if(pl.y<=pp.y)

KillTimer(7);

}

//=========================1往下收埋

if(nIDEvent=l)

(

MoveWindow(pl.x,pl.y,m_W,m_H);

pl.y-=10;

if(pl.y+m_H+10<0)

18

KillTimer(1);

Set=l;

Si.left=Sj.left;

Si.top=0;

Si.right=Sj.right;

Si.bottom=T;

)

}

if(nIDEvent=5)

{

MoveWindow(pl.x,pl.y,m_W,m_H);

pl.y+=10;

if(pl.y>=30)

KillTimer(5);

}

//=======================4往左收埋

if(nIDEvent==4)

(

MoveWindow(pl.x,pl.y,m_W,mH);

pl.x-=10;

if(pl.x+m_W+10<0)

(

KillTimer(4);

Set=4;

Si.left=0;

Si.top=Sj.top;

Si.right=T;

Si.bottom=Sj.bottom;

if(nIDEvent==8)

MoveWindow(pl.x,pl.y,m_W,m_H);

19

pl.x+=10;

if(pl.x>=30)

KillTimer(8);

)

(6)記分功能模塊

此模塊用來記錄在游戲過程中,玩家所得的分?jǐn)?shù)。并且一次性消去的方塊行數(shù)越多,那么得到的分

數(shù)也就越多。

實(shí)現(xiàn)此功能相關(guān)代碼如下:

voidCGameDlg::KeepData()〃保存放好所在位置

{

G[object.x+aO][object.y+al]=object.Type;

G[object.x+a2][object.y+a3]=object.Type;

G[object.x+a4][object.y+a5]=object.Type;

G[object.x+a6][object.y+a7]=object.Type;

inti,j,k,p,q,o=0;

for(i=0;i<M;i++)

if(G[i][l]>0||G[i][0]>0)

(

Runing=0;

AfxMessageBox("游戲結(jié)束!");

CGameDlgdig;

dig.DoModal();

return;

)

for(j=NT;j>=0;j—)

(

for(i=0,k=0;i<M;i++)

if(G[i][j]>0)

k++;

if(k二二M)

o++;

20

for(p=j;p>=l;p-)

for(q=0;q<M;q++)

(

G[q][p]=G[q][p-1];

one(G[q][p],q,p);

)

for(q=0;q<M;q++)

(

G[q][0]=0;

one(G[q][p],q,p);

)

j++;

Score+=100*o;

)

)

)

(7)鼠標(biāo)控制功能模塊

此模塊也是本游戲的重點(diǎn),玩家通過鼠標(biāo)控制進(jìn)行游戲。向上是變換圖形,向下是很方塊快速下落,

向左是使方塊向左移動(dòng),向右是很方塊向右移動(dòng)。

程序的具體實(shí)現(xiàn)部分如程序清單如下所示。

voidCGameDlg::ChangeShape(OBJECTobject)〃轉(zhuǎn)組

(

intz[4][2]={0};

inti,j,k;

if(Runing==0)

{

OnDestroy();

return;

)

do{

switch(object,group)

21

easel:ZZ=O;z[l][O]=l;z[l][l]=0;z[2][0]=0;z[2][l]=l;z[3][0]=l;z[3][1]=1;break;

case2:ZZ++;ZZ%=4;switch(ZZ)

{

caseO:z[l][O]=-l;z[l][l]=0;z[2][0]=l;z[2][l]=0;z[3][0]=-l;z[3][1]=-1;break;

casel:z[l][O]=O;z[l][1]=1;z[2][0]=0;z[2][l]=-l;z[3][0]=l;z[3][1]=-1;break;

case2:z[l][O]=-l;z[l][l]=0;z[2][0]=l;z[2][l]=0;z[3][0]=l;z[3][1]=1;break;

case3:z[l][O]=O;z[l]z[2][0]=0;z[2][l]=l;z[3][0]=-l;z[3][1]=1;break;

}

break;

case3:ZZ++;ZZ%=4;

switch(ZZ)

(

caseO:z[l][0]=~l;z[l][l]=0;z[2][0]=l;z[2][l]=0;z[3][0]=l;z[3][1]=~1;break;

casel:z[l][O]=O;z[l][1]=1;z[2][0]=0;z[2][l]=-l;z[3][0]=l;z[3][1]=1;break;

case2:z[l][O]=-l;z[l][l]=0;z[2][0]=l;z[2][l]=0;z[3][0]=-l;z[3][1]=1;break;

case3:z[l][O]=O;z[l][1]=-1;z[2][0]=0;z[2][l]=l;z[3][0]=-l;z[3][1]=-1;break;

}

break;

case4:ZZ++;ZZ%=2;

switch(ZZ)

{

casel:z[l][O]=O;z[l][1]=-1;z[2][0]=0;z[2][l]=2;z[3][0]=0;z[3][l]=l;break;

caseO:z[l][O]=l;z[l][l]=0;z[2][0]=2;z[2][l]=0;z[3][0]=~l;z[3][l]=0;break;

}

break;

case5:

ZZ++;ZZ%=2;

switch(ZZ)

(

casel:z[l][O]=O;z[l]z[2][0]=l;z[2][l]=0;z[3][0]=l;z[3][1]=1;break;

case0:

z[l][0]=0;z[l][1]=1;z[2][0]=-l;z[2][l]=l;z[3][0]=l;z[3][l]=0;break;

)

break;

case6:ZZ++;ZZ1=2;

22

switch(ZZ)

case1:

z[l][O]=O;z[l][1]=1;z[2][0]=l;z[2][l]=0;z[3][0]=l;z[3][1]=-1;break;

caseO:z[l][0]=-l;z[l][l]=0;z[2][0]=0;z[2][l]=l;z[3][0]=l;z[3][1]=1;break;

}

break;

case7:

ZZ++;ZZ%=4;

switch(ZZ)

{

case0:

z[l][0]=0;z[l]z[2][0]=l;z[2][l]=0;z[3][0]=-l;z[3][l]=0;break;

case1:

z[l][0]=0;z[l][1]=1;z[2][0]=0;z[2][l]=-l;z[3][0]=l;z[3][

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論