溫馨提示×

溫馨提示×

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

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

C#如何實現(xiàn)俄羅斯方塊游戲

發(fā)布時間:2021-05-17 10:54:14 來源:億速云 閱讀:215 作者:小新 欄目:編程語言

小編給大家分享一下C#如何實現(xiàn)俄羅斯方塊游戲,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

最近在看C#,寫了一個很水的方塊游戲練手。

C#如何實現(xiàn)俄羅斯方塊游戲

代碼:

namespace game
{
 class Square
 {
 public Square()
 {
 state = 0;
 positionY = 0;
 positionX = 0;
 }
 public Square(int InitShapeCnt, int InitState)
 {
 state = InitState;
 positionY = 0;
 positionX = 0;
 InitShape(InitShapeCnt);


 }
 public void InitShape(int ShapeCnt)
 {
 if (ShapeCnt > 6 || ShapeCnt < 0)
 return;
 else
 {
 switch (ShapeCnt)
 {
  case (0):
  Shape = LeftLShape;
  break;
  case (1):
  Shape = RightLShape;
  break;
  case (2):
  Shape = RightZShape;
  break;
  case (3):
  Shape = LeftZShape;
  break;
  case (4):
  Shape = lShape;
  break;
  case (5):
  Shape = TuShape;
  break;
  case (6):
  Shape = TianShape;
  break;
  default:
  break;
 }
 }
 }

 //方向 外形 顏色
 public int[, ,,] Shape = new int[4, 4, 4, 2];
 private int state; //方向
 public int State
 {
 get
 {
 return (state);
 }
 set
 {
 state = value;
 }
 }


 public void DrawSquare(ref Graphics dc)
 {

 for (int Cnt1 = 0; Cnt1<4; Cnt1++)
 {
 for(int Cnt2=0;Cnt2<4;Cnt2++)
 {
  //Shape[State][Cnt1][Cnt2][1] = 0;
  if (Shape[state, Cnt1, Cnt2, 0] == 1)
  {
  SolidBrush Brush;
  switch(Shape[state, Cnt1, Cnt2, 1])
  {
  case (1):
  Brush = new SolidBrush(Color.Red);
  break;
  case (2):
  Brush = new SolidBrush(Color.Blue);
  break;
  case (3):
  Brush = new SolidBrush(Color.Yellow);
  break;
  case (4):
  Brush = new SolidBrush(Color.Green);
  break;
  case (5):
  Brush = new SolidBrush(Color.Tan);
  break;
  case (6):
  Brush = new SolidBrush(Color.Honeydew);
  break;
  case (7):
  Brush = new SolidBrush(Color.ForestGreen);
  break;
  default:
  Brush = new SolidBrush(Color.Red);
  break;
  
  }
  dc.FillRectangle(Brush, new Rectangle((positionX*16+16*Cnt2), (positionY*16+16*Cnt1), 16, 16));
  }
 }
 }
 }
 private int positionX;
 public int PositionX
 {
 get
 {
 return (positionX);
 }
 set
 {
 positionX = value;
 }
 }

 private int positionY;
 public int PositionY
 {
 get
 {
 return (positionY);
 }
 set
 {
 positionY = value;
 }
 }


 public void Switch(GameCtrl game)
 {
 if (CoverEdge(game))
 state = (state + 1) % 4;
 
 }
 public void AddX(GameCtrl game)
 {
 //判斷右側(cè)
 if(RightEdge(game))
 positionX++;
 }
 public bool AddY(GameCtrl game)
 {
 if (this.Land(game) == false)
 {
 positionY++;
 return (true);
 }
 else
 return(false);
 
 
 }
 public void SubX(GameCtrl game)
 {
 //判斷右側(cè)
 if (LeftEdge(game))
 positionX--;
 }
 public void SubY()
 {

 }

