最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年03月13日 08:01:43   作者:q645989637  
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡(jiǎn)單俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

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

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

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

2.代碼的編寫(xiě)

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

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

它應(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)單的寫(xiě)游戲邏輯了,因?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);
 }

3.總結(jié)

這個(gè)簡(jiǎn)單的游戲,可謂是剛好適合新手。可以學(xué)到?jīng)_突檢測(cè)(CheckLines),游戲中基本元素與游戲驅(qū)動(dòng)的理解。

更多俄羅斯方塊精彩文章請(qǐng)點(diǎn)擊專題:俄羅斯方塊游戲集合 進(jìn)行學(xué)習(xí)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#統(tǒng)計(jì)C、C++及C#程序代碼行數(shù)的方法

    C#統(tǒng)計(jì)C、C++及C#程序代碼行數(shù)的方法

    這篇文章主要介紹了C#統(tǒng)計(jì)C、C++及C#程序代碼行數(shù)的方法,較為詳細(xì)的分析了C#統(tǒng)計(jì)文本文件的原理與相關(guān)實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • 關(guān)于C#中的字體別名問(wèn)題

    關(guān)于C#中的字體別名問(wèn)題

    在C#中使用Graphics對(duì)象的DrawString方法繪制文本時(shí),可以通過(guò)設(shè)置TextRenderingHint屬性來(lái)控制字體混疊效果,對(duì)于14號(hào)或更大的字體,建議使用AntiAliasGridFit;對(duì)于8到14點(diǎn)之間的字體,建議使用AntiAlias;對(duì)于小于8點(diǎn)的字體,建議使用ClearTypeGridFit
    2025-01-01
  • 關(guān)于WPF異步MVVM等待窗體的介紹

    關(guān)于WPF異步MVVM等待窗體的介紹

    本篇文章小編將為大家介紹,關(guān)于WPF異步MVVM等待窗體的介紹,需要的朋友參考下
    2013-04-04
  • .NET/C#實(shí)現(xiàn)識(shí)別用戶訪問(wèn)設(shè)備的方法

    .NET/C#實(shí)現(xiàn)識(shí)別用戶訪問(wèn)設(shè)備的方法

    這篇文章主要介紹了.NET/C#實(shí)現(xiàn)識(shí)別用戶訪問(wèn)設(shè)備的方法,結(jié)合實(shí)例形式分析了C#識(shí)別用戶訪問(wèn)設(shè)備的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2017-02-02
  • C#?RabbitMQ的使用詳解

    C#?RabbitMQ的使用詳解

    本文主要介紹了C#?RabbitMQ的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • C#中多線程更新UI控件的常用方案

    C#中多線程更新UI控件的常用方案

    在C#中,特別是在使用Windows窗體(WinForms)或WPF(Windows Presentation Foundation)進(jìn)行UI開(kāi)發(fā)時(shí),處理多線程與UI控件的交互需要特別小心,本文給大家介紹了幾種在C#中安全地從多線程更新UI控件的常用方案,需要的朋友可以參考下
    2024-07-07
  • C#獲取指定目錄下某種格式文件集并備份到指定文件夾

    C#獲取指定目錄下某種格式文件集并備份到指定文件夾

    這篇文章介紹了C#獲取指定目錄下某種格式文件集并備份到指定文件夾的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#實(shí)現(xiàn)事件訂閱和解除訂閱的詳細(xì)步驟

    C#實(shí)現(xiàn)事件訂閱和解除訂閱的詳細(xì)步驟

    在C#中,事件的訂閱和解除訂閱是通過(guò)使用+=和-=操作符來(lái)實(shí)現(xiàn)的,這些操作符分別用于將事件處理程序添加到事件和從事件中移除事件處理程序,本文給大家介紹了C#實(shí)現(xiàn)事件訂閱和解除訂閱的詳細(xì)步驟,需要的朋友可以參考下
    2024-12-12
  • 桌面浮動(dòng)窗口(類似惡意廣告)的實(shí)現(xiàn)詳解

    桌面浮動(dòng)窗口(類似惡意廣告)的實(shí)現(xiàn)詳解

    本篇文章是對(duì)桌面浮動(dòng)窗口的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • C# PadLeft、PadRight用法詳解

    C# PadLeft、PadRight用法詳解

    本文主要介紹了C# PadLeft、PadRight用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評(píng)論

泰兴市| 建德市| 东莞市| 磐石市| 吉木萨尔县| 池州市| 龙胜| 绥滨县| 芦溪县| 无为县| 米林县| 磴口县| 临夏市| 通河县| 石嘴山市| 临猗县| 张家界市| 石台县| 丹棱县| 凉山| 金塔县| 海安县| 扶沟县| 淳安县| 藁城市| 临潭县| 太原市| 鲜城| 汾阳市| 全州县| 仪陇县| 时尚| 铅山县| 钟祥市| 塔城市| 芜湖市| 大田县| 西乡县| 赣州市| 襄城县| 太湖县|