加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:05:08 所属栏目:百科 来源:网络整理
导读:最近在看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; In

最近在看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,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,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,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,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,0] == 1)
      {
       return (false);
      }
     }
    }

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


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

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


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

  private int[,] RightZShape = {
        {{{0,4},] lShape = {
        {{{1,6},6}},0}}}
        };
  private int[,] TuShape = {
        {{{0,7},0}}
        },};
  private int[,] TianShape = {
        {
        {{1,5},{
        {{1,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,0 }};

   int[,] InitOne = new int[18,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,0] == 1)
     {
      ShapeRow[colNum,0] = 1;
      ShapeRow[colNum,1] = landSquare.Shape[landSquare.State,1];
 
     }
 
     
    }
    GameBox[rowNum] = ShapeRow;

   }
   SubBox();
  }


  private void SubBox()
  {
   int[,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));
     }
    }
   }

   
  }
 }

 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读