 private bool Land(GameCtrl game)
 {
 for (int i = 3; i >= 0; i--)
 {
 int rowNum = 21 - this.PositionY - i;
 for (int j = 0; j < 4; j++)
 {
  int colNum = this.PositionX + j + 3;

  if (this.Shape[this.State, i, j, 0] == 1)
  {
  if (game.GameBox[rowNum][colNum, 0] == 1)
  {
  game.AddBox(this);  
  return (true);
  }
  }

 }
 }

 return (false);

 }

 private bool RightEdge(GameCtrl game)
 {
 //判斷右側(cè)
 for (int i = 3; i >= 0; i--)
 {
 int rowNum = this.PositionX + i + 4;
 for (int j = 0; j < 4; j++)
 {
  int colNum = 22-this.PositionY-j;

  if (this.Shape[this.State, j, i, 0] == 1)
  {
  if (game.GameBox[colNum][rowNum, 0] == 1)
  {
  return (false);
  }
  }
 }

 }
 return (true);


 }

 private bool LeftEdge(GameCtrl game)
 {
 //判斷左側(cè)
 for (int i = 0; i < 4; i++)
 {
 int rowNum = this.PositionX + i +2;
 for (int j = 0; j < 4; j++)
 {

  int colNum = 22 - this.PositionY - j;

  if (this.Shape[this.State, j, i, 0] == 1)
  {
  if (game.GameBox[colNum][rowNum, 0] == 1)
  {
  return (false);
  }
  }
 }

 }
 return (true);


 }

 private bool CoverEdge(GameCtrl game)
 {
 //判斷變行是否有覆蓋
 int preState = (this.State + 1) % 4;
 for (int i = 0; i < 4; i++)
 {
 int rowNum = this.PositionX + i + 3;
 for (int j = 0; j < 4; j++)
 {

  int colNum = 22 - this.PositionY - j;

  if (this.Shape[preState, j, i, 0] == 1)
  {
  if (game.GameBox[colNum][rowNum, 0] == 1)
  {
  return (false);
  }
  }
 }

 }
 return (true);
 //return (false);


 }
 private int[, , ,] LeftLShape = {
  {{{1,1},{0,0},{0,0},{0,0}},
  {{1,1},{0,0},{0,0},{0,0}},
  {{1,1},{1,1},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}},

  {{{1,1},{1,1},{1,1},{0,0}},
  {{1,1},{0,0},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}},

  {{{0,0},{1,1},{1,1},{0,0}},
  {{0,0},{0,0},{1,1},{0,0}},
  {{0,0},{0,0},{1,1},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}},

  {{{0,0},{0,0},{0,0},{0,0}},
  {{0,0},{0,0},{1,1},{0,0}},
  {{1,1},{1,1},{1,1},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}}
   };

 private int[, , ,] RightLShape = {
  {{{0,0},{0,0},{1,2},{0,0}},
  {{0,0},{0,0},{1,2},{0,0}},
  {{0,0},{1,2},{1,2},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}},

  {{{0,0},{0,0},{0,0},{0,0}},
  {{1,2},{0,0},{0,0},{0,0}},
  {{1,2},{1,2},{1,2},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}},

  {{{1,2},{1,2},{0,0},{0,0}},
  {{1,2},{0,0},{0,0},{0,0}},
  {{1,2},{0,0},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}},

  {{{1,2},{1,2},{1,2},{0,0}},
  {{0,0},{0,0},{1,2},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}}


  };
 private int[, , ,] LeftZShape = {
  {{{1,3},{1,3},{0,0},{0,0}},
  {{0,0},{1,3},{1,3},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}},

  {{{0,0},{1,3},{0,0},{0,0}},
  {{1,3},{1,3},{0,0},{0,0}},
  {{1,3},{0,0},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}},

  {{{1,3},{1,3},{0,0},{0,0}},
  {{0,0},{1,3},{1,3},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}},

  {{{0,0},{1,3},{0,0},{0,0}},
  {{1,3},{1,3},{0,0},{0,0}},
  {{1,3},{0,0},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}}
  };

