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...