俄羅斯方塊之六 窗體設計

2021-08-25 09:29:03 字數 3022 閱讀 6132

6.1 keydown事件,當方塊不可以下落的時候,我們要處理遊戲等級、層數、分數等資料還要把將方塊放入二維陣列中、下個方塊的建立、判斷是否結束。

6.1.1 建立新的方塊,方塊型別是隨機建立的,增加乙個列舉類blocktype,存放方塊的所有型別。通過簡單工廠得到父類。每種方塊的中心顏色和周圍以顏色可以自定義。由於畫板物件不同,位置不同,需要傳入引數。

code:

public

classblockfactory

; block.centercolor=color.red;

break;

caseblocktype.blockj:

block=newblockj();

block.surroundcolor=newcolor;

block.centercolor=color.orange;

break;

caseblocktype.blockl:

block=newblockl();

block.surroundcolor=newcolor;

block.centercolor=color.pink;

break;

caseblocktype.blockz:

block=newblockz();

block.surroundcolor=newcolor;

block.centercolor=color.mediumturquoise;

break;

caseblocktype.blocks:

block=newblocks();

block.surroundcolor=newcolor;

block.centercolor=color.green;

break;

caseblocktype.blockn:

block=newblockn();

block.surroundcolor=newcolor;

block.centercolor=color.blue;

break;

caseblocktype.blockt:

block=newblockt();

block.surroundcolor=newcolor;

block.centercolor=color.yellow;

break;

caseblocktype.vblockt:

block=newvblockt();

block.surroundcolor=newcolor;

block.centercolor=color.wheat;

break;

caseblocktype.singelblock:

block=newsingelblock();

block.surroundcolor=newcolor;

block.centercolor=color.wheat;

break;

} block.location=location;

block.initdirection();

block.showblock(g);

returnblock;

}6.1.2 將落下的方塊放入二維陣列裡。並得到落下時最下面的小方塊所在的行,用於計算普通分數。

code:

//得到每個小方塊最下面位置所在的行,並將形狀的每個方塊放置到遊戲方塊陣列中

listrows=newlist();

foreach(squaresquareincurrblock.squares)

intminrow=rows.max();

6.1.3 處理資料並顯示到控制項上

code:

//總行數

intcount=game.checklines();

game.layercount+=count;

//遊戲級別

if(game.layercount<=150)game.level=game.layercount/5+1;

elsegame.level=30+(game.layercount-150)/50;

//遊戲級別增加則速度加0.2(1)倍

tmrdown.interval=1000/(game.level+1);

//遊戲總分數

game.score+=game.checkscore(count);

//方塊落下去根據遊戲等級和方塊最下面部分所在行*5得到普通分

game.score+=(game.rows-minrow)*game.level*3;

//空間顯示

lbllevel.text=game.level.tostring();

lbllines.text=game.layercount.tostring();

lblpoint.text=game.score.tostring();

6.1.4 判斷是否結束,然後建立新方塊

code:

//////建立新方塊

///

private

voidcreatenewblock()

//建立新方塊,下乙個方塊

picnext.refresh();

nextblock=blockfactory.creatblock(newpoint(40,20),graphics.fromhwnd(picnext.handle));

}6.1.5 將6.1.2-6.1.4全部寫在乙個blockdown()方法裡。

6.1.6 在keydown時間裡判斷移動方向,呼叫相應的方法。

6.2 計時器事件tmrdown。呼叫blockdown()方法。

6.3 開始事件,建立當前方塊物件和下乙個方塊物件,計時器開。

6.4 暫停事件。開關設定,和計時器開關設定。

整個俄羅斯方塊專案基本功能都實現了。

俄羅斯方塊高階 AI俄羅斯方塊

前文回顧 致青春 python實現俄羅斯方塊 人工智慧大火的今天,如果還是自己玩俄羅斯方塊未免顯得太low,為什麼不對遊戲公升級,讓機器自己去玩俄羅斯方塊呢?有了這個想法之後利用週六週日兩天的時間去蒐集了大量的資料,在電腦宕機好多次之後終於將ai俄羅斯方塊實現了。所謂讓機器自己去玩俄羅斯方塊,就是讓...

俄羅斯方塊

俄羅斯方塊 tetris,俄文 是一款風靡全球的電視遊戲機 和掌上遊戲機遊戲,它由俄羅斯人阿列克謝 帕基特諾夫 發明,故得此名。俄羅斯方塊的基本規則是移動 旋轉和擺放遊戲自動輸出的各種方塊,使之排列成完整的一行或多行並且消除得分。由於上手簡單 老少皆宜,從而家喻戶曉,風靡世界。俄羅斯方塊的開發者是阿...

俄羅斯方塊

include include include include includeusing namespace std include include define mem a,b memset a,b,sizeof a const int sudu 40 const int dir 4 2 cons...