最近在看《.NET游戲編程入門經(jīng)典 C#篇》 第一章介紹了如何制作俄羅斯方塊,自己試了試按照書上的步驟,可算是完成了。

于是寫下這篇文章留作紀(jì)念。
1.類的設(shè)計
在充分分析游戲的特點后,游戲大概可以分為3個類:Square 小正方形,Block 由4個小正方形組合成的一個圖形, GameField 游戲的驅(qū)動引擎
2.代碼的編寫
按照從小到大,從簡單到復(fù)雜的順序,先完成Square類,Square很簡單,只需要提供Show,Hide方法以及Size,Location屬性。
接下來是Block,Block相對比較復(fù)雜,分為以下幾種:

它應(yīng)該有4個Square 編號可以按照個人習(xí)慣,當(dāng)然之后計算坐標(biāo)的時候也要根據(jù)個人的編號來進行。
Block應(yīng)該有Hide,Show,Left,Right,Rotate一些方法,屬性的話為了計算坐標(biāo) 應(yīng)該有Square的大小,還有Color
要注意的是Rotate方法將Block順時針旋轉(zhuǎn)90°,圖上已經(jīng)標(biāo)出旋轉(zhuǎn)的中心。
最后剩下的就是GameField了,他應(yīng)該有一個數(shù)組,保存背景中所有的Square,以及哪些位置有Square的 位標(biāo)志數(shù)組,對每一行的檢查(是否消去得分)以及消去所有方塊下移操作。
這些類完成后就可以簡單的寫游戲邏輯了,因為太簡單就不說了,簡單的貼一下代碼
private Block currentBlock;
private Block nextBlock;
private int score;
private bool blockFalling;
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Refresh();
currentBlock = new Block(new Point(GameField.Width / 2 * GameField.SquareSize, 0), Block.BlockTypes.Undefined);
currentBlock.Show(GameField.WinHandle);
nextBlock = new Block(new Point(15, 15), Block.BlockTypes.Undefined);
nextBlock.Show(pictureBox2.Handle);
timer1.Enabled = true;
button1.Enabled = false;
Focus();
score = 0;
}
private void Form1_Load(object sender, EventArgs e)
{
GameField.WinHandle = pictureBox1.Handle;
GameField.BackColor = pictureBox1.BackColor;
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (currentBlock == null)
{
return;
}
switch (e.KeyCode)
{
case Keys.W:
currentBlock.Rotate();
break;
case Keys.S:
currentBlock.Down();
break;
case Keys.A:
currentBlock.Left();
break;
case Keys.D:
currentBlock.Right();
break;
}
}
private void timer1_Tick(object sender, EventArgs e)
{
if (!currentBlock.Down())
{
blockFalling = false;
//塞滿了 游戲結(jié)束 0 0
if (currentBlock.Top() == 0)
{
timer1.Enabled = false;
button1.Enabled = true;
GameField.Reset();
MessageBox.Show("恭喜你跪了");
return;
}
}
else
{
blockFalling = true;
}
if (!blockFalling)
{
//檢查得分
int earseCount = GameField.CheckLines();
if (earseCount > 0)
{
score += earseCount * 20;
label1.Text = score.ToString();
//使圖片框重繪 清楚Block
pictureBox1.Invalidate();
Application.DoEvents();
GameField.Redraw();
}
pictureBox2.Invalidate();
Application.DoEvents();
currentBlock = new Block(new Point(GameField.Width / 2 * GameField.SquareSize, 0), nextBlock.BlockType);
currentBlock.Show(GameField.WinHandle);
nextBlock = new Block(new Point(15, 15), Block.BlockTypes.Undefined);
nextBlock.Show(pictureBox2.Handle);
blockFalling = true;
}
}
private void Form1_Activated(object sender, EventArgs e)
{
GameField.Redraw();
if (nextBlock !=null)nextBlock.Show(pictureBox2.Handle);
}另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
本文名稱:C#實現(xiàn)簡單俄羅斯方塊-創(chuàng)新互聯(lián)
URL鏈接:http://chinadenli.net/article44/dpidee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、外貿(mào)建站、品牌網(wǎng)站制作、軟件開發(fā)、做網(wǎng)站、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容