C#如何实现俄罗斯方块游戏

发布时间:2021-05-17 10:54:14 作者:小新
来源:亿速云 阅读:216

小编给大家分享一下C#如何实现俄罗斯方块游戏,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

最近在看C#,写了一个很水的方块游戏练手。

C#如何实现俄罗斯方块游戏

代码:

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)
 {
 //判断右侧
 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)
 {
 //判断右侧
 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)
 {
 //判断右侧
 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)
 {
 //判断左侧
 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#是一个简单、通用、面向对象的编程语言,它由微软Microsoft开发,继承了C和C++强大功能,并且去掉了一些它们的复杂特性,C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程从而成为.NET开发的首选语言,但它不适用于编写时间急迫或性能非常高的代码,因为C#缺乏性能极高的应用程序所需要的关键功能。

以上是“C#如何实现俄罗斯方块游戏”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. python怎么实现俄罗斯方块游戏
  2. pygame如何实现俄罗斯方块游戏

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:C#如何实现图片切割

下一篇:JS和C#如何实现的两个正则替换功能

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》