C#實(shí)現(xiàn)簡(jiǎn)單俄羅斯方塊-創(chuàng)新互聯(lián)

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

創(chuàng)新互聯(lián)IDC提供業(yè)務(wù):服務(wù)器托管,成都服務(wù)器租用,服務(wù)器托管,重慶服務(wù)器租用等四川省內(nèi)主機(jī)托管與主機(jī)租用業(yè)務(wù);數(shù)據(jù)中心含:雙線機(jī)房,BGP機(jī)房,電信機(jī)房,移動(dòng)機(jī)房,聯(lián)通機(jī)房。

于是寫下這篇文章留作紀(jì)念。

1.類的設(shè)計(jì)

在充分分析游戲的特點(diǎn)后,游戲大概可以分為3個(gè)類:Square 小正方形,Block 由4個(gè)小正方形組合成的一個(gè)圖形, GameField 游戲的驅(qū)動(dòng)引擎

2.代碼的編寫

按照從小到大,從簡(jiǎn)單到復(fù)雜的順序,先完成Square類,Square很簡(jiǎn)單,只需要提供Show,Hide方法以及Size,Location屬性。

接下來(lái)是Block,Block相對(duì)比較復(fù)雜,分為以下幾種:

C#實(shí)現(xiàn)簡(jiǎn)單俄羅斯方塊

它應(yīng)該有4個(gè)Square 編號(hào)可以按照個(gè)人習(xí)慣,當(dāng)然之后計(jì)算坐標(biāo)的時(shí)候也要根據(jù)個(gè)人的編號(hào)來(lái)進(jìn)行。

Block應(yīng)該有Hide,Show,Left,Right,Rotate一些方法,屬性的話為了計(jì)算坐標(biāo) 應(yīng)該有Square的大小,還有Color

要注意的是Rotate方法將Block順時(shí)針旋轉(zhuǎn)90°,圖上已經(jīng)標(biāo)出旋轉(zhuǎn)的中心。

最后剩下的就是GameField了,他應(yīng)該有一個(gè)數(shù)組,保存背景中所有的Square,以及哪些位置有Square的 位標(biāo)志數(shù)組,對(duì)每一行的檢查(是否消去得分)以及消去所有方塊下移操作。

這些類完成后就可以簡(jiǎn)單的寫游戲邏輯了,因?yàn)樘?jiǎn)單就不說(shuō)了,簡(jiǎn)單的貼一下代碼

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元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

本文名稱:C#實(shí)現(xiàn)簡(jiǎn)單俄羅斯方塊-創(chuàng)新互聯(lián)
URL鏈接:http://muchs.cn/article44/dpidee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、外貿(mào)建站、品牌網(wǎng)站制作軟件開發(fā)、做網(wǎng)站、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)