91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#實現簡單俄羅斯方塊

發布時間:2020-08-28 13:15:45 來源:腳本之家 閱讀:376 作者:q645989637 欄目:編程語言

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

于是寫下這篇文章留作紀念。

1.類的設計

在充分分析游戲的特點后,游戲大概可以分為3個類:Square 小正方形,Block 由4個小正方形組合成的一個圖形, GameField 游戲的驅動引擎

2.代碼的編寫

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

接下來是Block,Block相對比較復雜,分為以下幾種:

C#實現簡單俄羅斯方塊

它應該有4個Square 編號可以按照個人習慣,當然之后計算坐標的時候也要根據個人的編號來進行。

Block應該有Hide,Show,Left,Right,Rotate一些方法,屬性的話為了計算坐標 應該有Square的大小,還有Color

要注意的是Rotate方法將Block順時針旋轉90°,圖上已經標出旋轉的中心。

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

這些類完成后就可以簡單的寫游戲邏輯了,因為太簡單就不說了,簡單的貼一下代碼

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;
  //塞滿了 游戲結束 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.總結

這個簡單的游戲,可謂是剛好適合新手。可以學到沖突檢測(CheckLines),游戲中基本元素與游戲驅動的理解。

更多俄羅斯方塊精彩文章請點擊專題:俄羅斯方塊游戲集合 進行學習。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

教育| 通化县| 灵宝市| 海淀区| 兴和县| 扎鲁特旗| 寻甸| 宜宾县| 齐齐哈尔市| 三门县| 德兴市| 民和| 三亚市| 冷水江市| 吉林省| 河源市| 温州市| 五华县| 和静县| 河北省| 垦利县| 松滋市| 宣威市| 留坝县| 甘德县| 崇州市| 成都市| 日照市| 灯塔市| 禄劝| 平武县| 佛冈县| 砀山县| 龙江县| 鞍山市| 深泽县| 双柏县| 西华县| 乌兰察布市| 读书| 江门市|