 private int[, , ,] RightZShape = {
  {{{0,0},{1,4},{1,4},{0,0}},
  {{1,4},{1,4},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}},

  {{{1,4},{0,0},{0,0},{0,0}},
  {{1,4},{1,4},{0,0},{0,0}},
  {{0,0},{1,4},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}},

  {{{0,0},{1,4},{1,4},{0,0}},
  {{1,4},{1,4},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}},

  {{{1,4},{0,0},{0,0},{0,0}},
  {{1,4},{1,4},{0,0},{0,0}},
  {{0,0},{1,4},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}}
  };

 private int[, , ,] lShape = {
  {{{1,6},{0,0},{0,0},{0,0}},
  {{1,6},{0,0},{0,0},{0,0}},
  {{1,6},{0,0},{0,0},{0,0}},
  {{1,6},{0,0},{0,0},{0,0}}},

  {{{0,0},{0,0},{0,0},{0,0}},
  {{1,6},{1,6},{1,6},{1,6}},
  {{0,0},{0,0},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}},

  {{{1,6},{0,0},{0,0},{0,0}},
  {{1,6},{0,0},{0,0},{0,0}},
  {{1,6},{0,0},{0,0},{0,0}},
  {{1,6},{0,0},{0,0},{0,0}}},

  {{{0,0},{0,0},{0,0},{0,0}},
  {{1,6},{1,6},{1,6},{1,6}},
  {{0,0},{0,0},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}}
  };
 private int[, , ,] TuShape = {
  {{{0,0},{1,7},{0,0},{0,0}},
  {{1,7},{1,7},{1,7},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}
  },

  {{{0,0},{1,7},{0,0},{0,0}},
  {{1,7},{1,7},{0,0},{0,0}},
  {{0,0},{1,7},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}
  },

  {{{0,0},{0,0},{0,0},{0,0}},
  {{1,7},{1,7},{1,7},{0,0}},
  {{0,0},{1,7},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}
  },

  {{{0,0},{1,7},{0,0},{0,0}},
  {{0,0},{1,7},{1,7},{0,0}},
  {{0,0},{1,7},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}
  },
  };
 private int[, , ,] TianShape = {
  {
  {{1,5},{1,5},{0,0},{0,0}},
  {{1,5},{1,5},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}
  },

  {
  {{1,5},{1,5},{0,0},{0,0}},
  {{1,5},{1,5},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}
  },

  {
  {{1,5},{1,5},{0,0},{0,0}},
  {{1,5},{1,5},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}
  },

  {
  {{1,5},{1,5},{0,0},{0,0}},
  {{1,5},{1,5},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}},
  {{0,0},{0,0},{0,0},{0,0}}
  }
  };
 }
 class GameCtrl
 {
 public List<int[,]> GameBox = new List<int[,]>();

 public int gameSclpe;

 public GameCtrl()
 {
 gameSclpe = 0;
 this.InitBox();
 }
 public void InitBox()
 {
 int[,] InitZore = new int[18, 2] { { 1, 0 }, { 1, 0 }, { 1, 0 },{ 0, 0 }, { 0, 0 }, { 0, 0 },
   { 0, 0 }, { 0, 0 }, { 0, 0 },{ 0, 0 }, { 0, 0 }, { 0, 0 }, 
   { 0, 0 }, { 0, 0 }, { 0, 0 }, { 1, 0 }, { 1, 0 }, { 1, 0 }};

 int[,] InitOne = new int[18, 2] { { 1, 0 }, { 1, 0 }, { 1, 0 }, { 1, 0 }, { 1, 0 }, { 1, 0 },
   { 1, 0 }, { 1, 0 }, { 1, 0 }, { 1, 0 }, { 1, 0 }, { 1, 0 },
   { 1, 0 }, { 1, 0 }, { 1, 0 }, { 1, 0 }, { 1, 0 }, { 1, 0 } };
 GameBox.Add(InitOne);
 GameBox.Add(InitOne);
 GameBox.Add(InitOne);
 for (int Cnt = 0; Cnt < 20; Cnt++)
 GameBox.Add(InitZore);

 }
 public void ClrBox()
 {
 GameBox.Clear();
 }

 public void AddBox(Square landSquare)
 {
 for (int i = 0; i < 4; i++)
 {
 int rowNum = 22 - landSquare.PositionY - i;
 int[,] ShapeRow = new int[18, 2];

 for(int j =0;j<18;j++)
 {
  if (GameBox[rowNum][j, 0] == 1)
  {
  ShapeRow[j, 0] = 1;
  ShapeRow[j, 1] = GameBox[rowNum][j, 1];
  }
 }
 for (int j = 0; j < 4; j++)
 {

  int colNum = landSquare.PositionX + j+3;
  if (landSquare.Shape[landSquare.State, i, j, 0] == 1)
  {
  ShapeRow[colNum, 0] = 1;
  ShapeRow[colNum, 1] = landSquare.Shape[landSquare.State, i, j, 1];
 
  }
 
  
 }
 GameBox[rowNum] = ShapeRow;

 }
 SubBox();
 }


 private void SubBox()
 {
 int[,] InitZore = new int[18, 2] { { 1, 0 }, { 1, 0 }, { 1, 0 },{ 0, 0 }, { 0, 0 }, { 0, 0 },
   { 0, 0 }, { 0, 0 }, { 0, 0 },{ 0, 0 }, { 0, 0 }, { 0, 0 }, 
   { 0, 0 }, { 0, 0 }, { 0, 0 }, { 1, 0 }, { 1, 0 }, { 1, 0 }};
 int Cnt;
 for (Cnt = 3; Cnt < 23; Cnt++)
 {
 int ColSum,Cnt2;
 for (ColSum = 0, Cnt2 = 3; Cnt2 < 15;Cnt2++ )
  ColSum += GameBox[Cnt][Cnt2, 0];
 if(ColSum==12)
 {
  this.gameSclpe++;
  GameBox.RemoveAt(3);
  GameBox.Add(InitZore);
  Cnt--;
 }
 }

 
 }

 public void BoxDraw(ref Graphics dc)
 {
 for (int Cnt1 = 3; Cnt1 < 23; Cnt1++)
 {
 for (int Cnt2 = 3; Cnt2 < 15; Cnt2++)
 {
  if (GameBox[Cnt1][Cnt2, 0] == 1)
  {
  SolidBrush Brush;
  switch (GameBox[Cnt1][Cnt2, 1])
  {
  case (1):
  Brush = new SolidBrush(Color.Red);
  break;
  case (2):
  Brush = new SolidBrush(Color.Blue);
  break;
  case (3):
  Brush = new SolidBrush(Color.Yellow);
  break;
  case (4):
  Brush = new SolidBrush(Color.Green);
  break;
  case (5):
  Brush = new SolidBrush(Color.Tan);
  break;
  case (6):
  Brush = new SolidBrush(Color.Honeydew);
  break;
  case (7):
  Brush = new SolidBrush(Color.ForestGreen);
  break;
  default:
  Brush = new SolidBrush(Color.Red);
  break;

  }
  dc.FillRectangle(Brush, new Rectangle((Cnt2-3)* 16, (22 - Cnt1) * 16, 16, 16));
  }
 }
 }

 
 }
 }

 
}

C#是什么

C#是一個簡單、通用、面向?qū)ο蟮木幊陶Z言,它由微軟Microsoft開發(fā),繼承了C和C++強(qiáng)大功能,并且去掉了一些它們的復(fù)雜特性,C#綜合了VB簡單的可視化操作和C++的高運行效率,以其強(qiáng)大的操作能力、優(yōu)雅的語法風(fēng)格、創(chuàng)新的語言特性和便捷的面向組件編程從而成為.NET開發(fā)的首選語言,但它不適用于編寫時間急迫或性能非常高的代碼,因為C#缺乏性能極高的應(yīng)用程序所需要的關(guān)鍵功能。

以上是“C#如何實現(xiàn)俄羅斯方塊游戲”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI