Shape.cs
上传用户:yiyuerguo
上传日期:2014-09-27
资源大小:3781k
文件大小:4k
源码类别:

C#编程

开发平台:

Others

  1. using System;
  2. using System.Drawing;
  3. namespace Tetris_CS
  4. {
  5. /// <summary>
  6. /// Shape 的摘要说明。
  7. /// </summary>
  8. public class Shape
  9. {
  10. public Shape()
  11. {
  12. //
  13. // TODO: 在此处添加构造函数逻辑
  14. //
  15. }
  16. public Shape(int index)
  17. {
  18. Create(index);
  19. }
  20. private Block[] blockList;
  21. private int indexDef;
  22. private Point ptPosition;
  23. private struct TETRIS
  24. {
  25. public int[,] def;
  26. public int size;
  27. }
  28. private static TETRIS[] tetrisDef;
  29. //设置所处位置的函数 相当于给所在坐标的位置赋值
  30.         //tetrisDef[0].def[1,0] = 8;代表给坐标1,0处代表要填充 至于这个8则换成别的数也行
  31. //只要不是零均可
  32. public static void InitTetrisDefine()
  33. {
  34. tetrisDef = new TETRIS[7];
  35. /*
  36. for (int i=0; i<7; i++)
  37. {
  38. for (int m=0; m<4; m++)
  39. {
  40. for (int n=0; n<4; n++)
  41. {
  42. tetrisDef[i].def[m,n] = 0;
  43. }
  44. }
  45. }
  46. */
  47. tetrisDef[0].def = new int[4,4]; 
  48. tetrisDef[0].def[1,0] = 1; // 0800
  49. tetrisDef[0].def[1,1] = 1; // 0800
  50. tetrisDef[0].def[1,2] = 1; // 0800
  51. tetrisDef[0].def[1,3] = 1; // 0800
  52. tetrisDef[0].size = 4;
  53. tetrisDef[1].def = new int[3,3]; 
  54. tetrisDef[1].def[1,0] = 8; // 088
  55. tetrisDef[1].def[1,1] = 8; // 080
  56. tetrisDef[1].def[1,2] = 8; // 080
  57. tetrisDef[1].def[2,0] = 8;
  58. tetrisDef[1].size = 3;
  59. tetrisDef[2].def = new int[3,3]; 
  60. tetrisDef[2].def[1,0] = 8; // 880
  61. tetrisDef[2].def[1,1] = 8; // 080
  62. tetrisDef[2].def[1,2] = 8; // 080
  63. tetrisDef[2].def[0,0] = 8;
  64. tetrisDef[2].size = 3;
  65. tetrisDef[3].def = new int[3,3]; 
  66. tetrisDef[3].def[1,0] = 8; // 080
  67. tetrisDef[3].def[0,1] = 8; // 888
  68. tetrisDef[3].def[1,1] = 8; // 000
  69. tetrisDef[3].def[2,1] = 8;
  70. tetrisDef[3].size = 3;
  71. tetrisDef[4].def = new int[3,3]; 
  72. tetrisDef[4].def[0,0] = 8; // 880
  73. tetrisDef[4].def[1,0] = 8; // 088
  74. tetrisDef[4].def[1,1] = 8; // 000
  75. tetrisDef[4].def[2,1] = 8;
  76. tetrisDef[4].size = 3;
  77. tetrisDef[5].def = new int[3,3]; 
  78. tetrisDef[5].def[1,0] = 8; // 088
  79. tetrisDef[5].def[2,0] = 8; // 880
  80. tetrisDef[5].def[0,1] = 8; // 000
  81. tetrisDef[5].def[1,1] = 8;
  82. tetrisDef[5].size = 3;
  83. tetrisDef[6].def = new int[2,2]; 
  84. tetrisDef[6].def[0,0] = 8; // 88
  85. tetrisDef[6].def[0,1] = 8; // 88
  86. tetrisDef[6].def[1,0] = 8;
  87. tetrisDef[6].def[1,1] = 8;
  88. tetrisDef[6].size = 2;
  89. }
  90. //建立了一个块链表数组
  91. public void Create(int index)
  92. {
  93. indexDef = index;
  94. blockList = new Block[4];
  95. int count = 0;
  96. for (int i=0; i<tetrisDef[index].size; i++)
  97. {
  98. for (int j=0; j<tetrisDef[index].size; j++)
  99. {
  100. if (tetrisDef[index].def[i,j] != 0)
  101. {
  102. blockList[count] = new Block(index, i, j);
  103. count++;
  104. if (count > 4) return;
  105. }
  106. }
  107. }
  108. }
  109. public void Copy(Shape s)
  110. {
  111. ptPosition = s.Position;
  112. for (int i=0; i<4; i++)
  113. {
  114. blockList[i].Position = s.GetBlock(i).Position;
  115. }
  116. }
  117. public Point Position
  118. {
  119. get
  120. {
  121. return ptPosition;
  122. }
  123. set
  124. {
  125. ptPosition = value;
  126. }
  127. }
  128. public int IndexDef
  129. {
  130. get
  131. {
  132. return indexDef;
  133. }
  134. }
  135. public void Draw(Graphics g)
  136. {
  137. Draw(g, false);
  138. }
  139. //绘制图形,先绘制图形所在坐标位置 在绘制整个图形
  140. public void Draw(Graphics g, Size sz)
  141. {
  142. Point pt = new Point((sz.Width - tetrisDef[indexDef].size * Block.Size) / 2, 
  143. (sz.Height - tetrisDef[indexDef].size * Block.Size) / 2);
  144. for (int i=0; i<blockList.GetLength(0); i++)
  145. {
  146. blockList[i].Draw(g, pt, false);
  147. }
  148. }
  149. public void Draw(Graphics g, bool clear)
  150. {
  151. for (int i=0; i<blockList.GetLength(0); i++)
  152. {
  153. blockList[i].Draw(g, new Point(ptPosition.X * Block.Size, ptPosition.Y * Block.Size), clear);
  154. }
  155. }
  156. //旋转图形 
  157. public void Roate()
  158. {
  159. for (int i=0; i<blockList.GetLength(0); i++)
  160. {
  161. Point pt = blockList[i].Position;
  162. int temp = pt.X;
  163. pt.X = tetrisDef[indexDef].size - pt.Y - 1;
  164. pt.Y = temp;
  165. blockList[i].Position = pt;
  166. }
  167. }
  168. public Block GetBlock(int index)
  169. {
  170. return blockList[index];
  171. }
  172. }
  173. }