首页 > 编程 > C# > 正文

基于C#实现俄罗斯方块游戏

2019-10-29 21:10:00
字体:
来源:转载
供稿:网友

最近在看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));     }    }   }     } } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到c#教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表