国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C# > 正文

基于C#實(shí)現(xiàn)俄羅斯方塊游戲

2019-10-29 21:10:00
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

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)  {   //判斷右側(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));     }    }   }     } } }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到c#教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 泗水县| 积石山| 巫溪县| 册亨县| 陆丰市| 会理县| 饶河县| 禹州市| 贡山| 虎林市| 乌兰察布市| 青冈县| 门源| 甘肃省| 安乡县| 黑龙江省| 象山县| 襄汾县| 凉城县| 阆中市| 游戏| 卢氏县| 油尖旺区| 丁青县| 肃宁县| 甘洛县| 泽州县| 白城市| 芜湖县| 惠安县| 梅河口市| 丰台区| 温泉县| 阿合奇县| 江孜县| 庆安县| 徐水县| 潢川县| 古蔺县| 蕉岭县| 武陟县|