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

C#编程

开发平台:

Others

  1. using System;
  2. using System.Drawing;
  3. namespace Tetris_CS
  4. {
  5. /// <summary>
  6. /// Block 的摘要说明。
  7. /// </summary>
  8. public class Block
  9. {
  10. public Block()
  11. {
  12. //
  13. // TODO: 在此处添加构造函数逻辑
  14. //
  15. }
  16. public Block(int index, Point pt)
  17. {
  18. colorIndex = index;
  19. ptPosition = pt;
  20. }
  21. public Block(int index, int x, int y)
  22. {
  23. colorIndex = index;
  24. ptPosition.X = x;
  25. ptPosition.Y = y;
  26. }
  27.         // 颜色序号
  28. private int colorIndex;
  29. // 位置
  30. private Point ptPosition;
  31. // 方块大小
  32. private static int size = 20;
  33. private static int COLOR_CHANGE = 60;
  34. //System.Drawing.Color表示ARGB颜色从指定的8位颜色值(红色,绿色,蓝色)中创建结构
  35. //制定的默认alpha 默认为255 意为完全不透明
  36. private static Color[] clrDefine
  37. = new Color[] {
  38. Color.FromArgb(51, 204, 102), // 绿 Default color, or extend block color
  39. Color.FromArgb(200, 200, 102), // 黄
  40. Color.FromArgb(0, 143, 224), // 蓝
  41. Color.FromArgb(153, 153, 204), // 青
  42. Color.FromArgb(204, 204, 204), // 灰
  43. Color.FromArgb(232, 123,  20), // 橙
  44. Color.FromArgb(220,  39,  75)   // 红 sample block color
  45. }; // 颜色
  46. public int ColorIndex
  47. {
  48. get
  49. {
  50. return colorIndex;
  51. }
  52. set
  53. {
  54. colorIndex = value;
  55. }
  56. }
  57. public Point Position
  58. {
  59. get
  60. {
  61. return ptPosition;
  62. }
  63. set
  64. {
  65. ptPosition = value;
  66. }
  67. }
  68. //验证是否要绘图 如果clear为真 则要清除产生的块 因为方块产生了 
  69. //并且移动 必须把移动前一秒的块描成白色 
  70. public void Draw(Graphics g, Point ptStart, bool clear)
  71. {
  72. if (clear)
  73. {
  74. g.FillRectangle(new SolidBrush(Color.White), ptStart.X + (ptPosition.X * size), 
  75. ptStart.Y + (ptPosition.Y * size), size, size);
  76. }
  77. else
  78. {
  79. g.FillRectangle(new SolidBrush(clrDefine[colorIndex]), ptStart.X + (ptPosition.X * size),  ptStart.Y + (ptPosition.Y * size), size, size);
  80. //绘制四条边 两条亮色的边 两条暗色的边 使块的形状更加突出
  81. g.DrawLine(new Pen(GetLightColor(colorIndex), 1), ptStart.X + (ptPosition.X * size), ptStart.Y + (ptPosition.Y * size), ptStart.X + (ptPosition.X * size) + size - 1, ptStart.Y + (ptPosition.Y * size));
  82. g.DrawLine(new Pen(GetLightColor(colorIndex), 1), ptStart.X + (ptPosition.X * size), ptStart.Y + (ptPosition.Y * size), ptStart.X + (ptPosition.X * size), ptStart.Y + (ptPosition.Y * size) + size - 1);
  83. g.DrawLine(new Pen(GetDarkColor(colorIndex), 1), ptStart.X + (ptPosition.X * size) + size - 1, ptStart.Y + (ptPosition.Y * size) + size - 1, ptStart.X + (ptPosition.X * size) + size - 1, ptStart.Y + (ptPosition.Y * size));
  84. g.DrawLine(new Pen(GetDarkColor(colorIndex), 1), ptStart.X + (ptPosition.X * size) + size - 1, ptStart.Y + (ptPosition.Y * size) + size - 1, ptStart.X + (ptPosition.X * size), ptStart.Y + (ptPosition.Y * size) + size - 1);
  85. }
  86. }
  87. public void Draw(Graphics g)
  88. {
  89. Draw(g, new Point(0, 0), false);
  90. }
  91. public static int Size
  92. {
  93. get
  94. {
  95. return size;
  96. }
  97. set
  98. {
  99. size = value;
  100. }
  101. }
  102. public static Color GetColor(int index)
  103. {
  104. return clrDefine[index];
  105. }
  106. // GetDarkColor和GetLightColor的作用是添加亮边和暗边
  107. // 使产生的模块具有立体感
  108. Color GetDarkColor(int index)
  109. {
  110. int r = clrDefine[index].R;
  111. int g = clrDefine[index].G;
  112. int b = clrDefine[index].B;
  113. //将改变后的颜色alpha值与0做个比较 不能低于0 否则将超出界限
  114. //如果小于0 则选0 否则选r-COLOR_CHANGE
  115. r = r-COLOR_CHANGE<0 ? 0 : r-COLOR_CHANGE;
  116. g = g-COLOR_CHANGE<0 ? 0 : g-COLOR_CHANGE;
  117. b = b-COLOR_CHANGE<0 ? 0 : b-COLOR_CHANGE;
  118. Color c = Color.FromArgb(r, g, b);
  119. return c;
  120. }
  121. Color GetLightColor(int index)
  122. {
  123. int r = clrDefine[index].R;
  124. int g = clrDefine[index].G;
  125. int b = clrDefine[index].B;
  126. //将改变后的颜色alpha值与255做个比较 不能高于255 否则将超出界限
  127. //如果大于255 则选255 否则选r+COLOR_CHANGE
  128. r = r+COLOR_CHANGE>255 ? 255 : r+COLOR_CHANGE;
  129. g = g+COLOR_CHANGE>255 ? 255 : g+COLOR_CHANGE;
  130. b = b+COLOR_CHANGE>255 ? 255 : b+COLOR_CHANGE;
  131. Color c = Color.FromArgb(r, g, b);
  132. return c;
  133. }
  134. }
  135. }